Revision: 201004 PDK_3.0.f
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:15:23 +0200
changeset 0 1f04cf54edd8
child 1 27f5851bd5a5
Revision: 201004
csxhelp/AiwHelpProvider/group/AiwHelpProvider.mmp
csxhelp/AiwHelpProvider/group/bld.inf
csxhelp/AiwHelpProvider/inc/AiwHelpProvider.h
csxhelp/AiwHelpProvider/inc/AiwHelpProvider.rh
csxhelp/AiwHelpProvider/loc/aiwxhelpprovider.loc
csxhelp/AiwHelpProvider/src/10207464.rss
csxhelp/AiwHelpProvider/src/AiwHelpProvider.cpp
csxhelp/AiwHelpProvider/src/AiwHelpProvider.rss
csxhelp/HelpEngine/inc/CSXHContextTopic.h
csxhelp/HelpEngine/inc/CSXHGenericTOC1.h
csxhelp/HelpEngine/inc/CSXHGenericTOC2.h
csxhelp/HelpEngine/inc/CSXHHTMLContentParser.h
csxhelp/HelpEngine/inc/CSXHHelpContentBase.h
csxhelp/HelpEngine/inc/CSXHHelpDataBase.h
csxhelp/HelpEngine/inc/CSXHHtmlTOC1.h
csxhelp/HelpEngine/inc/CSXHHtmlTOC2.h
csxhelp/HelpEngine/inc/CSXHKywdTOC1.h
csxhelp/HelpEngine/inc/CSXHKywdTopics.h
csxhelp/HelpEngine/inc/CSXHLegacyContentParser.h
csxhelp/HelpEngine/inc/CSXHLegacyTOC1.h
csxhelp/HelpEngine/inc/CSXHLegacyTOC2.h
csxhelp/HelpEngine/inc/CSXHMainTopics.h
csxhelp/HelpEngine/inc/CSXHRuntimeIndexing.h
csxhelp/HelpEngine/inc/CSXHViewIDs.h
csxhelp/HelpEngine/inc/CSXHXMLParseHandler.h
csxhelp/HelpEngine/inc/CsHelpCmdLineParser.h
csxhelp/HelpEngine/inc/csxhconstants.h
csxhelp/HelpEngine/rss/HelpEngine.rss
csxhelp/HelpEngine/src/CSXHContextTopic.cpp
csxhelp/HelpEngine/src/CSXHGenericTOC1.cpp
csxhelp/HelpEngine/src/CSXHGenericTOC2.cpp
csxhelp/HelpEngine/src/CSXHHTMLContentParser.cpp
csxhelp/HelpEngine/src/CSXHHelpContentBase.cpp
csxhelp/HelpEngine/src/CSXHHelpDataBase.cpp
csxhelp/HelpEngine/src/CSXHHtmlTOC1.cpp
csxhelp/HelpEngine/src/CSXHHtmlTOC2.cpp
csxhelp/HelpEngine/src/CSXHKywdTOC1.cpp
csxhelp/HelpEngine/src/CSXHKywdTopics.cpp
csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp
csxhelp/HelpEngine/src/CSXHLegacyTOC1.cpp
csxhelp/HelpEngine/src/CSXHLegacyTOC2.cpp
csxhelp/HelpEngine/src/CSXHMainTopics.cpp
csxhelp/HelpEngine/src/CSXHRuntimeIndexing.cpp
csxhelp/HelpEngine/src/CSXHXMLParseHandler.cpp
csxhelp/HelpEngine/src/CsHelpCmdLineParser.cpp
csxhelp/HelpEngine/src/HelpEngine.cpp
csxhelp/aif/CsHelp_Caption.rss
csxhelp/aif/CsHelpaif.rss
csxhelp/data/CsHelp.rss
csxhelp/data/Cshelp_reg.rss
csxhelp/data/lch.rh
csxhelp/data/lch.rss
csxhelp/group/HelpEngine.mmp
csxhelp/group/HelpEnginearm.def
csxhelp/group/HelpEnginewinscw.def
csxhelp/group/bld.inf
csxhelp/group/cshelp.mmp
csxhelp/inc/AppLauncherForCSXH.h
csxhelp/inc/CSXHAppUi.h
csxhelp/inc/CSXHApplication.h
csxhelp/inc/CSXHDocument.h
csxhelp/inc/CSXHGenericContainer.h
csxhelp/inc/CSXHGenericView.h
csxhelp/inc/CSXHHtmlTopicContainer.h
csxhelp/inc/CSXHHtmlTopicView.h
csxhelp/inc/CSXHLegacyTopicContainer.h
csxhelp/inc/CSXHLegacyTopicView.h
csxhelp/inc/CsHelp.hrh
csxhelp/inc/cshelp.laf
csxhelp/inc/csxhruntimeappwatcher.h
csxhelp/loc/csxhelp.loc
csxhelp/rom/AiwHelpProvider.iby
csxhelp/rom/AiwHelpProviderResources.iby
csxhelp/rom/Cshelp.iby
csxhelp/rom/CshelpResources.iby
csxhelp/src/AppLauncherForCSXH.cpp
csxhelp/src/CSXH.cpp
csxhelp/src/CSXHAppUi.cpp
csxhelp/src/CSXHApplication.cpp
csxhelp/src/CSXHDocument.cpp
csxhelp/src/CSXHGenericContainer.cpp
csxhelp/src/CSXHGenericView.cpp
csxhelp/src/CSXHHtmlTopicContainer.cpp
csxhelp/src/CSXHHtmlTopicView.cpp
csxhelp/src/CSXHLegacyTopicContainer.cpp
csxhelp/src/CSXHLegacyTopicView.cpp
csxhelp/src/csxhruntimeappwatcher.cpp
group/bld.inf
helps_info/helps_metadata/helps_metadata.mrp
layers.sysdef.xml
package_definition.xml
symhelp/helpmodel/TestData/Boss-1.hlp
symhelp/helpmodel/TestData/Boss-2.hlp
symhelp/helpmodel/TestData/ER5Help_Part1.hlp
symhelp/helpmodel/TestData/PlatSecSearchTestA.hlp
symhelp/helpmodel/TestData/PlatSecSearchTestC.hlp
symhelp/helpmodel/TestData/PlatSecSearchTestF.hlp
symhelp/helpmodel/TestData/PlatSecSearchTestZ.hlp
symhelp/helpmodel/TestData/Source/Boss1/Boss1.rtf
symhelp/helpmodel/TestData/Source/Boss1/Boss1.xml
symhelp/helpmodel/TestData/Source/Boss1/Pictures/board.mbm
symhelp/helpmodel/TestData/Source/Boss1/Pictures/boss-but.mbm
symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit-but.mbm
symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit.mbm
symhelp/helpmodel/TestData/Source/Boss1/Pictures/full-but.mbm
symhelp/helpmodel/TestData/Source/Boss1/Pictures/zoombitmaps.mbm
symhelp/helpmodel/TestData/Source/Boss1/uk.alc.xml
symhelp/helpmodel/TestData/Source/Boss2/Boss2.rtf
symhelp/helpmodel/TestData/Source/Boss2/Boss2.xml
symhelp/helpmodel/TestData/Source/Boss2/Pictures/board.mbm
symhelp/helpmodel/TestData/Source/Boss2/Pictures/boss-but.mbm
symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit-but.mbm
symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit.mbm
symhelp/helpmodel/TestData/Source/Boss2/Pictures/full-but.mbm
symhelp/helpmodel/TestData/Source/Boss2/uk.alc.xml
symhelp/helpmodel/TestData/Source/ER5Help/Agen-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Bomb-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/CONT-HLP.RTF
symhelp/helpmodel/TestData/Source/ER5Help/Calc-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Calc/PiSymbol.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Calc/SquareRoot.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Calc/readme.txt
symhelp/helpmodel/TestData/Source/ER5Help/Calc/squareroot.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Comm-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Data-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Dial-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Dict-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Dict/Dictaphone.txt
symhelp/helpmodel/TestData/Source/ER5Help/Dict/PLAY.MBM
symhelp/helpmodel/TestData/Source/ER5Help/Dict/RECORD.MBM
symhelp/helpmodel/TestData/Source/ER5Help/Dict/STOP.MBM
symhelp/helpmodel/TestData/Source/ER5Help/EPOCHlp.order
symhelp/helpmodel/TestData/Source/ER5Help/Gen--hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/General/Bold-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Cascade.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/CheckBox-Ticked.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Choice-Box.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Date-Box.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Depressed-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Down-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Down-Key.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/General.txt
symhelp/helpmodel/TestData/Source/ER5Help/General/Horizontal-Scrollbar.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Infrared-Icon.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Italic-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Arrow.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Key.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Up-Down-Right-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Menu-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Menu-Icon.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Number-Box.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Radio-Off.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Radio-On-Off.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Radio-On.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Right-Arrow.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Right-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Right-Key.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Save-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Scissor-Icon.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Symbols page.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Text-Box.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Underlined-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Up-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Up-Key.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Vertical-Scrollbar.mbm
symhelp/helpmodel/TestData/Source/ER5Help/General/Zoom-Icon.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Hard-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Jott-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Prog-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Rec--hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/AutoSum.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/CircularReference.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/FreezePanesButton.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/Recalculation.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/Sum-Button.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/circularreference.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/freezepanesbutton.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/readme.txt
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/recalculation.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sheet/sum-button.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Shet-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Sket-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/Clipart.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/EraseTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/FilledOvalTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/FilledRectangleTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/FreehandTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/LineTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/OvalTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/RectangleTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/SelectAreaTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/SprayTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/TextTool.mbm
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/clipart.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/erasetool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/filledovaltool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/filledrectangletool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/freehandtool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/linetool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/ovaltool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/rectangletool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/selectareatool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/spraytool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Sketch/texttool.jpg
symhelp/helpmodel/TestData/Source/ER5Help/Spel-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Syst-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Time-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Word-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/Xtra-hlp.rtf
symhelp/helpmodel/TestData/Source/ER5Help/epochlp.alp
symhelp/helpmodel/TestData/Source/ER5Help/epochlp.alp.tmp
symhelp/helpmodel/TestData/Source/ER5Help/epochlp.alp.xml.bak
symhelp/helpmodel/TestData/Source/ER5Help/epochlp.tmp
symhelp/helpmodel/TestData/Source/ER5Help/part1.xml
symhelp/helpmodel/TestData/Source/ER5Help/part2.xml
symhelp/helpmodel/TestData/Source/ER5Help/uk.alc
symhelp/helpmodel/TestData/Source/ER5Help/uk.alc.tmp
symhelp/helpmodel/TestData/Source/ER5Help/uk.alc.xml
symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestA.cshlp
symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestC.cshlp
symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestF.cshlp
symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestZ.cshlp
symhelp/helpmodel/TestData/TestLocale/locale.h01
symhelp/helpmodel/TestData/TestLocale/locale.h03
symhelp/helpmodel/TestData/TestLocale/locale.h12
symhelp/helpmodel/TestData/TestLocale/locale.hlp
symhelp/helpmodel/TestData/TestLocale/source/default.rtf
symhelp/helpmodel/TestData/TestLocale/source/default.xml
symhelp/helpmodel/TestData/TestLocale/source/english.rtf
symhelp/helpmodel/TestData/TestLocale/source/english.xml
symhelp/helpmodel/TestData/TestLocale/source/german.rtf
symhelp/helpmodel/TestData/TestLocale/source/german.xml
symhelp/helpmodel/TestData/TestLocale/source/swissgerman.rtf
symhelp/helpmodel/TestData/TestLocale/source/swissgerman.xml
symhelp/helpmodel/TestData/TestLocale/source/uk.alc.xml
symhelp/helpmodel/TestData/TestZoomBitmaps/zoomBitmaps.mbm
symhelp/helpmodel/TestData/TestZoomBitmaps/zoomBitmaps.txt
symhelp/helpmodel/TestData/TestZoomBitmaps/zoomLarge.bmp
symhelp/helpmodel/TestData/TestZoomBitmaps/zoomMedium.bmp
symhelp/helpmodel/TestData/TestZoomBitmaps/zoomSmall.bmp
symhelp/helpmodel/TestData/french.hlp
symhelp/helpmodel/TestData/newfile.hlp
symhelp/helpmodel/bwins/DbWriterU.def
symhelp/helpmodel/bwins/HlpModelU.def
symhelp/helpmodel/bwins/HlplchU.def
symhelp/helpmodel/dbwriter/DBWRITER.CPP
symhelp/helpmodel/dbwriter/DBWRITER.H
symhelp/helpmodel/dbwriter/DBWRITER.MMP
symhelp/helpmodel/documentation/HLPMODEL test code.rtf
symhelp/helpmodel/eabi/DBWRITERU.DEF
symhelp/helpmodel/eabi/HLPLCHU.DEF
symhelp/helpmodel/eabi/HLPMODELU.DEF
symhelp/helpmodel/group/BLD.INF
symhelp/helpmodel/group/HLPMODEL.MMP
symhelp/helpmodel/group/RELEASE.TXT
symhelp/helpmodel/group/app-services_hlpmodel.history.xml
symhelp/helpmodel/group/app-services_hlpmodel.mrp
symhelp/helpmodel/group/hlpmodel.iby
symhelp/helpmodel/group/hlpmodelTest.iby
symhelp/helpmodel/inc/HLPDB.H
symhelp/helpmodel/inc/HLPLCH.H
symhelp/helpmodel/inc/HLPMODEL.H
symhelp/helpmodel/inc/HLPSRCH.H
symhelp/helpmodel/inc/HlpImageProvider.h
symhelp/helpmodel/inc/HlpZoom.h
symhelp/helpmodel/inc/Hlpsqlconsts.h
symhelp/helpmodel/inc/hlpconstants.h
symhelp/helpmodel/inc/hlplch_internal.h
symhelp/helpmodel/inc/hlpmodel_internal.h
symhelp/helpmodel/inc/hlppanic.h
symhelp/helpmodel/inc/hlppict.h
symhelp/helpmodel/lch/HLPLCH.CPP
symhelp/helpmodel/lch/HLPLCH.MMP
symhelp/helpmodel/lch/lch.rh
symhelp/helpmodel/lch/lch.rss
symhelp/helpmodel/src/HLPDB.CPP
symhelp/helpmodel/src/HLPMAIN.CPP
symhelp/helpmodel/src/HLPMODEL.CPP
symhelp/helpmodel/src/HLPSRCH.CPP
symhelp/helpmodel/src/Hlppanic.cpp
symhelp/helpmodel/src/hlppict.cpp
symhelp/helpmodel/tsrc/SearchOrderTest.CPP
symhelp/helpmodel/tsrc/SearchOrderTest.h
symhelp/helpmodel/tsrc/THelpView.cpp
symhelp/helpmodel/tsrc/THelpView.h
symhelp/helpmodel/tsrc/THelpView.hrh
symhelp/helpmodel/tsrc/THelpView.mmp
symhelp/helpmodel/tsrc/THelpView.rss
symhelp/helpmodel/tsrc/THelpView_reg.rss
symhelp/helpmodel/tsrc/TLoader.cpp
symhelp/helpmodel/tsrc/TLoader.mmp
symhelp/helpmodel/tsrc/TMODEL.CPP
symhelp/helpmodel/tsrc/TMODEL.MMP
symhelp/helpmodel/tsrc/TSearch.cpp
symhelp/helpmodel/tsrc/TSearch.mmp
symhelp/helpmodel/tsrc/tcontext.cpp
symhelp/helpmodel/tsrc/tcontext.mmp
symhelp/helpmodel/tsrc/tdumper.cpp
symhelp/helpmodel/tsrc/tdumper.mmp
symhelp/helpmodel/tsrc/thelpviewctrls.cpp
symhelp/helpmodel/tsrc/thelpviewctrls.h
symhelp/helpmodel/tsrc/tlch.cpp
symhelp/helpmodel/tsrc/tlch.h
symhelp/helpmodel/tsrc/tlch.hrh
symhelp/helpmodel/tsrc/tlch.mmp
symhelp/helpmodel/tsrc/tlch.rss
symhelp/helpmodel/tsrc/tlch_reg.rss
symhelp/helpmodel/tsrc/tstore.cpp
symhelp/helpmodel/tsrc/tstore.h
symhelp/helpmodel/tsrc/tstore.mmp
sysdef_1_4_0.dtd
systemDefinition.xml
systemDefinitionLayer.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/group/AiwHelpProvider.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specfication file.
+*                Write all source and resource files, all using libraries, 
+*                all bitmaps.
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET          AiwHelpProvider.dll
+TARGETTYPE      PLUGIN
+
+// MAGIC Dll recognition UID followed by the unique UID for this dll
+UID             0x10009D8D 0x10207464
+VENDORID        VID_DEFAULT
+
+CAPABILITY      CAP_ECOM_PLUGIN
+
+USERINCLUDE     ../inc
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   /epoc32/include/ECom
+
+SOURCEPATH      ../src
+SOURCE          AiwHelpProvider.cpp
+
+// Published to /resource/plugins
+START RESOURCE  10207464.rss
+LANGUAGE_IDS
+TARGET          AiwHelpProvider.rsc
+END
+
+// Published to /resource
+START RESOURCE  AiwHelpProvider.rss
+HEADER
+TARGET          AiwHelpProviderPlugin.rsc
+TARGETPATH      APP_RESOURCE_DIR 
+LANGUAGE_IDS
+END
+
+LIBRARY         euser.lib
+LIBRARY         fbscli.lib
+LIBRARY         gdi.lib
+LIBRARY         bafl.lib
+LIBRARY         cone.lib
+LIBRARY         estlib.lib
+LIBRARY         ServiceHandler.lib
+LIBRARY         eikcore.lib
+LIBRARY			hlplch.lib
+LIBRARY     	ws32.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/group/bld.inf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     The build information
+*
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+// export localised loc file
+../loc/aiwxhelpprovider.loc        APP_LAYER_LOC_EXPORT_PATH(aiwxhelpprovider.loc)
+
+PRJ_MMPFILES
+AiwHelpProvider.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/inc/AiwHelpProvider.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  header file.
+*
+*/
+
+
+
+#ifndef _AIW_HELP_PROVIDER_H
+#define _AIW_HELP_PROVIDER_H
+
+#include <AiwServiceIfMenu.h>
+
+class CAiwHelpProvider : public CAiwServiceIfMenu 
+    {
+    public: 
+        static CAiwHelpProvider* NewL();
+        ~CAiwHelpProvider();
+
+    public: 
+        virtual void InitialiseL(
+            MAiwNotifyCallback& aFrameworkCallback,
+            const RCriteriaArray& aInterest);
+
+        virtual void HandleServiceCmdL(
+            const TInt& aCmdId,
+            const CAiwGenericParamList& aInParamList,
+            CAiwGenericParamList& aOutParamList,
+            TUint aCmdOptions = 0,
+            const MAiwNotifyCallback* aCallback = NULL);
+
+        virtual void InitializeMenuPaneL(
+            CAiwMenuPane& aMenuPane,
+            TInt aIndex,
+            TInt aCascadeId,
+            const CAiwGenericParamList& aInParamList);
+
+        virtual void HandleMenuCmdL(
+            TInt aMenuCmdId,
+            const CAiwGenericParamList& aInParamList,
+            CAiwGenericParamList& aOutParamList,
+            TUint aCmdOptions = 0,
+            const MAiwNotifyCallback* aCallback = NULL);
+
+    private:
+        CAiwHelpProvider();
+    };
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/inc/AiwHelpProvider.rh	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  resource header file
+*                Declare all the enums used here in this file.
+*
+*/
+
+
+#ifndef _AIW_PROVIDER_EXAMPLE1_RH
+#define _AIW_PROVIDER_EXAMPLE1_RH
+
+enum
+    {
+    EAiwShowHelpCmd=1
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/loc/aiwxhelpprovider.loc	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This is a localisation file for AiwHelpProvider
+*     A .loc file is the one and only place where the logical strings
+*     to be localised are defined.
+*
+*
+*/
+
+
+//  LOCALISATION STRINGS
+
+//d: help application name in selection grid window
+//l: list_single_pane_t1_cp2
+//
+#define qtn_options_help_sm_help          "Show Help"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/src/10207464.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  resource file
+*                Write all resources used here.
+*
+*/
+
+
+
+#include <Eikon.rh>
+#include "RegistryInfoV2.rh" 
+#include "AiwHelpProvider.rh"
+#include <AiwCommon.hrh>
+
+RESOURCE REGISTRY_INFO theInfo
+    {
+    resource_format_version = RESOURCE_FORMAT_VERSION_2; 
+    dll_uid = 0x10207464; // dll uid
+    interfaces = 
+        {
+        INTERFACE_INFO
+            {
+            // Menu service class (offers menu based services)
+            interface_uid = 0x101F8652; // KAiwClassMenu
+            implementations = 
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = 0x10207465;// The implementation uid
+                    version_no = 1;
+                    display_name = "AIW Help Provider";
+                    default_data ="*"; 
+                    opaque_data =KAiwCmdHelpStr; // from AiwCommon.hrh
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/src/AiwHelpProvider.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  source file.
+*                Write all source code here, all the implementations
+*
+*/
+
+
+#include <eikmenup.h>
+#include "AiwHelpProvider.h"
+#include <AiwMenu.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <AiwHelpProviderPlugin.rsg>
+#include <ImplementationProxy.h>
+#include "AiwHelpProvider.rh"
+#include <AiwServiceIfMenu.h>
+#include <AiwCommon.h>
+#include <hlplch.h>
+#include <coemain.h>
+#include <avkon.hrh>
+
+
+_LIT(KResFileName, "\\resource\\apps\\AiwHelpProviderPlugin.rsc");
+
+#define KImplementationId 0x10207465
+
+
+
+/******************************************************************
+===================================================================
+						NewL of the Provider
+===================================================================
+*******************************************************************/						
+CAiwHelpProvider* CAiwHelpProvider::NewL()
+    {
+    return new (ELeave) CAiwHelpProvider();
+    }
+
+
+    
+/******************************************************************
+===================================================================
+						Constructor of the Provider
+===================================================================
+*******************************************************************/
+CAiwHelpProvider::CAiwHelpProvider()
+    {
+    }
+
+
+
+/******************************************************************
+===================================================================
+					Destructor of the Provider
+===================================================================
+*******************************************************************/
+CAiwHelpProvider::~CAiwHelpProvider()
+    {
+    }
+    
+    
+    
+/**
+        * Called by the Handler framework to initialise provider with
+        * necessary information from Handler.
+        * @param aFrameworkCallback Framework provided callback for
+        *        provider to send events to framework
+        * @param aInterest List of criteria items which invoked the provider.
+        * @exception Symbian OS error code
+        */
+void CAiwHelpProvider::InitialiseL(MAiwNotifyCallback& /*aFrameworkCallback*/,
+    const RCriteriaArray& /*aInterest*/)
+    {
+    
+    }
+
+
+/**
+        * Executes generic service commands included in criteria.
+        * @param aCmdId Command to be executed
+        * @param aInParamList Input parameters, can be an empty list
+        * @param aOutParamList Output parameters, can be an empty list
+        * @param aCmdOptions Options for the command, see KAiwOpt* constants in AiwCommon.hrh.
+        * @param aCallback callback for asynchronous command handling, parameter checking, etc.
+        * @see enum TAiwServiceCmdOptions in AiwCommon.hrh
+        * @exception KErrArgument if callback is missing when required.
+        * @exception KErrNotSupported if no provider support service
+        */
+void CAiwHelpProvider::HandleServiceCmdL(const TInt& /*aCmdId*/,
+    const CAiwGenericParamList& /*aInParamList*/,
+    CAiwGenericParamList& /*aOutParamList*/,
+    TUint aCmdOptions,
+    const MAiwNotifyCallback* /*aCallback*/)
+    {
+ 	// Cancel bit must always be checked. 
+    if(aCmdOptions & KAiwOptCancel)
+        {
+        return;
+        }
+    }
+/**
+        * Initialises menu pane by adding provider specific menu items.
+        * The AIW Framework gives the parameters to be used in addition.
+        * @param aMenuPane Menu pane handle
+        * @param aIndex position of item where to add menu items.
+        * @param aCascadeId ID of cascade menu item.
+        * @param aInParamList input parameter list for provider's parameters checking
+        */
+        
+void CAiwHelpProvider::InitializeMenuPaneL(CAiwMenuPane& aMenuPane,
+    TInt aIndex,
+    TInt /*aCascadeId*/,
+    const CAiwGenericParamList& /*aInParamList*/)
+    {
+    TFileName resFile(KResFileName);
+    TFileName dllName;
+    Dll::FileName(dllName);
+    TBuf<2> drive = dllName.Left(2);
+    resFile.Insert(0, drive);
+    aMenuPane.AddMenuItemsL(resFile, R_AIWHELPPROVIDER_MENU, KAiwCmdHelp, aIndex);
+    }
+
+/**
+        * Handle a menu command invoked by the Handler.
+        * @param aMenuCmdId Command ID for the menu command,
+        *        defined by the provider when adding the menu commands.
+        * @param aInParamList Input parameters, could be empty list
+        * @param aOutParamList Output parameters, could be empty list
+        * @param aCmdOptions Options for the command, see KAiwCmdOpt* constants.
+        * @param aCallback callback if asynchronous command handling is wanted by consumer.
+        *    The provider may or may not support this, leaves with KErrNotSupported, it not.
+        */
+void CAiwHelpProvider::HandleMenuCmdL(TInt aMenuCmdId,
+    const CAiwGenericParamList& aInParamList,
+    CAiwGenericParamList& /*aOutParamList*/,
+    TUint aCmdOptions,
+    const MAiwNotifyCallback* /*aCallback*/)
+    {
+    // Cancel bit must always be checked.
+    if(aCmdOptions & KAiwOptCancel)
+        {
+        return;
+        }
+           
+    switch (aMenuCmdId)
+	    {
+	    case EAiwShowHelpCmd:
+	    case EAknCmdHelp:
+		    {
+		    TCoeHelpContext helpContext;
+		    TInt index;
+		        
+		    // Get the UID of the Help context i.e. the UID of the CS Help file containing 
+		    // the topic information.
+
+		    index = 0;
+		    const TAiwGenericParam* uidParam = aInParamList.FindFirst(index, EGenericParamHelpItem, 
+		        EVariantTypeTUid);
+
+		    if(index >= 0)
+		        {
+		        // Get the data.
+		        const TAiwVariant& val = uidParam->Value();
+		        helpContext.iMajor = val.AsTUid();
+		        }
+		    else
+		        {
+		        // UID param not found. Error handling could be added here.
+		        }            
+		        
+		    // Get the context of Help i.e. the name of the help context. This is the literal 
+		    // descriptor generated from a context string by the CSHelp compiler.          
+
+		    index = 0;
+		    const TAiwGenericParam* contextParam = aInParamList.FindFirst(index, EGenericParamHelpItem, 
+		        EVariantTypeDesC);
+
+		    if(index >= 0)
+		        {
+		        // Get the data.
+		        const TAiwVariant& val = contextParam->Value();
+		        helpContext.iContext = val.AsDes();
+		        }
+		    else
+		        {
+		        // Context param not found. Error handling could be added here.
+		        }             
+		                            
+		    CArrayFix<TCoeHelpContext>* contextList = new (ELeave) CArrayFixFlat<TCoeHelpContext>(1);
+		    contextList->AppendL(helpContext);
+		    
+		    //Get the Window server session
+		    RWsSession wsSession;
+		    User::LeaveIfError(wsSession.Connect());
+		    CleanupClosePushL(wsSession);
+		    HlpLauncher::LaunchHelpApplicationL(wsSession,contextList);
+		    CleanupStack::PopAndDestroy();
+		    break;
+		    }
+        default:
+            break;
+        }
+    }
+
+//
+// Rest of the file is for ECom initialization. 
+//
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+    {
+        IMPLEMENTATION_PROXY_ENTRY(KImplementationId, CAiwHelpProvider::NewL)
+    };
+
+// ---------------------------------------------------------
+// Exported proxy for instantiation method resolution
+// ---------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/AiwHelpProvider/src/AiwHelpProvider.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  resource file
+*                Write the menu resources here.
+*
+*/
+
+
+
+#include <Eikon.rh>
+#include "RegistryInfoV2.rh" 
+#include "AiwHelpProvider.rh"
+#include <aiwxhelpprovider.loc>
+#include <AiwCommon.hrh>
+#include <avkon.loc>
+
+RESOURCE MENU_PANE r_aiwhelpprovider_menu
+    {
+    items =
+        {
+        MENU_ITEM { command = AIW_SUBMENU_TITLE; txt = qtn_options_help; },
+        MENU_ITEM { command = EAiwShowHelpCmd; txt = qtn_options_help;extratxt = qtn_options_help_sm_help;  }
+     
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHContextTopic.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHContextTopic class declaration
+*
+*/
+
+
+#ifndef INC_CSXHCONTEXTTOPIC_H_HEADER_INCLUDED_BC050AFE
+#define INC_CSXHCONTEXTTOPIC_H_HEADER_INCLUDED_BC050AFE
+
+#include "CSXHHelpContentBase.h"
+
+class CCSXHHelpDataBase;
+/** 
+* @class CCSXHContextTopic
+* This class is used for Context Sensitivity   
+*/
+class CCSXHContextTopic : public CCSXHHelpContentBase
+    {
+  public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHContextTopic 
+*  and return a pointer to the created object
+*  @param aToc2 	- a toc2 class pointer type casted to database
+*  @return a CCSXHContextTopic Pointer 
+*/
+	static CCSXHContextTopic* NewL(CCSXHHelpContentBase* aToc2);
+/** 
+ * @function ~CCSXHContextTopic
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */  	
+    ~CCSXHContextTopic();
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/      
+    TUid GetViewID() const;
+/** 
+*  @function GetTopic
+*  @since S60 3.2
+*  Get the Object HTML / Legacy type cast to Database
+*  @return View Id
+*/      
+    IMPORT_C CCSXHHelpContentBase* GetTopic();
+
+  protected:
+/** 
+*  @function CCSXHContextTopic
+*  @since S60 3.2
+*  Construct a CCSXHContextTopic 
+*  @param aToc2object 	- a toc2 class pointer type casted to database
+*/  
+  	CCSXHContextTopic(CCSXHHelpContentBase *aToc2object); 
+  
+  protected:
+  	CCSXHHelpContentBase *iToc2;
+
+  };
+
+
+
+#endif /* INC_CSXHCONTEXTTOPIC_H_HEADER_INCLUDED_BC050AFE */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHGenericTOC1.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericTOC1 class declaration
+*
+*/
+
+
+#ifndef INC_CSXHGENERICTOC1_H_HEADER_INCLUDED_BC050AFE
+#define INC_CSXHGENERICTOC1_H_HEADER_INCLUDED_BC050AFE
+
+#include "CSXHHelpContentBase.h"
+#include <badesca.h>
+
+
+class CCSXHHelpDataBase;
+/** 
+* @class CCSXHGenericTOC1
+* This class has the information of TOC1 
+*/
+class CCSXHGenericTOC1 : public CCSXHHelpContentBase
+    {
+  public:
+/** 
+ * @function ~CCSXHGenericTOC1
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */ 
+    ~CCSXHGenericTOC1();
+/** 
+ * @function FillChildDataL
+ * @since S60 3.2
+ * Fill the array
+ * @param aArray - A pointer to a Descriptor Array	
+ */
+   	IMPORT_C virtual void FillChildDataL(CDesCArray* aArray);
+/** 
+ * @function GetChildL
+ * @since S60 3.2
+ * Fill the array
+ * @param aName - toc1 Name	
+ * @return pointer to toc2 type casted to database class  
+ */
+  	IMPORT_C virtual CCSXHHelpContentBase* GetChildL(const TDesC& aName);
+
+/** 
+ * @function InsertChild
+ * @since S60 3.2
+ * Insert toc2 objects
+ * @param atoc2 - toc2 objects	
+ * @param aDeleteObject - boolean, default True
+ * @return ETrue Successful, EFalse otherwise
+ */  	
+  	TBool InsertChild(CCSXHHelpContentBase* atoc2,TBool aDeleteObject = ETrue);
+  	
+/** 
+ * @function ResetChildList
+ * @since S60 3.2
+ * clear Array, delete the objects
+ * @return ETrue Successful, EFalse otherwise
+ */  	
+  	virtual void ResetChildList();
+  	
+  
+  protected:
+/** 
+*  @function CCSXHGenericTOC1
+*  @since S60 3.2
+*  Construct a CCSXHGenericTOC1 
+*  @param aName 	- TOC1 Name
+*/
+  	CCSXHGenericTOC1(const TDesC& aName); 
+  	
+/** 
+*  @function InitChildList
+*  @since S60 3.2
+*  Allocate the Memory for Array
+*/
+  	virtual void InitChildList();
+/** 
+*  @function CopyChildListL
+*  @since S60 3.2
+*  Copy the content to Descriptor Array
+*  @param aArray - Descriptor Array
+*/
+  	virtual void CopyChildListL(CDesCArray* aArray);
+
+/** 
+*  @function ConstructChildList
+*  @since S60 3.2
+*  Fill the toc2 objects in the array
+*  calls ConstructChildListL internally	
+*  @return ETrue on Success, EFalse otherwise
+*/
+  	TBool ConstructChildList();
+  	
+  private:	
+/** 
+*  @function ConstructChildListL
+*  @since S60 3.2
+*  Fill the toc2 objects in the array
+*/
+  	void ConstructChildListL();
+  	
+  protected:
+
+    RPointerArray<CCSXHHelpContentBase> *iChildList;
+
+  };
+
+
+
+#endif /* INC_CSXHGENERICTOC1_H_HEADER_INCLUDED_BC050AFE */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHGenericTOC2.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericTOC2 class declaration
+*
+*/
+
+#ifndef INC_CSXHGENERICTOC2_H_HEADER_INCLUDED_BC05356D
+#define INC_CSXHGENERICTOC2_H_HEADER_INCLUDED_BC05356D
+
+#include "CSXHHelpContentBase.h"
+
+class CCSXHGenericTOC1;
+/** 
+* @class CCSXHGenericTOC2
+* This class has the information of TOC2 
+*/
+class CCSXHGenericTOC2 : public CCSXHHelpContentBase
+    {
+  public:
+/** 
+ * @function GetParent
+ * @since S60 3.2
+ * Get the Parent object
+ * @return pointer to toc1 class object
+ */
+    IMPORT_C CCSXHGenericTOC1* GetParent();
+/** 
+ * @function GetTopicContentL
+ * @since S60 3.2
+ * Get topic  to display
+ * @return pointer to Buffer
+ */
+    virtual TAny* GetTopicContentL() = 0;
+    
+  protected:
+/** 
+*  @function CCSXHGenericTOC2
+*  @since S60 3.2
+*  Construct a CCSXHGenericTOC2 
+*  @param aParent 	- TOC1 object
+*         aName 	- toc2 Name
+*/  
+    CCSXHGenericTOC2(CCSXHGenericTOC1* aParent, const TDesC& aName);
+  	CCSXHGenericTOC1* iParent;
+
+    };
+
+
+
+#endif /* INC_CSXHGENERICTOC2_H_HEADER_INCLUDED_BC05356D */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHHTMLContentParser.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHTMLContentParser class declaration
+*
+*/
+
+
+#ifndef __CCSXHHTMLCONTENTPARSER_H__
+#define __CCSXHHTMLCONTENTPARSER_H__
+
+#include "CSXHGenericTOC1.h"
+#include <f32file.h>
+#include <barsc.h> 
+#include <featurecontrol.h>
+
+ 
+class TAppUid;
+class CSenXmlReader;
+class CCSXHXMLParseHandler;
+class CCSXHHtmlTOC1;
+class CCSXHHelpDataBase;
+class CCSXHKywdTOC1;
+class CCoeEnv;
+class CCSXHHelpContentBase;
+class CCSXHGenericTOC2;
+class MSenContentHandlerClient;
+class CCSXHXMLParseHandler_Kywd;
+class CCSXHRuntimeIndexing;
+/**
+*  CCSXHHTMLContentParser class.
+*  This class is used to parse XML files & generate Html data
+*  @lib euser.lib SenXml.lib XMLFRAMEWORK.lib	ezip.lib HLPMODEL.LIB
+*  @since 3.2
+*/
+class CCSXHHTMLContentParser : public CBase
+{
+	public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHHTMLContentParser 
+*  and return a pointer to the created object
+*  @param aCoeEnv 	- Control Environment
+*  @return a CCSXHHTMLContentParser Pointer 
+*/	
+		static CCSXHHTMLContentParser* NewL(CCoeEnv* aCoeEnv);
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHLegacyContentParser 
+*  and return a pointer to the created object using two phase construction
+*  @param aCoeEnv 	- Control Environment
+*  @return a CCSXHLegacyContentParser Pointer 
+*/		
+		static CCSXHHTMLContentParser* NewLC(CCoeEnv *aCoeEnv);
+/** 
+*  @function GenerateTOC1ListL
+*  @since S60 3.2
+*  Generate Html TOC1 Objects 
+*  @param aDataBase 	- Database class pointer
+*/		void GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase);
+/** 
+*  @function GenerateTOC2ListL
+*  @since S60 3.2
+*  Generate Html TOC2 Objects 
+*  @param atoc1 	- generic toc1 class pointer
+*		  aArray	- Database class pointer's array pointer 
+*/
+		void GenerateTOC2ListL(CCSXHGenericTOC1& atoc1, RPointerArray<CCSXHHelpContentBase>* aArray);		
+/** 
+*  @function GetTopicContentL
+*  @since S60 3.2
+*  Get the Buffer for a selected toc2  
+*  @param atoc2 	- generic toc2 class pointer
+*  @return pointer to a buffer
+*/		
+		TAny* GetTopicContentL(CCSXHGenericTOC2* atoc2);
+/** 
+*  @function GetContentsFromFileL
+*  @since S60 3.2
+*  Get the Buffer from a html file
+*  @param htmlFile 	- html file path
+*         aCoeEnv   - Control Environment
+*  @return pointer to a buffer
+*/		
+		static HBufC8* GetContentsFromFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv,RFeatureControl &aFeatureControl);												   
+
+/** 
+*  @function GetHtmlFileL
+*  @since S60 3.2
+*  Get the html file path
+*  @param aCoeEnv   - Control Environment
+*         aDir      - Directory
+*         TAppUid   - UID
+*         aFileName - FileName(IN/OUT Argument)
+*/		
+		static void GetHtmlFileL(CCoeEnv* aCoeEnv,const short& aDir,
+                                            const TAppUid& aUid,TBuf<KMaxFileName>& aFileName);
+/** 
+ * @function ~CCSXHHTMLContentParser
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */ 		
+		~CCSXHHTMLContentParser();
+
+/** 
+*  @function GenerateKywdTOC1ListL
+*  @since S60 3.2
+*  Generate Html Keyword TOC1 Objects 
+*  @param aDataBase 	- Database class pointer
+*/		
+		void GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase);
+/** 
+*  @function GenerateTOC2ListForKeywordSearchL
+*  @since S60 3.2
+*  Generate Html Keyword TOC2 Objects 
+*  @param aDataBase 	- Database class pointer
+*  @param akywdtoc1	- keyword toc1 class pointer
+*/		
+		void GenerateTOC2ListForKeywordSearchL(CCSXHHelpDataBase* aDataBase,
+										CCSXHKywdTOC1* akywdtoc1);
+/** 
+*  @function GetContextTopic
+*  @since S60 3.2
+*  Get the help Context object
+*  @param aContext - Help context object
+*  @return database class pointer 
+*/		
+		CCSXHHelpContentBase* GetContextTopic(const TUid &aUid, const TDesC &contextName);
+/** 
+*  @function GetHtmlTopicForUrlL
+*  @since S60 3.2
+*  Get the toc2 object in order to get Content
+*  @param  aurl - Full File Path
+*  @return pointer to database	
+*/		
+		CCSXHHelpContentBase* GetHtmlTopicForUrlL(const TDesC& aurl);
+
+/** 
+*  @function IsUidCategoryPresent
+*  @since S60 3.2
+*  Check for Existance of Appication Uid
+*  @param aUid - Application Uid
+*  @return  ETrue if exists, EFalse otherwise
+*/		
+		TBool IsUidCategoryPresent(const TUid& aUid);
+		
+		
+		void InsertHTMLToc1L(const TDesC &appUidName,const TDesC &appName,const TInt& aDrive,
+		                        CCSXHHelpDataBase* aDataBase,const TDesC &FeatureIds );
+		
+/** 
+*  @function GetHTMLToc1
+*  @since S60 3.2
+*  Get the HTML TOC1 object
+*  @param aUid 					- Application Uid
+*		  aCurrentHtmlToc1	   	- HTMLTOC1 pointer
+*  @return  ETrue if present, EFalse otherwise
+*/	        
+	TBool GetHTMLToc1(const TDesC& aUid,CCSXHXMLParseHandler* aParser);	        		                        
+
+	TBool CheckFeatureIDL(const TDesC& aFeatueIds);
+	private:
+/** 
+*  @function CCSXHHTMLContentParser
+*  @since S60 3.2
+*  Construct a CCSXHHTMLContentParser
+*  @param aCoeEnv  - Control Environment
+*/ 	
+		CCSXHHTMLContentParser(CCoeEnv* aCoeEnv);
+/** 
+*  @function InitializeReaderL
+*  @since S60 3.2
+*  Create XMLParse Objects
+*  @param aXMLParser  - Pointer to XML parse Handler
+*/ 
+		void InitializeReaderL(CCSXHXMLParseHandler* aXMLParser);
+/** 
+*  @function InitializeParserAndReaderL
+*  @since S60 3.2
+*  Delete XMLParse Objects
+*  @param aXMLParser  - Pointer to XML parse Handler
+*/ 
+		void ClearReader();
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  perform the second phase construction
+*/ 		
+		void ConstructL();
+/** 
+*  @function ScanAndParseXMLfileToCreateTOC1ObjectL
+*  @since S60 3.2
+*  perform the second phase construction
+*  @param aFileSession - FileSession
+*		  ascanner	   - CDirScan pointer
+*		  aDatabase	   - Database pointer
+*		  aDrive	   - Drive Number
+*		  aXMLParser   - XMLParserhandler pointer		
+*/
+		void ScanAndParseXMLfileToCreateTOC1ObjectL(RFs& aFileSession,CDirScan* ascanner,
+												   CCSXHHelpDataBase* aDataBase,
+												   const TInt& aDrive,CCSXHXMLParseHandler* aXMLParser);		
+/** 
+*  @function HandleMasterMetaFileL(
+*  @since S60 3.2
+*  perform the second phase construction
+*  @param aFileSession - FileSession
+*		  aDatabase	   - Database pointer
+*		  aRootDir	   - Root directory
+*         aPrevHandler  - Previous Content Handler
+*  @return  ETrue if handled, EFalse otherwise
+*/
+	    TBool HandleMasterMetaFileL(CCSXHHelpDataBase* aDataBase, 
+	        TChar& aDrive, MSenContentHandlerClient *aPrevHandler);
+/** 
+*  @function HandleMasterKeywordFileL(
+*  @since S60 3.2
+*  parse makster keywords file
+*  @param aDatabase	   - Database pointer
+*  @return  ETrue if handled, EFalse otherwise
+*/		TBool HandleMasterKeywordFileL(CCSXHHelpDataBase* aDataBase);
+
+
+		static	TBool GetHTMLContentPathForDriveL(TBuf<KMaxFileName>* aContentDrive,CCoeEnv *aCoeEnv);
+
+/** 
+*  @function IsAppUIdPresentAlready(
+*  @since S60 3.2
+*  Check duplicate Uids
+*  @param aUid	   - Application Uid
+*  @return  ETrue if dupicate is identified, EFalse otherwise
+*/		
+		TBool IsAppUIdPresentAlready(const TDesC& aUid);
+
+/** 
+*  @function GetCorrespondingTOC1FromMainArray(
+*  @since S60 3.2
+*  Get TOC1 object from the main array, which is used to display Main topic view.
+*  @param aApplicationName	   - Application Name
+*  @return  pointer to HTML toc1.
+*/		
+		CCSXHHtmlTOC1* GetCorrespondingTOC1FromMainArray(const TDesC& aApplicationName);
+
+/** 
+*  @function ParseKeywdFileAndCreatekywdTOC1Objects
+*  @since S60 3.2
+*  Parse keyword.xml file and Create kywd TOC1 objects.
+*  @param aTOC1ObjectsArray	   - Array of HTMLToc1Objects
+*		  XMLParser			   - pointer to XML parse handler.
+*		  bMasterKeywordFilePresent - Boolean parameter	  	
+*/		
+		
+		void ParseKeywdFileAndCreatekywdTOC1ObjectsL(RPointerArray<CCSXHHtmlTOC1>& aTOC1ObjectsArray,
+				CCSXHXMLParseHandler_Kywd* XMLParser, TBool bMasterKeywordFilePresent);
+				
+/** 
+*  @function ParseKeywdFileAndCreatekywdTOC1Objects
+*  @since S60 3.2
+*  Parse keyword.xml file and Create kywd TOC1 objects.
+*  @param aTOC1ObjectsArray	   - Array of HTMLToc1Objects
+*		  aUrl			   	   - html file path
+*/		
+
+		CCSXHHelpContentBase* CCSXHHTMLContentParser::GetObjectBasedonUrlL(RPointerArray<CCSXHHtmlTOC1>& aTOC1ObjectsArray,
+							  const TDesC& aUrl,TBool aMainArrayList);    
+		
+/** 
+*  @function GetSupportedFeatureListL
+*  @since S60 3.2
+*  Get enabled featureIds in the current build
+*/		
+		void GetSupportedFeatureListL();
+
+/** 
+*  @function CreateBufferForCSSContentL
+*  @since S60 3.2
+*  Create CSS Content using enabled featureIds
+*  @param aFeatureControl	   - RFeatureControl instance
+*/		
+		static HBufC8* CreateBufferForCSSContentL(RFeatureControl& aFeatureControl);
+
+/** 
+*  @function GetContentsFromHTMLFileL
+*  @since S60 3.2
+*  Read the contents from HTML file
+*  @param htmlFile	   - HTML file name
+*		  aCoeEnv	   - Control Environment
+*/		
+		
+		static HBufC8* GetContentsFromHTMLFileL(const TDesC& htmlFile, CCoeEnv* aCoeEnv);
+
+/** 
+*  @function MergeCssAndHTMLContentL
+*  @since S60 3.2
+*  Merge CSS and HTML Content 
+*  @param aHTMLBuffer	   - HTML file content
+*		  aCssContent	   - CSS content
+*/		
+		
+		static HBufC8* MergeCssAndHTMLContentL(HBufC8* aHTMLBuffer, HBufC8* aCssContent);
+
+		static void AppendStyleSheetContent_listitem(TPtr8& abufferptr,TInt aFeatureIdCount,
+										RFeatureUidArray& aSupportedFeatures,CArrayFix<TInt>& alanguageCodeArray);
+		static void AppendStyleSheetContent_paragraph(TPtr8& abufferptr,TInt aFeatureIdCount,
+										RFeatureUidArray& aSupportedFeatures,CArrayFix<TInt>& alanguageCodeArray);
+		static void AppendStyleSheetContent_ahref(TPtr8& abufferptr,TInt aFeatureIdCount,
+										RFeatureUidArray& aSupportedFeatures,CArrayFix<TInt>& alanguageCodeArray);
+		static void AppendStyleSheetContent_none(TPtr8& abufferptr,TInt aFeatureIdCount,
+										RFeatureUidArray& aSupportedFeatures);													   
+	private:		
+		CSenXmlReader *iXmlReader;
+		
+		//Store all the created HTML TOC1 objects for future reference.
+		RPointerArray<CCSXHHtmlTOC1> iHtmlTOC1List,iDuplicateHelpTopicList;
+		CCoeEnv *iCoeEnv;
+
+		RFeatureUidArray iSupportedFeatures;
+		RFeatureControl iFeatureControl;
+		//Input Language variation changes
+		CDesCArray* iSupportedInputLanguages;
+		CDesCArray* iFeatureManager_FeatureIds;
+		CCSXHRuntimeIndexing* iIndexing;
+
+};
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHHelpContentBase.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHelpContentBase class declaration
+*
+*/
+
+
+#ifndef INC_CSXHHELPCONTENTBASE_H_HEADER_INCLUDED_BC0553D0
+#define INC_CSXHHELPCONTENTBASE_H_HEADER_INCLUDED_BC0553D0
+
+#include <e32std.h>
+#include <e32base.h>
+
+const TInt KMaxHelpTopicName = 30;
+/** 
+* @class CCSXHGenericTOC1
+* This class is the base class for GenericTOC1 & GenericTOC2
+*/
+class CCSXHHelpContentBase : public CBase
+    {
+  public:
+  /** 
+ * @function ~CCSXHHelpContentBase
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */ 
+    virtual ~CCSXHHelpContentBase();
+
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/    
+    IMPORT_C virtual TUid GetViewID() const = 0;
+
+/** 
+*  @function GetName
+*  @since S60 3.2
+*  Get the name
+*  @return Pointer which contains Name
+*/
+    IMPORT_C TPtr GetName() const;
+
+  protected:
+/** 
+*  @function CCSXHHelpContentBase
+*  @since S60 3.2
+*  Construct a CCSXHHelpContentBase 
+*  @param aName 	- Name
+*/  
+    CCSXHHelpContentBase(const TDesC& name);
+
+  private:
+    // 1. For Generic TOC1: The TOC1 entry name
+    // 2. For Generic TOC2: The TOC2 entry name
+    // 3. For help database: Unused
+    //TBuf<KMaxHelpTopicName> iName;
+    //typedef TBuf<30> TCoeContextName;
+    
+    HBufC *iName;
+    
+    template <class T>
+    friend TInt Orderer(const T& left, const T& right);
+
+    };
+/** 
+*  @function Orderer
+*  @since S60 3.2
+*  template function used to compare between two objects
+*  @param left 	- template object
+*		  right	- template object
+*  @return 0 if both are same, +ve or -ve Values as per Comparision
+*/ 	
+template <class T>
+TInt Orderer(const T& left, const T& right) 
+    {
+    //return left.GetName().CompareC(right.GetName());
+    return (left.iName)->CompareC(*right.iName);
+	}
+    
+#endif /* INC_CSXHHELPCONTENTBASE_H_HEADER_INCLUDED_BC0553D0 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHHelpDataBase.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHelpDataBase class declaration
+*
+*/
+
+
+#ifndef INC_CSXHHELPDATABASE_H_HEADER_INCLUDED_BC054F58
+#define INC_CSXHHELPDATABASE_H_HEADER_INCLUDED_BC054F58
+
+#include "CSXHHelpContentBase.h"
+#include "CSXHGenericTOC1.h"
+#include <f32file.h>
+#include <apadef.h>
+class 	CAknProgressDialog;
+
+class CCSXHHelpDataBase;
+class CCSXHHTMLContentParser;
+class CCSXHLegacyContentParser;
+class CCSXHGenericTOC2;
+class CCSXHKywdTOC1;
+class CCSXHHtmlTOC1;
+class CCoeEnv;
+class CCSXHMainTopics;
+class CCSXHKywdTopics;
+class MCSXHKywdBuilder;
+
+/** 
+* @class CCSXHHelpDataBase
+* This class has all pointers & used to generate the required data from Application
+*/
+class CCSXHHelpDataBase : public CBase
+    {
+  public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHHelpDataBase 
+*  and return a pointer to the created object
+*  @param aCoeEnv 	- Control Environment
+*  @return a CCSXHHelpDataBase Pointer 
+*/
+    IMPORT_C static CCSXHHelpDataBase* NewL(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption);
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHHelpDataBase 
+*  and return a pointer to the created object using two phase construction
+*  @param aCoeEnv 	- Control Environment
+*  @return a CCSXHHelpDataBase Pointer 
+*/
+    static CCSXHHelpDataBase* NewLC(CCoeEnv *aCoeEnv,const TApaAppCaption& aAppCaption);
+
+/** 
+*  @function GetInstance
+*  @since S60 3.2
+*  Get the instance of database class
+*  @return database pointer 
+*/
+    static CCSXHHelpDataBase* GetInstance();
+
+ /** 
+ * @function ~CCSXHHelpDataBase
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */ 
+    IMPORT_C ~CCSXHHelpDataBase();
+/** 
+*  @function GetMainTopics
+*  @since S60 3.2
+*  Get the instance of Main toc1
+*  @return toc1 pointer 
+*/  
+    IMPORT_C CCSXHGenericTOC1* GetMainTopics();
+/** 
+*  @function GetKywdTopics
+*  @since S60 3.2
+*  Get the instance of keyword toc1
+*  @return toc1 pointer 
+*/  
+    IMPORT_C CCSXHGenericTOC1* GetKywdTopics();
+/** 
+*  @function ClearAllTOC1Contents
+*  @since S60 3.2
+*  Delete all the objects from the Array
+*/   
+    IMPORT_C void ClearAllTOC1Contents();
+/** 
+*  @function GetContextTopic
+*  @since S60 3.2
+*  Delete all the objects from the Array
+*  @param aContextMessage - Message Sent by other Application
+*  @return Database pointer 
+*/ 	
+	IMPORT_C CCSXHHelpContentBase* GetContextTopic(const TDesC8& aContextMessage);
+/** 
+*  @function GetHtmlTopicForUrlL
+*  @since S60 3.2
+*  Delete all the objects from the Array
+*  @param aurl - Html file path
+*  @return Database pointer 
+*/ 	
+	IMPORT_C CCSXHHelpContentBase* GetHtmlTopicForUrlL(const TDesC& aurl);
+	
+/** 
+*  @function IncrementProgressBar
+*  @since S60 3.2
+*  Increments the progress info 
+*  @return progress info pointer
+*/ 	
+	void IncrementKeywordSearchCount(TInt aUnits = 1);
+/** 
+*  @function GetLegacyParser
+*  @since S60 3.2
+*  Get LegacyContentparser
+*  @return LegacyContentParser pointer 
+*/	
+	CCSXHLegacyContentParser* GetLegacyParser();
+/** 
+*  @function GetHtmlParser
+*  @since S60 3.2
+*  Get htmlContentparser
+*  @return HtmlContentParser pointer 
+*/	
+	CCSXHHTMLContentParser* GetHtmlParser();
+/** 
+*  @function InsertKeywordL
+*  @since S60 3.2
+*  Insert into array
+*  @param aKywdName - Keyword Name
+*		  aToc1		- Toc1 Object
+*/	
+	void InsertKeywordL(const TDesC& aKywdName, CCSXHHtmlTOC1* aToc1);
+/** 
+*  @function InsertKeywordL
+*  @since S60 3.2
+*  Insert into Array
+*  @param aKywdName 		- Keyword Name
+*		  aLegacyKywdIndex	- Position 
+*		  aCatUid			- Application Uid
+*/	
+	void InsertKeywordL(const TDesC& aKywdName, TInt aLegacyKywdIndex, const TUid& aCatUid);
+
+
+/** 
+*  @function InitGenerateKeywordTOC2ListL
+*  @since S60 3.2
+*  Initializes the generation of kywd toc2 objects
+*  @param aKywdToc1 		- Keyword toc1 object
+*/	
+	IMPORT_C TInt InitGenerateKeywordTOC2ListL(CCSXHKywdTOC1* aKywdToc1);
+
+/** 
+*  @function GenerateKeywordTOC2ListL
+*  @since S60 3.2
+*  Generate the toc2 objects,InitGenerateKeywordTOC2ListL has to be called first
+*  @param aKywdToc1 		- Keyword toc1 object
+*/	
+	void GenerateKeywordTOC2ListL(CCSXHKywdTOC1* aKywdToc1);
+
+/** 
+*  @function InsertKeywordTopicL
+*  @since S60 3.2
+*  The caller should allocate memory for the aTOC2 object, if it is not successfully 
+*  added to the topic, then this function will free the memory
+*  @param 
+*  		  aToc2		- toc2 object
+*/	
+	CCSXHKywdTOC1* InsertKeywordTopicL(CCSXHGenericTOC2* aToc2);
+	
+/** 
+*  @function InsertKeywordTopic
+*  @since S60 3.2
+*  The caller should allocate memory for the aTOC2 object, if it is not successfully 
+*  added to the topic, then this function will free the memory
+*  @param aToc1 - toc1 object
+*  		  aToc2	- toc2 object
+*/	
+	void InsertKeywordTopic(CCSXHKywdTOC1* aToc1, CCSXHGenericTOC2* aToc2);
+
+/** 
+*  @function FillKeywordTopicsL
+*  @since S60 3.2
+*  Fills Keyword objects
+*  @param aBuilder - MCSXHKywdBuilder object
+*/	
+	void FillKeywordTopicsL(MCSXHKywdBuilder* aBuilder);
+
+/** 
+*  @function GetCoeEnv
+*  @since S60 3.2
+*  Get the Control Environment
+*  @return pointer to control environment
+*/
+	CCoeEnv* GetCoeEnv();
+/** 
+*  @function GetKeywordSearchCount
+*  @since S60 3.2
+*  Gets the current count of keywords for search result view
+*  @return TInt count
+*/
+IMPORT_C	TInt GetKeywordSearchCount();
+	
+  private:
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  perform the second phase construction
+*/
+    void ConstructL();
+/** 
+*  @function CCSXHHelpDataBase
+*  @since S60 3.2
+*  Construct a CCSXHHelpDataBase
+*  @param aCoeEnv  - Control Environment
+*/
+    CCSXHHelpDataBase(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption);
+
+/** 
+*  @function GetContextTopicL
+*  @since S60 3.2
+*  Get the topic for the Context
+*  @param aContextMessage  - Message sent by other Application
+*  @return Database pointer	
+*/    
+    CCSXHHelpContentBase* GetContextTopicL(const TDesC8& aContextMessage);
+    
+    // List of TOC1 entries
+    CCSXHMainTopics *iMainTOC1;
+    // List of keyword entries
+    CCSXHKywdTopics *iKywdTOC1;
+    
+    
+    CCSXHHTMLContentParser *iHTMLContentParser;
+    CCSXHLegacyContentParser *iLegacyContentParser;
+    
+	CCoeEnv *iCoeEnv;
+	
+	CCSXHHelpContentBase *iLastContextTopic;
+	
+	MCSXHKywdBuilder *iKwydBuilder;
+	
+	TApaAppCaption iAppCaption;
+	
+	TInt iKeywordSearchCount;
+	
+    };
+
+
+
+#endif /* INC_CSXHHELPDATABASE_H_HEADER_INCLUDED_BC054F58 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHHtmlTOC1.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTOC1 class declaration
+*
+*/
+
+
+#ifndef INC_CSXHHTMLTOC1_H_HEADER_INCLUDED_BC0568C5
+#define INC_CSXHHTMLTOC1_H_HEADER_INCLUDED_BC0568C5
+
+#include "CSXHGenericTOC1.h"
+
+class CCSXHHelpDataBase;
+
+/** 
+* @class TAppUid
+* This class stores the required information to store a folder name in string
+* as integer and converts it back to a string when required. This class is mainly
+* to save RAM space 
+*/
+
+class TAppUid
+ 	{
+   	public:
+   		TAppUid(const TDesC& aFolder);
+   		const TUid& GetUid() const;
+   		TBool IsValid() const;
+    	void AppendUid(TBuf<KMaxFileName>& aStr) const;	
+   	private:
+   		TUid iUid;
+   		TUint8 iLength;
+    	};
+    	
+
+/** 
+* @class CCSXHHtmlTOC1
+* This class has the information of html TOC1 
+*/
+class CCSXHHtmlTOC1 : public CCSXHGenericTOC1
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTOC1 
+*  and return a pointer to the created object
+*  @param aName 	- TOC1 Name
+*		  aUid 		- Application Uid
+*		  aDrive    - Drive Number
+*  @return a CCSXHHtmlTOC1 Pointer 
+*/
+    static CCSXHHtmlTOC1* NewL(const TDesC& aName,const TDesC& aFolder,
+    							const TInt& aDrive);
+/** 
+ * @function ~CCSXHHtmlTOC1
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */    							
+    ~CCSXHHtmlTOC1();
+
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/    
+    TUid GetViewID() const;
+
+/** 
+*  @function GetAppUid
+*  @since S60 3.2
+*  Get Application  uid
+*  @return Application UId
+*/    
+    const TUid& GetAppUid() const;
+/** 
+*  @function GetContextTopic
+*  @since S60 3.2
+*  Get content for Context Name
+*  @param  acontextName - Context Name 
+*  @return pointer to database class
+*/     
+    CCSXHHelpContentBase* GetContextTopic(const TDesC& acontextName);
+/** 
+*  @function GetHelpFileL
+*  @since S60 3.2
+*  Get the file path
+*  @param  aFilePath - File Path
+*/     
+    void GetHelpFileL(TBuf<KMaxFileName>& aFilePath) const;
+/** 
+*  @function GetHtmlTopicForFile
+*  @since S60 3.2
+*  Get the toc2 object in order to get Content
+*  @param  aFile - toc2 Name
+*/     
+    CCSXHHelpContentBase* GetHtmlTopicForFile(const TDesC& aFile);
+    
+/** 
+*  @function GetHelpFileL
+*  @since S60 3.2
+*  Get the file path
+*  @return  ETrue, if it part of ROMdrive, EFalse otherwise
+*/     
+    TBool IsROMDrive();    
+    
+    protected:
+/** 
+*  @function CCSXHHtmlTOC1
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTOC1 
+*  @param aName 	- TOC1 Name
+*		  aUid 		- Application Uid
+*		  aDrive    - Drive Number
+*/    
+    CCSXHHtmlTOC1(const TDesC& aName,const TDesC& aFolder,const TInt& aDriveName);
+/** 
+*  @function InitChildList
+*  @since S60 3.2
+*  Allocate Memory to the array
+*/    
+    void InitChildList();
+    
+    TBool IsValid() const;
+    
+    
+    private:	
+    
+	  
+     TAppUid iAppUid;
+      short iDrive;
+    };
+
+
+
+#endif /* INC_CSXHHTMLTOC1_H_HEADER_INCLUDED_BC0568C5 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHHtmlTOC2.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTOC2 class declaration
+*
+*/
+
+
+#ifndef INC_CSXHHTMLTOC2_H_HEADER_INCLUDED_BC052432
+#define INC_CSXHHTMLTOC2_H_HEADER_INCLUDED_BC052432
+
+#include "CSXHGenericTOC2.h"
+
+class CCSXHGenericTOC1;
+class CCSXHKywdTOC1;
+class CCoeEnv;
+class TCoeHelpContext;
+class RFeatureControl;
+/** 
+* @class CCSXHHtmlTOC2
+* This class has the information of html TOC2 
+*/
+class CCSXHHtmlTOC2 : public CCSXHGenericTOC2
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTOC2 
+*  and return a pointer to the created object
+*  @param aparent 	- TOC1 object
+*		  aName  	- toc2 Name
+*		  aHtmlFileName - FileName
+*		  aKey		    - ETrue for Keyword toc2, EFalse otherwise	
+*  @return a CCSXHHtmlTOC2 Pointer 
+*/
+static CCSXHHtmlTOC2* NewL(CCSXHGenericTOC1* aparent,const TDesC& aName,
+const TDesC& aHtmlFileName,TBool aKey=EFalse);
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTOC2 
+*  and return a pointer to the created object using two phase construction
+*  @param aparent 	- TOC1 object
+*		  aName  	- toc2 Name
+*		  aHtmlFileName - FileName
+*		  aKey		    - ETrue for Keyword toc2, EFalse otherwise	
+*  @return a CCSXHHtmlTOC2 Pointer 
+*/
+static CCSXHHtmlTOC2* NewLC(CCSXHGenericTOC1*aparent,const TDesC& aName,
+const TDesC& aHtmlFileName,TBool aKey=EFalse);
+
+/** 
+ * @function ~CCSXHHtmlTOC2
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */    
+    ~CCSXHHtmlTOC2();
+
+/** 
+ * @function ~CCSXHHtmlTOC2
+ * @since S60 3.2
+ * Get the full path of the HTML file
+ * @param aFileUrl - Buffer in order to get the file path	
+ */    
+    IMPORT_C void GetHtmlUrlL(TBuf<KMaxFileName>& aFileUrl) const;
+
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/    
+    TUid GetViewID() const;
+/** 
+*  @function GetTopicContentL
+*  @since S60 3.2
+*  Get the content to display in the browser 
+*  @return Pointer to the buffer
+*/   
+    TAny* GetTopicContentL();
+       	
+/** 
+*  @function GetFileName
+*  @since S60 3.2
+*  Get html file Name
+*  @return buffer which contains html file Name
+*/
+    const TBuf<KMaxFileName>& GetFileName() const;
+    
+/** 
+*  @function GetHelpContext
+*  @since S60 3.2
+*  Constructs a Help Context corresponding to the topic
+*  @returns true on success
+*/
+    IMPORT_C TBool GetHelpContext(TCoeHelpContext& aContext) const;
+
+/** 
+*  @function GetContentsFromUrlL
+*  @since S60 3.2
+*  Get content from a html file
+*  @param aUrl    - Full file path
+*		  aCoeEnv - Control Environment
+*  @return pointer to buffer which contains HTML file content
+*/
+    IMPORT_C static HBufC8* GetContentsFromUrlL(const TDesC& aUrl,
+    				CCoeEnv* aCoeEnv,RFeatureControl& aFeatureControl);
+   
+/** 
+*  @function SetKywdParent
+*  @since S60 3.2
+*  Set the parent object
+*  @param aParent    - keyword toc1 class pointer
+*/ 
+    void SetKywdParent(CCSXHKywdTOC1* aParent);
+/** 
+*  @function GetKywdParent
+*  @since S60 3.2
+*  Get the parent 
+*  @return poniter to keywordtoc1 (parent) class
+*/
+    IMPORT_C  CCSXHKywdTOC1* GetKywdParent();
+
+/** 
+*  @function SetHtmlFilePath
+*  @since S60 3.2
+*  Set Html file path
+*  @param aFilePath - Html file path
+*/
+    void SetHtmlFilePath(const TDesC&  aFilePath);
+    
+/** 
+*  @function GetHtmlFileName
+*  @since S60 3.2
+*  Get html file
+*  @param aFileName - Full path with html file name 
+*/
+    void GetHtmlFileName(TBuf<KMaxFileName>&  aFileName);	
+
+	private:
+/** 
+*  @function CCSXHHtmlTOC2
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTOC2 
+*  @param aparent 	- TOC1 object
+*		  aName  	- toc2 Name
+*		  aHtmlFileName - FileName
+*		  aKey		    - ETrue for Keyword toc2, EFalse otherwise	
+*/	
+		CCSXHHtmlTOC2(CCSXHGenericTOC1* aparent,const TDesC& aName,
+		const TDesC& aHtmlFileName,TBool aKeyWord = false);
+	
+	private:
+    	TBuf<KMaxFileName> iHTMLFileName,iHTMLFilePath;
+    	TBool iKeyWordTopic;
+    	CCSXHKywdTOC1 *iKywdParent;    	
+    };
+
+
+
+#endif /* INC_CSXHHTMLTOC2_H_HEADER_INCLUDED_BC052432 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHKywdTOC1.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHKywdTOC1 class declaration
+*
+*/
+
+
+#ifndef INC_CSXHKYWDTOC1_H_HEADER_INCLUDED_BC0568C5
+#define INC_CSXHKYWDTOC1_H_HEADER_INCLUDED_BC0568C5
+
+#include "CSXHGenericTOC1.h"
+
+class CCSXHHtmlTOC1;
+/** 
+* @class CCSXHLegacyTOC1
+* This class has the information of keyword TOC1 
+*/
+class CCSXHKywdTOC1 : public CCSXHGenericTOC1
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHKywdTOC1 
+*  and return a pointer to the created object
+*  @param aName 	- Name of the TOC1
+*  @return a CCSXHKywdTOC1 Pointer 
+*/     
+	    static CCSXHKywdTOC1* NewL(const TDesC& aName);
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHKywdTOC1 
+*  and return a pointer to the created object using two phase contruction
+*  @param aName 	- Name of the TOC1
+*  @return a CCSXHKywdTOC1 Pointer 
+*/  	    
+    	static CCSXHKywdTOC1* NewLC(const TDesC& aName);
+/** 
+ * @function ~CCSXHKywdTOC1
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */     	
+  		~CCSXHKywdTOC1();
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/
+	    TUid GetViewID() const;
+/** 
+*  @function LegacyIndex
+*  @since S60 3.2
+*  Get the position
+*  @return position
+*/	    
+	    TInt& LegacyIndex();
+/** 
+*  @function AppendHtmlTOC1L
+*  @since S60 3.2
+*  Insert html toc1 object
+*  @param atoc1 - html toc1 class pointer
+*/	    
+	    void AppendHtmlTOC1L(CCSXHHtmlTOC1* aToc1);
+
+/** 
+*  @function GetHtmlTOC1List
+*  @since S60 3.2
+*  Get the Array
+*  @return pointer to the Array of html toc1 objects
+*/	    
+	    RPointerArray<CCSXHHtmlTOC1>* GetHtmlTOC1List(); 
+  	
+    protected:
+/** 
+*  @function CCSXHKywdTOC1
+*  @since S60 3.2
+*  Construct a CCSXHKywdTOC1
+*  @param aName  - kywd toc1 name
+*/     
+    	CCSXHKywdTOC1(const TDesC& aName);
+/** 
+*  @function InitChildList
+*  @since S60 3.2
+*  Allocate Memory for toc1htmllist array
+*/     
+       	void InitChildList();	
+  	private:	
+       	TInt iLegacyIndex;//Needed for getting the TOC2 kywd legacy contents
+		RPointerArray<CCSXHHtmlTOC1> *iTOC1HtmlList; //Needed for getting the TOC2 kywd HTML contents
+     	
+    };
+    
+ 
+    
+#endif /* INC_CSXHKYWDTOC1_H_HEADER_INCLUDED_BC0568C5 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHKywdTopics.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHKywdTopics class declaration
+*
+*/
+
+
+#ifndef INC_CSXHKYWDTOPICS_H_HEADER_INCLUDED_BC0568C5
+#define INC_CSXHKYWDTOPICS_H_HEADER_INCLUDED_BC0568C5
+
+#include "CSXHGenericTOC1.h"
+#include <apadef.h>
+
+class CCSXHHelpDataBase;
+class CCSXHHtmlTOC1;
+class CCSXHKywdTOC1;
+
+/** 
+* @class CCSXHKywdTopics
+* This class has the information of Keyword Objects
+*/
+class CCSXHKywdTopics : public CCSXHGenericTOC1
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHKywdTopics 
+*  and return a pointer to the created object
+*  @param aDataBase - database class pointer
+*  @return a CCSXHKywdTopics Pointer 
+*/      
+    static CCSXHKywdTopics* NewL(const TApaAppCaption& aAppCaption);
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHKywdTopics 
+*  and return a pointer to the created object using two phase construction
+*  @param aDataBase - database class pointer
+*  @return a CCSXHKywdTopics Pointer 
+*/      
+    static CCSXHKywdTopics* NewLC(const TApaAppCaption& aAppCaption);
+/** 
+*  @function ~CCSXHKywdTopics
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/
+    ~CCSXHKywdTopics();
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/    
+    TUid GetViewID() const;
+/** 
+*  @function InsertKywdL
+*  @since S60 3.2
+*  Insert into an array
+*  @param aKywd	- Keyword Name
+*/   
+    void InsertKywdL(const TDesC& aKywd);
+/** 
+*  @function GetChildL
+*  @since S60 3.2
+*  Get objects for keyword
+*  @param aKywd	- Keyword Name
+*  @return database class pointer
+*/   
+    CCSXHHelpContentBase* GetChildL(const TDesC& aName);
+    
+/** 
+*  @function GetSelectedTopic
+*  @since S60 3.2
+*  Get the pointer for a selected Keyword
+*  @return keyword toc1 class pointer
+*/   
+    CCSXHKywdTOC1* GetSelectedTopic();
+    
+    protected:
+/** 
+*  @function CCSXHKywdTopics
+*  @since S60 3.2
+*  Construct a CCSXHKywdTopics
+*  @param aName - keyword Name  
+*/     
+    	CCSXHKywdTopics(const TDesC& aName);
+    	
+/** 
+*  @function InitChildList
+*  @since S60 3.2
+*  Allocate Memory for the Array 
+*/   
+    	void InitChildList() {}
+/** 
+*  @function CopyChildListL
+*  @since S60 3.2
+*  Copies content to Descriptor Array
+*  @param aArray - Descriptor Array
+*/   
+  		void CopyChildListL(CDesCArray* aArray);
+  		
+  	private:
+  		CDesCArray *iKywdTopics;
+  		CCSXHKywdTOC1 *iCurrentTopic;
+    };
+
+
+
+/** 
+* @class MCSXHKywdBuilder
+* The HTML content parser operates on this class for inserting keywords
+*/
+class MCSXHKywdBuilder
+    {
+    public: // New functions
+/** 
+*  @function InsertKeywordL
+*  @since S60 3.2
+*  Insert keywords into an array, pure virtual function
+*  @param aKwdTopics - keyword topics class pointer
+*		  aKwd		 - keyword Name
+*		  aToc1		 - html toc1 class pointer
+*/ 
+     virtual void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd, 
+    									CCSXHHtmlTOC1* aToc1) = 0; 
+/** 
+*  @function InsertKeywordL
+*  @since S60 3.2
+*  Insert keywords into an array, pure virtual function
+*  @param aKwdTopics   - keyword topics class pointer
+*		  aKwd		   - keyword Name
+*		  aLegacyIndex - position of the object
+*/     
+     virtual void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd, 
+    									const TInt& aLegacyIndex) = 0; 
+    };
+
+#endif /* INC_CSXHKYWDTOPICS_H_HEADER_INCLUDED_BC0568C5 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHLegacyContentParser.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyContentParser class declaration
+*
+*/
+
+
+#ifndef __CCSXHLEGACYCONTENTPARSER_H__
+#define __CCSXHLEGACYCONTENTPARSER_H__
+
+#include <e32base.h>
+#include <hlpmodel.h>
+
+class CHlpModel;
+class CHlpTopic;
+class CCSXHGenericTOC1;
+class CCSXHGenericTOC2;
+class CCSXHLegacyTOC2;
+class CCSXHHelpDataBase;
+class CCSXHKywdTOC1;
+class CCSXHLegacyTOC1;
+class CCoeEnv;
+class CCSXHHelpContentBase;
+class TCoeHelpContext;
+
+/**
+*  CCSXHLegacyContentParser class.
+*  This class is used to retrive Legacy content from .hlp file
+*  @lib euser.lib
+*  @since 3.2
+*/
+
+class CCSXHLegacyContentParser: public CBase , public MHlpModelObserver
+	{
+	public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHLegacyContentParser 
+*  and return a pointer to the created object
+*  @param aDataBase 	- Database class Pointer
+*  @return a CCSXHLegacyContentParser Pointer 
+*/  
+		static CCSXHLegacyContentParser* NewL(CCSXHHelpDataBase* aDataBase);
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHLegacyContentParser 
+*  and return a pointer to the created object using two phase construction
+*  @param aDataBase 	- Database class pointer
+*  @return a CCSXHLegacyContentParser Pointer 
+*/
+		static CCSXHLegacyContentParser* NewLC(CCSXHHelpDataBase* aDataBase);
+			
+/** 
+*  @function GenerateTOC1ListL
+*  @since S60 3.2
+*  Generate Legacy TOC1 Objects 
+*  @param aDataBase 	- Database class pointer
+*/
+		void GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase);
+/** 
+*  @function GenerateTOC2ListL
+*  @since S60 3.2
+*  Generate Legacy TOC2 Objects 
+*  @param atoc1 	- generic toc1 class pointer
+*		  aArray	- Database class pointer's array pointer 
+*/
+		void GenerateTOC2ListL(CCSXHGenericTOC1& atoc1,RPointerArray<CCSXHHelpContentBase>* aArray);
+/** 
+*  @function GetTopicContentL
+*  @since S60 3.2
+*  Get the richtext for a selected toc2  
+*  @param atoc2 	- generic toc2 class pointer
+*  @return richtext pointer
+*/		
+		TAny* GetTopicContentL(CCSXHGenericTOC2* atoc2);
+/** 
+*  @function GenerateKywdTOC1ListL
+*  @since S60 3.2
+*  Generate Legacy Keyword TOC1 Objects 
+*  @param aDataBase 	- Database class pointer
+*/		
+		void GenerateKywdTOC1ListL(CCSXHHelpDataBase *aDataBase);
+
+/** 
+*  @function InitGenerateTOC2ListForKeywordSearchL
+*  @since S60 3.2
+*  Generate Legacy Keyword TOC2 Objects 
+*  @param akywdtoc1	- keyword toc1 class pointer
+*  @return TInt the number of keyword sub topics
+*/
+	TInt InitGenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* akywdtoc1);
+
+/** 
+*  @function GenerateTOC2ListForKeywordSearchL
+*  @since S60 3.2
+*  Generate Legacy Keyword TOC2 Objects,InitGenerateTOC2ListForKeywordSearchL
+*  has to be called first
+*  @param akywdtoc1	- keyword toc1 class pointer
+*/
+		void GenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* akywdtoc1);
+/** 
+*  @function GetTOC1ForTOC2
+*  @since S60 3.2
+*  Get Legacy TOC1 Object 
+*  @param atoc2	- keyword toc2 class pointer
+*  @return legacy toc1 class pointer
+*/
+		CCSXHLegacyTOC1* GetTOC1ForTOC2(CCSXHLegacyTOC2* atoc2);
+/** 
+ * @function ~CCSXHLegacyContentParser
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */  		
+		~CCSXHLegacyContentParser();
+
+/** 
+*  @function GetContextTopic
+*  @since S60 3.2
+*  Get the help Context object
+*  @param aContext - Help context object
+*  @param database class pointer 
+*/         
+		CCSXHHelpContentBase* GetContextTopic(TCoeHelpContext &aContext);
+		
+	private:
+/** 
+*  @function CCSXHLegacyContentParser
+*  @since S60 3.2
+*  Construct a CCSXHLegacyContentParser
+*  @param aDataBase  - Database class pointer
+*/ 	
+		CCSXHLegacyContentParser(CCSXHHelpDataBase *aDataBase);
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  perform the second phase construction
+*  @param aDataBase  - Database class pointer
+*/ 		
+		void ConstructL();
+/** 
+*  From MHlpModelObserver class	
+*  @function HandleModelEventL
+*  @since S60 3.2
+*  handle event from CHlpModel
+*  @param aEvent from CHlpModel
+*/ 		
+		void HandleModelEventL(TInt aEvent);
+/** 
+*  @function LoadContextTopicL
+*  @since S60 3.2
+*  Get the Richtext for context sensitive help
+*  @param aContext Help context class object
+*/ 		
+		void LoadContextTopicL(TCoeHelpContext &aContext);
+	
+	private:
+		CHlpModel* iModel;
+		CHlpTopic* iTopic;
+		CCSXHHelpDataBase* iDataBase;
+		CHlpList* iHlpList; 
+		TInt iStatus;
+		//Store all the created Legacy TOC1 objects for future reference.
+		RPointerArray<CCSXHLegacyTOC1> iLegacyTOC1List;
+	};
+
+#endif 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHLegacyTOC1.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTOC1 class declaration
+*
+*/
+
+
+#ifndef INC_CSXHLEGACYTOC1_H_HEADER_INCLUDED_BC050894
+#define INC_CSXHLEGACYTOC1_H_HEADER_INCLUDED_BC050894
+
+#include "CSXHGenericTOC1.h"
+
+class CCSXHGenericContentParser;
+class CCSXHHelpDataBase;
+/** 
+* @class CCSXHLegacyTOC1
+* This class has the information of Legacy TOC1 
+*/
+class CCSXHLegacyTOC1 : public CCSXHGenericTOC1
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTOC1 
+*  and return a pointer to the created object
+*  @param aName 	- Name of the TOC1
+*  @return a CCSXHLegacyTOC1 Pointer 
+*/    
+    static CCSXHLegacyTOC1* NewL(const TDesC& aName);
+    
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTOC1 
+*  and return a pointer to the created object using two phase contruction
+*  @param aName 	- Name of the TOC1
+*  @return a CCSXHLegacyTOC1 Pointer 
+*/      
+    static CCSXHLegacyTOC1* NewLC(const TDesC& aName);
+     
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/ 
+    TUid GetViewID() const;
+    
+/** 
+*  @function GetContextTopic
+*  @since S60 3.2
+*  Get toc2 Object 
+*  @return CCSXHHelpContentBase (Leagcytoc2) class Pointer
+*/  
+    CCSXHHelpContentBase* GetContextTopic(const TDesC &aContextName);
+
+    private: 	
+/** 
+*  @function CCSXHLegacyTOC1
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTOC1 
+*/    
+    	CCSXHLegacyTOC1(const TDesC& aName);
+
+/** 
+*  @function InitChildList
+*  @since S60 3.2
+*  Allocates Memory in order to store Objects
+*/    
+    	void InitChildList();
+    
+    };
+
+
+
+#endif /* INC_CSXHLEGACYTOC1_H_HEADER_INCLUDED_BC050894 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHLegacyTOC2.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTOC2 class declaration
+*
+*/
+
+
+#ifndef INC_CSXHLEGACYTOC2_H_HEADER_INCLUDED_BC0535B9
+#define INC_CSXHLEGACYTOC2_H_HEADER_INCLUDED_BC0535B9
+
+#include "CSXHGenericTOC2.h"
+
+class CCSXHGenericTOC1;
+class CCSXHLegacyTOC1;
+/** 
+* @class CCSXHLegacyTOC2
+* This class has the information of Legacy TOC2 Info
+*/
+class CCSXHLegacyTOC2 : public CCSXHGenericTOC2
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTOC2 
+*  and return a pointer to the created object
+*  @param aParent   - TOC1 Object
+*		  aName 	- Name of the TOC2 
+*		  aKey  	- ETrue for KeywordTopic, EFalse otherwise
+*  @return a CCSXHLegacyTOC2 Pointer 
+*/ 
+    static CCSXHLegacyTOC2* NewL(CCSXHGenericTOC1 *aParent,const TDesC&
+    aName,TBool aKey=EFalse);
+
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTOC2 
+*  and return a pointer to the created object using two phase constuction
+*  @param aParent   - TOC1 Object
+*		  aName 	- Name of the TOC2 
+*		  aKey  	- ETrue for KeywordTopic, EFalse otherwise
+*  @return a CCSXHLegacyTOC2 Pointer 
+*/     
+    static CCSXHLegacyTOC2* NewLC(CCSXHGenericTOC1 *aParent,const TDesC& 
+    aName,TBool aKey=EFalse);
+
+/** 
+*  @function GetTopicContentL
+*  @since S60 3.2
+*  Get the topic to be displayed in Richtext format
+*  @return RichText Pointer
+*/    
+    IMPORT_C TAny* GetTopicContentL();
+
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/       	
+    TUid GetViewID() const;
+    
+/** 
+*  @function GetLegacyParent
+*  @since S60 3.2
+*  Get Parent Object
+*  @return TOC1 Object(Parent) for present TOC2 Object
+*/    
+    IMPORT_C  CCSXHLegacyTOC1* GetLegacyParent();
+		
+	private:
+/** 
+*  @function CCSXHLegacyTOC2
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTOC2 
+*  @param aRect - TRect Object
+*  @param aParent   - TOC1 Object
+*		  aName 	- Name of the TOC2 
+*		  aKey  	- ETrue for KeywordTopic, EFalse otherwise
+*/	
+		CCSXHLegacyTOC2(CCSXHGenericTOC1 *aParent, const TDesC& aName,TBool aKey);
+		
+		TBool iKeyWordTopic;
+  };
+
+
+
+#endif /* INC_CSXHLEGACYTOC2_H_HEADER_INCLUDED_BC0535B9 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHMainTopics.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHMainTopics class declaration
+*
+*/
+
+
+#ifndef INC_CSXHMAINTOPICS_H_HEADER_INCLUDED_BC0568C5
+#define INC_CSXHMAINTOPICS_H_HEADER_INCLUDED_BC0568C5
+
+#include "CSXHGenericTOC1.h"
+#include <apadef.h>
+
+class CCSXHHelpDataBase;
+/** 
+* @class CCSXHMainTopics
+* This class has info of TOC1 Objects
+*/
+class CCSXHMainTopics : public CCSXHGenericTOC1
+    {
+    public:
+/** 
+*  @function CCSXHMainTopics
+*  @since S60 3.2
+*  Construct a CCSXHMainTopics 
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHMainTopics pointer
+*/
+    static CCSXHMainTopics* NewL(const TUid&, const TApaAppCaption& aAppCaption);
+/** 
+*  @function CCSXHMainTopics
+*  @since S60 3.2
+*  Construct a CCSXHMainTopics using two phase construction
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHMainTopics pointer
+*/  
+    static CCSXHMainTopics* NewLC(const TUid&,const TApaAppCaption& aAppCaption);
+    
+/** 
+ * @function ~CCSXHMainTopics
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */    
+    ~CCSXHMainTopics();
+/** 
+*  @function GetViewID
+*  @since S60 3.2
+*  Get ViewId to activate the View
+*  @return View Id
+*/    
+    TUid GetViewID() const;
+/** 
+*  @function ResetChildList
+*  @since S60 3.2
+*  Delete Objects from the Array
+*/    
+    void ResetChildList();
+    
+    protected:
+   
+/** 
+*  @function CCSXHMainTopics
+*  @since S60 3.2
+*  Construct a CCSXHMainTopics
+*  @param aUid  - Application Uid
+*         aName - TOC1 Object Name  
+*/    
+    CCSXHMainTopics(const TUid& aUid, const TDesC& aName);
+    	
+    const TUid &iUid;
+    };
+
+#endif /* INC_CSXHMAINTOPICS_H_HEADER_INCLUDED_BC0568C5 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHRuntimeIndexing.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a utility class that provides functionality
+*                for scanning app help folder, generate index XML
+*                at runtime, and also update it if any install/uninstall        
+*
+*/
+
+#ifndef CSXHRUNTIMEINDEXING_H
+#define CSXHRUNTIMEINDEXING_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+
+// CONSTANTS
+// the help content folder doesn't exist
+const TInt KNoDirExist = -3;
+// there is no changes in help content folder (like install/uninstall)
+const TInt KNoChange = -2;
+// there is no index.xml file (due to no help content at previous time)
+const TInt KNoIndexExist = -1;
+
+// FORWARD CLASS DECLARATION
+class CCSXHHtmlTOC1;
+class CCSXHKywdTOC1;
+class CCoeEnv;
+
+/*
+ * runtime indexing handling class
+ * responsible for generating index file, maintaining it.
+ * this class also create CS X Help private folder if not exist
+ * 
+ */
+class CCSXHRuntimeIndexing : public CBase
+    {
+public:
+
+    /*
+     * constructor
+     */
+    CCSXHRuntimeIndexing();
+    /*
+    
+     * destructor
+     */
+    ~CCSXHRuntimeIndexing();
+    
+    /*
+     * Two-phase constructor
+     */
+    static CCSXHRuntimeIndexing* NewL();
+    
+    /*
+     * Generate the master index file content
+     * @param aToc1: TOC1 object which contains main topic information
+     * @param aFeature: Feature information, supported by Feature Mgr
+     */
+    void RuntimeGenerateIndexL( const CCSXHHtmlTOC1& aToc1, const TDesC& aFeature );
+    
+    /*
+     * Check whether master index exist
+     * Since Z based helps must exist
+     * Usage: to determine Help was launched before
+     */
+    TBool IndexFileExists();
+    
+    /*
+     * create temporary index file
+     * this file will be saved to C:\\private\\<help-uid>\\<aDrive>\\<lang-id>\\
+     * @param: aDrive Drive information
+     */
+    void BeginIndexFile( const TChar& aDrive );
+    
+    /*
+     * close the temporary index file, and rename it to index.xml formally
+     * tmp.xml -> index.xml
+     * this function can backup index.xml, once exception happens
+     */
+    void FinishAndCloseIndexFileL();
+    
+    /*
+     * Get help application private path in C drive
+     * @param aName[out] return help app private path in C
+     */
+    void GetPrivatePath( TDes& aName );
+    
+    /*
+     * Get proper locale, and append it to descriptor
+     * for more information about proper locale
+     *   please refer to BaflUtils::GetDowngradePathL
+     * @param aDir[out] append proper locale
+     */
+    void AppendLocale( TDes& aDir );
+    
+    /*
+     * Delete master index file, particular in C: or E: or F: (user disk)
+     * this will only occur when user remove all custom helps, no more helps folder
+     *   in this case, custom index mustn't exist.
+     * @param aDrive the file to be deleted
+     */
+    void DeleteIndexFile( const TChar& aDrive );
+    
+    /*
+     * Check if helps folder changed
+     * changes include: 
+     *        A: install new application
+     *        B: uninstall (if unistall all helps, custom helps folder will also removed)
+     *        C: user changed the language
+     *        D: user restored the cell phone
+     * @param aName[out] return help app private path in C
+     */
+    TInt CheckDirChange( const TChar& aDrive );
+    
+private:
+
+    /*
+     * two-phase constructor, private
+     */
+    void ConstructL();
+    
+private:
+
+    /*
+     * buff current index file name
+     * owned
+     */
+    HBufC* iFullDirName;
+    
+    /*
+     * CoeEnv
+     * not owned
+     */
+    CCoeEnv * iCoeEnv;
+    
+    /*
+     * current index file handle
+     */
+    RFile iFile;
+    
+    /*
+     * actually it's iFullDirName's drive letter
+     * for more convenient, keep it as a class member
+     */
+    TChar iDriveLetter;
+    
+    };
+    
+#endif // CSXHRUNTIMEINDEXING_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHViewIDs.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This file contains ViewIds
+*
+*/
+
+
+#ifndef INC_CSXHVIEWIDS_H_HEADER_INCLUDED_BC05356D
+#define INC_CSXHVIEWIDS_H_HEADER_INCLUDED_BC05356D
+
+#include <e32std.h>
+
+const TUid KCSXHToc1ViewID = {1};
+const TUid KCSXHToc2ViewID = {2};
+const TUid KCSXHHtmlTopicViewID = {3};
+const TUid KCSXHLegacyTopicViewID = {4};
+const TUid KCSXHKywdToc1ViewID = {5};
+const TUid KCSXHKywdToc2ViewID = {6};
+const TUid KCSXHContextHtmlTopicViewID = {7};
+const TUid KCSXHContextLegacyTopicViewID = {8};
+
+
+#endif /* INC_CSXHVIEWIDS_H_HEADER_INCLUDED_BC05356D */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CSXHXMLParseHandler.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,486 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHXMLParseHandler class declaration
+*
+*/
+
+
+#ifndef __CCSXHXMLPARSEHANDLER_H__
+#define __CCSXHXMLPARSEHANDLER_H__
+
+#include <coecntrl.h> // CCoeControl
+#include <MSenContentHandlerClient.h>
+#include <xml/taginfo.h>
+#include <xml/attribute.h>
+
+class CCSXHGenericTOC2;
+class CCSXHGenericTOC1;
+class CCSXHHtmlTOC1;
+class CCSXHHelpDataBase;
+class CCSXHHelpContentBase;
+class CCSXHHTMLContentParser;
+/** 
+* @class CCSXHXMLParseHandler
+* This class is used retrive the data from XML file
+*/
+class CCSXHXMLParseHandler : public CBase, public MSenContentHandlerClient
+    {
+	public:
+/** 
+*  @function CCSXHXMLParseHandler
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler 
+*  @param aCoeEnv 	- Control Environment 
+*/	
+		CCSXHXMLParseHandler(CCoeEnv * aCoeEnv);
+		
+		virtual ~CCSXHXMLParseHandler();
+/** 
+*  @function StartDocument
+*  @since S60 3.2
+*  Receive notification of the beginning of a document. 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt StartDocument(); 
+/** 
+*  @function EndDocument
+*  @since S60 3.2
+*  Receive notification of the end of a document. 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt EndDocument();
+
+/** 
+*  @function SetDataBasePtr
+*  @since S60 3.2
+*  Sets DataBase Pointer
+*/
+		void  SetDataBasePtr(CCSXHHelpDataBase *aDataBase);		
+/** 
+*  @function GetApplicationName
+*  @since S60 3.2
+*  Get the Application Name from Meta.xml
+*  @return Application Name
+*/
+		TDesC& GetApplicationName();
+		
+		TPtr GetFeatureIds();
+ 		
+ 	protected:
+/** 
+*  @function SetAppNameFlagL
+*  @since S60 3.2
+*  Set the Application Flag Based on local Name, ResourceID
+*  @param alocalName - TagName read from XML file
+*		  ResourceId - Used to Retrive the TagName from resource file   	
+*/		
+ 		TBool SetAppNameFlag(const TDesC8 & alocalName,const TDesC& aAppTag);		
+ 		
+ 	protected:
+		TBuf<KMaxFileName> iApplicationName;
+		HBufC* iFeatureIds;		
+		TBool iIsAppName;
+		CCSXHHelpDataBase* iDataBase;
+		CCoeEnv* iCoeEnv;		
+		
+	};
+
+
+/** 
+* @class CCSXHXMLParseHandler_MetaFile
+* This class is used retrive the data from Meta.xml file
+*/	
+class CCSXHXMLParseHandler_MasterMetaFile : public CCSXHXMLParseHandler
+	{
+	public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_IndexFile 
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHXMLParseHandler_IndexFile pointer
+*/
+		static CCSXHXMLParseHandler_MasterMetaFile* NewL(CCoeEnv * aCoeEnv);
+	protected:
+/** 
+*  @function CCSXHXMLParseHandler_IndexFile
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_IndexFile 
+*  @param aCoeEnv 	- Control Environment 
+*/	
+		CCSXHXMLParseHandler_MasterMetaFile(CCoeEnv * aCoeEnv);		
+	public:	
+/** 
+*  @function StartElement
+*  @since S60 3.2
+*  Receive notification of the beginning of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+		  apAttrs	 -  The attributes attached to the element. 
+		  				If there are no attributes, it shall be 
+		  				an empty array.Namespaces declared in the current 
+		  				element will be located in the array also 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, 
+		const TDesC8 &aName, const RAttributeArray &apAttrs);
+/** 
+*  @function SetHtmlContentParserPtr
+*  @since S60 3.2
+*  Set the pointer of the content parser
+*  @param aParser   -  Pointer to an html content parser
+*/			 
+		void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser);
+		
+	private:
+/** 
+*  @function CreateTOC2ObjectsL
+*  @since S60 3.2
+*  Create TOC2 objects for Html TOC2 
+*  @param aAttributes - The attributes attached to the element. 
+*/	
+		void CreateTOC1ObjectsL(const RAttributeArray & aAttributes);
+	    
+	    CCSXHHTMLContentParser *iParser;
+	    
+	    TInt iDrive;
+	};
+
+/** 
+* @class CCSXHXMLParseHandler_MetaFile
+* This class is used retrive the data from Meta.xml file
+*/	
+class CCSXHXMLParseHandler_MetaFile : public CCSXHXMLParseHandler
+	{
+	public:
+/** 
+*  @function CCSXHXMLParseHandler_MetaFile
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_MetaFile 
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHXMLParseHandler_MetaFile pointer
+*/	
+		static CCSXHXMLParseHandler_MetaFile* NewL(CCoeEnv * aCoeEnv);
+	protected:
+/** 
+*  @function CCSXHXMLParseHandler_MetaFile
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_MetaFile 
+*  @param aCoeEnv 	- Control Environment 
+*/
+		CCSXHXMLParseHandler_MetaFile(CCoeEnv * aCoeEnv);
+	public:	
+/** 
+*  @function StartElement
+*  @since S60 3.2
+*  Receive notification of the beginning of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+		  apAttrs	 -  The attributes attached to the element. 
+		  				If there are no attributes, it shall be 
+		  				an empty array.Namespaces declared in the current 
+		  				element will be located in the array also 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, 
+		const TDesC8 &aName, const RAttributeArray &apAttrs);
+/** 
+*  @function EndElement
+*  @since S60 3.2
+*  Receive notification of the end of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/		
+		TInt EndElement  (  const TDesC8 &aURI,const TDesC8 &aLocalName,const TDesC8 &aName);
+/** 
+*  @function Characters
+*  @since S60 3.2
+*  Receive notification inside an element
+*  @param aBuff   -  The characters.  
+*		  aStart  -  The start position in the character buffer.  
+*		  aLength -  The number of characters to use from the character buffer.  
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/		
+		TInt Characters (const TDesC8 &aBuff, const TInt aStart,
+			 const TInt aLength); 					
+	};
+
+class CCSXHXMLParseHandler_IndexFile : public CCSXHXMLParseHandler
+	{
+	public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_IndexFile 
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHXMLParseHandler_IndexFile pointer
+*/
+		static CCSXHXMLParseHandler_IndexFile* NewL(CCoeEnv * aCoeEnv);
+	protected:
+/** 
+*  @function CCSXHXMLParseHandler_IndexFile
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_IndexFile 
+*  @param aCoeEnv 	- Control Environment 
+*/	
+		CCSXHXMLParseHandler_IndexFile(CCoeEnv * aCoeEnv);		
+	public:	
+/** 
+*  @function StartElement
+*  @since S60 3.2
+*  Receive notification of the beginning of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+		  apAttrs	 -  The attributes attached to the element. 
+		  				If there are no attributes, it shall be 
+		  				an empty array.Namespaces declared in the current 
+		  				element will be located in the array also 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, 
+		const TDesC8 &aName, const RAttributeArray &apAttrs);
+/** 
+*  @function SetArray
+*  @since S60 3.2
+*  Get the pointer & fill the contents from Index.xml
+*  @param aHTMLlist   -  Pointer to an Array
+*/			 
+		void SetArray(RPointerArray<CCSXHHelpContentBase> *aHTMLlist);	
+/** 
+*  @function SetGenericTOC1Object
+*  @since S60 3.2
+*  Set GenericTOC1 Object
+*  @param aParent   -  Generic TOC1 Object
+*/			 
+		void SetGenericTOC1Object(CCSXHGenericTOC1& aParent); 		
+/** 
+*  @function SetPath
+*  @since S60 3.2
+*  Set Html file path
+*  @param aFilePath   -  Set Html file path
+*/		
+		void SetPath(const TDesC&  aFilePath);
+		
+		void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser);		
+	private:
+/** 
+*  @function CreateTOC2ObjectsL
+*  @since S60 3.2
+*  Create TOC2 objects for Html TOC2 
+*  @param aAttributes - The attributes attached to the element. 
+*/	
+		void CreateTOC2ObjectsL(const RAttributeArray & aAttributes);
+		TBuf<KMaxFileName> iCompressString,iHTMLPageName,iFilePath; 					
+		RPointerArray<CCSXHHelpContentBase>* iTOC2Array; 
+		CCSXHGenericTOC1* iParent;	
+		CCSXHHTMLContentParser *iParser;
+	};
+
+	
+class CCSXHXMLParseHandler_Kywd : public CCSXHXMLParseHandler
+	{
+	public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_Kywd 
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHXMLParseHandler_Kywd pointer
+*/
+		static CCSXHXMLParseHandler_Kywd* NewL(CCoeEnv * aCoeEnv);
+	protected:
+/** 
+*  @function CCSXHXMLParseHandler_Kywd
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_Kywd 
+*  @param aCoeEnv 	- Control Environment 
+*/	
+		CCSXHXMLParseHandler_Kywd(CCoeEnv * aCoeEnv);	
+	public:
+/** 
+*  @function StartElement
+*  @since S60 3.2
+*  Receive notification of the beginning of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+		  apAttrs	 -  The attributes attached to the element. 
+		  				If there are no attributes, it shall be 
+		  				an empty array.Namespaces declared in the current 
+		  				element will be located in the array also 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, 
+		const TDesC8 &aName, const RAttributeArray &apAttrs);
+/** 
+*  @function EndElement
+*  @since S60 3.2
+*  Receive notification of the end of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/		
+		TInt EndElement  (  const TDesC8 &aURI,const TDesC8 &aLocalName,const TDesC8 &aName);
+/** 
+*  @function Characters
+*  @since S60 3.2
+*  Receive notification inside an element
+*  @param aBuff   -  The characters.  
+*		  aStart  -  The start position in the character buffer.  
+*		  aLength -  The number of characters to use from the character buffer.  
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/		
+		TInt Characters (const TDesC8 &aBuff, const TInt aStart,
+			 const TInt aLength); 
+
+/** 
+*  @function SetTOC1Title
+*  @since S60 3.2
+*  Set TOC1 Name 
+*  @param aName   -  TOC1 Name  
+*/
+ 		void SetTOC1Title(const TDesC& aName);
+/** 
+*  @function SetCurrentHtmlToc1
+*  @since S60 3.2
+*  Set HtmlTOC1 Object
+*  @param aCurrentHtmlToc1   -  Pointyer to HtmlTOC1 Object  
+*/
+		void SetCurrentHtmlToc1(CCSXHHtmlTOC1 *aCurrentHtmlToc1);
+/** 
+*  @function SetIsTOC2
+*  @since S60 3.2
+*  Set the flag if parsing in order to get TOC2 Objects, EFalse otherwise
+*  @param aCurrentHtmlToc1   -  Pointer to HtmlTOC1 Object  
+*/
+		void SetIsTOC2(TBool aFlag);		
+
+/** 
+*  @function SetPath
+*  @since S60 3.2
+*  Set Html file path
+*  @param aFilePath   -  Set Html file path
+*/		
+		void SetPath(const TDesC&  aFilePath);
+		
+		void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser);
+		
+	private:
+/** 
+*  @function CreateTOC2ObjectsforKeywordSearch
+*  @since S60 3.2
+*  Get the Info In order to Create TOC2 objects for Html Keyword 
+*  @param aName  - TagName
+*		  aAttrs - The attributes attached to the element. 
+*/
+		void CreateTOC2ObjectsforKeywordSearch(const TDesC8 &aName,const RAttributeArray& aAttrs); 		
+/** 
+*  @function CreateTOC2ObjectsforKeywordSearchL
+*  @since S60 3.2
+*  Creates TOC2 objects for Html Keyword And Insert into Database  
+*/
+		void CreateAndInsertKywdL();		
+ 		TBuf<KMaxFileName> iHTMLPageName,iKeywordSearchTOC2TitleName; 					
+ 		TBuf<KMaxFileName> iTOC1Name,iFilePath;
+ 		CCSXHHtmlTOC1 *iCurrentHtmlToc1;
+ 		TBool iIsTargetName,iIsTOC2View;
+ 		CCSXHHTMLContentParser* iParser;
+	};	
+
+class CCSXHXMLParseHandler_MasterKywd : public CCSXHXMLParseHandler
+	{
+	public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_Kywd 
+*  @param aCoeEnv 	- Control Environment 
+*  @retrun a CCSXHXMLParseHandler_Kywd pointer
+*/
+		static CCSXHXMLParseHandler_MasterKywd* NewL(CCoeEnv * aCoeEnv);
+	protected:
+/** 
+*  @function CCSXHXMLParseHandler_Kywd
+*  @since S60 3.2
+*  Construct a CCSXHXMLParseHandler_Kywd 
+*  @param aCoeEnv 	- Control Environment 
+*/	
+		CCSXHXMLParseHandler_MasterKywd(CCoeEnv * aCoeEnv);	
+		
+	public:
+/** 
+*  @function StartElement
+*  @since S60 3.2
+*  Receive notification of the beginning of an element
+*  @param aURI		 -  The Namespace URI, or the empty string 
+						if the element has no Namespace URI or
+						if Namespace processing is not being performed.  
+		  aLocalName -  The local name (without prefix)  
+		  aName		 -  The qualified name  
+		  apAttrs	 -  The attributes attached to the element. 
+		  				If there are no attributes, it shall be 
+		  				an empty array.Namespaces declared in the current 
+		  				element will be located in the array also 
+*  @return KErrNone or some of the system-wide Symbian error codes 
+*/	
+		TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, 
+		const TDesC8 &aName, const RAttributeArray &apAttrs);
+/** 
+*  @function CreateTOC1ObjectsL
+*  @since S60 3.2
+*  Create TOC1 objects for Keywords
+*  @param aAttributes - The attributes attached to the element. 
+*/	
+		void CreateTOC1ObjectsL(const RAttributeArray&  aAttributes);
+
+/** 
+*  @function SetCurrentHtmlToc1
+*  @since S60 3.2
+*  Set HtmlTOC1 Object
+*  @param aCurrentHtmlToc1   -  Pointyer to HtmlTOC1 Object  
+*/
+		void SetCurrentHtmlToc1(CCSXHHtmlTOC1 *aCurrentHtmlToc1);
+		
+/** 
+*  @function SetHtmlContentParserPtr
+*  @since S60 3.2
+*  Set the pointer of the content parser
+*  @param aParser   -  Pointer to an html content parser
+*/			 
+		void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser);		
+		
+
+	private:
+ 		CCSXHHtmlTOC1 *iCurrentHtmlToc1; 		
+ 		CCSXHHTMLContentParser *iParser;
+	};        
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/CsHelpCmdLineParser.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a utility class that provides functionality
+*				 for parsing command line arguments passed into the
+*				 Cshelp application when launched by another application.		
+*
+*/
+
+
+#ifndef CSHELPCMDLINEPARSER_H
+#define CSHELPCMDLINEPARSER_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class TCoeHelpContext;
+
+// CLASS DECLARATION
+/**
+*  CCsHlpCmdLineParser class.
+*  to convert a message - that is passed from other app - to contexts
+*  @lib euser.lib
+*  @since 3.2
+*/
+class CCsHlpCmdLineParser : public CBase
+    {
+    public:
+
+/** 
+*  @function CCsHlpCmdLineParser
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*/        CCsHlpCmdLineParser();
+
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  Perform the second phase construction of a CCsHlpCmdLineParser object
+*/        void ConstructL(const TDesC8& aCmdLine);
+    
+/** 
+*  @function ~CCsHlpCmdLineParser
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/
+        ~CCsHlpCmdLineParser();
+
+    public:
+/** 
+*  Get contexts array
+*  @function ContextListL
+*  @since S60 3.2
+*  @return help context array
+*/        
+        CArrayFix<TCoeHelpContext>* ContextListL();
+
+    private:
+/** 
+*  Get the help Context object
+*  @function GetContext
+*  @since S60 3.2
+*  @param aContext - Help context object
+*/         
+        void GetContext(TCoeHelpContext& aContext);
+    
+    private:
+        // Parsed data to help context array.
+        CBufFlat* iCmdLine;
+
+        // Position of iCmdLine
+        TInt iPos;
+    };
+
+#endif // CSHELPCMDLINEPARSER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/inc/csxhconstants.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This file Contains Constants 
+*
+*/
+
+
+_LIT(KEmptyString,"");
+_LIT(KFwdSlash,"\\"); 
+_LIT(KBackSlash,"/"); 
+_LIT(KTabSpace,"\t");
+_LIT(KHexPrefix,"0x");
+_LIT(KZero,"0");
+_LIT(KZipFileExtn,".zip");
+_LIT(KHtmlFileExtn,".html"); 
+_LIT(KContentZipFile,"contents.zip");
+_LIT(KCsstext_First,"<style>\n");
+// temp string. if xml file and help tool chain is ready.it can be deleted.
+_LIT(KDefaultFeatureIdStringTemp,"-1");
+_LIT(KDefaultFeatureIdString,"true-1");
+_LIT(KTrue_StringtoAppend,"true_");
+_LIT(KFalse_StringtoAppend,"false_");
+_LIT(KFalseString,"false");
+_LIT(KTrueString,"true");
+
+_LIT(KtextFormat_true_a,"#true_%d_A,");
+_LIT(KtextFormat_false,"#false_%d_A,#false_%d_B,#false_%d_L,");
+
+_LIT(KtextFormat_true_b,"#true_%d_B,");
+_LIT(KtextFormat_false_b,"#false_%d_B,");
+
+_LIT(KtextFormat_true_l,"#true_%d_L,");
+_LIT(KtextFormat_false_l,"#false_%d_L,");
+
+_LIT(KtextFormat_lang_a,"#LANGUAGE_%d_A,");
+_LIT(KtextFormat_lang_b,"#LANGUAGE_%d_B,");
+_LIT(KtextFormat_lang_l,"#LANGUAGE_%d_L,");
+_LIT(KtextFormat_lang_0a,"#LANGUAGE_0%d_A,");
+_LIT(KtextFormat_lang_0b,"#LANGUAGE_0%d_B,");
+_LIT(KtextFormat_lang_0l,"#LANGUAGE_0%d_L,");
+
+_LIT(KDefaultFeatureId,"#true-1");
+_LIT(KComma,",");
+_LIT(KCsstext_displayp_li,"{display:list-item;}\n");
+_LIT(KCsstext_displayp_p,"{display:block;}\n");
+_LIT(KCsstext_displayp_a,"{display:inline;}\n");
+_LIT(KCsstext_displayp_n,"{display:none;}\n");
+_LIT(KCsstext_Last,"</style>\n");
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+_LIT(KTutorialFileExtn,".tut");
+#endif // FF_HELP_TUTORIAL_MERGE
+#ifndef __SERIES60_30__
+_LIT(KFileUrlPrefix,"file:///");
+const TInt KFileUrlPrefixLength = 8;
+#else
+_LIT(KFileUrlPrefix,"file://");
+const TInt KFileUrlPrefixLength = 7;
+#endif
+
+const TInt KHexPrefixLength = 2;
+
+//xhtml folder name
+//#define	qtn_app_xhtml_folder_text ":\\resource\\xhtml\\"
+_LIT(KXhtmlFolder,":\\resource\\xhtml\\"); 
+
+//masterkeywords.xml file name
+_LIT(KMasterKywdFile,"keywords.xml"); 
+
+//mastermeta.xml file name
+_LIT(KMasterMetaFile,"index.xml"); 
+
+//meta.xml file name
+//#define	qtn_app_meta_file_text "meta.xml"
+_LIT(KMetaFile,"meta.xml"); 
+
+//index.xml file name
+//#define	qtn_app_index_file_text	"index.xml"
+_LIT(KIndexFile,"index.xml"); 
+
+//Application name tag in meta.xml
+//#define	qtn_app_application_name_tag_text "title"
+_LIT(KAppNameTag,"title"); 
+
+// toc1 drive information in master index.xml
+//
+_LIT( KDriveInfo, "drive");
+
+// toc1 tag in master index.xml
+// 
+_LIT( KAppFeatureIDTag,"FeatureID" );
+
+//toc2title tag in index.xml
+//#define	qtn_app_toc2title_name_tag_text	"navtitle"
+_LIT(KTOC2NameTag,"navtitle"); 
+
+//html page tag in index.xml
+//#define	qtn_app_htmlpage_name_tag_text "href"
+_LIT(KHtmlPageTag,"href"); 
+
+//#define	qtn_app_compress_name_tag_text "compressed"
+_LIT(KCompressedTag,"compressed"); 
+
+//#define	qtn_app_compress_name_tag_value_text "true"
+_LIT(KCompressedTagText,"true"); 
+
+//#define qtn_app_searchview_toc1title_tag_text "text"
+_LIT(KSearchViewTOC1Tag,"text"); 
+//#define qtn_app_searchview_toc2title_tag_text "target"
+_LIT(KSearchViewTOC2Tag,"target"); 
+//#define qtn_app_kywd_file_text "keywords.xml"
+_LIT(KKeywordsFile,"keywords.xml"); 
+
+_LIT(KMasterSearchTag,"keyword"); 
+
+_LIT(KMasterCollectionTag,"collection"); 
+
+_LIT(KMasterCollection_idTag,"id"); 
+
+// Begin runtime indexing schema
+
+const TInt KMaxIndexEntryExclude = 200;
+
+const TInt KMaxUidLength = 10;
+
+// sis install path
+//
+//_LIT( KInstallPath, "?:\\data\\");
+_LIT( KInstallPath, ":\\resource\\xhtml\\");
+
+// initial file's name
+//
+_LIT( KInitFileName, "helpinit.txt" );
+
+// Index.xml version and encoding information
+//
+_LIT8( KIndexXMLVesion, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" );
+
+// Collection ends
+//
+_LIT8( KIndexCollectEnd, "</collections>" );
+
+// Begin of collection entry
+//
+_LIT8( KIndexXMLEntryBegin, "  <collection ");
+
+// End of collection entry
+//
+_LIT8( KIndexXMLEntryEnd, "\"></collection>\r\n");
+
+// Prefix of quotation mark
+//
+_LIT8( KIndexQuoteBegin, "=\"");
+
+// appendix of quotation mark
+//
+_LIT8( KIndexQuoteEnd, "\" ");
+
+
+_LIT( KMasterMetaTmpFile,"tmp.xml" ); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/rss/HelpEngine.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+*/
+
+NAME HELL
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.rh>
+
+NAME HE
+// ---------------------------------------------------------
+//   
+//    Define the resource file signature 
+//    This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+// ---------------------------------------------------------
+//   
+//    Define default menu and CBA key.
+//
+// ---------------------------------------------------------
+//
+
+//								
+///    Folder Name Texts:		
+//	   Their content is at the loc-file	
+
+STRUCT STRING
+    {
+    LTEXT text;
+    }	
+
+RESOURCE TBUF r_type_xhtml_folder_name 
+    {
+    buf = qtn_app_xhtml_folder_text;
+    }
+    
+//								
+///    Meta FileName Texts:		
+//	   Their content is at the loc-file		
+
+RESOURCE TBUF r_type_meta_file_name 
+    {
+    buf = qtn_app_meta_file_text;
+    }
+    
+//								
+///    Index FileName Texts:		
+//	   Their content is at the loc-file		
+
+RESOURCE TBUF r_type_index_file_name 
+    {
+    buf = qtn_app_index_file_text;
+    }
+
+//								
+///    Keywordsearch FileName Texts:		
+//	   Their content is at the loc-file		
+RESOURCE TBUF r_type_kywd_file_name 
+    {
+    buf = qtn_app_kywd_file_text;
+    }   
+
+//								
+///    Forward slash:		
+//	   Their content is at the loc-file		
+RESOURCE TBUF r_type_forward_slash
+    {
+    buf = qtn_app_forward_slash_text;
+    }
+    
+//								
+///    ApplicationName Tag Texts:		
+//	   Their content is at the loc-file		
+
+RESOURCE TBUF r_type_application_tag_name 
+    {
+    buf = qtn_app_application_name_tag_text;
+    }
+
+//								
+///    Index FileName Texts:		
+//	   Their content is at the loc-file		
+
+RESOURCE TBUF r_type_toc2title_tag_name 
+    {
+    buf = qtn_app_toc2title_name_tag_text;
+    }
+
+//								
+///    Index FileName Texts:		
+//	   Their content is at the loc-file		
+
+RESOURCE TBUF r_type_htmlpage_tag_name 
+    {
+    buf = qtn_app_htmlpage_name_tag_text;
+    }
+    
+//								
+///    Index FileName Texts:		
+//	   Their content is at the loc-file		
+
+RESOURCE TBUF r_type_compress_tag_name 
+    {
+    buf = qtn_app_compress_name_tag_text;
+    }
+    
+//								
+///    Index FileName Texts:		
+//	   Their content is at the loc-file		
+RESOURCE TBUF r_type_compress_tag_value_name 
+    {
+    buf = qtn_app_compress_name_tag_value_text;
+    }
+    
+//								
+///    keywordsearch FileName Texts:		
+//	   Their content is at the loc-file		
+RESOURCE TBUF r_type_searchview_toc1title_tag_name 
+    {
+    buf = qtn_app_searchview_toc1title_tag_text;
+    }
+    
+//								
+///    keywordsearch FileName Texts:		
+//	   Their content is at the loc-file		
+RESOURCE TBUF r_type_searchview_toc2title_tag_name 
+    {
+    buf = qtn_app_searchview_toc2title_tag_text;
+    }
+    
+RESOURCE TBUF r_type_title_help
+    {
+    buf = qtn_help_title_hel;
+    }
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHContextTopic.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHContextTopic class definition
+*
+*/
+
+#include "CSXHContextTopic.h"
+#include "CSXHViewIDs.h"
+#include "csxhconstants.h"
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHContextTopic* CCSXHContextTopic::NewL(CCSXHHelpContentBase* aToc2)
+    {
+    CCSXHContextTopic* self = new(ELeave) CCSXHContextTopic(aToc2);
+    return self;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHContextTopic::CCSXHContextTopic(CCSXHHelpContentBase* aToc2):
+CCSXHHelpContentBase(KEmptyString),iToc2(aToc2)
+    {//No Implementation required
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHContextTopic::~CCSXHContextTopic()
+    {
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TUid CCSXHContextTopic::GetViewID() const
+    {
+    return iToc2->GetViewID() == KCSXHHtmlTopicViewID ? 
+                KCSXHContextHtmlTopicViewID : KCSXHContextLegacyTopicViewID;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+EXPORT_C CCSXHHelpContentBase* CCSXHContextTopic::GetTopic()
+    {
+    return iToc2;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHGenericTOC1.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericTOC1 class definition
+*
+*/
+
+#include "CSXHGenericTOC1.h"
+#include "csxhconstants.h"
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHGenericTOC1::CCSXHGenericTOC1(const TDesC& aName):
+                    CCSXHHelpContentBase(aName),iChildList(NULL)
+    {//No Implementation required
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHGenericTOC1::~CCSXHGenericTOC1()
+    {
+    ResetChildList();
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHGenericTOC1::ResetChildList()
+    {
+    if(iChildList == NULL)
+        return;
+    TInt count =    iChildList->Count();
+    CCSXHHelpContentBase* toc2;
+    for(TInt i=0;i<count;++i )
+        {
+        toc2 = (*iChildList)[i];
+        delete toc2;
+        }
+    iChildList->Reset();
+    delete iChildList;
+    iChildList = NULL;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+void CCSXHGenericTOC1::ConstructChildListL()
+    {
+    iChildList = new(ELeave) RPointerArray<CCSXHHelpContentBase>();
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C CCSXHHelpContentBase* CCSXHGenericTOC1::GetChildL(const TDesC& aName)
+    {
+    if(iChildList == NULL)
+        return NULL;
+    
+    TInt count = iChildList->Count();
+    CCSXHHelpContentBase* child = NULL;
+    for(TInt i=0;i<count;++i )
+        {
+        child = (*iChildList)[i];
+        if(aName.Compare(child->GetName())==0)
+            return child;
+        }
+    return NULL;            
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C void CCSXHGenericTOC1::FillChildDataL(CDesCArray* aArray)
+    {
+    //Using Template Pattern. Both the functions below are virtual
+    InitChildList();
+    CopyChildListL(aArray);     
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+TBool CCSXHGenericTOC1::InsertChild(CCSXHHelpContentBase* aChild,
+TBool aDeleteObject)
+    {
+    ConstructChildList();
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);  
+    if (KErrNone != iChildList->InsertInOrder(aChild,anOrder))
+        {
+        if(aDeleteObject)
+        	delete aChild;
+        
+        return EFalse;
+        }
+    return ETrue;           
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHGenericTOC1::CopyChildListL(CDesCArray* aArray)
+    {
+    TInt count =    iChildList->Count();
+    CCSXHHelpContentBase* child;
+    for(TInt i=0;i<count;++i )
+        {
+        child = (*iChildList)[i];
+        TBuf<KMaxFileName> toc2Entry(KTabSpace);
+        toc2Entry.Append(child->GetName());
+        aArray->AppendL(toc2Entry);
+        }       
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHGenericTOC1::InitChildList()
+    {
+    ConstructChildList();
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TBool CCSXHGenericTOC1::ConstructChildList()
+    {
+    if(iChildList != NULL)
+        return ETrue;
+        
+    TRAPD(err,ConstructChildListL());
+    if(err == KErrNone)
+        return ETrue;
+    else
+        {
+        iChildList = NULL;
+        return EFalse;
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHGenericTOC2.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericTOC2 class definition
+*
+*/
+
+#include "CSXHGenericTOC2.h"
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHGenericTOC2::CCSXHGenericTOC2(CCSXHGenericTOC1* aParent, const TDesC& aName)
+    :CCSXHHelpContentBase(aName),iParent(aParent)
+    {//No Implementation required
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C CCSXHGenericTOC1* CCSXHGenericTOC2::GetParent() 
+    {
+    return iParent;
+    }
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHHTMLContentParser.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,1210 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHTMLContentParser class definition
+*
+*/
+
+#include "CSXHHTMLContentParser.h"
+#include "CSXHXMLParseHandler.h"
+#include "CSXHHtmlTOC1.h"
+#include "CSXHKywdTOC1.h"
+#include "CSXHHtmlTOC2.h"
+#include "CSXHHelpDataBase.h"
+#include "csxhconstants.h"
+#include "CSXHRuntimeIndexing.h"
+
+#include <eikenv.h> 
+#include <utf.h>
+#include <data_caging_path_literals.hrh>
+#include <zipfile.h>
+#include <bautils.h>
+#include <SenXmlReader.h> 
+#include <f32file.h>
+#include <pathinfo.h> 
+
+//Input Language variation changes
+#include <PtiEngine.h>
+
+const TInt KOffset = 2;
+        
+CCSXHHTMLContentParser* CCSXHHTMLContentParser::NewL(CCoeEnv* aCoeEnv)
+    {
+    CCSXHHTMLContentParser* self = CCSXHHTMLContentParser::NewLC(aCoeEnv);
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+CCSXHHTMLContentParser* CCSXHHTMLContentParser::NewLC(CCoeEnv* aCoeEnv)
+    {
+    CCSXHHTMLContentParser* self = new (ELeave) CCSXHHTMLContentParser(aCoeEnv);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+    
+void CCSXHHTMLContentParser::ConstructL()
+    {
+    //RUNTIME
+    GetSupportedFeatureListL();
+    }
+    
+CCSXHHTMLContentParser::CCSXHHTMLContentParser(CCoeEnv* aCoeEnv) : iCoeEnv(aCoeEnv)
+    {
+    }
+    
+CCSXHHTMLContentParser::~CCSXHHTMLContentParser()
+    {
+    delete iXmlReader;
+    
+    //No need to delete the entries here, it will be done by the database
+    iHtmlTOC1List.Close();
+    
+    //Delete all contents from the array.
+    TInt count =    iDuplicateHelpTopicList.Count();
+    CCSXHHtmlTOC1* toc1;
+    for(TInt i=0;i<count;++i )
+        {
+        toc1 = iDuplicateHelpTopicList[i];
+        delete toc1;
+        }
+    iDuplicateHelpTopicList.Reset();    
+	iDuplicateHelpTopicList.Close();
+	
+    // Closes the array and frees all memory allocated to the array.
+   // iSupportedFeatures.Close();
+    
+    delete iSupportedInputLanguages;
+    delete iFeatureManager_FeatureIds;
+    delete iIndexing;
+    }
+    
+void CCSXHHTMLContentParser::GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase)
+    {       
+    RFs& FileSession = iCoeEnv->FsSession();
+
+    TDriveList DirList; 
+    if(FileSession.DriveList(DirList) != KErrNone)
+        return; 
+    CCSXHXMLParseHandler_MetaFile* XMLParser = CCSXHXMLParseHandler_MetaFile::NewL(iCoeEnv); 
+    CleanupStack::PushL(XMLParser);   
+    InitializeReaderL(XMLParser);
+    
+      
+    TBuf<KMaxFileName>* rootDir = new(ELeave) TBuf<KMaxFileName>;
+    CleanupStack::PushL(rootDir);//5
+
+    // begin runtime index XML generating
+    //   
+    iIndexing = CCSXHRuntimeIndexing::NewL();
+    TInt driveListSize = DirList.Length();
+    TBool dirExists = iIndexing->IndexFileExists();
+    CDirScan* scanner=CDirScan::NewLC(FileSession);
+#ifdef _DEBUG
+    RDebug::Print(_L("runtime indexing object successfully build"));
+#endif
+    for(TInt dir(0); dir < driveListSize; dir++)
+        {
+        TInt error;
+        TDriveInfo info;
+        TChar driveLetter = '?';
+        error = FileSession.Drive(info, dir);
+            
+        if  ( ( error == KErrNone ) && 
+                (DirList[dir] && info.iType != EMediaNotPresent))
+            {
+            RFs::DriveToChar( dir, driveLetter );
+            TInt dirChanged = iIndexing->CheckDirChange( driveLetter );
+            rootDir->Delete( 0, rootDir->Length() );//Clear the previous contents                  
+            rootDir->Append( driveLetter );
+
+            if  ( dirExists 
+                    && ( dirChanged == KNoChange
+                        || dirChanged == KNoDirExist) )
+                {
+                // xml exist and no install/uninstall happened
+                // while Z needs special process once its index file exists
+#ifdef _DEBUG
+                RDebug::Print(_L("Used to launch, scan drive number:  %d"), dir);
+#endif
+                if ( dirChanged == KNoChange )
+                    {
+                    // no modify helps, so just parse index.xml
+                    //
+                    HandleMasterMetaFileL( aDataBase, driveLetter, XMLParser );
+                    }
+                else // KNoDirExist
+                    {
+                    // help content folder removed due to some reason (uninstall/crash?)
+                    // delete index file in case it exist
+#ifdef _DEBUG
+                    RDebug::Print( _L("no resource folder, delete index.xml if exists") );
+#endif
+                    iIndexing->DeleteIndexFile( driveLetter );
+                    }
+                }
+            else
+                {
+                // xml not exist or install/uninstall not happend
+                //
+                if( GetHTMLContentPathForDriveL( rootDir,iCoeEnv ) )
+                    {
+#ifdef _DEBUG
+                    RDebug::Print( _L("No index, scan folder for parsing, drive letter: %d"), dir );
+#endif
+                    iIndexing->BeginIndexFile( driveLetter );
+                    scanner->SetScanDataL(*rootDir
+                                    ,KEntryAttDir|KEntryAttMatchExclusive,
+                                    ESortByName|EAscending, CDirScan::EScanDownTree);
+                    ScanAndParseXMLfileToCreateTOC1ObjectL(FileSession,scanner,aDataBase,
+                                                        dir,XMLParser);  
+                                                        
+                    iIndexing->FinishAndCloseIndexFileL();
+                    
+                    }
+                
+                }
+
+            }
+        }
+    CleanupStack::PopAndDestroy( scanner );
+    CleanupStack::PopAndDestroy(rootDir);
+    CleanupStack::PopAndDestroy(XMLParser);
+    
+    ClearReader();
+    }
+
+TBool CCSXHHTMLContentParser::GetHTMLContentPathForDriveL(TBuf<KMaxFileName>* aContentDrive,CCoeEnv *aCoeEnv)
+	{
+    // get the path to language level
+    // Input: aContentDrive == C or E or Z
+    // Output: aContentDrive == C:\\resource\\xhtml\\01\\ (or Z:\\resource\\xhtml\\31\\)
+    //
+	aContentDrive->Append(KXhtmlFolder);
+	TInt len = aContentDrive->Length();
+	RFs& FileSession = aCoeEnv->FsSession();
+	RArray<TLanguage> langs;
+   	BaflUtils::GetDowngradePathL(FileSession,User::Language(),langs);
+    		
+    for(int i = 0; i < langs.Count(); ++i)
+    	{
+    	TLanguage lang = langs[i];
+    	//TSW Error: UKAL-6YL72P
+    	//Tool chain uses full symbian language id in 
+    	//the directory name, which is not detected by help application.
+    	//
+    	if(lang < 10)
+            {
+            aContentDrive->AppendNumFixedWidth(lang,EDecimal,2);
+            }
+        else
+            {
+            aContentDrive->AppendNum(lang);
+            }
+    	
+    	aContentDrive->Append(KFwdSlash);
+    	if(BaflUtils::PathExists(FileSession,*aContentDrive))
+    		{
+    		langs.Reset();
+    		return ETrue;
+    		}
+    	else
+    		{
+    		aContentDrive->Delete((len-1),aContentDrive->Length()-len);
+    		}	
+    	}
+    	langs.Reset();
+    	return EFalse;
+	}
+    
+TBool CCSXHHTMLContentParser::HandleMasterMetaFileL(CCSXHHelpDataBase* aDataBase, 
+                        TChar& aDrive, MSenContentHandlerClient *aPrevHandler)											   
+    {
+    RFs& FileSession = iCoeEnv->FsSession();
+    TBuf<KMaxFileName> masterFile;
+
+    iIndexing->GetPrivatePath( masterFile );
+    masterFile.Append( aDrive );
+    masterFile.Append( KFwdSlash );
+    iIndexing->AppendLocale( masterFile );
+    masterFile.Append( KMasterMetaFile );
+    if(BaflUtils::FileExists( FileSession,masterFile ) )
+        {
+#ifdef _DEBUG
+        RDebug::Print(_L("index exist begin to parse!    %c"), aDrive );
+#endif
+        CCSXHXMLParseHandler_MasterMetaFile* masterMetaHandler = 
+        CCSXHXMLParseHandler_MasterMetaFile::NewL(iCoeEnv);
+        masterMetaHandler->SetDataBasePtr(aDataBase);
+        masterMetaHandler->SetHtmlContentParserPtr(this);
+        CleanupStack::PushL(masterMetaHandler);      
+    
+        iXmlReader->SetContentHandler(*masterMetaHandler);
+        // ParseL is not in async
+        iXmlReader->ParseL(FileSession,masterFile);
+        iXmlReader->SetContentHandler(*aPrevHandler);
+        CleanupStack::PopAndDestroy(masterMetaHandler);
+        }
+
+    return ETrue;
+    }
+    
+void CCSXHHTMLContentParser::GenerateTOC2ListL(CCSXHGenericTOC1& 
+aGenericTOC1Object, RPointerArray<CCSXHHelpContentBase>* GenericTOC2List)
+    {
+    CCSXHXMLParseHandler_IndexFile* XMLParser = CCSXHXMLParseHandler_IndexFile::NewL(iCoeEnv);
+    CleanupStack::PushL(XMLParser);      
+    InitializeReaderL(XMLParser);
+        
+    XMLParser->SetArray(GenericTOC2List);
+    XMLParser->SetGenericTOC1Object(aGenericTOC1Object);
+    XMLParser->SetHtmlContentParserPtr(this);
+    RFs& FileSession = iCoeEnv->FsSession();
+    CCSXHHtmlTOC1* toc1 = STATIC_CAST(CCSXHHtmlTOC1*,&aGenericTOC1Object);
+    TBuf<KMaxFileName> lookupindexfile;
+    toc1->GetHelpFileL(lookupindexfile);
+    XMLParser->SetPath(lookupindexfile);
+    lookupindexfile.Append(KIndexFile);              
+ 
+    if(BaflUtils::FileExists(FileSession,lookupindexfile))
+        iXmlReader->ParseL (FileSession,lookupindexfile);
+	
+	TBuf<KMaxFileName>HelpContentName(toc1->GetName());
+	int toc1Count = iDuplicateHelpTopicList.Count();
+	
+ 	for(int i=0;i < toc1Count;i++)
+	    {    
+	    CCSXHHtmlTOC1* temptoc1 = iDuplicateHelpTopicList[i];
+	        
+	    if(temptoc1->GetName().CompareF(HelpContentName) == 0)
+		    {    
+		    TBuf<KMaxFileName> lookup;
+		    temptoc1->GetHelpFileL(lookup);
+		    XMLParser->SetPath(lookup);
+		    lookup.Append(KIndexFile);              
+		 
+		    if(BaflUtils::FileExists(FileSession,lookup))
+		        iXmlReader->ParseL (FileSession,lookup);
+		    }
+	    }
+    
+    CleanupStack::PopAndDestroy(XMLParser);
+    ClearReader();
+    }       
+        
+TAny* CCSXHHTMLContentParser::GetTopicContentL(CCSXHGenericTOC2* aTopic)
+    {
+    CCSXHHtmlTOC2* topic = STATIC_CAST(CCSXHHtmlTOC2*,aTopic);
+    TBuf<KMaxFileName> htmlFile;
+	topic->GetHtmlFileName(htmlFile);
+    return GetContentsFromFileL(htmlFile,iCoeEnv,iFeatureControl);
+    }
+    
+
+void CCSXHHTMLContentParser::ScanAndParseXMLfileToCreateTOC1ObjectL(RFs& FileSession,
+                                                                 CDirScan* scanner,
+                                                                 CCSXHHelpDataBase* aDataBase,
+                                                                 const TInt& aDrive,
+                                                                 CCSXHXMLParseHandler* XMLParser
+                                                                  )
+    {
+     CDir* entryList = NULL;
+    scanner->NextL(entryList);
+    if(!entryList)
+        return;
+ 
+    CleanupStack::PushL(entryList);
+    TInt entryCount = entryList->Count();           
+     
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>); 
+    
+    TBuf<KMaxFileName> lookup;
+    
+
+    while(entryCount--)
+        {
+        TEntry entry=(*entryList)[entryCount];
+        
+        //Clear the previous values
+        lookup.Delete(0,lookup.Length());
+        
+        lookup.Append(scanner->FullPath());
+        lookup.Append(entry.iName); 
+        lookup.Append(KFwdSlash);
+        lookup.Append(KMetaFile);
+        
+        //Check whether a file exists        
+        if(!BaflUtils::FileExists(FileSession,lookup))
+            continue;
+        
+        TRAPD(parserResult,iXmlReader->ParseL (FileSession,lookup ));
+        if(parserResult == KErrNone)
+            {
+			if(CheckFeatureIDL(XMLParser->GetFeatureIds()))
+            	{            
+            	if(!IsAppUIdPresentAlready(entry.iName))
+					{
+		            CCSXHHtmlTOC1* CategoryObj = CCSXHHtmlTOC1::NewL(
+		                                        XMLParser->GetApplicationName(),entry.iName,aDrive);
+		            iIndexing->RuntimeGenerateIndexL( *CategoryObj, XMLParser->GetFeatureIds() );
+		            if(CategoryObj && aDataBase->GetMainTopics()->InsertChild(CategoryObj,EFalse))
+		            	iHtmlTOC1List.Append(CategoryObj);//Keep a local copy*/ 
+					else
+						{
+						if(CategoryObj)  
+		            		iDuplicateHelpTopicList.Append(CategoryObj);	
+						}			            	
+					}
+            	}         
+            }
+        }       
+
+    CleanupStack::PopAndDestroy(entryList);
+    }
+    
+void CCSXHHTMLContentParser::InsertHTMLToc1L(
+            const TDesC &appUidName,const TDesC &appName, 
+            const TInt& aDrive , CCSXHHelpDataBase* aDataBase, const TDesC &FeatureIds)
+    {
+	if(CheckFeatureIDL(FeatureIds))
+	    {
+	    if(!IsAppUIdPresentAlready(appUidName)) 
+		    {    
+			CCSXHHtmlTOC1* CategoryObj = CCSXHHtmlTOC1::NewL(appName,appUidName,aDrive);
+		    if(CategoryObj && aDataBase->GetMainTopics()->InsertChild(CategoryObj,EFalse))
+		    	iHtmlTOC1List.Append(CategoryObj);//Keep a local copy*/ 
+		    else
+		    	{
+		    	if(CategoryObj)  
+	           		iDuplicateHelpTopicList.Append(CategoryObj);			    	
+		    	}
+		    }
+	    }	
+    }
+    
+HBufC8* CCSXHHTMLContentParser::GetContentsFromFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv,
+			RFeatureControl& aFeatureControl) 
+    {
+    RFs& fileSession = aCoeEnv->FsSession();        
+    TInt SlashPosition = htmlFile.LocateReverse('\\');    
+    TBuf<KMaxFileName>* CompressedFile = new (ELeave) TBuf<KMaxFileName>; 
+    CleanupStack::PushL(CompressedFile); //1
+    CompressedFile->Copy(htmlFile.Mid(0,SlashPosition+1));
+    CompressedFile->Append(KContentZipFile);    
+    
+    HBufC8* CssContent = CreateBufferForCSSContentL(aFeatureControl);
+       
+    if(!BaflUtils::FileExists(fileSession,*CompressedFile))
+        {
+        CleanupStack::PopAndDestroy(CompressedFile);
+        
+        HBufC8* buffer = GetContentsFromHTMLFileL(htmlFile,aCoeEnv);
+        
+        return MergeCssAndHTMLContentL(buffer,CssContent);
+        }
+        
+    // Create an instance of CZipFile.
+    CZipFile* zipFile = CZipFile::NewL(fileSession, *CompressedFile);    
+    CleanupStack::PushL(zipFile); //2
+        
+    // Iterate and get the file name
+    CZipFileMemberIterator* members = zipFile->GetMembersL();
+    CleanupStack::PushL(members);//3
+    CZipFileMember* member = members->NextL(); // Get the first file in zip
+    
+    TInt nCount=0;    
+    const TBuf<KMaxFileName>*Fname;
+    TBuf<KMaxFileName> *HtmlFileName = new (ELeave) TBuf<KMaxFileName>;
+    CleanupStack::PushL(HtmlFileName); //4
+    HtmlFileName->Copy(htmlFile.Mid(SlashPosition+1));
+    for(nCount=0;member!=NULL;nCount++)
+    	{    	 
+    	 Fname = member->Name();    
+	     if(Fname->Compare(*HtmlFileName)==0 )
+	    	{
+	    	break;
+	    	}	    
+	    delete member;	
+    	member = members->NextL();    	
+    	}
+
+	if(NULL == member)
+		{
+		CleanupStack::PopAndDestroy(HtmlFileName);
+		CleanupStack::PopAndDestroy(members);
+	    CleanupStack::PopAndDestroy(zipFile);
+	    CleanupStack::PopAndDestroy(CompressedFile);
+	    
+	    HBufC8* buffer = GetContentsFromHTMLFileL(htmlFile,aCoeEnv);
+	    return MergeCssAndHTMLContentL(buffer,CssContent);
+	    }
+		
+    CleanupStack::PushL(member);//5
+    RZipFileMemberReaderStream* stream;
+    zipFile->GetInputStreamL(member, stream);
+    CleanupStack::PushL(stream);//6
+        
+    // Extracts aFileName to a buffer.
+    // If the file is quite huge, then read the file in streaming mode.
+    // For example, use 4KB buffer and read it in an active object.
+    HBufC8* buffer = HBufC8::NewLC(member->UncompressedSize());//5
+    TPtr8 bufferPtr(buffer->Des());
+    User::LeaveIfError(stream->Read(bufferPtr, member->UncompressedSize()));
+
+    // Release all the resources.   
+    CleanupStack::Pop(buffer);
+    CleanupStack::PopAndDestroy(stream); 
+    CleanupStack::PopAndDestroy(member);
+    CleanupStack::PopAndDestroy(HtmlFileName);
+    CleanupStack::PopAndDestroy(members);
+    CleanupStack::PopAndDestroy(zipFile);
+    CleanupStack::PopAndDestroy(CompressedFile);
+    
+    return MergeCssAndHTMLContentL(buffer,CssContent);
+    }
+
+TBool CCSXHHTMLContentParser::HandleMasterKeywordFileL(CCSXHHelpDataBase* aDataBase)
+    {
+    RFs& FileSession = iCoeEnv->FsSession();
+    CCSXHXMLParseHandler_MasterKywd* XMLParser_MasterKywd = CCSXHXMLParseHandler_MasterKywd::NewL(iCoeEnv);  
+    CleanupStack::PushL(XMLParser_MasterKywd);  
+    InitializeReaderL(XMLParser_MasterKywd);
+    XMLParser_MasterKywd->SetHtmlContentParserPtr(this);
+    XMLParser_MasterKywd->SetDataBasePtr(aDataBase);
+    TBool bMasterKeywordFilePresent = EFalse;
+    
+    //Check for the availability of Master Keyword file
+    TBuf<KMaxFileName>* Master_kywdPath = new(ELeave) TBuf<KMaxFileName>;
+    CleanupStack::PushL(Master_kywdPath);//5
+    Master_kywdPath->Append(PathInfo::RomRootPath().Left(1));
+    GetHTMLContentPathForDriveL(Master_kywdPath,iCoeEnv);
+    Master_kywdPath->Append(KMasterKywdFile);
+    
+    if(BaflUtils::FileExists(FileSession,*Master_kywdPath))
+    	{    	
+        TRAP_IGNORE(iXmlReader->ParseL(FileSession,*Master_kywdPath ));
+        bMasterKeywordFilePresent = ETrue;
+    	}    
+    
+    //KMasterKywdFile;
+    CleanupStack::PopAndDestroy(Master_kywdPath);
+    CleanupStack::PopAndDestroy(XMLParser_MasterKywd);
+    ClearReader();	
+    
+    return bMasterKeywordFilePresent;
+    }
+    
+void CCSXHHTMLContentParser::GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase)
+    {
+    if(!iHtmlTOC1List.Count())
+        return;
+    TBool bMasterKeywordFilePresent = HandleMasterKeywordFileL(aDataBase);
+    
+    CCSXHXMLParseHandler_Kywd* XMLParser = CCSXHXMLParseHandler_Kywd::NewL(iCoeEnv);  
+    CleanupStack::PushL(XMLParser);  
+    InitializeReaderL(XMLParser);
+    
+    XMLParser->SetDataBasePtr(aDataBase);
+    XMLParser->SetIsTOC2(EFalse);
+    XMLParser->SetHtmlContentParserPtr(this);
+    
+    //Parse keyword.xml file from Main Array list
+    ParseKeywdFileAndCreatekywdTOC1ObjectsL(iHtmlTOC1List,XMLParser,bMasterKeywordFilePresent);
+    
+    //Parse keyword.xml file from duplicate Array list
+    ParseKeywdFileAndCreatekywdTOC1ObjectsL(iDuplicateHelpTopicList,XMLParser,bMasterKeywordFilePresent);
+    
+    CleanupStack::PopAndDestroy(XMLParser);
+    ClearReader();
+    }
+    
+void CCSXHHTMLContentParser::GenerateTOC2ListForKeywordSearchL
+(CCSXHHelpDataBase* aDataBase,CCSXHKywdTOC1* aKywdTOC1Object)
+    {
+    RPointerArray<CCSXHHtmlTOC1>* TOC1HtmlList = aKywdTOC1Object->GetHtmlTOC1List();
+    if(!TOC1HtmlList)
+        return;
+    
+    CCSXHXMLParseHandler_Kywd* XMLParser = CCSXHXMLParseHandler_Kywd::NewL(iCoeEnv);
+    CleanupStack::PushL(XMLParser);      
+    InitializeReaderL(XMLParser);
+	
+    int toc1Count = TOC1HtmlList->Count();
+    CCSXHHtmlTOC1* toc1;
+
+    RFs& FileSession = iCoeEnv->FsSession();
+    
+    XMLParser->SetDataBasePtr(aDataBase);
+    XMLParser->SetIsTOC2(ETrue);
+    XMLParser->SetHtmlContentParserPtr(this);
+    
+    TBuf<KMaxFileName>* lookup = new(ELeave)TBuf<KMaxFileName>;
+    CleanupStack::PushL(lookup);//3
+    XMLParser->SetTOC1Title(aKywdTOC1Object->GetName());
+    for(int i = 0; i < toc1Count ; ++i )
+        {
+        toc1 = (*TOC1HtmlList)[i];
+        //Get Corresponding toc1 from Main array and set toc1 object
+        XMLParser->SetCurrentHtmlToc1(GetCorrespondingTOC1FromMainArray(toc1->GetName()));
+        //Clear the previous values
+        lookup->Delete(0,lookup->Length());
+        toc1->GetHelpFileL(*lookup);
+        XMLParser->SetPath(*lookup);
+        lookup->Append(KKeywordsFile);
+        TRAP_IGNORE(iXmlReader->ParseL (FileSession,*lookup ));
+        aDataBase->IncrementKeywordSearchCount();
+        }   
+    CleanupStack::PopAndDestroy(lookup);
+    CleanupStack::PopAndDestroy(XMLParser);  
+    ClearReader();
+    }
+    
+CCSXHHelpContentBase* CCSXHHTMLContentParser::GetContextTopic
+(const TUid& aUid, const TDesC& contextName)
+    {
+    int toc1Count = iHtmlTOC1List.Count();
+    CCSXHHtmlTOC1* toc1,*temptoc1;
+    
+    for(int i = 0; i < toc1Count; ++i)
+        {
+        toc1 = iHtmlTOC1List[i];
+        if(aUid == toc1->GetAppUid())
+            {
+            return toc1->GetContextTopic(contextName);      
+            }
+        }
+        
+    toc1Count = iDuplicateHelpTopicList.Count();
+	for(int i = 0; i < toc1Count; ++i)
+		{
+		toc1 = iDuplicateHelpTopicList[i];
+        if(aUid == toc1->GetAppUid())
+        	{
+    		temptoc1 = GetCorrespondingTOC1FromMainArray(toc1->GetName());        		
+    		return temptoc1->GetContextTopic(contextName);
+        	}
+		}    
+    return NULL;
+    }
+    
+CCSXHHelpContentBase* CCSXHHTMLContentParser::GetHtmlTopicForUrlL(const TDesC& aUrl)
+    {
+    CCSXHHelpContentBase* tocobj = GetObjectBasedonUrlL(iHtmlTOC1List,aUrl,ETrue);
+    
+    if(NULL == tocobj)
+    	tocobj = GetObjectBasedonUrlL(iDuplicateHelpTopicList,aUrl,EFalse);
+    
+	return tocobj;    	
+    }
+
+CCSXHHelpContentBase* CCSXHHTMLContentParser::GetObjectBasedonUrlL(RPointerArray<CCSXHHtmlTOC1>& aTOC1ObjectsArray,
+		const TDesC& aUrl, TBool aMainArrayList)    
+    {
+        /*For URLs of form 
+        file:://<Drive Name>:/system/xhtml/<Lang ID>/<App UID>/Html name
+      We can have help topics for other cases, help topic objects not possible   
+    */
+    TBuf<KMaxFileName> aFileUrl;
+    
+    int toc1Count = aTOC1ObjectsArray.Count();
+    CCSXHHtmlTOC1* toc1,*temptoc1;
+    for(int j = 0; j < toc1Count; ++j)
+        {
+        toc1 = aTOC1ObjectsArray[j];
+        TBuf<KMaxFileName> htmlFile;
+        toc1->GetHelpFileL(htmlFile);
+        
+        //Convert fwd slashes to back slashes
+        TInt i = htmlFile.Find(KFwdSlash) ;
+        while (KErrNotFound != i)
+            {
+            htmlFile.Replace(i,1,KBackSlash);
+            i = htmlFile.Find(KFwdSlash) ;
+            }
+        
+        i = aUrl.FindC(htmlFile);
+        if(i != KErrNotFound)
+            {
+            TFileName fileName;
+            i = aUrl.LocateReverseF('/');
+            fileName = aUrl.Mid(i + 1);
+            if(aMainArrayList)
+            	temptoc1 = toc1;
+            else
+            	temptoc1 = GetCorrespondingTOC1FromMainArray(toc1->GetName());	
+            
+            return temptoc1->GetHtmlTopicForFile(fileName);
+            }
+        }
+    return NULL;	
+    }
+
+void CCSXHHTMLContentParser::GetHtmlFileL(CCoeEnv* coeEnv,const short& aDir,
+                                            const TAppUid& aUid,TBuf<KMaxFileName>& aFileName)
+    {
+    aFileName.Copy(KEmptyString);
+    
+    RFs& FileSession = coeEnv->FsSession();
+    TDriveList DirList; 
+    if( (FileSession.DriveList(DirList)<KErrNone) ||
+        (aDir >= DirList.Length()))
+        return; 
+    
+    TChar driveLetter = '?';
+    TDriveInfo info;
+    TInt error = FileSession.Drive(info, aDir);
+    if  ((error == KErrNone) && 
+        (DirList[aDir] && info.iType != EMediaNotPresent))
+        {
+        RFs::DriveToChar(aDir, driveLetter);
+
+        aFileName.Append(driveLetter);
+        GetHTMLContentPathForDriveL(&aFileName,coeEnv);
+        aUid.AppendUid(aFileName);
+        aFileName.Append(KFwdSlash);
+        }
+    }
+
+void CCSXHHTMLContentParser::InitializeReaderL(CCSXHXMLParseHandler* aXMLParser)
+    {
+    if(iXmlReader == NULL )
+        {       
+        iXmlReader = CSenXmlReader::NewL();
+        iXmlReader->SetContentHandler(*aXMLParser);
+        }
+    }
+void CCSXHHTMLContentParser::ClearReader()
+    {
+    delete iXmlReader;
+    iXmlReader = NULL;
+    }
+    
+TBool CCSXHHTMLContentParser::IsUidCategoryPresent(const TUid& aUid)
+    {
+    int toc1Count = iHtmlTOC1List.Count();
+    CCSXHHtmlTOC1* toc1;    
+    for(int i = 0; i < toc1Count; ++i)
+        {
+        toc1 = iHtmlTOC1List[i];
+        if(aUid == toc1->GetAppUid())
+            return ETrue;
+        }
+    
+    toc1Count = iDuplicateHelpTopicList.Count();
+    for(int i = 0; i < toc1Count; ++i)
+        {
+        toc1 = iDuplicateHelpTopicList[i];
+        if(aUid == toc1->GetAppUid())
+            return ETrue;
+        }    
+    return EFalse;  
+    }
+
+TBool CCSXHHTMLContentParser::GetHTMLToc1(const TDesC& aUid,CCSXHXMLParseHandler* aParser)
+	{
+	TUint AppId;
+	
+	if(!aUid.Length())
+		return EFalse;
+
+    TLex FolderUid(aUid.Mid(KOffset));
+    FolderUid.Val(AppId,EHex);
+    TUid ApplicationUid = TUid::Uid((TInt)AppId);
+	
+	int toc1Count = iHtmlTOC1List.Count();
+	
+    CCSXHHtmlTOC1* toc1;    
+    for(int i = 0; i < toc1Count; ++i)
+        {
+        toc1 = iHtmlTOC1List[i];
+        if(ApplicationUid == toc1->GetAppUid())
+        	{
+        	STATIC_CAST(CCSXHXMLParseHandler_MasterKywd*,aParser)->SetCurrentHtmlToc1(toc1); 
+        	return ETrue;
+        	}            
+        }
+	
+	toc1Count = iDuplicateHelpTopicList.Count();	        
+	for(int i = 0; i < toc1Count; ++i)
+        {
+        toc1 = iDuplicateHelpTopicList[i];
+        if(ApplicationUid == toc1->GetAppUid())
+        	{
+        	STATIC_CAST(CCSXHXMLParseHandler_MasterKywd*,aParser)->SetCurrentHtmlToc1(toc1); 
+        	return ETrue;
+        	}            
+        }
+                
+    return EFalse;  
+	}
+
+//To get Corresponding toc1 from main array.
+CCSXHHtmlTOC1* CCSXHHTMLContentParser::GetCorrespondingTOC1FromMainArray(const TDesC& aApplicationName)
+	{
+	TInt toc1Count = iHtmlTOC1List.Count();
+	CCSXHHtmlTOC1* toc1;
+	for(int i=0;i<toc1Count;++i)
+		{
+		toc1 = iHtmlTOC1List[i];
+		if(toc1->GetName().CompareF(aApplicationName) == 0)
+			return toc1;
+		}
+	
+    return NULL;
+	}
+
+//Check UId is already present in the list.	
+TBool CCSXHHTMLContentParser::IsAppUIdPresentAlready(const TDesC& aUid)
+	{
+	TBool result = EFalse;
+	TInt toc1Count = iHtmlTOC1List.Count();
+	CCSXHHtmlTOC1* toc1;
+	
+	TUint AppId;
+    TLex FolderUid(aUid.Mid(KOffset));
+    FolderUid.Val(AppId,EHex);
+    TUid ApplicationUid = TUid::Uid((TInt)AppId);
+	
+	for(int i=0;i<toc1Count;++i)
+		{
+		toc1 = iHtmlTOC1List[i];
+		if(ApplicationUid == toc1->GetAppUid())
+			{
+			result = ETrue;
+			break;
+			}			
+		}
+		
+	toc1Count =    iDuplicateHelpTopicList.Count();	
+	for(int i=0;i<toc1Count;++i)
+		{
+		toc1 = iDuplicateHelpTopicList[i];
+		if(ApplicationUid == toc1->GetAppUid())
+			{
+			result = ETrue;
+			break;
+			}
+		}		
+		
+	return result;	
+
+	}
+	
+void CCSXHHTMLContentParser::ParseKeywdFileAndCreatekywdTOC1ObjectsL(
+		RPointerArray<CCSXHHtmlTOC1>& aTOC1ObjectsArray,
+		CCSXHXMLParseHandler_Kywd* XMLParser, TBool bMasterKeywordFilePresent)
+	{
+	int toc1Count = aTOC1ObjectsArray.Count();
+    CCSXHHtmlTOC1* toc1;
+     
+    TBuf<KMaxFileName>* lookup = new(ELeave)TBuf<KMaxFileName>;
+    CleanupStack::PushL(lookup);//1
+    
+    RFs& FileSession = iCoeEnv->FsSession();
+	
+	    for(int i = 0; i < toc1Count; ++i)
+        {
+        toc1 = aTOC1ObjectsArray[i];
+        
+        if(bMasterKeywordFilePresent && toc1->IsROMDrive())
+        	continue;
+        
+        //Clear the previous values
+        lookup->Delete(0,lookup->Length());
+        
+        toc1->GetHelpFileL(*lookup);
+        lookup->Append(KKeywordsFile);
+        
+          //Check whether a file exists        
+        if(!BaflUtils::FileExists(FileSession,*lookup))
+            continue;
+        
+        XMLParser->SetCurrentHtmlToc1(toc1);
+        TRAP_IGNORE(iXmlReader->ParseL(FileSession,*lookup ));
+        }
+
+    CleanupStack::PopAndDestroy(lookup);  
+	}
+
+//RUNTIME
+void CCSXHHTMLContentParser::GetSupportedFeatureListL()
+	{
+	RFeatureUidArray SupportedFeatures;	
+	TInt err = iFeatureControl.Connect();
+	if ( err == KErrNone )
+		{
+         // ListSupportedFeatures() returns one of the Symbian error codes.
+         err = iFeatureControl.ListSupportedFeatures( SupportedFeatures );
+		 	
+         // Remember to call CloseL after using RFeatureControl.
+         // It disconnects the Feature Manager server.
+         iFeatureControl.Close();  
+		}
+	//As per new req. add true, flase to id and create an array.
+	
+	iFeatureManager_FeatureIds = new (ELeave) CDesCArrayFlat(2); 
+	
+	TBuf<25>CurrFId;
+	
+	for(TInt i=0;i<SupportedFeatures.Count();i++)
+		{
+		CurrFId.Copy(KEmptyString);	
+		CurrFId.AppendNum(SupportedFeatures[i].iUid);
+		iFeatureManager_FeatureIds->AppendL(CurrFId);
+		
+		CurrFId.Copy(KTrue_StringtoAppend);	
+		CurrFId.AppendNum(SupportedFeatures[i].iUid);
+		iFeatureManager_FeatureIds->AppendL(CurrFId);
+		
+		CurrFId.Copy(KFalse_StringtoAppend);	
+		CurrFId.AppendNum(SupportedFeatures[i].iUid);
+		iFeatureManager_FeatureIds->AppendL(CurrFId);		
+		}
+		
+	//Input Language variation changes
+	//-----------------------------------------
+	//Create an array with supported input language		
+	CPtiEngine* ptiEngine = CPtiEngine::NewL();
+    CleanupStack::PushL( ptiEngine );
+    
+    CArrayFix<TInt>* languageCodeArray = new(ELeave)CArrayFixFlat<TInt>(2);
+    
+    ptiEngine->GetAvailableLanguagesL( languageCodeArray );
+	
+	TInt nCount = languageCodeArray->Count();
+	
+	iSupportedInputLanguages = new (ELeave) CDesCArrayFlat(2); 
+	
+	//Codescanner gives error, if member variables are pushed.
+	//CleanupStack::PushL( iSupportedInputLanguages );
+    
+    for(TInt i=0; i<nCount;i++)
+    	{
+    	TInt languageCode = languageCodeArray->At(i);
+    	TBuf<25>Currlang(_L("LANGUAGE_"));
+		if(languageCode < 10)
+			Currlang.AppendNumFixedWidth(languageCode,EDecimal,2);
+		else
+			Currlang.AppendNum(languageCode);
+		
+		iSupportedInputLanguages->AppendL(Currlang);
+    	}
+    
+    //CleanupStack::Pop(iSupportedInputLanguages);	
+    CleanupStack::PopAndDestroy( ptiEngine );
+    
+    delete languageCodeArray;	
+    //-----------------------------------------
+    
+    SupportedFeatures.Close();
+	}
+	
+//RUNTIME
+TBool CCSXHHTMLContentParser::CheckFeatureIDL(const TDesC& aFeatureIds)
+	{
+	if(/*KHexPrefixLength == aFeatureIds.Length() &&*/ 
+		KErrNotFound != aFeatureIds.Find(KDefaultFeatureIdStringTemp))
+		{
+		return ETrue;
+		}
+			
+	HBufC* Ids = HBufC::NewLC(aFeatureIds.Length());	
+	TPtr CurrentFeatureIds = Ids->Des();	
+	CurrentFeatureIds.Copy(aFeatureIds);
+	CleanupStack::Pop(Ids);
+		
+	CDesCArray* FeatureIdList = new (ELeave) CDesCArrayFlat(2); ;
+	TInt EndPos = CurrentFeatureIds.Locate(' ');
+	
+	CleanupStack::PushL(FeatureIdList);
+				
+    while (KErrNotFound != EndPos)
+        {
+				FeatureIdList->AppendL(CurrentFeatureIds.Mid(0,EndPos));// FId_Val);	        
+        CurrentFeatureIds = CurrentFeatureIds.Mid(EndPos+1);
+        EndPos = CurrentFeatureIds.Locate(' ') ;
+        }
+
+	if(KErrNotFound == EndPos && 0!= CurrentFeatureIds.Length())
+		{
+		FeatureIdList->AppendL(CurrentFeatureIds);
+		}    
+	
+	CleanupStack::Pop(FeatureIdList); 
+	 
+	TInt position;		
+	if(KErrNone == FeatureIdList->Find(KDefaultFeatureIdString,position) || 
+	   KErrNone == FeatureIdList->Find(KDefaultFeatureIdStringTemp,position) )
+		{
+		delete FeatureIdList;
+		delete Ids;
+		return ETrue;
+		}
+		
+	TInt nCount = FeatureIdList->MdcaCount();
+	
+	
+	//FeatureManager list contains all enabled featureIds, appended with true, and false.
+	//New Req. text associated with true_featureId, should be displayed, if Id is enabled.
+	//else, if featureId is disabled, text associated with false_featureId should be displayed. 
+	// 1. if featureId string contains "false" and it is not in the list, return ETrue.
+	// 2. if featureId string does not contain "false" and it is present in the list, return ETrue.
+	// 3. if featureId is part of input language, return ETrue.
+	for(TInt j=0;j < nCount;j++)
+		{
+		if(
+			(KErrNotFound != FeatureIdList->MdcaPoint(j).Find(KFalseString) &&
+			KErrNone != iFeatureManager_FeatureIds->Find(FeatureIdList->MdcaPoint(j),position))||
+		
+			(KErrNotFound == FeatureIdList->MdcaPoint(j).Find(KFalseString) &&
+			KErrNone == iFeatureManager_FeatureIds->Find(FeatureIdList->MdcaPoint(j),position)) ||
+		
+			KErrNone == iSupportedInputLanguages->Find(FeatureIdList->MdcaPoint(j),position)
+		)						
+			{
+			delete FeatureIdList;
+			delete Ids;
+			return ETrue;
+			}		
+		}
+				
+	delete Ids;		
+	delete FeatureIdList;	
+	return EFalse;		
+	}	
+	
+HBufC8* CCSXHHTMLContentParser::CreateBufferForCSSContentL(RFeatureControl& aFeatureControl)
+	{	
+	RFeatureUidArray SupportedFeatures;
+	TInt err = aFeatureControl.Connect();
+	if ( err == KErrNone )
+		{
+         // ListSupportedFeatures() returns one of the Symbian error codes.
+         err = aFeatureControl.ListSupportedFeatures( SupportedFeatures );
+		 	
+         // Remember to call CloseL after using RFeatureControl.
+         // It disconnects the Feature Manager server.
+         aFeatureControl.Close();                    
+		}
+	
+		//Input Language variation changes
+	//-----------------------------------------
+
+	CPtiEngine* ptiEngine = CPtiEngine::NewL();
+    CleanupStack::PushL( ptiEngine );
+
+    CArrayFix<TInt>* languageCodeArray = new(ELeave)CArrayFixFlat<TInt>(2);
+
+    ptiEngine->GetAvailableLanguagesL( languageCodeArray );
+    
+	TInt nInputLangCount = languageCodeArray->Count();
+	TInt nCount = SupportedFeatures.Count();	
+
+	HBufC8* CssContent = HBufC8::NewLC(nCount * KMaxUnits * 6 + nInputLangCount * 3 + 400);
+	TPtr8 bufferPtr(CssContent->Des());
+	
+	AppendStyleSheetContent_listitem(bufferPtr,nCount,SupportedFeatures,*languageCodeArray);
+	AppendStyleSheetContent_paragraph(bufferPtr,nCount,SupportedFeatures,*languageCodeArray);
+	AppendStyleSheetContent_ahref(bufferPtr,nCount,SupportedFeatures,*languageCodeArray);
+	AppendStyleSheetContent_none(bufferPtr,nCount,SupportedFeatures);	
+		
+	SupportedFeatures.Close();				
+	
+	CleanupStack::Pop(CssContent);	
+	
+	//Input Language variation changes
+	//-----------------------------------------
+	CleanupStack::PopAndDestroy( ptiEngine );	
+
+	delete languageCodeArray;
+	//-----------------------------------------
+
+	return CssContent;
+	}
+	
+HBufC8* CCSXHHTMLContentParser::GetContentsFromHTMLFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv)
+	{
+	RFs& fsSession = aCoeEnv->FsSession();             
+	RFile file; 
+        
+	TInt err = file.Open(fsSession,htmlFile,EFileRead|EFileShareReadersOrWriters);
+    if(KErrNone == err)
+	    {
+	    TInt FileSize;
+	    HBufC8* htmlFileContent = NULL;
+	    if(KErrNone == file.Size(FileSize))
+		    {
+		    htmlFileContent = HBufC8::NewLC(FileSize);
+			TPtr8 PtrContent = htmlFileContent->Des();
+	        
+		    file.Read(PtrContent);	
+		    CleanupStack::Pop(htmlFileContent);			    
+		    }		
+	    file.Close();
+		return htmlFileContent;
+		}
+	else
+		{		
+		return NULL;
+		}
+	}
+	
+HBufC8* CCSXHHTMLContentParser::MergeCssAndHTMLContentL(HBufC8* aHTMLBuffer, HBufC8* aCssContent)
+	{
+    TInt BufferLength=0;
+    if(aHTMLBuffer)
+    	BufferLength = aHTMLBuffer->Size();
+    
+    if(aCssContent)
+    	BufferLength += aCssContent->Size();
+    
+    HBufC8* Htmlbuffer = HBufC8::NewLC(BufferLength);
+    
+    TPtr8 HtmlbufferPtr(Htmlbuffer->Des());
+    
+    if(aCssContent)
+    	{
+    	HtmlbufferPtr.Copy(aCssContent->Des());
+    	delete aCssContent;
+    	}
+    	
+    if(aHTMLBuffer)
+	    {
+	    HtmlbufferPtr.Append(aHTMLBuffer->Des());
+	    delete aHTMLBuffer;	
+	    }
+    
+    if(Htmlbuffer)
+    	CleanupStack::Pop(Htmlbuffer);
+    
+    return Htmlbuffer;	
+	}
+
+void CCSXHHTMLContentParser::AppendStyleSheetContent_listitem(TPtr8& abufferptr,TInt aFeatureIdCount,
+													RFeatureUidArray& aSupportedFeatures,
+													CArrayFix<TInt>& alanguageCodeArray)
+	{
+	//List Items
+	//---------------------------------------------------------
+	abufferptr.Copy(KCsstext_First);
+	
+	for(TInt i=0;i<aFeatureIdCount;++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		FeatureId.Format(KtextFormat_true_l,aSupportedFeatures[i].iUid);
+		//FeatureId.Append(KComma);
+		abufferptr.Append(FeatureId);		
+		}
+		
+	for(TInt i=0;i<alanguageCodeArray.Count();++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		if(alanguageCodeArray[i] < 10)
+			FeatureId.Format(KtextFormat_lang_0l,alanguageCodeArray[i]);
+		else
+			FeatureId.Format(KtextFormat_lang_l,alanguageCodeArray[i]);
+		
+		abufferptr.Append(FeatureId);		
+		}
+		
+	abufferptr.Append(KDefaultFeatureId);		
+	abufferptr.Append(KCsstext_displayp_li);		
+	abufferptr.Append(KCsstext_Last);
+	//---------------------------------------------------------
+	}
+
+void CCSXHHTMLContentParser::AppendStyleSheetContent_paragraph(TPtr8& abufferptr,TInt aFeatureIdCount,
+													RFeatureUidArray& aSupportedFeatures,
+													CArrayFix<TInt>& alanguageCodeArray)
+	{
+	//Paragraph
+	//---------------------------------------------------------
+	abufferptr.Append(KCsstext_First);
+	for(TInt i=0;i<aFeatureIdCount;++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		FeatureId.Format(KtextFormat_true_b,aSupportedFeatures[i].iUid);
+		//FeatureId.Append(KComma);
+		
+		abufferptr.Append(FeatureId);		
+		}
+		
+	for(TInt i=0;i<alanguageCodeArray.Count();++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		if(alanguageCodeArray[i] < 10)
+			FeatureId.Format(KtextFormat_lang_0b,alanguageCodeArray[i]);
+		else
+			FeatureId.Format(KtextFormat_lang_b,alanguageCodeArray[i]);
+		
+		abufferptr.Append(FeatureId);		
+		}
+		
+	abufferptr.Append(KDefaultFeatureId);
+	abufferptr.Append(KCsstext_displayp_p);		
+	abufferptr.Append(KCsstext_Last);
+	
+	//---------------------------------------------------------
+	}
+
+void CCSXHHTMLContentParser::AppendStyleSheetContent_ahref(TPtr8& abufferptr,TInt aFeatureIdCount,
+												RFeatureUidArray& aSupportedFeatures,
+												CArrayFix<TInt>& alanguageCodeArray)
+	{
+	//A href
+	//---------------------------------------------------------
+	abufferptr.Append(KCsstext_First);
+	for(TInt i=0;i<aFeatureIdCount;++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		FeatureId.Format(KtextFormat_true_a,aSupportedFeatures[i].iUid);		
+		abufferptr.Append(FeatureId);		
+		}
+	
+	for(TInt i=0;i<alanguageCodeArray.Count();++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		if(alanguageCodeArray[i] < 10)
+			FeatureId.Format(KtextFormat_lang_0a,alanguageCodeArray[i]);
+		else
+			FeatureId.Format(KtextFormat_lang_a,alanguageCodeArray[i]);
+		abufferptr.Append(FeatureId);		
+		}
+		
+	abufferptr.Append(KDefaultFeatureId);
+	abufferptr.Append(KCsstext_displayp_a);		
+	abufferptr.Append(KCsstext_Last);
+	
+	//---------------------------------------------------------
+	}
+
+void CCSXHHTMLContentParser::AppendStyleSheetContent_none(TPtr8& abufferptr,TInt aFeatureIdCount,
+													RFeatureUidArray& aSupportedFeatures
+													)
+	{
+	//False
+	//---------------------------------------------------------
+	abufferptr.Append(KCsstext_First);
+	for(TInt i=0;i<aFeatureIdCount;++i)
+		{
+		TBuf<KMaxFileName> FeatureId;
+		FeatureId.Format(KtextFormat_false,aSupportedFeatures[i].iUid,aSupportedFeatures[i].iUid,aSupportedFeatures[i].iUid);
+		abufferptr.Append(FeatureId);		
+		}
+		
+	abufferptr.Append(KDefaultFeatureId);
+	abufferptr.Append(KCsstext_displayp_n);		
+	abufferptr.Append(KCsstext_Last);
+	
+	//---------------------------------------------------------
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHHelpContentBase.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHelpContentBase class definition
+*
+*/
+
+#include "CSXHHelpContentBase.h"
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHelpContentBase::~CCSXHHelpContentBase()
+    {
+    delete iName;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+EXPORT_C  TPtr CCSXHHelpContentBase::GetName() const
+    {
+    return iName->Des();
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHelpContentBase::CCSXHHelpContentBase(const TDesC& name) : iName(name.Alloc())
+    {//No implementation required
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHHelpDataBase.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHelpDataBase class definition
+*
+*/
+
+#include "CSXHHelpDataBase.h"
+#include "CSXHHTMLContentParser.h"
+#include "CSXHLegacyContentParser.h"
+#include "CSXHViewIDs.h"
+#include "CSXHGenericTOC2.h"
+#include "CSXHKywdTOC1.h"
+#include "CSXHMainTopics.h"
+#include "CSXHKywdTopics.h"
+#include "CsHelpCmdLineParser.h"
+#include "CSXHContextTopic.h"
+#include "coehelp.h" 
+
+#include <eikprogi.h>
+#include <utf.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+#include <eikenv.h> 
+#include <eikprogi.h>
+
+
+#include <AknProgressDialog.h>
+
+EXPORT_C CCSXHHelpDataBase* CCSXHHelpDataBase::NewL(CCoeEnv* aCoeEnv,
+	const TApaAppCaption& aAppCaption)
+    {
+    CCSXHHelpDataBase* self = CCSXHHelpDataBase::NewLC(aCoeEnv,aAppCaption);
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+CCSXHHelpDataBase* CCSXHHelpDataBase::NewLC(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption)
+    {
+    //Add stuff into TLS
+    if(Dll::Tls() == NULL )
+        {
+        // TLS is still null, which means that no Singleton has
+        // been instantiated yet. Do so now, and return that
+        // instance:
+        // Store a pointer to the new instance in thread local storage:
+        CCSXHHelpDataBase* self = new(ELeave) CCSXHHelpDataBase(aCoeEnv,aAppCaption);
+        CleanupStack::PushL(self);
+        self->ConstructL();
+     
+        TInt err = Dll::SetTls(self);
+        if(err == KErrNone )
+            {
+            return self;
+            }
+        else
+            {
+            delete self;
+            User::Leave( err );
+            return NULL;
+            }
+        }
+     else
+        {
+            return GetInstance();
+        }   
+    }
+    
+CCSXHHelpDataBase* CCSXHHelpDataBase::GetInstance()
+    {
+    // Singleton has been instantiated once already, so return
+    // that instance:
+    return static_cast<CCSXHHelpDataBase*>(Dll::Tls());
+    }
+
+CCSXHHelpDataBase::CCSXHHelpDataBase(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption)
+             : iCoeEnv(aCoeEnv),iAppCaption(aAppCaption),iKeywordSearchCount(0)
+             
+    {
+    }
+
+CCSXHHelpDataBase::~CCSXHHelpDataBase()
+    {
+    delete iMainTOC1;
+    delete iKywdTOC1;
+    delete iLastContextTopic;   
+    delete iHTMLContentParser;
+    delete iLegacyContentParser;
+    Dll::SetTls( NULL );
+    }
+
+void CCSXHHelpDataBase::ConstructL()
+    {
+    iHTMLContentParser = CCSXHHTMLContentParser::NewL(iCoeEnv);
+    iLegacyContentParser = CCSXHLegacyContentParser::NewL(this);
+    
+    iMainTOC1 = CCSXHMainTopics::NewL(KCSXHToc1ViewID,iAppCaption);
+    iKywdTOC1 = CCSXHKywdTopics::NewL(iAppCaption);
+        
+    //Build the TOC1 list here
+    iHTMLContentParser->GenerateTOC1ListL(this);
+    iLegacyContentParser->GenerateTOC1ListL(this);
+    }
+    
+CCoeEnv* CCSXHHelpDataBase::GetCoeEnv()
+    {
+    return iCoeEnv;
+    }
+
+EXPORT_C CCSXHGenericTOC1* CCSXHHelpDataBase::GetMainTopics()
+    {
+    return iMainTOC1;   
+    }
+EXPORT_C CCSXHGenericTOC1* CCSXHHelpDataBase::GetKywdTopics()
+    {
+    return iKywdTOC1;
+    }
+
+EXPORT_C CCSXHHelpContentBase* CCSXHHelpDataBase::GetContextTopic(const TDesC8& aContextMessage)
+    {
+    TRAP_IGNORE(GetContextTopicL(aContextMessage));
+    return iLastContextTopic;
+    
+    }
+CCSXHHelpContentBase* CCSXHHelpDataBase::GetContextTopicL(const TDesC8& aContextMessage)
+    {
+    if(iLastContextTopic)
+        {
+        delete iLastContextTopic;
+        iLastContextTopic = NULL;
+        }
+    //TSW Error Correction:Help: Application crashes 
+    //after trying to re-open context-dependent help from application
+    //Clear childlist of all (TOC1)parents.    
+	ClearAllTOC1Contents();    
+	
+    CArrayFix<TCoeHelpContext>* contextList;
+    CCsHlpCmdLineParser* parser = new(ELeave) CCsHlpCmdLineParser;
+    CleanupStack::PushL(parser);
+    parser->ConstructL(aContextMessage);
+    contextList = parser->ContextListL();
+    CleanupStack::PopAndDestroy(parser); // parser
+    CleanupStack::PushL(contextList);
+    CCSXHHelpContentBase* contextTopic;
+    TInt numberOfContextList = contextList->Count();
+    TCoeHelpContext* context;
+    for (TInt i(0); i < numberOfContextList; i++)
+        {
+        context = &(contextList->At(i));
+        
+        contextTopic = iHTMLContentParser->GetContextTopic(context->iMajor,context->iContext);
+        if(contextTopic)
+            {
+            CleanupStack::PopAndDestroy(contextList);
+            iLastContextTopic = CCSXHContextTopic::NewL(contextTopic);
+            return iLastContextTopic;
+            }
+        }
+
+    for (TInt i(0); i < numberOfContextList; i++)
+        {
+        context = &(contextList->At(i));
+        
+        contextTopic = iLegacyContentParser->GetContextTopic(*context);
+        if(contextTopic)
+            {
+            CleanupStack::PopAndDestroy(contextList);
+            iLastContextTopic = CCSXHContextTopic::NewL(contextTopic);
+            return iLastContextTopic;
+            }
+        }
+        
+        
+    CleanupStack::PopAndDestroy(contextList);    
+    return NULL;
+    }
+
+EXPORT_C void CCSXHHelpDataBase::ClearAllTOC1Contents()
+    {
+    iMainTOC1->ResetChildList();
+    iKywdTOC1->ResetChildList();
+    }
+
+CCSXHLegacyContentParser* CCSXHHelpDataBase::GetLegacyParser() 
+    {
+    return iLegacyContentParser;        
+    }
+    
+CCSXHHTMLContentParser* CCSXHHelpDataBase::GetHtmlParser() 
+    {
+    return iHTMLContentParser;      
+    }
+
+void CCSXHHelpDataBase::InsertKeywordL(const TDesC& aKywdName, 
+	TInt aLegacyKywdIndex, const TUid& aCatUid)
+    {
+    if(!iHTMLContentParser->IsUidCategoryPresent(aCatUid))
+        iKwydBuilder->InsertKeywordL(iKywdTOC1,aKywdName,aLegacyKywdIndex);
+    }
+    
+void CCSXHHelpDataBase::InsertKeywordL(const TDesC& aKywdName, CCSXHHtmlTOC1* aToc1)
+    {
+    iKwydBuilder->InsertKeywordL(iKywdTOC1,aKywdName,aToc1);
+    }
+
+CCSXHKywdTOC1* CCSXHHelpDataBase::InsertKeywordTopicL(CCSXHGenericTOC2* aToc2)
+    {
+    CCSXHKywdTOC1* toc1 = iKywdTOC1->GetSelectedTopic();
+    InsertKeywordTopic(toc1,aToc2);
+    return toc1;
+    }
+    
+void CCSXHHelpDataBase::InsertKeywordTopic(CCSXHKywdTOC1* aToc1, CCSXHGenericTOC2* aToc2)
+    {
+    aToc1->InsertChild(aToc2);
+    }
+
+EXPORT_C TInt CCSXHHelpDataBase::InitGenerateKeywordTOC2ListL(CCSXHKywdTOC1* aTopic)
+    {
+    iKeywordSearchCount = 0;
+    RPointerArray<CCSXHHtmlTOC1>* TOC1HtmlList = aTopic->GetHtmlTOC1List();
+    TInt htmlCount = TOC1HtmlList ? TOC1HtmlList->Count() : 0;
+    TInt legacyCount = iLegacyContentParser->InitGenerateTOC2ListForKeywordSearchL(aTopic);
+    return (htmlCount + legacyCount);
+    }
+    
+void CCSXHHelpDataBase::GenerateKeywordTOC2ListL(CCSXHKywdTOC1* aTopic)
+    {
+    iHTMLContentParser->GenerateTOC2ListForKeywordSearchL(this,aTopic);
+ 	iLegacyContentParser->GenerateTOC2ListForKeywordSearchL(aTopic);
+    }
+    
+EXPORT_C CCSXHHelpContentBase* CCSXHHelpDataBase::GetHtmlTopicForUrlL(const TDesC& url)
+    {
+    return iHTMLContentParser->GetHtmlTopicForUrlL(url);
+    }
+void CCSXHHelpDataBase::FillKeywordTopicsL(MCSXHKywdBuilder* aBuilder)
+    {
+    iKwydBuilder = aBuilder;
+    iHTMLContentParser->GenerateKywdTOC1ListL(this);
+    iLegacyContentParser->GenerateKywdTOC1ListL(this);
+    }
+    
+
+void CCSXHHelpDataBase::IncrementKeywordSearchCount(TInt aUnits)
+	{
+	iKeywordSearchCount += aUnits;
+	}
+
+EXPORT_C TInt CCSXHHelpDataBase::GetKeywordSearchCount()
+	{
+	return iKeywordSearchCount;
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHHtmlTOC1.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTOC1 class definition
+*
+*/
+
+#include "CSXHHtmlTOC1.h"
+#include "CSXHHtmlTOC2.h"
+#include "CSXHViewIDs.h"
+#include "CSXHHTMLContentParser.h"
+#include "CSXHHelpDataBase.h"
+#include "csxhconstants.h"
+
+#include <eikenv.h> 
+#include <utf.h>
+#include <data_caging_path_literals.hrh>
+#include <zipfile.h>
+#include <bautils.h>
+#include <SenXmlReader.h> 
+#include <f32file.h>
+#include <pathinfo.h>
+
+const TInt KBufSize = 35;
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC1* CCSXHHtmlTOC1::NewL(const TDesC& aName, const TDesC& aFolder,const TInt& aDrive)
+    {
+    CCSXHHtmlTOC1* self = new(ELeave) CCSXHHtmlTOC1(aName,aFolder,aDrive);
+    if(self->IsValid())
+    	return self;	
+    delete self;
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC1::CCSXHHtmlTOC1(const TDesC& aName, const TDesC& aFolder,const TInt& aDrive):
+                    CCSXHGenericTOC1(aName),iAppUid(aFolder),iDrive(aDrive)
+    {//No implementation required
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC1::~CCSXHHtmlTOC1()
+    {//No implementation required
+    }   
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+TUid CCSXHHtmlTOC1::GetViewID() const
+    {
+    return KCSXHToc2ViewID;
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+void CCSXHHtmlTOC1::GetHelpFileL(TBuf<KMaxFileName>&  aFileName ) const
+    {
+    //return iHelpFile;
+    return CCSXHHTMLContentParser::GetHtmlFileL(
+                CCSXHHelpDataBase::GetInstance()->GetCoeEnv(),iDrive,iAppUid,aFileName);
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+const TUid& CCSXHHtmlTOC1::GetAppUid() const
+    {
+    return iAppUid.GetUid();
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TBool CCSXHHtmlTOC1::IsROMDrive() 
+    {
+    TInt ROMDrive;
+    RFs::CharToDrive( PathInfo::RomRootPath()[0], ROMDrive );
+    if(ROMDrive == iDrive)
+    	return ETrue;
+    else
+    	return EFalse;
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHelpContentBase* CCSXHHtmlTOC1::GetContextTopic(const TDesC&  contextName)
+    {
+    TBool resetChildList = EFalse;
+    if(iChildList == NULL)
+        {
+        InitChildList();//Generates child list  
+        resetChildList = ETrue;
+        }
+    
+    TInt count =    iChildList->Count();
+    CCSXHHtmlTOC2* toc2 = NULL;
+    for(TInt i=0;i<count;++i )
+        {
+        toc2 = STATIC_CAST(CCSXHHtmlTOC2*, (*iChildList)[i]);
+        TBuf<KBufSize> contextFile = contextName;
+        contextFile.Append(KHtmlFileExtn);
+        if(contextFile.Compare(toc2->GetFileName()) == 0)
+            return toc2;//Child list should not be reset
+        }
+    if(resetChildList)
+        ResetChildList();
+    return NULL;    
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// --------------------------------------------------------- 
+CCSXHHelpContentBase* CCSXHHtmlTOC1::GetHtmlTopicForFile(const TDesC&  aFile)
+    {
+    TBool resetChildList = EFalse;
+    if(iChildList ==NULL)
+        {
+        InitChildList();//Generates child list if required.     
+        resetChildList = ETrue;
+        }
+        
+    TInt count = iChildList->Count();
+    CCSXHHtmlTOC2* toc2 = NULL;
+    for(TInt i=0;i<count;++i )
+        {
+        toc2 = STATIC_CAST(CCSXHHtmlTOC2*, (*iChildList)[i]);
+        if(toc2->GetFileName().Compare(aFile) == 0)
+            return toc2;//Child list should not be reset
+        }
+    if(resetChildList)
+        ResetChildList();
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+void CCSXHHtmlTOC1::InitChildList()
+    {
+    if(iChildList != NULL)
+        return;
+    ConstructChildList();
+    TRAP_IGNORE(CCSXHHelpDataBase::GetInstance()->GetHtmlParser()->
+                                                        GenerateTOC2ListL(*this,iChildList));
+    }
+TBool CCSXHHtmlTOC1::IsValid() const
+	{
+	return iAppUid.IsValid();
+	}
+	
+	
+TAppUid::TAppUid(const TDesC& aFolder)
+	{
+	TLex lex(aFolder.Mid(KHexPrefixLength));
+	TUint appId = 0;
+	lex.Val(appId,EHex);
+	
+	if(appId)
+		{
+		iUid = TUid::Uid((TInt)appId);
+		iLength = aFolder.Length();		
+		}
+	else
+		{
+		iLength = 0;
+		}
+	}
+
+const TUid& TAppUid::GetUid() const
+	{
+	return iUid;
+	}
+
+TBool TAppUid::IsValid() const
+	{
+	return iLength ? ETrue : EFalse;
+	}
+void TAppUid::AppendUid(TBuf<KMaxFileName>& aStr) const
+	{
+	TInt initialLen = aStr.Length();
+	aStr.Append(KHexPrefix);
+	aStr.AppendNum(iUid.iUid,EHex);
+	TInt finalLen = aStr.Length();
+	
+	while(iLength > (finalLen - initialLen))
+		{
+		aStr.Insert(initialLen+KHexPrefixLength,KZero);
+		++finalLen;
+		}
+	
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHHtmlTOC2.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTOC2 class definition
+*
+*/
+
+#include "CSXHHtmlTOC2.h"
+#include "CSXHHtmlTOC1.h"
+#include "CSXHViewIDs.h"
+#include "CSXHHTMLContentParser.h"
+#include "CSXHHelpDataBase.h"
+#include "csxhconstants.h"
+
+#include <e32base.h>
+#include <zipfile.h>
+#include <bautils.h>
+#include <coehelp.h>
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC2* CCSXHHtmlTOC2::NewL(CCSXHGenericTOC1* aParent,const TDesC& aName, 
+                                   const TDesC& aHtmlHelpFile, TBool aKeyWordTopic )
+    {
+    CCSXHHtmlTOC2* self = CCSXHHtmlTOC2::NewLC(aParent, aName,aHtmlHelpFile,aKeyWordTopic);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC2* CCSXHHtmlTOC2::NewLC(CCSXHGenericTOC1* aParent, const TDesC& aName, 
+                                    const TDesC& aHtmlHelpFile, TBool aKeyWordTopic)
+    {
+    CCSXHHtmlTOC2* self = new(ELeave) CCSXHHtmlTOC2(aParent, aName,aHtmlHelpFile,aKeyWordTopic);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC2::~CCSXHHtmlTOC2()
+    {//No implementation required
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHHtmlTOC2::CCSXHHtmlTOC2(CCSXHGenericTOC1* aParent,const TDesC& aName, 
+                            const TDesC& aHtmlHelpFile, TBool aKeyWordTopic) :
+                            CCSXHGenericTOC2(aParent, aName),iHTMLFileName(aHtmlHelpFile),
+                            iKeyWordTopic(aKeyWordTopic),iKywdParent(NULL)
+    {//No implementation required
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TUid CCSXHHtmlTOC2::GetViewID() const
+    {
+    return KCSXHHtmlTopicViewID;
+    }   
+   
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+const TBuf<KMaxFileName>&  CCSXHHtmlTOC2::GetFileName() const
+    {
+    return iHTMLFileName;
+    }
+   
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C TBool CCSXHHtmlTOC2::GetHelpContext(TCoeHelpContext& aContext) const
+    {
+    
+    CCSXHHtmlTOC1* parent = STATIC_CAST(CCSXHHtmlTOC1*,iParent);
+    aContext.iMajor = parent->GetAppUid();
+    if( KErrNotFound != iHTMLFileName.Find(KHtmlFileExtn) )
+        {
+        aContext.iContext.Append(iHTMLFileName.Left(iHTMLFileName.Find(KHtmlFileExtn)));
+        }
+#ifdef FF_HELP_TUTORIAL_MERGE
+     else if( KErrNotFound != iHTMLFileName.Find(KTutorialFileExtn) )
+        {
+        aContext.iContext.Append(iHTMLFileName.Left(iHTMLFileName.Find(KTutorialFileExtn)));
+        }
+#endif // FF_HELP_TUTORIAL_MERGE
+    return ETrue;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+EXPORT_C void CCSXHHtmlTOC2::GetHtmlUrlL(TBuf<KMaxFileName>& aFileUrl) const
+    {
+    aFileUrl = KFileUrlPrefix;
+    
+    aFileUrl.Append(iHTMLFilePath);
+    aFileUrl.Append(iHTMLFileName);
+    
+    TInt pos = aFileUrl.Find(KFwdSlash) ;
+    while (KErrNotFound != pos)
+        {
+        aFileUrl.Replace(pos,1,KBackSlash);
+        pos = aFileUrl.Find(KFwdSlash) ;
+        }
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C TAny* CCSXHHtmlTOC2::GetTopicContentL()
+    {
+    return CCSXHHelpDataBase::GetInstance()->GetHtmlParser()->GetTopicContentL(this);
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C HBufC8* CCSXHHtmlTOC2::GetContentsFromUrlL(const TDesC&  fileUrl,CCoeEnv* aCoeEnv, 
+	RFeatureControl& aFeatureControl)
+    {
+    TBuf<KMaxFileName> htmlFile(fileUrl);
+    htmlFile.Delete(0,KFileUrlPrefixLength);//Remove "file:///"
+    //Replace "/" with "\\"
+    TInt pos = htmlFile.Locate('/') ;
+    while (KErrNotFound != pos)
+        {
+        htmlFile.Replace(pos,1,KFwdSlash);
+        pos = htmlFile.Locate('/') ;
+        }
+    return CCSXHHTMLContentParser::GetContentsFromFileL(htmlFile,aCoeEnv,aFeatureControl);
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+EXPORT_C CCSXHKywdTOC1* CCSXHHtmlTOC2::GetKywdParent()
+    {
+    return iKywdParent;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHHtmlTOC2::SetKywdParent(CCSXHKywdTOC1* aKywdParent)
+    {
+    iKywdParent = aKywdParent;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHHtmlTOC2::SetHtmlFilePath(const TDesC&  aFilePath)
+	{
+	iHTMLFilePath = aFilePath;
+	}
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    	
+void CCSXHHtmlTOC2::GetHtmlFileName(TBuf<KMaxFileName>&  aFileName)	
+	{
+	aFileName.Copy(KEmptyString);
+	aFileName.Append(iHTMLFilePath);	
+	aFileName.Append(iHTMLFileName);	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHKywdTOC1.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHKywdTOC1 class definition
+*
+*/
+
+#include "CSXHKywdTOC1.h"
+#include "CSXHViewIDs.h"
+#include "CSXHHelpDataBase.h"
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHKywdTOC1* CCSXHKywdTOC1::NewL(const TDesC& aName)
+    {
+    CCSXHKywdTOC1* self = CCSXHKywdTOC1::NewLC(aName);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHKywdTOC1* CCSXHKywdTOC1::NewLC(const TDesC& aName)
+    {
+    CCSXHKywdTOC1* self = new(ELeave) CCSXHKywdTOC1(aName);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHKywdTOC1::CCSXHKywdTOC1(const TDesC& aName):
+                CCSXHGenericTOC1(aName),iLegacyIndex(-1),iTOC1HtmlList(NULL)
+    {
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHKywdTOC1::~CCSXHKywdTOC1()
+    {
+    if(iTOC1HtmlList)
+        {
+        iTOC1HtmlList->Close();
+        delete iTOC1HtmlList;   
+        }
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TUid CCSXHKywdTOC1::GetViewID() const
+    {
+    return KCSXHKywdToc2ViewID;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TInt& CCSXHKywdTOC1::LegacyIndex()
+    {
+    return iLegacyIndex;    
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHKywdTOC1::AppendHtmlTOC1L(CCSXHHtmlTOC1* aToc1)
+    {
+    if(NULL == iTOC1HtmlList)
+        iTOC1HtmlList = new(ELeave) RPointerArray<CCSXHHtmlTOC1>;
+    iTOC1HtmlList->Append(aToc1);
+    }
+    
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+RPointerArray<CCSXHHtmlTOC1>* CCSXHKywdTOC1::GetHtmlTOC1List()
+    {
+    return iTOC1HtmlList;
+    }
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+void CCSXHKywdTOC1::InitChildList()
+    {
+    if(iChildList != NULL)
+        return;
+    ConstructChildList();
+    TRAP_IGNORE(CCSXHHelpDataBase::GetInstance()->GenerateKeywordTOC2ListL(this));
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHKywdTopics.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHKywdTopics class definition
+*
+*/
+
+#include "CSXHKywdTopics.h"
+#include "CSXHHTMLContentParser.h"
+#include "CSXHHelpDataBase.h"
+#include "CSXHViewIDs.h"
+#include "csxhconstants.h"
+#include "CSXHKywdTOC1.h"
+
+#include <eikenv.h> 
+#include <e32base.h>
+
+//Implementation class. This class will be used when all the keywords has to be displayed   
+class MCSXHKywdTopicsBuilder : public MCSXHKywdBuilder
+    {
+    public:
+    static MCSXHKywdTopicsBuilder* NewL()
+        {
+        MCSXHKywdTopicsBuilder* self = MCSXHKywdTopicsBuilder::NewLC();
+        CleanupStack::Pop(self);
+        return self;
+        }
+    static MCSXHKywdTopicsBuilder* NewLC()
+        {
+        MCSXHKywdTopicsBuilder* self = new(ELeave) MCSXHKywdTopicsBuilder();
+        CleanupStack::PushL(self);
+        return self;
+        }
+    
+    void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd,CCSXHHtmlTOC1*)
+        {aKwdTopics->InsertKywdL(aKwd);}
+    
+    void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd,const TInt&)
+        {aKwdTopics->InsertKywdL(aKwd);}
+    
+    private:
+    MCSXHKywdTopicsBuilder(){}
+    };
+
+    
+//Implementation class. This class will be used when user has selected a keyword and
+// wants to navigate to the search result view
+class MCSXHKywdSelectedItemBuilder : public MCSXHKywdBuilder
+    {
+    public:
+    static MCSXHKywdSelectedItemBuilder* NewL(CCSXHKywdTOC1* aCurrentTopic)
+        {
+        MCSXHKywdSelectedItemBuilder* self = MCSXHKywdSelectedItemBuilder::NewLC(aCurrentTopic);
+        CleanupStack::Pop(self);
+        return self;
+        }
+    static MCSXHKywdSelectedItemBuilder* NewLC(CCSXHKywdTOC1* aCurrentTopic)
+        {
+        MCSXHKywdSelectedItemBuilder* self = new(ELeave) 
+        	MCSXHKywdSelectedItemBuilder(aCurrentTopic);
+        CleanupStack::PushL(self);
+        return self;
+        }
+    void InsertKeywordL(CCSXHKywdTopics*, const TDesC& aKwd,CCSXHHtmlTOC1* aToc1) 
+        {
+        if(iCurrentTopic->GetName().Compare(aKwd) == 0)
+            iCurrentTopic->AppendHtmlTOC1L(aToc1);
+        }
+    void InsertKeywordL(CCSXHKywdTopics*, const TDesC& aKwd,const TInt& aLegacyIndex)
+        {
+        if(iCurrentTopic->GetName().Compare(aKwd) == 0)
+            iCurrentTopic->LegacyIndex() = aLegacyIndex;
+        }
+    
+    private:
+    MCSXHKywdSelectedItemBuilder(CCSXHKywdTOC1* aCurrentTopic)
+                                :iCurrentTopic(aCurrentTopic){}
+    CCSXHKywdTOC1* iCurrentTopic;
+    };
+
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------
+CCSXHKywdTopics* CCSXHKywdTopics::NewL(const TApaAppCaption& aAppCaption)
+    {
+    CCSXHKywdTopics* self = CCSXHKywdTopics::NewLC(aAppCaption);
+    CleanupStack::Pop(self);
+    return self;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHKywdTopics* CCSXHKywdTopics::NewLC(const TApaAppCaption& aAppCaption)
+    {
+    CCSXHKywdTopics* self = new(ELeave) CCSXHKywdTopics(aAppCaption);
+    CleanupStack::PushL(self);
+    return self;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHKywdTopics::CCSXHKywdTopics(const TDesC& aName) : CCSXHGenericTOC1(aName)
+    {}
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHKywdTopics::~CCSXHKywdTopics()
+    {
+    if(iCurrentTopic)
+        delete iCurrentTopic;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+TUid CCSXHKywdTopics::GetViewID() const
+    {
+    return KCSXHKywdToc1ViewID;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------       
+void CCSXHKywdTopics::CopyChildListL(CDesCArray* aArray)    
+    {
+    iKywdTopics = aArray;
+    MCSXHKywdTopicsBuilder* builder = NULL;
+    builder = MCSXHKywdTopicsBuilder::NewL();
+    CCSXHHelpDataBase::GetInstance()->FillKeywordTopicsL(builder);
+    delete builder;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+void CCSXHKywdTopics::InsertKywdL(const TDesC& aKywd)
+    {
+    TBuf<KMaxFileName> child(KTabSpace);
+    child.Append(aKywd);
+    iKywdTopics->InsertIsqL(child);
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHHelpContentBase* CCSXHKywdTopics::GetChildL(const TDesC& aName)
+    {
+    if(iCurrentTopic)
+        {
+        delete iCurrentTopic;
+        iCurrentTopic = NULL;
+        }
+        
+    iCurrentTopic = CCSXHKywdTOC1::NewL(aName);
+    
+    MCSXHKywdSelectedItemBuilder* builder = NULL;
+    builder = MCSXHKywdSelectedItemBuilder::NewL(iCurrentTopic);
+
+    CCSXHHelpDataBase::GetInstance()->FillKeywordTopicsL(builder);
+
+    delete builder;
+    return iCurrentTopic;
+    }
+// ---------------------------------------------------------
+// Items commented in header.
+// ---------------------------------------------------------    
+CCSXHKywdTOC1* CCSXHKywdTopics::GetSelectedTopic()
+    {
+    return iCurrentTopic;
+    }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyContentParser class definition
+*
+*/
+
+#include "CSXHLegacyContentParser.h"
+#include "CSXHLegacyTOC1.h"
+#include "CSXHLegacyTOC2.h"
+#include "CSXHKywdTOC1.h"
+#include "CSXHHelpDataBase.h"
+
+#include <coehelp.h>
+#include <coemain.h>
+#include <f32file.h> 
+#include <badesca.h>
+#include <txtrich.h>
+
+CCSXHLegacyContentParser* CCSXHLegacyContentParser::NewL(CCSXHHelpDataBase
+*aDataBase)
+    {
+    CCSXHLegacyContentParser* self = CCSXHLegacyContentParser::NewLC(aDataBase);
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+CCSXHLegacyContentParser* CCSXHLegacyContentParser::NewLC(CCSXHHelpDataBase
+*aDataBase)
+    {
+    CCSXHLegacyContentParser* self = new (ELeave) CCSXHLegacyContentParser(aDataBase);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+    
+void CCSXHLegacyContentParser::ConstructL()
+    {
+    iModel = CHlpModel::NewL(CCoeEnv::Static()->FsSession(), this);     
+    iModel->OpenL();
+    }
+    
+CCSXHLegacyContentParser::CCSXHLegacyContentParser(CCSXHHelpDataBase* aDataBase)
+                        :iTopic(NULL)
+    {
+    iDataBase = aDataBase;
+    iHlpList = NULL;
+    }
+    
+CCSXHLegacyContentParser::~CCSXHLegacyContentParser()
+    {
+    if(iTopic)
+        delete iTopic;
+    if(iHlpList)
+        delete iHlpList;
+    
+    //No need to delete the entries here, it will be done by the database
+    iLegacyTOC1List.Close();    
+    
+    if(iModel)  
+        {
+        TRAP_IGNORE(iModel->CloseL());
+        delete iModel;  
+        }
+    }
+// --------------------------------------------------------------------------
+// Gets the available kywds from the legacy content and sends them to the
+// database
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase)
+    {
+    CHlpList* HlpList; 
+    HlpList = CHlpList::NewL();
+    iModel->SearchL(EIndexList);
+    iModel->LoadListL(HlpList); 
+    
+    TInt nCount(HlpList->MdcaCount());
+    for (TInt i(0); i < nCount; i++)
+        {           
+        TBuf<KMaxFileName> appName;
+        appName = HlpList->MdcaPoint(i);
+        TRAP_IGNORE(aDataBase->InsertKeywordL(appName,i,HlpList->Item(i)->HelpFileUid()));
+        }   
+    delete HlpList;
+    }
+// --------------------------------------------------------------------------
+// Gets the available TOC1 from the legacy content and sends them to the
+// database. Local copy of the TOC1 objects is maintained for generating TOC2
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase)
+    {    
+    const TInt twoColumnFlatArray = 2;
+    CDesCArray* categoryList = new(ELeave) CDesCArrayFlat(twoColumnFlatArray);
+    CleanupStack::PushL(categoryList);
+    iModel->CategoryListL(categoryList);
+    CCSXHLegacyTOC1* CategoryObj;
+    TBuf<KMaxFileName> appName;
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);          
+    for (TInt i(0); i < categoryList->Count(); i++)
+        {           
+        appName = categoryList->MdcaPoint(i);                           
+        CategoryObj = CCSXHLegacyTOC1::NewL(appName);
+        if(aDataBase->GetMainTopics()->InsertChild(CategoryObj))
+                iLegacyTOC1List.Append(CategoryObj);//Keep a local copy*/       
+        }
+    CleanupStack::Pop(categoryList);            
+    delete categoryList;
+    }
+// --------------------------------------------------------------------------
+// Gets the available TOC2 objects for the TOC1 object
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateTOC2ListL(CCSXHGenericTOC1& aGenericTOC1Object,
+                                 RPointerArray<CCSXHHelpContentBase>* GenericTOC2List)
+    {
+    iModel->SearchL(ETopicListForCategory, aGenericTOC1Object.GetName());
+    if(iHlpList)
+        {
+        delete iHlpList;
+        //Next line is Needed for code scanner
+        iHlpList = NULL;
+        }
+    iHlpList = CHlpList::NewL();
+    iModel->LoadListL(iHlpList);
+    
+    TInt count(iHlpList->MdcaCount());
+    CCSXHGenericTOC2* PLegacyTOC2;
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>); 
+    for (TInt i(0); i < count; i++)
+        {    
+        PLegacyTOC2 = CCSXHLegacyTOC2::NewL(&aGenericTOC1Object,iHlpList->MdcaPoint(i));
+        if (KErrNone != GenericTOC2List->InsertInOrder(PLegacyTOC2,anOrder))
+            delete PLegacyTOC2;
+        }        
+    }       
+// --------------------------------------------------------------------------
+// Gets the RTF content for the given topic
+// --------------------------------------------------------------------------    
+TAny* CCSXHLegacyContentParser::GetTopicContentL(CCSXHGenericTOC2* aTopic)
+    {
+    TInt nCount(iHlpList->MdcaCount());
+    TInt nIndex(0);
+    for(nIndex=0;nIndex < nCount; nIndex++)
+        {
+        TBuf<KMaxFileName> appName; 
+        appName.Append(iHlpList->MdcaPoint(nIndex));
+        if(appName.Compare(aTopic->GetName())==0)
+            break;
+        }
+    if(iTopic)
+        {
+        delete iTopic;
+        //Next line is Needed for code scanner
+        iTopic = NULL;
+        }
+    iTopic = CHlpTopic::NewL();
+    CHlpItem* item = iHlpList->Item(nIndex); 
+    iModel->TopicSearchL(*item);    
+    iModel->LoadTopicL(iTopic);    
+    return iTopic->TopicText();    
+    }
+
+void CCSXHLegacyContentParser::HandleModelEventL(TInt aEvent)
+    {
+    iStatus = aEvent;   
+    }
+
+// --------------------------------------------------------------------------
+// Gets the number of kywd subtopics for the given kywd
+// --------------------------------------------------------------------------    
+TInt CCSXHLegacyContentParser::InitGenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* aKywdTOC1Object)
+    {
+    if(aKywdTOC1Object->LegacyIndex() == -1 || (!iLegacyTOC1List.Count()))      
+        return 0;
+    CHlpList* SearchList; 
+    
+    if(iHlpList)
+        {
+        delete iHlpList;
+        //Next line is Needed for code scanner
+        iHlpList = NULL;
+        }
+    iHlpList = CHlpList::NewL();
+    SearchList = CHlpList::NewLC();
+    iModel->SearchL(EIndexList);
+    iModel->LoadListL(SearchList);  
+    //Search Panel    
+    CHlpItem* item = SearchList->Item(aKywdTOC1Object->LegacyIndex());
+    iModel->IndexSearchL(*item);    
+    iModel->LoadListL(iHlpList);        
+    
+    CleanupStack::PopAndDestroy(SearchList);
+    return iHlpList->MdcaCount();
+    }
+    
+    
+// --------------------------------------------------------------------------
+// Gets the available kywd subtopics for the given kywd
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* aKywdTOC1Object)
+    {
+    if(aKywdTOC1Object->LegacyIndex() == -1 || (!iLegacyTOC1List.Count()))      
+        return;
+    
+    TInt nCount(iHlpList->MdcaCount());
+    CCSXHGenericTOC2* PLegacyTOC2;
+    TLinearOrder<CCSXHGenericTOC2> anOrder(Orderer<CCSXHGenericTOC2>); 
+    for (TInt i(0); i < nCount; i++)
+        {   
+        PLegacyTOC2 = CCSXHLegacyTOC2::NewL(aKywdTOC1Object,iHlpList->MdcaPoint(i),ETrue);
+        iDataBase->InsertKeywordTopic(aKywdTOC1Object,PLegacyTOC2);
+        iDataBase->IncrementKeywordSearchCount();
+        }    
+  
+    }
+   
+CCSXHLegacyTOC1* CCSXHLegacyContentParser::GetTOC1ForTOC2(CCSXHLegacyTOC2*)
+    {
+    TInt count = iLegacyTOC1List.Count();
+    CCSXHLegacyTOC1* toc1; 
+    for(TInt i = 0; i<count ; ++i)
+        {
+        toc1 = iLegacyTOC1List[i];
+        if(iTopic->Category().Compare(toc1->GetName())==0)
+            return toc1;
+        }
+    return NULL;    
+    }
+    
+CCSXHHelpContentBase* CCSXHLegacyContentParser::GetContextTopic(TCoeHelpContext& aContext)
+    {
+        TRAPD(err,LoadContextTopicL(aContext));
+        if(err != KErrNone || NULL == iTopic)
+            return NULL;
+        
+        TInt count = iLegacyTOC1List.Count();
+        CCSXHLegacyTOC1* toc1; 
+        for(TInt i = 0; i<count ; ++i)
+            {
+            toc1 = iLegacyTOC1List[i];
+            if(iTopic->Category().Compare(toc1->GetName())==0)
+                {
+                return toc1->GetContextTopic(iTopic->TopicTitle());
+                }
+            }
+        return NULL;
+    }
+
+void CCSXHLegacyContentParser::LoadContextTopicL(TCoeHelpContext& aContext)
+    {
+    if(iTopic)
+        {
+        delete iTopic;
+        //Next line is Needed for code scanner
+        iTopic = NULL;
+        }
+    
+    iModel->ContextSearchL(aContext);
+    if(ETopicAvailable == iStatus )
+        {
+        iTopic = CHlpTopic::NewL();
+        iModel->LoadTopicL(iTopic);     
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHLegacyTOC1.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTOC1 class definition
+*
+*/
+
+#include "CSXHLegacyTOC1.h"
+#include "CSXHViewIDs.h"
+#include "CSXHLegacyContentParser.h"
+#include "CSXHHelpDataBase.h"
+
+#include <e32base.h>
+
+CCSXHLegacyTOC1* CCSXHLegacyTOC1::NewL(const TDesC& aName)
+    {
+    CCSXHLegacyTOC1* self = CCSXHLegacyTOC1::NewLC(aName);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCSXHLegacyTOC1* CCSXHLegacyTOC1::NewLC(const TDesC& aName)
+    {
+    CCSXHLegacyTOC1* self = new(ELeave) CCSXHLegacyTOC1(aName);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CCSXHLegacyTOC1::CCSXHLegacyTOC1(const TDesC& aName) :
+CCSXHGenericTOC1(aName)
+    {//No implementation required
+    }
+
+TUid CCSXHLegacyTOC1::GetViewID() const
+    {
+    return KCSXHToc2ViewID;
+    }
+    
+CCSXHHelpContentBase* CCSXHLegacyTOC1::GetContextTopic(const TDesC& aContextName)
+    {
+    TBool resetChildList = EFalse;
+    if(iChildList ==NULL)
+        {
+        InitChildList();//Generates child list if required.     
+        resetChildList = ETrue;
+        }
+        
+    TInt count =    iChildList->Count();
+    CCSXHHelpContentBase* toc2 = NULL;
+    for(TInt i=0;i<count;++i )
+        {
+        toc2 = (*iChildList)[i];
+        if(toc2->GetName().Compare(aContextName) == 0)
+            return toc2;//Child list should not be reset
+        }
+    if(resetChildList)
+        ResetChildList();
+    return NULL;    
+    }
+
+void CCSXHLegacyTOC1::InitChildList()
+    {
+    if(iChildList != NULL)
+        return;
+    ConstructChildList();
+    
+    TRAP_IGNORE(CCSXHHelpDataBase::GetInstance()->
+    GetLegacyParser()->GenerateTOC2ListL(*this,iChildList));
+    }
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHLegacyTOC2.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTOC2 class definition
+*
+*/
+
+#include "CSXHLegacyTOC2.h"
+#include "CSXHViewIDs.h"
+#include "CSXHGenericTOC1.h"
+#include "CSXHLegacyContentParser.h"
+#include "CSXHHelpDataBase.h"
+
+#include <e32base.h>
+
+CCSXHLegacyTOC2* CCSXHLegacyTOC2::NewL(CCSXHGenericTOC1* aParent,const
+TDesC& aName,TBool aKey)
+    {
+    CCSXHLegacyTOC2* self = CCSXHLegacyTOC2::NewLC(aParent,aName,aKey);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCSXHLegacyTOC2* CCSXHLegacyTOC2::NewLC(CCSXHGenericTOC1* aParent,const
+TDesC& aName,TBool aKey)
+    {
+    CCSXHLegacyTOC2* self = new(ELeave) CCSXHLegacyTOC2(aParent,aName,aKey);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+
+CCSXHLegacyTOC2::CCSXHLegacyTOC2(CCSXHGenericTOC1* aParent,const TDesC& aName,TBool aKey) :
+CCSXHGenericTOC2(aParent,aName),iKeyWordTopic (aKey)
+    {//No implementation required
+    }
+
+TUid CCSXHLegacyTOC2::GetViewID() const
+    {
+    return KCSXHLegacyTopicViewID;
+    }
+    
+EXPORT_C TAny* CCSXHLegacyTOC2::GetTopicContentL()
+    {
+    
+    return CCSXHHelpDataBase::GetInstance()->GetLegacyParser()->GetTopicContentL(this);
+    //return NULL;
+    }
+
+EXPORT_C  CCSXHLegacyTOC1* CCSXHLegacyTOC2::GetLegacyParent()
+    {
+    if(!iKeyWordTopic)
+        return NULL;
+    return CCSXHHelpDataBase::GetInstance()->GetLegacyParser()->GetTOC1ForTOC2(this);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHMainTopics.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHMainTopics class definition
+*
+*/
+
+#include "CSXHMainTopics.h"
+#include "CSXHHTMLContentParser.h"
+#include "CSXHHelpDataBase.h"
+#include "CSXHViewIDs.h"
+#include "csxhconstants.h"
+
+#include <eikenv.h> 
+#include <e32base.h>
+
+CCSXHMainTopics* CCSXHMainTopics::NewL(const TUid& aUid, const TApaAppCaption& aAppCaption)
+    {
+    CCSXHMainTopics* self = CCSXHMainTopics::NewLC(aUid,aAppCaption);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCSXHMainTopics* CCSXHMainTopics::NewLC(const TUid& aUid,const TApaAppCaption& aAppCaption)
+    {
+    CCSXHMainTopics* self = new(ELeave) CCSXHMainTopics(aUid, aAppCaption);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CCSXHMainTopics::CCSXHMainTopics(const TUid& aUid,const TDesC& aName) :
+CCSXHGenericTOC1(aName), iUid(aUid)
+    {//No implementation required
+    }
+
+CCSXHMainTopics::~CCSXHMainTopics()
+    {//No implementation required
+    }   
+
+TUid CCSXHMainTopics::GetViewID() const
+    {
+    return iUid;
+    }
+
+void CCSXHMainTopics::ResetChildList()
+    {
+    if(iChildList == NULL)
+        return;
+    TInt count = iChildList->Count();
+    for(TInt i=0;i<count;++i )
+        {
+        STATIC_CAST(CCSXHGenericTOC1*,(*iChildList)[i])->ResetChildList();
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHRuntimeIndexing.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHRuntimeIndexing class definition
+*
+*/
+
+
+#include <pathinfo.h>
+#include <utf.h>
+#include <bautils.h>
+#include <eikenv.h>
+#include <aknnotedialog.h> // for CAknNoteDialog
+#include <aknnotewrappers.h>
+#include <SenXmlUtils.h>
+#include <SenXmlConstants.h>
+
+#include "CSXHRuntimeIndexing.h"
+#include "CSXHHtmlTOC1.h"
+#include "csxhconstants.h"
+
+// buffer length of Drive information in index file
+//
+const TInt KMaxDriveInfo = 100;
+
+CCSXHRuntimeIndexing::CCSXHRuntimeIndexing()
+    {
+    iCoeEnv = CCoeEnv::Static();
+    }
+    
+CCSXHRuntimeIndexing::~CCSXHRuntimeIndexing()
+    {
+    delete iFullDirName;
+    iFile.Close();
+    }
+    
+CCSXHRuntimeIndexing* CCSXHRuntimeIndexing::NewL()
+    {
+    CCSXHRuntimeIndexing* self = new ( ELeave ) CCSXHRuntimeIndexing();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+void CCSXHRuntimeIndexing::ConstructL()
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    iFullDirName = HBufC::NewL( KMaxFileName );
+
+    TFileName fullDirName;
+    
+    GetPrivatePath( fullDirName );
+    if ( !BaflUtils::PathExists( fileSession, fullDirName ) )
+        {
+        fileSession.CreatePrivatePath( EDriveC );
+        }
+    
+    TInt len = fullDirName.Length();
+    TDriveList dirList; 
+    if( fileSession.DriveList( dirList ) == KErrNone )
+        {
+        TDriveInfo info;
+        TInt driveListLen = dirList.Length();
+        
+        for ( TInt i = 0; i < driveListLen; i++ )
+            {
+            // make separate folder for C/D/E/... drive
+            // e.g. C:\\private\\10005234\\C\\
+
+            TInt err = fileSession.Drive( info, i );
+            if ( err == KErrNone &&
+                    info.iType != EMediaNotPresent )
+                {
+                TChar driveChar;
+                RFs::DriveToChar( i, driveChar );
+                fullDirName.Append( driveChar );
+                fullDirName.Append( KFwdSlash );
+                fileSession.MkDir( fullDirName );
+                fullDirName.Delete( len, 3 );
+                }
+            }
+        
+        }
+    }
+    
+TBool CCSXHRuntimeIndexing::IndexFileExists()
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    TBuf<KMaxFileName> fileName;
+    GetPrivatePath( fileName );
+    fileName.Append( _L("Z\\") );
+    AppendLocale( fileName );
+    fileName.Append( KMasterMetaFile );
+    
+    // Now the dirName is C:\\private\\<app-uid>\\Z\\index.xml
+    // check if it exists, if yes, runtime indexing must be launched before
+    // since Z based Help content must be delivered with cell phone
+    //
+    return BaflUtils::FileExists( fileSession, fileName );
+    
+    }
+    
+void CCSXHRuntimeIndexing::BeginIndexFile( const TChar& aDrive )
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    TPtr des = iFullDirName->Des();
+    iDriveLetter = aDrive;
+    des.Zero();
+    GetPrivatePath( des );
+    des.Append( aDrive );
+    des.Append( KFwdSlash );
+    AppendLocale( des );
+    if ( !BaflUtils::PathExists( fileSession, des ) )
+        {
+        // generate C:\\private\\<help-uid>\\<aDrive>\\ folder
+        //
+        fileSession.MkDir( des );
+        }
+    
+    // for temporary usage, once it's finished successfully,
+    // rename to index.xml. otherwise, the old index file still exists.
+    //
+    des.Append( KMasterMetaTmpFile );
+    iFile.Replace( fileSession, des, EFileWrite );
+    
+    HBufC8* driveInfo = HBufC8::NewLC( KMaxDriveInfo );
+    TPtr8 ptr = driveInfo->Des();
+    ptr.Append( KIndexXMLVesion );
+    ptr.Append( _L( "<collections drive=\"" ) );
+    ptr.Append( aDrive);
+    ptr.Append( _L( "\">\r\n" ) );
+    iFile.Write( *driveInfo );
+    CleanupStack::PopAndDestroy( driveInfo );
+    }
+    
+void CCSXHRuntimeIndexing::FinishAndCloseIndexFileL()
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    iFile.Write( KIndexCollectEnd );
+    iFile.Close();  
+      
+    TTime time;
+    // Replace the index.xml with temporary file, in case it fails, will have no impact
+    // the original index.xml, it's a backup solution
+    //
+    TBuf<KMaxFileName> newName;
+    TInt err = KErrNone;
+    newName.Copy( *iFullDirName );
+    TInt pos = newName.LocateReverse( TChar('\\') );
+    newName.Delete( pos + 1, newName.Length() - pos - 1 ); // remove the temp name
+    newName.Append( KMasterMetaFile ); //  and append index.xml
+    
+    err = fileSession.Replace( *iFullDirName, newName );
+    
+    if ( err == KErrNone )
+        {
+        // set the modified date of master index.xml
+        // to be the same with related help content folder
+        // e.g. C:\\resource\\xhtml\\01\\ modified time is 2009.3.1
+        // C:\\private\\10005234\\C\\01\\index.xml will be 2009.3.1
+        // this will make sure once help content folder changed, index.xml can be
+        // determined to change.
+        TBuf<KMaxFileName> helpDir;
+        helpDir.Append( iDriveLetter );  
+        helpDir.Append( KInstallPath );
+        // append locale information
+        AppendLocale( helpDir );
+        
+        fileSession.Modified( helpDir, time );
+        err = fileSession.SetModified( newName, time );
+        
+        }
+    
+    }
+      
+void CCSXHRuntimeIndexing::RuntimeGenerateIndexL( const CCSXHHtmlTOC1& aToc1, const TDesC& aFeature )
+    {
+    // Form into an entry, like
+    // <collection FeatureID="-1" id="0x10005951" navtitle="Bluetooth"></collection>
+    HBufC8* appName = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aToc1.GetName() );
+    CleanupStack::PushL(appName);
+    TRAPD( err, SenXmlUtils::LeaveOnXmlEscapesL( *appName ) );
+    TInt length = KMaxIndexEntryExclude;
+    TBuf8<KMaxUidLength> buffUid;
+    
+    buffUid.Append( KHexPrefix );
+    buffUid.AppendNumFixedWidth( aToc1.GetAppUid().iUid, EHex, 8 );
+    length += appName->Length();
+    length += aFeature.Length();
+    HBufC8* entry = HBufC8::NewLC( length );
+    TPtr8 des = entry->Des();
+    // Append entry tag
+    des.Append( KIndexXMLEntryBegin );
+    // Append feature id attribute "FeatureID"
+    des.Append( KAppFeatureIDTag );
+    des.Append( KIndexQuoteBegin );
+    // Append feature id
+    des.Append( aFeature );
+    des.Append( KIndexQuoteEnd );
+    // Append app id attribute "id"
+    des.Append( KMasterCollection_idTag );
+    des.Append( KIndexQuoteBegin );
+    // Append app id
+    des.Append( buffUid );
+    des.Append( KIndexQuoteEnd );
+    // Append app name attribut "navtitle"
+    des.Append( KTOC2NameTag );
+    des.Append( KIndexQuoteBegin );
+    if ( err == KErrSenInvalidCharacters )
+        {
+        // special handling to the XML-Escaped char
+        HBufC8* newElement = SenXmlUtils::EncodeHttpCharactersLC( *appName );
+        des.Append( *newElement );
+        CleanupStack::PopAndDestroy( newElement );
+        }
+    else
+        {
+        des.Append( *appName );
+        }
+
+    des.Append( KIndexXMLEntryEnd );
+    iFile.Write( *entry );
+    
+    CleanupStack::PopAndDestroy( entry );
+    CleanupStack::PopAndDestroy( appName );
+    
+    }
+    
+void CCSXHRuntimeIndexing::GetPrivatePath( TDes& aName )
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    TBuf<KMaxFileName> privatePath;
+    TChar drive;
+    RFs::DriveToChar( EDriveC, drive );
+    
+    fileSession.PrivatePath( privatePath );
+    aName.Append( drive );
+    aName.Append( TChar(':') ); 
+    aName.Append( privatePath );
+    }
+
+void CCSXHRuntimeIndexing::AppendLocale( TDes& aDir )
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    RArray<TLanguage> langs;
+    BaflUtils::GetDowngradePathL( fileSession, User::Language(), langs );
+    TInt len = aDir.Length();
+    
+    if ( len > 0 )
+        {
+        TLanguage lang = langs[0];
+        if(lang < 10)
+            {
+            aDir.AppendNumFixedWidth( lang, EDecimal,2 );
+            }
+        else
+            {
+            aDir.AppendNum( lang );
+            }
+        }
+    else
+        {
+        // rarely case, if no current language, use English
+        aDir.Append( _L("01") );
+        }
+        
+    aDir.Append( KFwdSlash );
+    langs.Reset();
+    }
+    
+void CCSXHRuntimeIndexing::DeleteIndexFile( const TChar& aDrive )
+    {
+    RFs& fileSession = iCoeEnv->FsSession();
+    TBuf<KMaxFileName> des;
+    GetPrivatePath( des );
+    des.Append( aDrive );
+    des.Append( KFwdSlash );
+    AppendLocale( des );
+    // C:\\private\\<app-uid>\\<drive letter>\\<language-id>\\index.xml
+    des.Append( KMasterMetaFile );
+    
+    if ( BaflUtils::FileExists( fileSession, des ) )
+        {
+        fileSession.Delete( des );
+        }
+
+    }
+    
+TInt CCSXHRuntimeIndexing::CheckDirChange( const TChar& aDrive )
+    {
+    RFs& fsSession = iCoeEnv->FsSession();
+    
+    // Begin to search help content folder to see if there are date modify
+    // meanwhile, compare to the related folder in private directory
+    TFileName dirName;
+    dirName.Append( aDrive );
+    dirName.Append( KInstallPath );
+
+    // Begin to append locale, note this will append current locale,
+    // thru which, app can determine if it's caused by user changed locales
+    AppendLocale( dirName );
+
+    TTime dirModified(0);
+    TTime fileModified(0);
+    
+    if ( BaflUtils::PathExists( fsSession, dirName ) )
+        {
+        // here is modified time of help content folder
+        fsSession.Modified( dirName, dirModified );
+        }
+    else
+        {
+        // fast return, no need to go on checking
+        return KNoDirExist;
+        }
+
+    TFileName filename;
+    GetPrivatePath( filename );
+    filename.Append( aDrive );
+    filename.Append( KFwdSlash );
+    AppendLocale( filename );
+    filename.Append( KMasterMetaFile );
+                
+    if ( BaflUtils::FileExists( fsSession, filename ) )
+        {
+        // here is modified time of index.xml
+        //
+        fsSession.Modified( filename, fileModified );
+        }
+    else
+        {
+        return KNoIndexExist;
+        }
+                    
+    if ( fileModified != dirModified )
+        {
+        // folder changed, return it
+        TInt ret = KErrNotFound;
+        RFs::CharToDrive( aDrive, ret );
+        return ret;
+        }
+    
+    return KNoChange;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHXMLParseHandler.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,644 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHXMLParseHandler class definition
+*
+*/
+
+#include "CSXHXMLParseHandler.h"
+#include "CSXHHtmlTOC2.h"
+#include "CSXHKywdTopics.h"
+#include "CSXHHelpDataBase.h"
+#include "CSXHHtmlTOC1.h"
+#include "csxhconstants.h"
+#include "CSXHHTMLContentParser.h"
+
+#include <aknnotewrappers.h> 
+#include <utf.h> 
+#include <eikenv.h> 
+#include <bautils.h>
+
+
+CCSXHXMLParseHandler::CCSXHXMLParseHandler(CCoeEnv*  aCoeEnv)
+    {   
+    iCoeEnv = aCoeEnv;
+    }
+    
+CCSXHXMLParseHandler::~CCSXHXMLParseHandler()
+	{
+	if(iFeatureIds)
+    	{
+    	delete iFeatureIds;
+    	iFeatureIds = NULL;
+    	}
+	}
+TInt CCSXHXMLParseHandler::StartDocument()
+    {
+    return KErrNone;
+    }
+
+TInt CCSXHXMLParseHandler::EndDocument()
+    {    
+    return KErrNone;
+    }
+
+void CCSXHXMLParseHandler::SetDataBasePtr(CCSXHHelpDataBase* aDataBase)
+    {
+    iDataBase = aDataBase;
+    } 
+    
+TDesC& CCSXHXMLParseHandler::GetApplicationName()
+    {
+    return iApplicationName;
+    }
+    
+TPtr CCSXHXMLParseHandler::GetFeatureIds()
+    {    
+    return iFeatureIds->Des();	
+    }
+    
+TBool CCSXHXMLParseHandler::SetAppNameFlag(const TDesC8&  alocalName,const TDesC& aAppTag)
+    {   
+    //R_TYPE_APPLICATION_TAG_NAME
+    TBool Result = EFalse;
+    TBuf<KMaxFileName> AppName;
+    CnvUtfConverter::ConvertToUnicodeFromUtf8(AppName,alocalName);
+    if(AppName.Compare(aAppTag) == 0)
+        {
+        iApplicationName.Copy(KEmptyString);        
+        Result = ETrue;
+        }
+    else
+        {
+        Result = EFalse;
+        }
+    return Result;      
+    } 
+
+//-------------- CCSXHXMLParseHandler_Kywd -------------------
+
+void CCSXHXMLParseHandler_Kywd::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
+    {
+    iParser = aParser;
+    }
+
+CCSXHXMLParseHandler_Kywd* CCSXHXMLParseHandler_Kywd::NewL(CCoeEnv* aCoeEnv)
+    {
+    CCSXHXMLParseHandler_Kywd* self = new (ELeave)CCSXHXMLParseHandler_Kywd(aCoeEnv);   
+    return self;
+    }
+    
+CCSXHXMLParseHandler_Kywd::CCSXHXMLParseHandler_Kywd(CCoeEnv* aCoeEnv)
+:CCSXHXMLParseHandler(aCoeEnv)                      
+    {       
+        iCurrentHtmlToc1 = NULL;
+        iIsTargetName = EFalse;     
+    }
+    
+TInt  CCSXHXMLParseHandler_Kywd::StartElement (const TDesC8&  /*iURI*/ , const TDesC8&  
+alocalName, const TDesC8&  /*iqualname*/, const RAttributeArray&  aAttributes) 
+    {
+    if(iFeatureIds)
+    	{
+    	delete iFeatureIds;
+    	iFeatureIds = NULL;
+    	}
+    	
+    
+    TRAP_IGNORE(iFeatureIds = HBufC::NewL(2));
+    TPtr FIdValue = iFeatureIds->Des();
+    FIdValue.Copy(_L("-1"));  
+    
+    if(iIsTOC2View)
+        {
+        CreateTOC2ObjectsforKeywordSearch(alocalName,aAttributes);
+        }
+    else
+        {               
+        iIsAppName = SetAppNameFlag(alocalName,KSearchViewTOC1Tag); 
+        
+	    TInt nElements = aAttributes.Count();
+	    TBuf<KMaxFileName> TagName; 
+	    RAttribute AttributeInfo;
+	    RTagInfo TagInformation;	    
+    	CnvUtfConverter::ConvertToUnicodeFromUtf8(TagName,alocalName);
+    
+	    for(TInt i=0; i<nElements; i++)
+	        {
+	        AttributeInfo = aAttributes.operator[](i);             
+	        TagInformation = AttributeInfo.Attribute();
+	        
+	        TBuf<KMaxUnits> LocalName;
+	        //Read from resource file
+	        CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());	        
+	        if(LocalName.Compare(_L("FeatureID")) == 0 && TagName.Compare(_L("text")) == 0) 
+	        	{
+	        	if(iFeatureIds)
+			    	{
+			    	delete iFeatureIds;
+			    	iFeatureIds = NULL;
+			    	}
+	        	
+	        	TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()));
+	        	TPtr FIdValue = iFeatureIds->Des(); 
+	        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
+	        	}	        	
+	        }       
+        }   
+    return KErrNone;
+    }
+
+TInt CCSXHXMLParseHandler_Kywd::EndElement  (  const TDesC8&  ,const TDesC8& ,const TDesC8& ) 
+    {
+	TRAP_IGNORE(CreateAndInsertKywdL());//Result can be ignored        
+    iIsTargetName = EFalse;
+    iIsAppName = EFalse;    
+    return KErrNone;
+    }
+    
+TInt CCSXHXMLParseHandler_Kywd::Characters (const TDesC8&  aBuff, const TInt /*aStart*/, const TInt /*aLength*/) 
+    {
+    TBuf<KMaxFileName> TitleName;   
+    if(iIsAppName)
+        {           
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff);
+        iApplicationName.Append(TitleName);     
+        }
+    else if(iIsTargetName)
+        {
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff);
+        iKeywordSearchTOC2TitleName.Append(TitleName);              
+        }
+    return KErrNone;
+    }
+
+void CCSXHXMLParseHandler_Kywd::CreateTOC2ObjectsforKeywordSearch(const TDesC8& 
+ alocalName, const RAttributeArray&  aAttributes)
+    {
+        iIsAppName = SetAppNameFlag(alocalName,KSearchViewTOC1Tag);
+        
+        TInt nElements = aAttributes.Count();
+        TBuf<KMaxFileName>TagValue; 
+        RAttribute AttributeInfo;
+        RTagInfo TagInformation;
+		
+		TBuf<KMaxFileName> AppName;
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(AppName,alocalName);
+        if(AppName.Compare(KSearchViewTOC2Tag) == 0)
+            {
+            iKeywordSearchTOC2TitleName.Copy(KEmptyString);
+            iIsTargetName = ETrue;
+            }
+        else
+            {
+            iIsTargetName = EFalse;
+            }
+		
+		if(!iIsTOC2View)            		               
+			return;
+		
+        for(TInt i=0; i<nElements; i++)
+            {
+            AttributeInfo = aAttributes.operator[](i);             
+            TagInformation = AttributeInfo.Attribute();
+            
+            TBuf<KMaxUnits> LocalName;
+            //Read from resource file
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
+            if(LocalName.Compare(KHtmlPageTag) == 0)    
+                {               
+                CnvUtfConverter::ConvertToUnicodeFromUtf8(iHTMLPageName,
+                	AttributeInfo.Value().DesC());
+                }
+            else if(LocalName.Compare(_L("FeatureID")) == 0) 
+	            {
+   	        	if(iFeatureIds)
+			    	{
+			    	delete iFeatureIds;
+			    	iFeatureIds = NULL;
+			    	}
+	        	TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()));
+	        	TPtr FIdValue = iFeatureIds->Des(); 
+	        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
+
+	            }
+            }
+        
+    }   
+    
+void CCSXHXMLParseHandler_Kywd::CreateAndInsertKywdL()
+    {    
+    if(iParser->CheckFeatureIDL(iFeatureIds->Des()))
+        {
+        if(iIsAppName && !iIsTOC2View)
+	        {
+	        iDataBase->InsertKeywordL(iApplicationName,iCurrentHtmlToc1);	
+	        }
+        else if(iIsTargetName && iApplicationName.Compare(iTOC1Name)==0)
+	        {
+	        CCSXHHtmlTOC2* PXHTMLObject = 
+	        CCSXHHtmlTOC2::NewL(iCurrentHtmlToc1,iKeywordSearchTOC2TitleName,iHTMLPageName,ETrue);
+	        PXHTMLObject->SetKywdParent(STATIC_CAST(CCSXHKywdTopics*,iDataBase->GetKywdTopics())
+	                                            ->GetSelectedTopic());
+			STATIC_CAST(CCSXHHtmlTOC2*,PXHTMLObject)->SetHtmlFilePath(iFilePath);                                            
+	        iDataBase->InsertKeywordTopicL(/*iTOC1Name,*/PXHTMLObject);	
+	        }
+        }
+    }
+    
+void CCSXHXMLParseHandler_Kywd::SetTOC1Title(const TDesC& aName)
+    {
+    iTOC1Name = aName;  
+    }   
+
+void CCSXHXMLParseHandler_Kywd::SetCurrentHtmlToc1(CCSXHHtmlTOC1* aCurrentHtmlToc1)
+    {
+    iCurrentHtmlToc1 = aCurrentHtmlToc1;
+    }
+    
+void  CCSXHXMLParseHandler_Kywd::SetIsTOC2(TBool aFlag)
+    {
+    iIsTOC2View = aFlag;
+    }       
+    
+void CCSXHXMLParseHandler_Kywd::SetPath(const TDesC&  aFilePath)
+	{
+	iFilePath.Copy(KEmptyString);
+	iFilePath.Append(aFilePath);
+	}    
+
+//-------------- CCSXHXMLParseHandler_MetaFile -------------------
+
+CCSXHXMLParseHandler_MetaFile* CCSXHXMLParseHandler_MetaFile::NewL(CCoeEnv* aCoeEnv)
+    {
+    CCSXHXMLParseHandler_MetaFile* self = new (ELeave)CCSXHXMLParseHandler_MetaFile(aCoeEnv);   
+    return self;
+    }
+    
+CCSXHXMLParseHandler_MetaFile::CCSXHXMLParseHandler_MetaFile(CCoeEnv* aCoeEnv)
+:CCSXHXMLParseHandler(aCoeEnv)
+    {
+    
+    }
+TInt  CCSXHXMLParseHandler_MetaFile::StartElement (const TDesC8&  , const TDesC8&  
+alocalName, const TDesC8&  , const RAttributeArray& aAttributes) 
+    {
+    iIsAppName = SetAppNameFlag(alocalName,KAppNameTag);
+
+    TInt nElements = aAttributes.Count();    
+    TBuf<KMaxFileName> LocalTagName; 
+    RAttribute AttributeInfo;
+    RTagInfo TagInformation;
+    
+    CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalTagName,alocalName);
+    for(TInt i=0; i<nElements; i++)
+        {
+        AttributeInfo = aAttributes.operator[](i);             
+        TagInformation = AttributeInfo.Attribute();
+        
+    	if(iFeatureIds)
+	    	{
+	    	delete iFeatureIds;
+	    	iFeatureIds = NULL;
+	    	}
+    	
+    	TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()));
+    	TPtr FIdValue = iFeatureIds->Des(); 
+    	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());    	
+        }
+        
+    if(LocalTagName.Compare(KAppNameTag) == 0 && nElements == 0)        
+		{
+		if(iFeatureIds)
+	    	{
+	    	delete iFeatureIds;
+	    	iFeatureIds = NULL;
+	    	}
+		
+		TRAP_IGNORE(iFeatureIds = HBufC::NewL(2));
+	    TPtr FIdValue = iFeatureIds->Des();
+	    FIdValue.Copy(_L("-1"));  
+		}
+        
+    return KErrNone;
+    }
+
+TInt CCSXHXMLParseHandler_MetaFile::EndElement  (  const TDesC8&  ,const TDesC8& ,const TDesC8& ) 
+    {
+    iIsAppName = EFalse;
+    return KErrNone;
+    }
+    
+TInt CCSXHXMLParseHandler_MetaFile::Characters (const TDesC8&  aBuff, const TInt /*aStart*/, const TInt /*aLength*/) 
+    {
+    TBuf<KMaxFileName> TitleName;   
+    if(iIsAppName)
+        {           
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff);
+        iApplicationName.Append(TitleName);     
+        }
+    return KErrNone;
+    }
+    
+
+//-------------- CCSXHXMLParseHandler_MasterMetaFile -------------------
+CCSXHXMLParseHandler_MasterMetaFile* CCSXHXMLParseHandler_MasterMetaFile::NewL(CCoeEnv* aCoeEnv)
+    {
+    CCSXHXMLParseHandler_MasterMetaFile* self = new (ELeave)CCSXHXMLParseHandler_MasterMetaFile(aCoeEnv); 
+    return self;
+    }
+    
+CCSXHXMLParseHandler_MasterMetaFile::CCSXHXMLParseHandler_MasterMetaFile(CCoeEnv* aCoeEnv)
+:CCSXHXMLParseHandler(aCoeEnv)
+    {
+        
+    }
+    
+TInt  CCSXHXMLParseHandler_MasterMetaFile::StartElement (const TDesC8&  , const TDesC8&  
+, const TDesC8&  , const RAttributeArray&  aAttributes) 
+    {
+    TRAP_IGNORE(CreateTOC1ObjectsL(aAttributes));
+    return KErrNone;
+    }
+    
+
+        
+void CCSXHXMLParseHandler_MasterMetaFile::CreateTOC1ObjectsL(const
+ RAttributeArray&  aAttributes)
+    {
+    TInt nElements = aAttributes.Count();
+    TBuf<KMaxFileName> appUid; 
+    TBuf<KMaxFileName> appName; 
+    RAttribute AttributeInfo;
+    RTagInfo TagInformation;
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);      
+	
+    for(TInt i=0; i<nElements; i++)
+        {
+        AttributeInfo = aAttributes.operator[](i);             
+        TagInformation = AttributeInfo.Attribute();
+        
+        TBuf<KMaxUnits> LocalName;
+        //Read from resource file
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
+        
+        if ( LocalName.Compare( KDriveInfo ) == 0 )
+            {
+            TChar driveLetter(AttributeInfo.Value().DesC()[0]);
+            RFs::CharToDrive( driveLetter, iDrive );
+            }
+            
+        if(LocalName.Compare(KMasterCollection_idTag) == 0)
+            {
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(appUid,AttributeInfo.Value().DesC());                    
+            }
+                    
+        if(LocalName.Compare(KTOC2NameTag) == 0)
+            {
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(appName,AttributeInfo.Value().DesC());
+            if(2 == nElements)
+            	{
+            	if(iFeatureIds)
+			    	{
+			    	delete iFeatureIds;
+			    	iFeatureIds = NULL;
+			    	}
+            	
+            	iFeatureIds = HBufC::NewL(2);
+			    TPtr FIdValue = iFeatureIds->Des();
+			    FIdValue.Copy(_L("-1"));  
+            	}
+            	
+            
+            iParser->InsertHTMLToc1L( appUid, appName, iDrive, iDataBase, iFeatureIds->Des() );                            	
+            }
+            
+        if(LocalName.Compare(_L("FeatureID")) == 0) 
+            {
+        	if(iFeatureIds)
+		    	{
+		    	delete iFeatureIds;
+		    	iFeatureIds = NULL;
+		    	}
+        	
+        	iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length());
+        	TPtr FIdValue = iFeatureIds->Des(); 
+        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
+            }            
+        }        
+    } 
+    
+void CCSXHXMLParseHandler_MasterMetaFile::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
+    {
+    iParser = aParser;
+    }
+
+    
+//-------------- CCSXHXMLParseHandler_IndexFile -------------------
+
+CCSXHXMLParseHandler_IndexFile* CCSXHXMLParseHandler_IndexFile::NewL(CCoeEnv* aCoeEnv)
+    {
+    CCSXHXMLParseHandler_IndexFile* self = new (ELeave)CCSXHXMLParseHandler_IndexFile(aCoeEnv); 
+    return self;
+    }
+    
+CCSXHXMLParseHandler_IndexFile::CCSXHXMLParseHandler_IndexFile(CCoeEnv* aCoeEnv)
+:CCSXHXMLParseHandler(aCoeEnv)
+    {
+        
+    }
+    
+TInt  CCSXHXMLParseHandler_IndexFile::StartElement (const TDesC8&  , const TDesC8&  
+, const TDesC8&  , const RAttributeArray&  aAttributes) 
+    {
+    if(iFeatureIds)
+    	{
+    	delete iFeatureIds;
+    	iFeatureIds = NULL;
+    	}
+            	
+    TRAP_IGNORE(iFeatureIds = HBufC::NewL(2));
+    TPtr FIdValue = iFeatureIds->Des();
+    FIdValue.Copy(_L("-1"));  
+
+    TRAP_IGNORE(CreateTOC2ObjectsL(aAttributes));
+    return KErrNone;
+    }
+    
+void CCSXHXMLParseHandler_IndexFile::SetArray(RPointerArray<CCSXHHelpContentBase>* aHTMLlist)
+    {
+    iTOC2Array = aHTMLlist;
+    }
+    
+void CCSXHXMLParseHandler_IndexFile::SetGenericTOC1Object(CCSXHGenericTOC1& aParent)
+    {
+    iParent = &aParent;
+    }
+    
+void CCSXHXMLParseHandler_IndexFile::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
+    {
+    iParser = aParser;
+    }
+    
+        
+void CCSXHXMLParseHandler_IndexFile::CreateTOC2ObjectsL(const
+ RAttributeArray&  aAttributes)
+    {
+    TInt nElements = aAttributes.Count();
+    TBuf<KMaxFileName>TagValue; 
+    RAttribute AttributeInfo;
+    RTagInfo TagInformation;
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);      
+
+    for(TInt i=0; i<nElements; i++)
+        {
+        AttributeInfo = aAttributes.operator[](i);             
+        TagInformation = AttributeInfo.Attribute();
+        
+        TBuf<KMaxUnits> LocalName;
+        //Read from resource file
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
+                    
+        if(LocalName.Compare(KTOC2NameTag) == 0)
+            {
+            if(iParser->CheckFeatureIDL(iFeatureIds->Des()) || 2 == nElements)
+	            {            	
+	            CnvUtfConverter::ConvertToUnicodeFromUtf8(TagValue,AttributeInfo.Value().DesC());
+	            
+	            CCSXHGenericTOC2* PXHTMLObject = CCSXHHtmlTOC2::NewL(iParent,
+	            								 TagValue,iHTMLPageName);
+
+				STATIC_CAST(CCSXHHtmlTOC2*,PXHTMLObject)->SetHtmlFilePath(iFilePath);
+				
+	            if (KErrNone != iTOC2Array->InsertInOrder(PXHTMLObject,anOrder))
+	                delete PXHTMLObject;
+	            }            
+            }
+        else if(LocalName.Compare(KHtmlPageTag) == 0)   
+            {               
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(iHTMLPageName,
+            AttributeInfo.Value().DesC());
+            }
+        else if(LocalName.Compare(KCompressedTag) == 0)
+            {
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(iCompressString,
+			AttributeInfo.Value().DesC());
+            }
+        else if(LocalName.Compare(_L("FeatureID")) == 0)
+        	{
+        	if(iFeatureIds)
+		    	{
+		    	delete iFeatureIds;
+		    	iFeatureIds = NULL;
+		    	}
+        	
+        	iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length());
+        	TPtr FIdValue = iFeatureIds->Des(); 
+        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
+            }        
+        }        
+    } 
+    
+void CCSXHXMLParseHandler_IndexFile::SetPath(const TDesC&  aFilePath)
+	{
+	iFilePath.Copy(KEmptyString);
+	iFilePath.Append(aFilePath);
+	}
+    
+//-------------- CCSXHXMLParseHandler_MasterKeywordFile -------------------
+
+CCSXHXMLParseHandler_MasterKywd* CCSXHXMLParseHandler_MasterKywd::NewL(CCoeEnv* aCoeEnv)
+    {
+    CCSXHXMLParseHandler_MasterKywd* self = new (ELeave)CCSXHXMLParseHandler_MasterKywd(aCoeEnv); 
+    return self;
+    }
+    
+CCSXHXMLParseHandler_MasterKywd::CCSXHXMLParseHandler_MasterKywd(CCoeEnv* aCoeEnv)
+:CCSXHXMLParseHandler(aCoeEnv)
+    {
+        
+    }    
+
+TInt  CCSXHXMLParseHandler_MasterKywd::StartElement (const TDesC8&  , const TDesC8&  
+, const TDesC8&  , const RAttributeArray&  aAttributes) 
+    {
+    TRAP_IGNORE(CreateTOC1ObjectsL(aAttributes));
+    return KErrNone;
+    }
+    
+void CCSXHXMLParseHandler_MasterKywd::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
+    {
+    iParser = aParser;
+    }
+
+void CCSXHXMLParseHandler_MasterKywd::SetCurrentHtmlToc1(CCSXHHtmlTOC1* aCurrentHtmlToc1)
+    {
+    iCurrentHtmlToc1 = aCurrentHtmlToc1;
+    }
+         
+void CCSXHXMLParseHandler_MasterKywd::CreateTOC1ObjectsL(const
+ RAttributeArray&  aAttributes)
+    {
+    TInt nElements = aAttributes.Count();
+    TBuf<KMaxFileName> appUid; 
+    TBuf<KMaxFileName> KeywordName; 
+    RAttribute AttributeInfo;
+    RTagInfo TagInformation;
+	    
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);      
+
+    for(TInt i=0; i<nElements; i++)
+        {
+        AttributeInfo = aAttributes.operator[](i);             
+        TagInformation = AttributeInfo.Attribute();
+        
+        TBuf<KMaxUnits> LocalName;
+        //Read from resource file
+        CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
+                    
+        if(LocalName.Compare(KMasterSearchTag) == 0)
+            {
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(KeywordName,AttributeInfo.Value().DesC());
+            }
+                    
+        if(LocalName.Compare(KMasterCollectionTag) == 0)
+            {
+            CnvUtfConverter::ConvertToUnicodeFromUtf8(appUid,AttributeInfo.Value().DesC());
+            if(2 == nElements)
+            	{
+				if(iParser->GetHTMLToc1(appUid,this))      
+	            	iDataBase->InsertKeywordL(KeywordName,iCurrentHtmlToc1);           	            	
+            	}
+            }       
+            
+		if(LocalName.Compare(_L("FeatureID")) == 0)    
+			{
+        	if(iFeatureIds)
+		    	{
+		    	delete iFeatureIds;
+		    	iFeatureIds = NULL;
+		    	}
+        	
+        	iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length());
+        	TPtr FIdValue = iFeatureIds->Des(); 
+        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
+
+			if(iParser->CheckFeatureIDL(iFeatureIds->Des()))
+				{
+				if(iParser->GetHTMLToc1(appUid,this))      
+	            	iDataBase->InsertKeywordL(KeywordName,iCurrentHtmlToc1);           	
+				}
+			}
+        }        
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CsHelpCmdLineParser.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This is a utility class that provides functionality
+*     for parsing command line arguments passed into the
+*     Cshelp application when launched by another application.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <hlplch.h>
+
+#include "CsHelpCmdLineParser.h"
+const TInt KArrSize = 2;
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ constructor
+CCsHlpCmdLineParser::CCsHlpCmdLineParser()
+: CBase()
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CCsHlpCmdLineParser::ConstructL(...)
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CCsHlpCmdLineParser::ConstructL(const TDesC8& aCmdLine)
+    {
+    iCmdLine = CBufFlat::NewL(aCmdLine.Size());
+    iCmdLine->InsertL(0, aCmdLine.Ptr(), aCmdLine.Size());
+    }
+
+
+// ---------------------------------------------------------
+// CCsHlpCmdLineParser::~CCsHlpCmdLineParser()
+// ---------------------------------------------------------
+CCsHlpCmdLineParser::~CCsHlpCmdLineParser()
+    {
+    delete iCmdLine;
+    }
+
+// ---------------------------------------------------------
+// CCsHlpCmdLineParser::ContextListL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+CArrayFix<TCoeHelpContext>* CCsHlpCmdLineParser::ContextListL()
+    {
+    CArrayFixFlat<TCoeHelpContext>* array =
+                                  new(ELeave)CArrayFixFlat<TCoeHelpContext>(KArrSize);
+    CleanupStack::PushL(array);
+    TInt count(0);
+
+    iCmdLine->Read(0, &count, sizeof(TInt));
+    iPos += sizeof(TInt);
+    for (TInt i(0); i < count; i++)
+        {
+        TCoeHelpContext context;
+        GetContext(context);
+        array->AppendL(context);
+        }
+    CleanupStack::Pop(array); // array
+    return array;
+    }
+
+// ---------------------------------------------------------
+// CCsHlpCmdLineParser::GetContext(...)
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CCsHlpCmdLineParser::GetContext(TCoeHelpContext& aContext)
+    {
+    TInt length(0);
+    iCmdLine->Read(iPos, &length, sizeof(TInt));
+    iPos += sizeof(TInt);
+    TPtr8 ptr((TText8*)aContext.iContext.Ptr(), length);
+    iCmdLine->Read(iPos, ptr, length);
+    aContext.iContext.SetLength(length/KArrSize);
+    iPos += length;
+
+    iCmdLine->Read(iPos, &aContext.iMajor, sizeof(TUid));
+
+    iPos += sizeof(TUid);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/HelpEngine.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+#include <bautils.h>
+//#include <data_caging_path_literals.hrh>
+
+#ifdef EKA2 
+GLDEF_C TInt E32Dll() 
+#else 
+GLDEF_C TInt E32Dll(TDllReason /*aReason*/) 
+#endif 
+    {
+    return(KErrNone);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/aif/CsHelp_Caption.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This file contains caption resource of CsHelp.
+*
+*
+*/
+
+
+#include <apcaptionfile.rh>
+
+#include "csxelp.loc"
+
+RESOURCE CAPTION_DATA
+    {
+    caption = qtn_apps_ls1_help;
+    shortcaption = qtn_apps_grid_help;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/aif/CsHelpaif.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     RSS for creating the aif file for CsHelp.
+*
+*/
+
+
+NAME HAIF
+#include <aiftool.rh>
+
+#include "csxhelp.loc"
+
+RESOURCE AIF_DATA
+    {
+    app_uid=0x10005234;
+    num_icons = 2;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/data/CsHelp.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,1128 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the CsHelp application.
+*
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME  HELP // 4 letter ID
+
+//  INCLUDES
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <e32keys.h>
+#include <cshelp.mbg>
+#include <avkon.loc>
+#include <avkon.hrh>
+
+#include <appinfo.rh>
+
+#include <AiwCommon.rh>
+
+#include <data_caging_paths_strings.hrh>
+
+#include "CsHelp.hrh"
+#include <csxhelp.loc>
+#include "cshelp.laf"
+
+//  CONSTANTS  
+
+#define DRIVE "Z:"
+#define DIRPATH "\\"
+
+#ifdef RD_APPS_TO_EXES
+#define DIR APP_BITMAP_DIR DIRPATH 
+#else
+#define DIR "\\system\\apps\\cshelp\\"
+#endif
+
+#define FILE "cshelp.mbm"  
+
+#define FULLPATH DRIVE DIR FILE
+#define qtn_help_icon_bitmap_file   FULLPATH
+
+
+//  RESOURCE DEFINITIONS 
+
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+RESOURCE TBUF1
+    {
+    }
+
+RESOURCE EIK_APP_INFO
+    {
+    }
+
+
+
+////////////NEW:////////////////////////////////////////
+RESOURCE LOCALISABLE_APP_INFO r_cshelp_localisable_app_info
+    {
+    short_caption = qtn_apps_grid_help;   //This is shown in appmenu grid view (Csxhelp.loc)
+    caption_and_icon = 
+    CAPTION_AND_ICON_INFO
+        {
+        caption = qtn_apps_ls1_help;		//This is shown in appmenu list view (Csxhelp.loc)
+#ifdef __SCALABLE_ICONS
+        number_of_icons = 1;
+#ifdef RD_APPS_TO_EXES
+        icon_file = APP_BITMAP_DIR"\\Cshelp_aif.mif";
+ #else // !RD_APPS_TO_EXES
+        icon_file = "\\System\\Apps\\Cshelp\\Cshelp_aif.mif";
+ #endif // RD_APPS_TO_EXES
+#else
+        number_of_icons = 2;
+#ifdef RD_APPS_TO_EXES
+        icon_file = APP_BITMAP_DIR"\\Cshelp_aif.mbm";
+ #else // !RD_APPS_TO_EXES
+        icon_file = "\\System\\Apps\\Cshelp\\Cshelp_aif.mbm";
+ #endif // RD_APPS_TO_EXES
+#endif
+        };
+    }
+////////////NEW////////////////////////////////////////
+
+///CSX Start
+RESOURCE AVKON_VIEW r_CSXH_toc1
+{
+	menubar = r_CSXH_menubar;
+    cba = r_cshelp_softkeys_options_exit_open;
+}
+
+RESOURCE AVKON_VIEW r_TopicList
+    {
+    menubar = r_CSXH_menubar_TopicList;
+    cba = r_cshelp_softkeys_options_back_open;
+    }
+
+RESOURCE AVKON_VIEW r_KywdTOC1List
+    {
+    menubar = r_CSXH_menubar_KywdTOC1List;
+    cba = r_cshelp_softkeys_options_exit_find;
+    }
+
+RESOURCE AVKON_VIEW r_KywdTOC2List
+    {
+    menubar = r_CSXH_menubar_KywdTOC2List;
+    cba = r_cshelp_softkeys_options_back_open;
+    }
+
+RESOURCE AVKON_VIEW r_TopicTextList
+    {
+    menubar = r_CSXH_menubar_TopicTextList;
+    cba = r_cshelp_softkeys_options_back;
+    }
+    
+RESOURCE AVKON_VIEW r_cshelp_topicforcontext
+    {
+    menubar = r_CSXH_menubar_TopicTextList;
+    cba = r_cshelp_softkeys_options_close;
+    }
+
+RESOURCE AVKON_VIEW r_cshelp_htmltopicview
+    {
+    menubar = r_CSXH_menubar_htmltopicview;  
+    cba = r_cshelp_softkeys_options_back_openlink;
+    }
+
+RESOURCE AVKON_VIEW r_cshelp_htmltopicforcontext
+    {
+    menubar = r_CSXH_menubar_htmltopicview;
+    cba = r_cshelp_softkeys_options_close_openlink;
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menubar
+//   Menubar for CSXH example
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_CSXH_menubar
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_CSXH_menu;}
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menu
+//   Menu for "Options"
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_CSXH_menu
+    {
+    items = 
+        {
+        MENU_ITEM {command = ECSXHOpenItem;  txt = qtn_help_om_open_category; flags = EEikMenuItemAction;},
+        MENU_ITEM {command = ECSXHSearchText;  txt = qtn_help_om_search_xhtml;},                
+        MENU_ITEM {command = EAknSoftkeyExit;   txt = qtn_options_exit;}
+        };
+    }
+
+
+
+//----------------------------------------------------
+//   
+//    r_cshelpsoftkey_cba_options_back
+//    Define cba for Context View
+//
+//----------------------------------------------------
+//
+//TSW Error:EAJA-6XLFTW :
+//S60 3.2 Help: Selection key opens Option menu in Topic view 
+//If MSK is not defined, "." appears in the MSK, 
+//On Middle key press, Options menu items are shown to the user 
+RESOURCE CBA r_cshelp_softkeys_options_back
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyBack;
+            txt = text_softkey_back;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = ECSXHDummyMSK;
+            txt = "";
+            }    
+        };
+    }
+        
+//----------------------------------------------------
+//   
+//    r_cshelpsoftkey_cba_options_close
+//    Define cba for Context View
+//
+//----------------------------------------------------
+//
+//TSW Error:EAJA-6XLFTW :
+//S60 3.2 Help: Selection key opens Option menu in Topic view 
+//If MSK is not defined, "." appears in the MSK, 
+//On Middle key press, Options menu items are shown to the user 
+RESOURCE CBA r_cshelp_softkeys_options_close
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyClose;
+            txt = text_softkey_close;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = ECSXHDummyMSK;
+            txt = "";
+            }    
+        };
+    }
+
+RESOURCE CBA r_cshelp_softkeys_options_close_openlink
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyClose;
+            txt = text_softkey_close;
+            },
+		AVKON_CBA_BUTTON
+            {
+            id = ECSXHOpenHyperLink;
+            txt = qtn_help_msk_open_hyperlink;
+            }            
+        };
+    }
+
+
+RESOURCE CBA r_cshelp_softkeys_options_back_open
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyBack;
+            txt = text_softkey_back;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = ECSXHOpenTopicText;
+            txt = qtn_msk_open;
+            }
+        };
+    }
+
+RESOURCE CBA r_cshelp_softkeys_options_exit_open
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyExit;
+            txt = text_softkey_exit;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = ECSXHOpenTopicText;
+            txt = qtn_msk_open;
+            }
+        };
+    }
+RESOURCE CBA r_cshelp_softkeys_options_exit_find
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyExit;
+            txt = text_softkey_exit;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = ECSXHOpenTopicText;
+            txt = qtn_help_msk_find;
+            }
+        };
+    }
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menubar
+//   Menubar for CsXHelp example
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_CSXH_menubar_TopicList
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_CSXH_menu_TopicList;}
+        };
+    }
+
+RESOURCE MENU_BAR r_CSXH_menubar_KywdTOC1List
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_CSXH_menu_KywdTOC1List;}
+        };
+    }
+
+RESOURCE MENU_BAR r_CSXH_menubar_KywdTOC2List
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_CSXH_menu_KywdTOC2List;}
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menu
+//   Menu for "Options"
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_CSXH_menu_TopicList
+    {
+    items = 
+        {
+        MENU_ITEM {command = ECSXHOpenTopicText;  txt = qtn_help_om_open_topic;flags = EEikMenuItemAction;},                
+        MENU_ITEM {command = ECSXHTOC1ListView;  txt = qtn_help_om_help_contents;},        
+        MENU_ITEM {command = ECSXHSearchText;  txt = qtn_help_om_search_xhtml;},                
+        MENU_ITEM {command = EAknSoftkeyExit;   txt = qtn_options_exit;}
+        };
+    }
+    
+RESOURCE MENU_PANE r_CSXH_menu_KywdTOC1List
+    {
+    items = 
+        {
+        MENU_ITEM {command = ECSXHOpenTopicText;  txt = qtn_help_om_find_topics; flags = EEikMenuItemAction;},                
+        MENU_ITEM {command = ECSXHTOC1ListView;  txt = qtn_help_om_help_contents;},        
+        MENU_ITEM {command = EAknSoftkeyExit;   txt = qtn_options_exit;}
+        };
+    }
+
+RESOURCE MENU_PANE r_CSXH_menu_KywdTOC2List
+    {
+    items = 
+        {
+        MENU_ITEM {command = ECSXHOpenTopicText;  txt = qtn_help_om_open_topic; flags = EEikMenuItemAction;},                
+        MENU_ITEM {command = ECSXHTOC1ListView;  txt = qtn_help_om_help_contents;},        
+        MENU_ITEM {command = ECSXHSearchText;  txt = qtn_help_om_search_xhtml;},                
+        MENU_ITEM {command = EAknSoftkeyExit;   txt = qtn_options_exit;}
+        };
+    }
+
+
+
+
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menubar
+//   Menubar for CsXHelp example
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_CSXH_menubar_htmltopicview
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_CSXH_menu_htmltopicview;}
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menubar
+//   Menubar for CsXHelp example
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_CSXH_menubar_TopicTextList
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_CSXH_menu_TopicTextList;}
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menu
+//   Menu for "Options"
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_CSXH_menu_htmltopicview
+    {
+    items = 
+        {
+        MENU_ITEM {command = ECSXHOpenHyperLink;  txt = qtn_help_om_open_hyperlink;},    
+        MENU_ITEM {command = ECSXHOpenApplicationTopics;  txt = qtn_help_om_application_topics;},
+        MENU_ITEM {command = ECSXHTOC1ListView;  txt = qtn_help_om_help_contents;},
+        MENU_ITEM {command = ECSXHSearchText;  txt = qtn_help_om_search_xhtml;},        
+        MENU_ITEM { command=ECsHelpCmdFontLarge; txt=qtn_help_om_increase_text; },        	
+        MENU_ITEM { command=ECsHelpCmdFontSmall; txt=qtn_help_om_decrease_text; },        
+        MENU_ITEM {command = EAknSoftkeyExit;   txt = qtn_options_exit;}
+        };
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_CSXH_menu
+//   Menu for "Options"
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_CSXH_menu_TopicTextList
+    {
+    items = 
+        {
+        MENU_ITEM {command = ECSXHOpenApplicationTopics;  txt = qtn_help_om_application_topics;},
+        MENU_ITEM {command = ECSXHTOC1ListView;  txt = qtn_help_om_help_contents;},
+        MENU_ITEM {command = ECSXHSearchText;  txt = qtn_help_om_search_xhtml;},
+        MENU_ITEM {command = EAknSoftkeyExit;   txt = qtn_options_exit;}
+        };
+    }
+    
+// ---------------------------------------------------------
+//   
+//   r_type_no_help_topics
+//   when a other app launches help, no topic is available,
+//   then information note with this text is displayed.
+// ---------------------------------------------------------
+//
+
+RESOURCE TBUF r_type_no_help_topics 
+    {
+    buf = qtn_help_note_no_topics;
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_type_no_help_topics
+//   when help is unable to launch another application,
+//   then information note with this text is displayed.
+// ---------------------------------------------------------
+//
+
+RESOURCE TBUF r_qtn_help_note_unable_to_launch_app 
+    {
+    buf = qtn_help_note_unable_launch;
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_type_no_help_topics
+//   when help is unable to launch another application,
+//   then information note with this text is displayed.
+// ---------------------------------------------------------
+//
+
+RESOURCE TBUF r_qtn_help_note_app_launch_not_allowed 
+    {
+    buf = qtn_help_note_no_internet;
+    }
+    
+//----------------------------------------------------
+//   
+//    r_cshelp_categorylist
+//    Define menubar and cba for Category List View
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_cshelp_categorylist
+    {
+    menubar = r_cshelp_menubar_categorylist;  
+    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_topiclist
+//    Define menubar and cba for Topic List View
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_cshelp_topiclist
+    {
+    menubar = r_cshelp_menubar_topiclist;  
+    cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+    }
+
+
+//----------------------------------------------------
+//   
+//    r_cshelp_topiclist
+//    Define menubar and cba for HTML Topic View
+//
+//----------------------------------------------------
+//
+
+
+RESOURCE CBA r_cshelp_softkeys_options_back_openlink
+    {
+    buttons =
+        {
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyOptions;
+            txt = text_softkey_option;
+            },
+        AVKON_CBA_BUTTON
+            {
+            id = EAknSoftkeyBack;
+            txt = text_softkey_back;
+            },
+		AVKON_CBA_BUTTON
+            {
+            id = ECSXHOpenHyperLink;
+            txt = qtn_help_msk_open_hyperlink;
+            }            
+        };
+    }
+
+
+//----------------------------------------------------
+//   
+//    r_cshelp_topic
+//    Define menubar and cba for Topic View
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_cshelp_topic
+    {
+    menubar = r_cshelp_menubar_topic;  
+    cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_topicforsearch
+//    Define menubar and cba for Topic View For Search
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_cshelp_topicforsearch
+    {
+    menubar = r_cshelp_menubar_topic;  
+    cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_search
+//    Define menubar and cba for Search View
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_cshelp_search
+    {
+    menubar = r_cshelp_menubar_search;  
+    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_searchresult
+//    Define menubar and cba for Search Result View
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_cshelp_searchresult
+    {
+    menubar = r_cshelp_menubar_searchresult;  
+    cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+    }
+
+
+//----------------------------------------------------
+//   
+//    r_cshelp_menubar_categorylist
+//    Menubar for Category List View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_cshelp_menubar_categorylist
+    {
+    titles = 
+        {
+        MENU_TITLE
+            {
+            menu_pane = r_cshelp_categorylist_menu;
+            }
+        };
+    }
+
+    
+//----------------------------------------------------
+//   
+//    r_cshelp_menubar_topiclist
+//    Menubar for Topic List View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_cshelp_menubar_topiclist
+    {
+    titles = 
+        {
+        MENU_TITLE 
+            {
+            menu_pane = r_cshelp_topiclist_menu;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_menubar_topic
+//    Menubar for Topic View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_cshelp_menubar_topic
+    {
+    titles = 
+        {
+        MENU_TITLE 
+            {
+            menu_pane = r_cshelp_topic_menu;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_menubar_search
+//    Menubar for Search View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_cshelp_menubar_search
+    {
+    titles = 
+        {
+        MENU_TITLE
+            {
+            menu_pane = r_cshelp_search_menu;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_menubar_searchresult
+//    Menubar for Search Result View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_cshelp_menubar_searchresult
+    {
+    titles = 
+        {
+        MENU_TITLE 
+            {
+            menu_pane = r_cshelp_searchresult_menu;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_categorylist_menu
+//    Menu pane for Category List View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_cshelp_categorylist_menu
+    {
+    items = 
+        {
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewTopicList;
+            txt = qtn_help_om_open_category;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewSearch;
+            txt = qtn_help_om_search;
+            },
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_topiclist_menu
+//    Menu pane for Topic List View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_cshelp_topiclist_menu
+    {
+    items = 
+        {
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewTopic;
+            txt = qtn_help_om_open_topic;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewCategoryList; 
+            txt = qtn_help_om_category_list;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewSearch;
+            txt = qtn_help_om_search;
+            },
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_topic_menu
+//    Menu pane for Topic View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_cshelp_topic_menu
+    {
+    items = 
+        {
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewTopicList;
+            txt = qtn_help_om_topic_list;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewCategoryList;
+            txt = qtn_help_om_category_list; 
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewSearch;
+            txt = qtn_help_om_search;
+            },
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_search_menu
+//    Menu pane for Search View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_cshelp_search_menu
+    {
+    items = 
+        {
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewSearchResult;
+            txt = qtn_help_om_find_topics;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewCategoryList;
+            txt = qtn_help_om_category_list;
+            },
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_searchresult_menu
+//    Menu pane for Search Result View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_cshelp_searchresult_menu
+    {
+    items = 
+        {
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewTopicForSearch;
+            txt = qtn_help_om_open_topic;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewCategoryList;
+            txt = qtn_help_om_category_list;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewSearch;
+            txt = qtn_help_om_search;
+            },
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_cshelp_context_menu
+//    Menu pane for Search Result View
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_cshelp_context_menu
+    {
+    items = 
+        {
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewTopicForContext;
+            txt = qtn_help_om_open_topic;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewCategoryList; 
+            txt = qtn_help_om_category_list;
+            },
+        MENU_ITEM
+            {
+            command = ECsHelpCmdViewSearch;
+            txt = qtn_help_om_search;
+            },
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//    r_cshelp_search_category_tabs
+//    Tab groups for navi pane of Search View and Category View
+//
+// ---------------------------------------------------------
+//
+RESOURCE TAB_GROUP r_cshelp_search_category_tabs
+    {
+    tab_width = EAknTabWidthWithTwoTabs;  // two tabs
+    tabs = 
+        {
+        TAB
+            {
+            id = ECsHelpCategoryTab;
+            bmpfile = qtn_help_icon_bitmap_file;
+            bmpid = EMbmCshelpQgn_prop_folder_tab2;             
+            bmpmask = EMbmCshelpQgn_prop_folder_tab2_mask;		
+            },
+        TAB
+            {
+            id = ECsHelpSearchTab;
+            bmpfile = qtn_help_icon_bitmap_file;
+            bmpid = EMbmCshelpQgn_prop_list_keyword_tab2;
+            bmpmask = EMbmCshelpQgn_prop_list_keyword_tab2_mask;
+            }
+        };
+    }
+            
+// ---------------------------------------------------------
+//   
+//   r_cshelp_search_progress_note
+//   Define progress note for searcing in search result view
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_cshelp_search_progress_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_EMPTY;
+    items =
+        {
+        DLG_LINE
+            {
+            type=EAknCtNote;
+            id=EProgressNote;
+
+            control= AVKON_NOTE
+                { 
+                layout = EProgressLayout;
+                singular_label = qtn_help_noteg_searching;
+                };
+            }
+        };
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_cshelp_install_uninstall_note
+//   Define information flag for notifying installation
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_cshelp_install_uninstall_note
+    {
+    flags = EAknInformationNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_EMPTY;
+    items =
+        {
+        DLG_LINE
+            {
+            type=EAknCtNote;
+            id=EInstallNote;
+
+            control= AVKON_NOTE
+                { 
+                layout = EGeneralLayout;
+                singular_label = qtn_help_noteg_install;
+                };
+            }
+        };
+    }
+    
+// ---------------------------------------------------------
+//   
+//   r_qtn_help_title_help
+//   Define title of category list view. 
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF32 r_qtn_help_title_help
+    {
+    buf = qtn_help_title_help;
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_qtn_help_note_no_topics
+//   when a other app launches help, no topic is available,
+//   then information note with this text is displayed.
+// ---------------------------------------------------------
+//
+RESOURCE TBUF80 r_qtn_help_note_no_topics
+    {
+    buf = qtn_help_note_no_topics;
+    }
+
+
+RESOURCE CBA r_softkeys_options_exit__options
+    {
+    buttons =
+        {
+        CBA_BUTTON {id=EAknSoftkeyOptions; txt = "Options";},
+        CBA_BUTTON {id=EAknSoftkeyExit; txt = "Exit"; },
+        CBA_BUTTON {id=EAknSoftkeyOptions; txt = "Options";}
+        };
+    }
+
+////////////////////////////////////////////////////////////////
+//[FIXME: The resource r_cshelp_topic_view_layout
+// is not used anymore. Instead TAknMultiLineTextLayout is used
+// (in CCsHelpTopicContainer::SizeChanged and 
+//  inCCsHelpTopicContainer::GetTextFormatL)
+// ---------------------------------------------------------
+//   
+//   r_cshelp_topic_view_layout
+//   Define layout of topic view.
+//
+// ---------------------------------------------------------
+//
+/*************************************************
+RESOURCE AVKON_LAYOUT_EDWIN r_cshelp_topic_view_layout
+    { 
+    font = topic_view_font;     //ELatinPlain12
+    C = topic_view_C;           //215 
+    l = topic_view_l;           //4
+    r = topic_view_r;           //5
+    B = topic_view_B;           //21
+    W = topic_view_W;           //167
+    J = topic_view_J;           //ELayoutAlignBidi
+    lines = topic_view_lines;   //8
+    nextB = topic_view_nextB;   //37
+    }
+****************************************************/
+
+// To let know what are the services that are provided
+RESOURCE AIW_INTEREST r_aiwtutorialapp_interest
+{
+    items =
+    {
+        AIW_CRITERIA_ITEM
+        {
+            id = ECmdAiwPlaceHolder;
+            serviceCmd = KAiwCmdHelp;
+            serviceClass = KAiwClassMenu;
+            contentType = "help/tutorial";
+            defaultProvider = 0x10281D09;
+            maxProviders = 1;
+        },
+        AIW_CRITERIA_ITEM
+        {
+            id = KPresentationExists;   // Use service cmd id as id
+            serviceCmd = KPresentationExists;
+            serviceClass = KAiwClassMenu;
+            contentType = "help/tutorial";
+            defaultProvider = 0x10281D09;
+            maxProviders = 1;
+        },
+        AIW_CRITERIA_ITEM
+        {
+            id = KPlayPresentation;
+            serviceCmd = KPlayPresentation;
+            serviceClass = KAiwClassMenu;
+            contentType = "help/tutorial";
+            defaultProvider = 0x10281D09;
+            maxProviders = 1;
+        }
+    };
+}
+// ---------------------------------------------------------
+//   
+//   qtn_memlo_ram_out_of_mem
+//   Text to display for low memory situations. 
+//
+// ---------------------------------------------------------	
+RESOURCE TBUF256 r_cshelp_retrieve_no_memory_text
+    {
+    buf = qtn_memlo_ram_out_of_mem;
+    }
+
+#ifdef FF_HELP_TUTORIAL_MERGE    
+// ---------------------------------------------------------
+//   
+//   qtn_memlo_ram_out_of_mem
+//   Text to display for low memory situations. 
+//
+// ---------------------------------------------------------	
+RESOURCE TBUF256 r_cshelp_tutorial_text
+    {
+    buf = qtn_help_toc_list_item_tutorial;
+    }
+#endif    
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/data/Cshelp_reg.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include <appinfo.rh>
+#include <cshelp.rsg>
+
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10005234 // Cshelp application UID 
+
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "Cshelp";
+#ifndef RD_APPS_TO_EXES
+    attributes = KAppBuiltAsDll;
+    localisable_resource_file = APP_RESOURCE_DIR"\\Cshelp\\Cshelp";
+#else
+   localisable_resource_file = APP_RESOURCE_DIR"\\Cshelp";
+#endif  
+    localisable_resource_id = R_CSHELP_LOCALISABLE_APP_INFO;
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/data/lch.rh	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the CsHelp application.
+*
+*
+*/
+
+
+// lch.rh
+
+#ifndef LCH_RH
+#define LCH_RH
+
+//
+// FROM EIKDEF.RH - avoids HlpModel requiring Eikon
+//
+STRUCT RSS_SIGNATURE
+    {
+    LONG signature=4;
+    SRLINK self;
+    }
+
+STRUCT TXT
+	{
+	LTEXT buf;
+	}
+
+#endif // LCH_RH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/data/lch.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the CsHelp application.
+*
+*
+*/
+
+
+// lch.rss
+
+NAME LCH1
+
+#include"lch.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TXT r_help_path
+	{
+	buf = "z:\\sys\\bin\\cshelp.exe";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/group/HelpEngine.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project definition file for Help Engine Library
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET        HelpEngine.dll
+TARGETTYPE    dll
+UID           0x10282350 0x0BC03CD8
+LANGUAGE_IDS
+
+CAPABILITY      CAP_CLIENT_DLL
+VENDORID        VID_DEFAULT
+
+SOURCEPATH    ../HelpEngine/src
+SOURCE        HelpEngine.cpp
+SOURCE            CSXHHelpContentBase.cpp
+SOURCE            CSXHHelpDataBase.cpp
+SOURCE            CSXHMainTopics.cpp
+SOURCE            CSXHKywdTopics.cpp
+SOURCE            CSXHGenericTOC1.cpp
+SOURCE            CSXHGenericTOC2.cpp
+SOURCE            CSXHHtmlTOC1.cpp
+SOURCE            CSXHHtmlTOC2.cpp
+SOURCE            CSXHLegacyTOC1.cpp
+SOURCE            CSXHLegacyTOC2.cpp
+SOURCE            CSXHContextTopic.cpp
+SOURCE            CSXHKywdTOC1.cpp
+SOURCE            CSXHXMLParseHandler.cpp
+SOURCE            CSXHHTMLContentParser.cpp
+SOURCE            CSXHLegacyContentParser.cpp
+SOURCE            CsHelpCmdLineParser.cpp
+SOURCE            CSXHRuntimeIndexing.cpp
+
+
+
+USERINCLUDE   ../HelpEngine/inc ../HelpEngine/rss
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY	cone.lib	euser.lib	bafl.lib
+LIBRARY efsrv.lib charconv.lib   eikctl.lib       
+LIBRARY	SenXml.lib XMLFRAMEWORK.lib	ezip.lib 
+LIBRARY HLPMODEL.LIB PlatformEnv.lib
+LIBRARY featmgr.lib 
+LIBRARY ptiengine.lib //Input Language variation changes
+
+#if defined(WINS)
+    deffile ./HelpEnginewinscw.def
+#else // #elif defined(ARM)
+    deffile ./HelpEnginearm.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/group/HelpEnginearm.def	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,64 @@
+EXPORTS
+	_ZN13CCSXHHtmlTOC213GetKywdParentEv @ 1 NONAME
+	_ZN13CCSXHHtmlTOC216GetTopicContentLEv @ 2 NONAME
+	_ZN13CCSXHHtmlTOC219GetContentsFromUrlLERK7TDesC16P7CCoeEnvR15RFeatureControl @ 3 NONAME
+	_ZN15CCSXHLegacyTOC215GetLegacyParentEv @ 4 NONAME
+	_ZN15CCSXHLegacyTOC216GetTopicContentLEv @ 5 NONAME
+	_ZN16CCSXHGenericTOC114FillChildDataLEP12CDesC16Array @ 6 NONAME
+	_ZN16CCSXHGenericTOC19GetChildLERK7TDesC16 @ 7 NONAME
+	_ZN16CCSXHGenericTOC29GetParentEv @ 8 NONAME
+	_ZN17CCSXHContextTopic8GetTopicEv @ 9 NONAME
+	_ZN17CCSXHHelpDataBase13GetKywdTopicsEv @ 10 NONAME
+	_ZN17CCSXHHelpDataBase13GetMainTopicsEv @ 11 NONAME
+	_ZN17CCSXHHelpDataBase15GetContextTopicERK6TDesC8 @ 12 NONAME
+	_ZN17CCSXHHelpDataBase19GetHtmlTopicForUrlLERK7TDesC16 @ 13 NONAME
+	_ZN17CCSXHHelpDataBase20ClearAllTOC1ContentsEv @ 14 NONAME
+	_ZN17CCSXHHelpDataBase21GetKeywordSearchCountEv @ 15 NONAME
+	_ZN17CCSXHHelpDataBase28InitGenerateKeywordTOC2ListLEP13CCSXHKywdTOC1 @ 16 NONAME
+	_ZN17CCSXHHelpDataBase4NewLEP7CCoeEnvRK4TBufILi256EE @ 17 NONAME
+	_ZNK13CCSXHHtmlTOC211GetHtmlUrlLER4TBufILi256EE @ 18 NONAME
+	_ZNK13CCSXHHtmlTOC214GetHelpContextER15TCoeHelpContext @ 19 NONAME
+	_ZNK20CCSXHHelpContentBase7GetNameEv @ 20 NONAME
+	_ZTI13CCSXHHtmlTOC1 @ 21 NONAME ; #<TI>#
+	_ZTI13CCSXHHtmlTOC2 @ 22 NONAME ; #<TI>#
+	_ZTI13CCSXHKywdTOC1 @ 23 NONAME ; #<TI>#
+	_ZTI15CCSXHKywdTopics @ 24 NONAME ; #<TI>#
+	_ZTI15CCSXHLegacyTOC1 @ 25 NONAME ; #<TI>#
+	_ZTI15CCSXHLegacyTOC2 @ 26 NONAME ; #<TI>#
+	_ZTI15CCSXHMainTopics @ 27 NONAME ; #<TI>#
+	_ZTI16CCSXHGenericTOC1 @ 28 NONAME ; #<TI>#
+	_ZTI17CCSXHContextTopic @ 29 NONAME ; #<TI>#
+	_ZTI17CCSXHHelpDataBase @ 30 NONAME ; #<TI>#
+	_ZTI19CCsHlpCmdLineParser @ 31 NONAME ; #<TI>#
+	_ZTI20CCSXHHelpContentBase @ 32 NONAME ; #<TI>#
+	_ZTI20CCSXHXMLParseHandler @ 33 NONAME ; #<TI>#
+	_ZTI22CCSXHHTMLContentParser @ 34 NONAME ; #<TI>#
+	_ZTI24CCSXHLegacyContentParser @ 35 NONAME ; #<TI>#
+	_ZTI25CCSXHXMLParseHandler_Kywd @ 36 NONAME ; #<TI>#
+	_ZTI29CCSXHXMLParseHandler_MetaFile @ 37 NONAME ; #<TI>#
+	_ZTI30CCSXHXMLParseHandler_IndexFile @ 38 NONAME ; #<TI>#
+	_ZTI31CCSXHXMLParseHandler_MasterKywd @ 39 NONAME ; #<TI>#
+	_ZTI35CCSXHXMLParseHandler_MasterMetaFile @ 40 NONAME ; #<TI>#
+	_ZTV13CCSXHHtmlTOC1 @ 41 NONAME ; #<VT>#
+	_ZTV13CCSXHHtmlTOC2 @ 42 NONAME ; #<VT>#
+	_ZTV13CCSXHKywdTOC1 @ 43 NONAME ; #<VT>#
+	_ZTV15CCSXHKywdTopics @ 44 NONAME ; #<VT>#
+	_ZTV15CCSXHLegacyTOC1 @ 45 NONAME ; #<VT>#
+	_ZTV15CCSXHLegacyTOC2 @ 46 NONAME ; #<VT>#
+	_ZTV15CCSXHMainTopics @ 47 NONAME ; #<VT>#
+	_ZTV16CCSXHGenericTOC1 @ 48 NONAME ; #<VT>#
+	_ZTV17CCSXHContextTopic @ 49 NONAME ; #<VT>#
+	_ZTV17CCSXHHelpDataBase @ 50 NONAME ; #<VT>#
+	_ZTV19CCsHlpCmdLineParser @ 51 NONAME ; #<VT>#
+	_ZTV20CCSXHHelpContentBase @ 52 NONAME ; #<VT>#
+	_ZTV20CCSXHXMLParseHandler @ 53 NONAME ; #<VT>#
+	_ZTV22CCSXHHTMLContentParser @ 54 NONAME ; #<VT>#
+	_ZTV24CCSXHLegacyContentParser @ 55 NONAME ; #<VT>#
+	_ZTV25CCSXHXMLParseHandler_Kywd @ 56 NONAME ; #<VT>#
+	_ZTV29CCSXHXMLParseHandler_MetaFile @ 57 NONAME ; #<VT>#
+	_ZTV30CCSXHXMLParseHandler_IndexFile @ 58 NONAME ; #<VT>#
+	_ZTV31CCSXHXMLParseHandler_MasterKywd @ 59 NONAME ; #<VT>#
+	_ZTV35CCSXHXMLParseHandler_MasterMetaFile @ 60 NONAME ; #<VT>#
+	_ZTI20CCSXHRuntimeIndexing @ 61 NONAME ; #<TI>#
+	_ZTV20CCSXHRuntimeIndexing @ 62 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/group/HelpEnginewinscw.def	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,23 @@
+EXPORTS
+	??1CCSXHHelpDataBase@@UAE@XZ @ 1 NONAME ; CCSXHHelpDataBase::~CCSXHHelpDataBase(void)
+	?ClearAllTOC1Contents@CCSXHHelpDataBase@@QAEXXZ @ 2 NONAME ; void CCSXHHelpDataBase::ClearAllTOC1Contents(void)
+	?FillChildDataL@CCSXHGenericTOC1@@UAEXPAVCDesC16Array@@@Z @ 3 NONAME ; void CCSXHGenericTOC1::FillChildDataL(class CDesC16Array *)
+	?GetChildL@CCSXHGenericTOC1@@UAEPAVCCSXHHelpContentBase@@ABVTDesC16@@@Z @ 4 NONAME ; class CCSXHHelpContentBase * CCSXHGenericTOC1::GetChildL(class TDesC16 const &)
+	?GetContentsFromUrlL@CCSXHHtmlTOC2@@SAPAVHBufC8@@ABVTDesC16@@PAVCCoeEnv@@AAVRFeatureControl@@@Z @ 5 NONAME ; class HBufC8 * CCSXHHtmlTOC2::GetContentsFromUrlL(class TDesC16 const &, class CCoeEnv *, class RFeatureControl &)
+	?GetContextTopic@CCSXHHelpDataBase@@QAEPAVCCSXHHelpContentBase@@ABVTDesC8@@@Z @ 6 NONAME ; class CCSXHHelpContentBase * CCSXHHelpDataBase::GetContextTopic(class TDesC8 const &)
+	?GetHelpContext@CCSXHHtmlTOC2@@QBEHAAVTCoeHelpContext@@@Z @ 7 NONAME ; int CCSXHHtmlTOC2::GetHelpContext(class TCoeHelpContext &) const
+	?GetHtmlTopicForUrlL@CCSXHHelpDataBase@@QAEPAVCCSXHHelpContentBase@@ABVTDesC16@@@Z @ 8 NONAME ; class CCSXHHelpContentBase * CCSXHHelpDataBase::GetHtmlTopicForUrlL(class TDesC16 const &)
+	?GetHtmlUrlL@CCSXHHtmlTOC2@@QBEXAAV?$TBuf@$0BAA@@@@Z @ 9 NONAME ; void CCSXHHtmlTOC2::GetHtmlUrlL(class TBuf<256> &) const
+	?GetKeywordSearchCount@CCSXHHelpDataBase@@QAEHXZ @ 10 NONAME ; int CCSXHHelpDataBase::GetKeywordSearchCount(void)
+	?GetKywdParent@CCSXHHtmlTOC2@@QAEPAVCCSXHKywdTOC1@@XZ @ 11 NONAME ; class CCSXHKywdTOC1 * CCSXHHtmlTOC2::GetKywdParent(void)
+	?GetKywdTopics@CCSXHHelpDataBase@@QAEPAVCCSXHGenericTOC1@@XZ @ 12 NONAME ; class CCSXHGenericTOC1 * CCSXHHelpDataBase::GetKywdTopics(void)
+	?GetLegacyParent@CCSXHLegacyTOC2@@QAEPAVCCSXHLegacyTOC1@@XZ @ 13 NONAME ; class CCSXHLegacyTOC1 * CCSXHLegacyTOC2::GetLegacyParent(void)
+	?GetMainTopics@CCSXHHelpDataBase@@QAEPAVCCSXHGenericTOC1@@XZ @ 14 NONAME ; class CCSXHGenericTOC1 * CCSXHHelpDataBase::GetMainTopics(void)
+	?GetName@CCSXHHelpContentBase@@QBE?AVTPtr16@@XZ @ 15 NONAME ; class TPtr16 CCSXHHelpContentBase::GetName(void) const
+	?GetParent@CCSXHGenericTOC2@@QAEPAVCCSXHGenericTOC1@@XZ @ 16 NONAME ; class CCSXHGenericTOC1 * CCSXHGenericTOC2::GetParent(void)
+	?GetTopic@CCSXHContextTopic@@QAEPAVCCSXHHelpContentBase@@XZ @ 17 NONAME ; class CCSXHHelpContentBase * CCSXHContextTopic::GetTopic(void)
+	?GetTopicContentL@CCSXHHtmlTOC2@@UAEPAXXZ @ 18 NONAME ; void * CCSXHHtmlTOC2::GetTopicContentL(void)
+	?GetTopicContentL@CCSXHLegacyTOC2@@UAEPAXXZ @ 19 NONAME ; void * CCSXHLegacyTOC2::GetTopicContentL(void)
+	?InitGenerateKeywordTOC2ListL@CCSXHHelpDataBase@@QAEHPAVCCSXHKywdTOC1@@@Z @ 20 NONAME ; int CCSXHHelpDataBase::InitGenerateKeywordTOC2ListL(class CCSXHKywdTOC1 *)
+	?NewL@CCSXHHelpDataBase@@SAPAV1@PAVCCoeEnv@@ABV?$TBuf@$0BAA@@@@Z @ 21 NONAME ; class CCSXHHelpDataBase * CCSXHHelpDataBase::NewL(class CCoeEnv *, class TBuf<256> const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/group/bld.inf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CsHelp build specification file.
+*
+*
+*/
+
+
+
+#ifdef __SERIES60_HELP //Help application will be present only when this flag is defined.
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+// export localised loc file
+../loc/csxhelp.loc                          APP_LAYER_LOC_EXPORT_PATH(csxhelp.loc)
+
+// export iby file
+../rom/Cshelp.iby                           CORE_APP_LAYER_IBY_EXPORT_PATH(Cshelp.iby)
+../rom/AiwHelpProvider.iby                  CORE_APP_LAYER_IBY_EXPORT_PATH(AiwHelpProvider.iby)
+../rom/AiwHelpProviderResources.iby         LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(AiwHelpProviderResources.iby)
+../rom/CshelpResources.iby                  LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(CshelpResources.iby)
+
+
+PRJ_PLATFORMS
+// The platforms Cshelp is built
+// Default platforms 
+DEFAULT
+
+
+PRJ_MMPFILES
+
+HelpEngine.mmp
+cshelp.mmp
+
+#ifdef RD_HELP_AIW_INTEGRATION
+
+PRJ_EXPORTS
+// export localised loc file
+../AiwHelpProvider/loc/aiwxhelpprovider.loc        APP_LAYER_LOC_EXPORT_PATH(aiwxhelpprovider.loc)
+
+PRJ_MMPFILES
+../AiwHelpProvider/group/AiwHelpProvider.mmp
+#endif
+
+PRJ_EXTENSIONS
+
+START EXTENSION s60/mifconv
+OPTION TARGETFILE cshelp.mif
+OPTION HEADERFILE cshelp.mbg
+OPTION SOURCES	-c8,1 qgn_prop_folder_tab2          \
+				        -c8,1 qgn_prop_list_keyword_tab2    \
+				        -c8,1 qgn_prop_help_open_tab1       \
+				        -c8,1 qgn_prop_folder_help_tab1     \
+				        -c8,1 qgn_prop_keyword_find_tab1    \
+				        -c8 empty13x13
+END
+
+START EXTENSION s60/mifconv
+OPTION TARGETFILE cshelp_aif.mif
+OPTION SOURCES -c8,8 qgn_menu_help
+END
+
+#endif //__SERIES60_HELP 
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/group/cshelp.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project definition file for Csxhelp Application
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+
+#ifndef RD_APPS_TO_EXES
+TARGETPATH  /System/Apps/Cshelp
+#endif
+
+//1. Cshelp resources
+START RESOURCE ../data/CsHelp.rss
+HEADER
+#ifdef RD_APPS_TO_EXES
+TARGETPATH APP_RESOURCE_DIR
+#endif
+
+//other settings like LANG  xx
+LANGUAGE_IDS
+
+END  // RESOURCE
+
+
+
+//2. Aif stuff
+#ifdef RD_SCALABLE_UI // New app framework used
+
+START RESOURCE ../data/Cshelp_reg.rss
+DEPENDS cshelp.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
+#else // Old app framework used (no changes in the definitions below)
+
+START RESOURCE ../aif/cshelp_caption.rss     
+HEADER
+#ifdef RD_APPS_TO_EXES
+TARGETPATH APP_RESOURCE_DIR
+#endif
+
+//other settings like LANG  xx
+LANGUAGE_IDS
+END  // RESOURCE
+
+#endif
+
+
+
+//Target information
+#ifdef RD_APPS_TO_EXES
+// TARGETPATH need not be defined, it is automatically handled by the build tools
+TARGET          cshelp.exe
+TARGETTYPE      exe
+#else
+TARGET          cshelp.app
+TARGETTYPE      app
+#endif
+UID             0x100039CE 0x10005234
+
+EPOCSTACKSIZE   0x10000
+EPOCHEAPSIZE 0x5000 0x800000
+
+VENDORID        VID_DEFAULT
+
+//We use default capabilities (from defaultcaps.hrh)
+CAPABILITY CAP_APPLICATION 
+
+USERINCLUDE . ../inc ../HelpEngine/inc
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH   ../src
+
+SOURCE CSXH.cpp
+SOURCE CSXHApplication.cpp 
+SOURCE CSXHGenericView.cpp
+SOURCE CSXHGenericContainer.cpp
+SOURCE CSXHAppUi.cpp
+SOURCE CSXHDocument.cpp 
+SOURCE CSXHLegacyTopicContainer.cpp
+SOURCE CSXHLegacyTopicView.cpp
+SOURCE CSXHHtmlTopicView.cpp
+SOURCE CSXHHtmlTopicContainer.cpp
+SOURCE AppLauncherForCSXH.cpp
+SOURCE csxhruntimeappwatcher.cpp
+
+LIBRARY euser.lib apparc.lib cone.lib eikcore.lib
+LIBRARY apgrfx.lib charconv.lib 
+LIBRARY eikcoctl.lib eikctl.lib avkon.lib
+LIBRARY AknNotify.lib etext.lib
+LIBRARY AknSkins.lib
+LIBRARY ws32.lib 
+LIBRARY CdlEngine.lib   //dynamic ui 
+LIBRARY AknLayout2Scalable.lib
+LIBRARY gdi.lib HelpEngine.lib apmime.lib featmgr.lib
+LIBRARY ServiceHandler.lib // For the AiwServiceHandler
+LIBRARY efsrv.lib
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+LIBRARY bafl.lib 
+#endif
+
+DEBUGLIBRARY flogger.lib
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/AppLauncherForCSXH.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  AppLauncherForCSXH class declaration
+*
+*/
+
+
+#ifndef INC_APPLAUNCHERFORCSXH_H_HEADER_INCLUDED_BC03B1F7
+#define INC_APPLAUNCHERFORCSXH_H_HEADER_INCLUDED_BC03B1F7
+
+#include <e32std.h> 
+#include <apgtask.h> 
+
+class TApaTask;
+
+const TInt KMaxParamLength = 32;
+const TInt KMaxVSAPrefix = 32;
+const TInt KMaxVSAScheme = 88;
+const TInt KBackSlashLength = 1;
+/**
+ *  AppLauncherForCSXH 
+ *  This class implements launching applications from help
+ *  @since S60 v3.2
+ */
+class AppLauncherForCSXH 
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a AppLauncherForCSXH 
+*  and return a pointer to the created object
+*  @return a AppLauncherForCSXH Pointer 
+*/
+    static AppLauncherForCSXH* NewL();
+    
+/** 
+*  @function ~AppLauncherForCSXH
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/    
+      ~AppLauncherForCSXH();
+/** 
+*  @function LaunchAppL
+*  @since S60 3.2
+*  Launches Application
+*  @param aUrl  - Buffer which contains iformation about Application Uid,MessageId, ViewID 
+*         aCurrentUrl - Currently displayed file path info
+*  @return ETrue, if Application Launches Successfully, EFalse otherwise	
+*/      
+      TBool LaunchAppL(const TDesC& aUrl,const TDesC& aCurrentUrl); 
+/** 
+*  @function LaunchBrowserNGL
+*  @since S60 3.2
+*  Launches BrowserNG Application
+*  @param aUrl  - external hyperlink info.
+*  @return ETrue, if Application Launches Successfully, EFalse otherwise	
+*/      
+      void LaunchBrowserNGL(const TDesC& aUrl);     	     	
+    private:
+
+/** 
+*  @function AppLauncherForCSXH
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*/ 
+     AppLauncherForCSXH();
+     
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  Perform the second phase construction of a legacytopicview object
+*/     
+     void ConstructL();
+/** 
+*  @function GetAppLaunchModeL
+*  @since S60 3.2
+*  Get the Mode Application Launch Command / View Switch Architecture
+*  @param 	aUrl  - Buffer which contains iformation about Application Uid,MessageId, ViewID 
+*   		aCurrentUrl - Currently displayed file path info
+*  @return  Mode of Launch
+*/    
+      TInt GetAppLaunchModeL(const TDesC& aUrl,const TDesC& aCurrentUrl);       
+/** 
+*  @function LaunchApp
+*  @since S60 3.2
+*  Launch the Application
+*  @param 	aUrl  - Buffer which contains iformation about Application Uid,MessageId, ViewID 
+*   		aVSAMode - Etrue for View Switch Architecture - EFalse for Command Launch
+*  @return  ETrue, Application Launch Successful, EFalse otherwise
+*/      
+      TBool LaunchApp(const TDesC& aUrl, TBool aVSAMode = ETrue);
+/** 
+*  @function LaunchCmdApp
+*  @since S60 3.2
+*  Launch the Application 
+*  @param 	aParamsMode  - ETrue, If Application has to be launched with Message. 
+*  @return  ETrue, Application Launch Successful, EFalse otherwise
+*/      
+      TBool LaunchCmdApp(TBool aParamsMode = ETrue);
+/** 
+*  @function LaunchCmdAppL
+*  @since S60 3.2
+*  Launch the Application using Command line APIs with parameters
+*  @param 	aParamsMode  - ETrue, If Application has to be launched with Message. 
+*  @return  ETrue, Application Launch Successful, EFalse otherwise
+*/     
+      TBool LaunchCmdAppL(TBool aParamsMode);
+  /** 
+*  @function GetCmdAppTask
+*  @since S60 3.2
+*  Launch the Application using Command line APIs with parameters
+*  @return  Get the TApaTask of the Launched Application
+*/      
+      TApaTask GetCmdAppTask();
+/** 
+*  @function SendMsgToCmdAppTaskL
+*  @since S60 3.2
+*  Send the Message to the Launched Application
+*  @param 	aTask  - TApaTask of the launched Application 
+*/      
+      void SendMsgToCmdAppTaskL(TApaTask &aTask);
+
+/** 
+*  @function HandleFailedAppLauchL
+*  @since S60 3.2
+*  Gives Information Note if Application Launch Failed.
+*/      
+      void HandleFailedAppLauchL();
+
+/** 
+*  @function HandleAppLauchFromInternetL
+*  @since S60 3.2
+*  Gives Information Note if user try to Launch the application from the external link
+*/      
+      void HandleAppLauchFromInternetL();
+/** 
+*  @function CheckAppLaunchFromInternetL
+*  @since S60 3.2
+*  Checks wether using is trying to launch the application from  external link
+*  @param aCurrentMode - VSA / Cmd
+*		  aCurrentUrl  - Currently displayed file path info
+*/  
+      TInt CheckAppLaunchFromInternetL(TInt aCurrentMode,const TDesC& aCurrentUrl );
+
+/** 
+*  @function CheckMsgParams
+*  @since S60 3.2
+*  Checks wether parameters are Valid / Invalid
+*  @param Buffer which contains iformation about Application Uid,MessageId, ViewID 
+*  @return EParamsWithMsg / EParamsInvalid / EParamsNoMsg
+*/      
+      TInt CheckMsgParams(const TDesC& aUrl);
+
+/** 
+*  @function CheckMsgParams
+*  @since S60 3.2
+*  Copies Uid & View Id into Variables
+*  @param Buffer which contains information about Application Uid,ViewID 
+*/ 
+      void ExtractTwoParams(const TDesC& aUrl);
+
+/** 
+*  @function ExtractFourParams
+*  @since S60 3.2
+*  Copies Uid, View Id, MessageId & Message into Variables
+*  @param aUrl - Buffer which contains information about Application Uid,ViewID, MessageId &  
+*/ 
+      void ExtractFourParams(const TDesC& aUrl);     
+/** 
+*  @function GetUid
+*  @since S60 3.2
+*  Coverts Buffer Content to TInt
+*  @param aUid - Application Uid 
+*		  aResult - Application Uid	
+*/
+      void GetUid(TPtrC aUid, TInt32 &aResult);       
+
+/** 
+*  @function SendMsgToBrowserNGL
+*  @since S60 3.2
+*  Send the Message to the BrowserNG
+*  @param aUrl - External Hyper Link
+*  @return ETrue MessageSent Successfully, EFalse otherwise
+*/      
+	  TBool SendMsgToBrowserNGL(const HBufC* aUrl);		
+/** 
+*  @function StartTimer
+*  @since S60 3.2
+*  Starts the timer
+*  @param aCallBack - Callback function for timer
+*/      
+	  void StartTimer(TCallBack aCallBack);
+
+/** 
+*  @function Timer_Callback_to_TerminateApp
+*  @since S60 3.2
+*  Timer callback function
+*  @param aPtr - AppLauncherForCSXH class pointer
+*  @return 0
+*/      
+      static TInt Timer_Callback_to_TerminateApp(TAny* aPtr);
+
+/** 
+*  @function SendMsgToApplication
+*  @since S60 3.2
+*  SendMessage to BrowserNG Application
+*  @return 0
+*/     
+      TInt SendMsgToApplication();    		 
+      
+    private:
+	  CPeriodic* iTimer;
+	  TInt iCount;
+	  TBuf<KMaxFileName> iUrl;      
+      TBuf<KMaxParamLength> iParam1;
+      TBuf<KMaxParamLength> iParam2;
+      TBuf<KMaxParamLength> iParam3;
+      TBuf<KMaxParamLength> iParam4;	  
+    };    
+		
+
+#endif /* INC_APPLAUNCHERFORCSXH_H_HEADER_INCLUDED_BC03B1F7 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHAppUi.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHAppUi class declaration
+*
+*/
+
+
+#ifndef INC_CSXHAPPUI_H_HEADER_INCLUDED_BC054CBF
+#define INC_CSXHAPPUI_H_HEADER_INCLUDED_BC054CBF
+
+#include <aknViewAppUi.h>
+#include "AppLauncherForCSXH.h"
+#include "csxhruntimeappwatcher.h"
+
+//Forward declarations
+class CCSXHHtmlTopicView;
+class CCSXHLegacyTopicView;
+class CCSXHGenericView;
+#ifdef FF_HELP_TUTORIAL_MERGE
+class CAiwGenericParamList;
+class CAiwServiceHandler;
+#endif // FF_HELP_TUTORIAL_MERGE
+
+// CLASS DECLARATION
+
+/** 
+* @class CCSXHAppUi
+* Application UI class
+* Provides support for the following features:
+* - view architecture
+*/
+class CCSXHAppUi : public CAknViewAppUi,
+                   public MInstallationObserver
+    {
+  public:
+/** 
+ * @function ConstructL
+ * @since S60 3.2
+ * Perform the second phase construction of a CCSXHAppUi object this needs
+ * to be public due to the way the framework constructs the AppUi      
+ */
+    void ConstructL();
+/** 
+ * @function CCSXHAppUi
+ * @since S60 3.2
+ * Perform the first phase of two phase construction. This needs to be
+ * public due to the way the framework constructs the AppUi
+ */    
+    CCSXHAppUi();
+/** 
+ * @function ~CCSXHAppUi
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */    
+    ~CCSXHAppUi();
+
+/** 
+ * @function ~CCSXHAppUi
+ * @since S60 3.2  
+ * From CEikAppUi, takes care of command handling.
+ * @param aCommand command to be handled
+ */    
+    void HandleCommandL(TInt aCommand);
+    
+/** 
+ *  @function PropagateResourceChange
+ *  @since S60 3.2
+ *  Propagates the resource change event to all views
+ *  @param aType - Type of resource change event
+ */		
+	void PropagateResourceChange(TInt aType);     
+    
+/** 
+ * @function GetInstance
+ * @since S60 3.2  
+ * returns Application UI class pointer 
+ * @return Application UI class pointer 
+ */     
+    static CCSXHAppUi* GetInstance();
+
+/** 
+ * @function GetWsSession
+ * @since S60 3.2  
+ * returns WsSession Pointer
+ * @return WsSession pointer
+ */    
+	static RWsSession& GetWsSession();
+
+/** 
+ * @function GetCoeEnv
+ * @since S60 3.2  
+ * returns Control Environment pointer
+ * @return Control Environment pointer
+ */	
+	static CCoeEnv* GetCoeEnv();
+
+/** 
+ * @function AppLaunchL
+ * @since S60 3.2  
+ * Launch the Application based on Uid & ViewId
+ * @param aAppId Application Uid
+ * 		 aVId   ViewId 
+ */	    
+    void AppLaunchL(TInt32 &aAppId,TInt32 &aVId);
+    
+/** 
+ * @function AppLaunchL
+ * @since S60 3.2  
+ * Launch the Application based on Uid,ViewId, MessageId & Message
+ * @param aAppId   Application Uid
+ * 		 aVId     ViewId
+ * 		 aMsgId   MessageId
+ * 		 aParams  Message
+ */    
+    void AppLaunchL(TInt32 &aAppId,TInt32 &aVId,TInt32 &aMsgId,
+    									const TBuf<KMaxParamLength>& aParams);
+    
+/** 
+ * @function ResetTOC2ViewContainer
+ * @since S60 3.2  
+ * Sets a flag in the View for recreating the container 
+ */    
+    void ResetTOC2ViewContainer();
+/**
+* From MInstallationObserver
+* @function RuntimeUpdateIndex 
+* call back function once install/uninstall happens
+*
+* @since 5.0
+*/
+    void RuntimeUpdateIndex();
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+    /**
+    *  Generates parameter list for AIW calls
+    *  @since S60 3.2
+    *  @param aContext The help content ready to Tutorial
+    *  @return The Aiw Generic Param List
+    */
+    CAiwGenericParamList* NewParamListLC(const TCoeHelpContext& aContext);
+
+    /**
+    *  If tutorial exists,call play presentation command
+    *  @since S60 3.2
+    *  @param None
+    *  @return None
+    */
+    void CallTutorialAiwProviderL();
+
+    /**
+    *  If tutorial exists,call play presentation command
+    *  @since S60 3.2
+    *  @param aTCoeHelpContext The Help Content stored
+    *  @return None
+    */
+    void SetHelpContext(TCoeHelpContext aTCoeHelpContext);
+
+    /**
+    *  If the presentation requsted exist or not
+    *  @since S60 3.2
+    *  @param None
+    *  @return A boolean value to indicate the presentation exist or not
+    */
+     TBool IsApplicationPresentInTutorialL();
+
+#endif // FF_HELP_TUTORIAL_MERGE
+	protected: 
+	// Functions from base calsses
+	/**
+    * Handles changes in keyboard focus when an application switches to, 
+    * or from, the foreground.
+    * @param aForeground @c ETrue if the application is in the foreground,
+    * otherwise @c EFalse.
+    */
+	void HandleForegroundEventL(TBool aForeground);
+/** 
+ * @function ProcessCommandParametersL
+ * From CEikAppUi.
+ * Take care of command parameter
+ * @since 3.2
+ * @param aTail should be contexts in TDesC8& form
+ * @return whether or not processing was successful
+ */
+        TBool ProcessCommandParametersL(TApaCommand aCommand,
+                                        TFileName& /* aDocumentName */,
+                                        const TDesC8& aTail);
+
+/**
+ * @function HandleMessageL 
+ * From MCoeMessageObserver
+ * Take care of messages from other app.
+ * @since 3.2
+ * @param aMessageParameters should be contexts in TDesC8&
+ * @return always EMessageHandled.
+ */
+    MCoeMessageObserver::TMessageResponse HandleMessageL(
+                                  TUint32 aClientHandleOfTargetWindowGroup,
+                                  TUid aMessageUi,
+                                  const TDesC8& aMessageParameters); 
+  private:
+/**
+ * @function ActivateDisplayTopicViewL   
+ * Take care of Recreating the Container Class for Specific Views
+ * @since 3.2
+ * @param aMessageParameters should be contexts in TDesC8&
+ * @return always EMessageHandled.
+ */  
+  	void ActivateDisplayTopicViewL();
+  	
+  	void InitDisplayTopicViewL(TUid aViewID);
+/**
+ * @function HandleContextSensitiveLaunchL   
+ * Take care of Context Sensitive Launch.
+ * @since 3.2
+ * @param aMessageParameters should be contexts in TDesC8&
+ * @return always EMessageHandled.
+ */  	
+  	void HandleContextSensitiveLaunchL(const TDesC8& aContext );   
+#ifdef FF_HELP_TUTORIAL_MERGE
+        /**
+        *  Load Service Handler and attach the interest
+        *  @since S60 3.2
+        *  @param None
+        *  @return None
+        */
+        void LoadTutorialService();
+#endif
+  private:
+    
+    CCSXHGenericView* iTOC1View;
+    CCSXHGenericView* iKywdTOC1View;
+    
+    CCSXHLegacyTopicView* iLegacyTopicView;
+    CCSXHLegacyTopicView* iLegacyContextTopicView;
+    
+    //This class will be used for both normal and context html topics    
+    CCSXHHtmlTopicView* iHtmlTopicView;
+	
+	CCSXHGenericView* iKywdTOC2View;
+	CCSXHGenericView* iTOC2View;
+	
+	static CCSXHAppUi* iInstance;
+	CCSXHRuntimeAppWatcher* iRuntimeWatcher;
+	
+#ifdef FF_HELP_TUTORIAL_MERGE
+
+        //AIW Service Handler
+        //Owned
+        CAiwServiceHandler* iServiceHandler;
+
+        //Tutorial exist or not
+        TBool iTutorialExists;
+
+        //Help Content Text
+        TCoeHelpContext iTCoeHelpContext;
+#endif
+    };
+
+
+
+#endif /* INC_CSXHAPPUI_H_HEADER_INCLUDED_BC054CBF */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHApplication.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHApplication class declaration
+*
+*/
+
+
+
+#ifndef INC_CSXHAPPLICATION_H__
+#define INC_CSXHAPPLICATION_H__
+
+#include <aknapp.h>
+
+
+/*! 
+  @class CCSXHApplication
+  
+  An instance of CCSXHApplication is the application part of the AVKON
+  application framework for the Csxhelp application
+  */
+class CCSXHApplication : public CAknApplication
+    {
+public:  // from CAknApplication
+
+/** 
+  @function AppDllUid
+  @since S60 3.2
+  
+  The application DLL UID value
+  @return the UID of this Application/Dll
+  */
+    TUid AppDllUid() const;
+
+protected: // from CAknApplication
+/** 
+  @function CreateDocumentL
+  @since S60 3.2
+  
+  Create a CApaDocument object and return a pointer to it
+  @return a pointer to the created document
+  */
+    CApaDocument* CreateDocumentL();
+    };
+
+#endif // INC_CSXHAPPLICATION_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHDocument.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHDocument class declaration
+*
+*/
+
+
+#ifndef INC_CSXHDOCUMENT_H_HEADER_INCLUDED_BC0121B7
+#define INC_CSXHDOCUMENT_H_HEADER_INCLUDED_BC0121B7
+
+#include <AknDoc.h>
+
+// Forward references
+class CAknAppUi;
+class CEikApplication;
+class CCSXHHelpDataBase;
+class CCSXHHelpContentBase;
+class CEikAppUi;
+class CEikProgressInfo;
+class CAknProgressDialog;
+class CIdle;
+/** 
+  @class CCSXHDocument
+* An instance of class CCSXHDocument is the Document part of the AVKON
+* application framework for the Csxhelp application
+*/
+
+class CCSXHDocument : public CAknDocument
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHDocument for the AVKON application aApp 
+*  construction, and return a pointer to the created object
+*  @param aApp - Application Object
+*  @return a CCSXHDocument Pointer 
+*/
+	static CCSXHDocument* NewL(
+	// application creating this document
+	CEikApplication& aApp);
+    // Construct a CCSXHDocument for the AVKON application aApp using two phase
+    // construction, and return a pointer to the created object
+
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHDocument for the AVKON application aApp using two phase
+*  construction, and return a pointer to the created object
+*  @param aApp - Application Object
+*  @return a CCSXHDocument Pointer 
+*/
+    static CCSXHDocument* NewLC(
+	// application creating this document
+	CEikApplication& aApp);
+
+
+/** 
+*  @function ~CCSXHDocument
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/
+	    ~CCSXHDocument();
+
+	public: // from CAknDocument
+/** 
+*  @function CreateAppUiL
+*  @since S60 3.2
+*  Create a CCSXHAppUi object and return a pointer to it
+*  @return CCSXHAppUi class pointer
+*/		
+  	    CEikAppUi* CreateAppUiL();
+	    
+  	public:
+/** 
+*  @function SetDisplayTopic
+*  @since S60 3.2
+*  @param aDisplayTopic - HelpContentbase Class pointer
+*/  	
+		void SetDisplayTopic(CCSXHHelpContentBase *aDisplayTopic);
+/** 
+*  @function SetDisplayAndPrevTopic
+*  @since S60 3.2
+*  @param aDisplayTopic - HelpContentbase Class pointer
+*/  	
+		void SetDisplayAndPrevTopic(CCSXHHelpContentBase *aDisplayTopic);
+/** 
+*  @function GetDisplayTopic
+*  @since S60 3.2
+*  @return HelpContentBase Class pointer
+*/ 
+   inline  CCSXHHelpContentBase* GetDisplayTopic() const 
+   {return iDisplayTopic;}
+/** 
+*  @function GetPrevTopic
+*  @since S60 3.2
+*  @return HelpContentBase Class pointer
+*/		
+	inline CCSXHHelpContentBase* GetPrevTopic() const
+	{return iPrevTopic;}
+/** 
+*  @function ClearPrevTopic
+*  @since S60 3.2
+*  @Clears the previous topic
+*/		
+	inline void ClearPrevTopic()
+	{iPrevTopic = NULL;}
+/** 
+*  @function GetHelpDataBase
+*  @since S60 3.2
+*  @return HelpContentBase Class pointer
+*/		
+ 	inline CCSXHHelpDataBase* GetHelpDataBase() const
+ 	{return iHelpDataBase;}
+
+/** 
+*  @function GetHelpDataBase
+*  @since S60 3.2
+*  Sends a Command to Application UI Class
+*  @param aCommand - Command to be Handled
+*/		
+	 	void SendMessageToAppUiL(TInt aCommand);
+
+/** 
+*  @function SetContextTopicAsDisplayTopicL
+*  @since S60 3.2
+*  Parse the Message, Get the topic for Display & set this Object as Current Display Object
+*  @param aContextMessage - Message from Other Application for Context Sensitive launch
+*  @return  ETrue for Topic Found /EFalse for topic Not found
+*/	 	
+	 	TBool SetContextTopicAsDisplayTopicL(const TDesC8& aContextMessage);
+
+/** 
+*  @function GetHtmlTopicForUrlL
+*  @since S60 3.2
+*  Get the Object for HTML topic using url Name
+*  @param url - url Name
+*  @return Pointer to the HelpDataBase which contains HTMLtopic info
+*/	 	
+	 	CCSXHHelpContentBase* GetHtmlTopicForUrlL(const TDesC &url);
+
+/** 
+*  @function InitProgressBar
+*  @since S60 3.2
+*  Initializes the progress bar
+*/	 	
+	    void InitProgressBarL();
+
+/** 
+*  @function FreeProgressBar
+*  @since S60 3.2
+*  Frees the progress bar
+*/	 	
+	 	void FreeProgressBarL();
+	 	
+/**
+        * function for TCAllBack protocol.
+        * called directly
+        * @since 1.1
+        * @param aThis is the pointer to the actual instance
+        * @return Whether finished or not
+        */
+        static TInt CallBack(TAny* aThis);
+        
+        /**
+        * call back function.
+        * called by CallBackL()
+        * @since 1.1
+        * @return Whether finished or not
+        */
+        TInt DoCallBackL();	 	
+	 	
+	private:
+/** 
+*  @function CCSXHDocument
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*/
+	    CCSXHDocument(
+	// application creating this document
+	CEikApplication& aApp);
+  
+  	private:  
+    	CCSXHHelpDataBase *iHelpDataBase;
+    	CAknAppUi *iHelpAppUi;
+    	
+    	CCSXHHelpContentBase *iDisplayTopic;
+    	CCSXHHelpContentBase *iPrevTopic;
+    	
+    	CAknProgressDialog *iProgressDialog;
+    	
+    	CIdle *iIdle;
+    	
+    	TInt iTotalKeywordsInResultView;
+    };
+
+
+
+#endif /* INC_CSXHDOCUMENT_H_HEADER_INCLUDED_BC0121B7 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHGenericContainer.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,252 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericContainer class declaration
+*
+*/
+
+
+#ifndef INC_CSXHGENERICCONTAINER_H_HEADER_INCLUDED_BC039735
+#define INC_CSXHGENERICCONTAINER_H_HEADER_INCLUDED_BC039735
+
+#include <coecntrl.h> // CCoeControl
+#include <eiklbo.h> // MEikListBoxObserver
+#include <aknsfld.h>
+
+// FORWARD DECLARATIONS
+class CAknSingleStyleListBox;
+class CCSXHDocument;
+class CCSXHGenericView;
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+class CCSXHGenericTOC1;
+#endif
+
+// CLASS DECLARATION
+/**
+* @class CCSXHGenericContainer
+* This class provides listbox container control functionality
+*/
+
+class CCSXHGenericContainer : public CCoeControl, public MEikListBoxObserver
+    {
+    public:
+    /**
+    *  @function NewL
+    *  @since S60 3.2
+    *  Construct a CCSXHGenericContainer
+    *  and return a pointer to the created object
+    *  @param aRect - TRect Object
+    *         aDocument - Document Object
+    *  @return a CCSXHGenericContainer Pointer
+    */
+#ifdef FF_HELP_TUTORIAL_MERGE
+        static CCSXHGenericContainer* NewL(const TRect& aRect,CCSXHDocument &aDocument
+        ,CCSXHGenericView* aView);
+#else // !FF_HELP_TUTORIAL_MERGE
+        static CCSXHGenericContainer* NewL(const TRect& aRect,CCSXHDocument &aDocument);
+#endif // FF_HELP_TUTORIAL_MERGE
+    /**
+    *  @function NewLC
+    *  @since S60 3.2
+    *  Construct a CCSXHGenericContainer first phase of two phase constuction
+    *  @param aRect - TRect Object
+    *         aDocument - Document Object
+    */
+#ifdef FF_HELP_TUTORIAL_MERGE
+        static CCSXHGenericContainer* NewLC(const TRect& aRect, CCSXHDocument &aDocument
+        ,CCSXHGenericView* aView);
+#else // !FF_HELP_TUTORIAL_MERGE
+        static CCSXHGenericContainer* NewLC(const TRect& aRect, CCSXHDocument &aDocument);
+#endif // FF_HELP_TUTORIAL_MERGE
+    /**
+    *  @function ~CCSXHGenericContainer
+    *  @since S60 3.2
+    *  Destroy the object and release all memory objects
+    */
+    ~CCSXHGenericContainer();
+
+/** 
+*  @function HandleResourceChange
+*  @since S60 3.2
+*  Handles resource changes.
+*  This function is called by framework when when e.g skin or locale is changed.
+*  @param aType resource change type
+*/    	
+    	void HandleResourceChange(TInt aType);
+
+/** 
+*  @function HandleResourceChangeImpl
+*  @since S60 3.2
+*  Handles resource changes.
+*  Implementation function for resource change
+*  @param aType resource change type
+*/    	
+    	void HandleResourceChangeImpl(TInt aType);
+
+/** 
+*  @function SetDisplayTopicL
+*  @since S60 3.2
+*  Using Selected Item, set next object for display  
+*/    	
+    	void SetDisplayTopicL();
+
+/** 
+*  @function GetNumberOfListItems
+*  @since S60 3.2
+*  Get the number of items present in the List
+*  @return Number of Items in the List
+*/    	
+    	TInt GetNumberOfListItems();
+
+/** 
+*  @function SetCurrentView
+*  @since S60 3.2
+*  Sets View Pointer
+*  @param aView - Sets View pointer which is using this Container
+*/    	
+    	void SetCurrentView(CCSXHGenericView* aView);
+/** 
+*  @function CheckForMSK
+*  @since S60 3.2
+*  Checks Msk flag is Enabled or not, If Enabled, Sets MSK Label
+*/    	
+    	void CheckForMSK();	
+/** 
+*  @function HightLightItemL
+*  @since S60 3.2
+*  Sets the selected item in the list box
+*/
+		void HightLightItemL();		
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+        /**
+        *  If the selected item is a tutorial item
+        *  @since S60 3.2
+        *  @param None
+        *  @return A boolean value to indicate the item is tutorial or not
+        *  Sets the selected item in the list box
+        */
+		TBool IsShowTutorialItemSelectedL();
+#endif // FF_HELP_TUTORIAL_MERGE
+		
+
+        void MakeVisible(TBool aVisible);
+
+    protected: // From base classes.
+/**
+ * When focus is changed, called.
+ * Set focus editor(viewer).
+ * @function FocusChanged
+ * @since 3.2
+ * @param aDrawNow used to determine whether or not
+ *        redraw should occur now, or later
+ */
+        void FocusChanged(TDrawNow aDrawNow);			
+    	
+	private:
+	
+/** 
+*  @function CCSXHGenericContainer
+*  @since S60 3.2
+*  Perform the second phase construction of a CCSXHDocument object
+*  @param aDocument - CCSXHDocument Object
+*/
+#ifdef FF_HELP_TUTORIAL_MERGE
+        CCSXHGenericContainer(CCSXHDocument &aDocument,CCSXHGenericView* aView);
+#else // !FF_HELP_TUTORIAL_MERGE
+        CCSXHGenericContainer(CCSXHDocument &aDocument);
+#endif // FF_HELP_TUTORIAL_MERGE
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*  @param aRect - TRect Object
+*/
+    	void ConstructL(const TRect& aRect);    	
+
+/** 
+*  @function CreateAndPopulateListL
+*  @since S60 3.2
+*  Creates a AVKON List & Inserts items into it.
+*/
+		void CreateAndPopulateListL();	
+		
+		
+	private: 
+/** 
+*  From MEikListBoxObserver class
+*  @function HandleListBoxEventL
+*  @since S60 3.2
+*  This function handles List box Events
+*  @param aListBox 		- ListBox Pointer
+*		  aListBoxEvent - Event to be handled 	
+*/
+       	void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aListBoxEvent);	
+
+	private: // from CoeControl
+/** 
+*  From CoeControl class
+*  @function SizeChanged
+*  @since S60 3.2
+*  re-allocates and re-sizes components.
+*/
+       	void SizeChanged();
+/** 
+*  From CoeControl class
+*  @function CountComponentControls
+*  @since S60 3.2
+*  @return Number of child controls this has.  
+*/       	
+       	TInt CountComponentControls() const;
+
+/** 
+*  From CoeControl class
+*  @function ComponentControl
+*  @since S60 3.2
+* @param aIndex index of child controls
+* @retrun pointer to child control
+*/       	
+       	CCoeControl* ComponentControl(TInt aIndex) const;
+
+/** 
+*  From CoeControl class
+*  @function Draw
+*  @since S60 3.2
+*  Draw() for drawing the Background
+*/       	
+       	void Draw(const TRect& aRect) const;
+/** 
+*  From CoeControl class
+*  @function OfferKeyEventL
+*  @since S60 3.2
+*  Progress Key Event
+*  @param aKeyEvent the key event
+*  @param aType EEventKey | EEventKeyUp | EEventKeyDown
+*  @return EKeyWasConsumed if key event is processed,
+*         otherwise EKeyWasNotConsumed
+*/       	
+       	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);	
+            	
+    private:	
+       	CCSXHDocument& iDocument;
+	   	CAknSingleStyleListBox* iListBox;
+       	CAknSearchField* iFindPane;
+       	CCSXHGenericView* iView;
+
+       	
+	};
+
+
+
+#endif /* INC_CSXHTOC2CONTAINER_H_HEADER_INCLUDED_BC039735 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHGenericView.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericView class declaration
+*
+*/
+
+
+#ifndef INC_CSXHGENERICVIEW_H_HEADER_INCLUDED_BC03B1F7
+#define INC_CSXHGENERICVIEW_H_HEADER_INCLUDED_BC03B1F7
+
+#include <aknview.h>
+#include <e32std.h> 
+
+//forward declarations
+class CCSXHGenericContainer;
+
+/** 
+* @class CCSXHGenericView
+* This class List View of the Csxhelp Application
+*/
+class CCSXHGenericView : public CAknView
+    {
+    public:
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHGenericContainer 
+*  and return a pointer to the created object
+*  @param aUid   - View Id
+*		  aFlags - Resource Id
+*		  aRect  - TRect Object	
+*  @return a CCSXHGenericView Pointer 
+*/      
+     	static CCSXHGenericView* NewL(const TUid& aUid, const TInt& aFlags);
+
+/** 
+*  @function ~CCSXHGenericView
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/
+	   	~CCSXHGenericView();
+
+/** 
+*  @function ResetContainer
+*  @since S60 3.2
+*  Reset the Flag, which helps to create a new Container 
+*/
+	   	void ResetContainer();
+
+/** 
+*  @function SetMiddleSoftKey
+*  @since S60 3.2
+*  This will set the Label for MSK
+*/
+    	void SetMiddleSoftKey(TBool aValue);
+    	
+    public:// Functions from base classes
+/**
+* From CAknView, return view id of this view
+*
+* @function Id
+* @since 3.2
+* @return view id
+*/    
+       	TUid Id() const;
+
+/** 
+ * @function HandleCommandL
+ * @since S60 3.2  
+ * takes care of command handling.
+ * @param aCommand command to be handled
+ */
+       	void HandleCommandL(TInt aCommand);	
+       	
+/** 
+ * @function ResourceChangeHdl
+ * @since S60 3.2  
+ * Handler for resource change
+ * @param aType - Type of resource change event
+ */
+     void ResourceChangeHdl(TInt aType);        	
+
+    	
+    protected: // Functions from base classes
+/**
+* From CAknView
+* @function DoActivateL 
+* activation handler
+*
+* @since 3.2
+* @param aPrevViewId ID of previious view.
+*/    
+       	void DoActivateL(const TVwsViewId& aPrevViewId,TUid,const TDesC8& );
+
+/**
+* From CAknView
+* @function DoDeactivate 
+* de-activation handler
+*
+* @since 3.2
+* @param aPrevViewId ID of previious view.
+*/    
+       	void DoDeactivate();
+/**
+* From MEikMenuObserver
+* @function DynInitMenuPaneL 
+* used to manage the menu when
+* no item are in the list box.
+* We need to delete the "Open"
+* menu item in this case.
+*
+* @since 3.2
+* @param aResource resource ID of menu pane
+* @param aMenuPane instance of menupane
+*/   
+    	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+    
+    private:
+/** 
+*  @function CCSXHGenericView
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*/    
+       	CCSXHGenericView(const TUid&,const TInt&);
+
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  Perform the second phase construction of a genericview object
+*/	 	
+       	void ConstructL(); 
+    
+    private:
+        CCSXHGenericContainer *iContainer;
+        TBool iResetContainerInActivate;
+        
+        const TUid &iUid;
+        const TInt &iAppFlags;
+
+    };
+
+#endif /* INC_CSXHGENERICVIEW_H_HEADER_INCLUDED_BC03B1F7 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHHtmlTopicContainer.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,441 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTopicContainer class declaration
+*
+*/
+
+
+#ifndef INC_CCSXHHTMLTOPICCONTAINER_H__
+#define INC_CCSXHHTMLTOPICCONTAINER_H__
+//If I use INC_CCSXHHTMLTOPICCONTAINER_H__, then CodeScanner fails 
+//but if I use INC_CCSXH_HTML_TOPIC_CONTAINER_H__ code scanner 
+//reports an error but produces results for other files
+
+#include <coecntrl.h>
+#include <BrCtlLinkResolver.h>
+#include <brctlinterface.h>
+//RUNTIME
+#include <featurecontrol.h>
+
+class CBrCtlInterface;
+class CCSXHDocument;
+class CCSXHHtmlTOC2;
+class CCSXHHtmlTopicView;
+class AppLauncherForCSXH;
+class CCSXHHelpContentBase;
+
+typedef CBrCtlInterface* (*FuncPtr_CreateBrowserControlL) (CCoeControl* aParent, TRect aRect,
+    TUint aBrCtlCapabilities, TUint aCommandIdBase = TBrCtlDefs::ECommandIdBase,
+    MBrCtlSoftkeysObserver* aBrCtlSoftkeysObserver = NULL,
+    MBrCtlLinkResolver* aBrCtlLinkResolver = NULL,
+    MBrCtlSpecialLoadObserver* aBrCtlSpecialLoadObserver = NULL,
+    MBrCtlLayoutObserver* aBrCtlLayoutObserver = NULL,
+    MBrCtlDialogsProvider* aBrCtlDialogsProvider = NULL,
+    MBrCtlWindowObserver* aBrCtlWindowObserver = NULL,
+	MBrCtlDownloadObserver* aBrCtlDownloadObserver = NULL );
+/** 
+* @class CCSXHHtmlTopicContainer
+* This class provides Browser functionality
+*/
+
+class CCSXHHtmlTopicContainer : public CCoeControl, public MBrCtlLinkResolver, 
+								public MBrCtlLinkContent, public MBrCtlLoadEventObserver,
+								public MBrCtlSoftkeysObserver,public MBrCtlLayoutObserver
+    {
+public:
+
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTopicContainer 
+*  and return a pointer to the created object
+*  @param aRect - TRect Object
+*		  aDocument - Document Object 
+*		  aView		- HtmlTopicView Pointer
+*  @return a CCSXHHtmlTopicContainer Pointer 
+*/
+    static CCSXHHtmlTopicContainer* NewL(const TRect& aRect,CCSXHDocument 
+    &aDocument,CCSXHHtmlTopicView *aView);
+
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTopicContainer 
+*  and return a pointer to the created object using two phase constuction
+*  @param aRect - TRect Object
+*		  aDocument - Document Object 
+*		  aView		- HtmlTopicView Pointer
+*  @return a CCSXHHtmlTopicContainer Pointer 
+*/
+    static CCSXHHtmlTopicContainer* NewLC(const TRect& aRect,CCSXHDocument
+     &aDocument,CCSXHHtmlTopicView *aView);
+
+/** 
+*  @function CCSXHHtmlTopicContainer
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTopicContainer 
+*  and return a pointer to the created object using two phase constuction
+*  @param aRect - TRect Object
+*		  aDocument - Document Object 
+*		  aView		- HtmlTopicView Pointer
+*  @return a CCSXHHtmlTopicContainer Pointer 
+*/
+	CCSXHHtmlTopicContainer(CCSXHDocument &aDocument, CCSXHHtmlTopicView *aView);
+/** 
+ * @function ~CCSXHHtmlTopicContainer
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */
+  ~CCSXHHtmlTopicContainer();
+  
+/** 
+ * @function SetAndLoadInitialTopicL
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ * @param aTopic - Initial Topic to be displayed 
+ */  
+ void SetAndLoadInitialTopicL(CCSXHHtmlTOC2* aTopic);
+     
+public:  
+/**
+* From MBrCtlSoftkeysObserver class
+*  Browser plug-in calls this method requests to update a softkey 
+*  @function UpdateSoftkeyL    
+*  @since S60 3.2
+*  @Param aKeySoftkey	- Update the left softkey or the right softkey  
+*		 aLabel			- The label associated with the softkey update  
+*		 aCommandId		- The command to use if the softkey is selected by the user  
+*		 aBrCtlSoftkeyChangeReason - The reason for the softkey change  
+*/
+void UpdateSoftkeyL(TBrCtlKeySoftkey aKeySoftkey,
+                                    const TDesC& aLabel,
+                                    TUint32 aCommandId,
+                                    TBrCtlSoftkeyChangeReason aBrCtlSoftkeyChangeReason);
+
+/**
+* From MBrCtlLayoutObserver Class
+*  Browser plug-in calls this method to Update the position of vertical scrollbar
+*  @function UpdateBrowserVScrollBarL
+*  @since S60 3.2    
+*  @Param  aDocumentHeight - The total height of the markup page  
+* 		   aDisplayHeight  - The height of the display  
+* 		   aDisplayPosY    - The current Y position  
+*/                                    
+ void UpdateBrowserVScrollBarL(TInt aDocumentHeight, 
+                                              TInt aDisplayHeight,
+                                              TInt aDisplayPosY ) ;
+                                              
+/**
+* From MBrCtlLayoutObserver Class
+*  Browser plug-in calls this method to Update the position of horizontal scrollbar
+*  @function UpdateBrowserHScrollBarL
+*  @since S60 3.2    
+*  @Param  aDocumentWidth - The total width of the markup page  
+* 		   aDisplayWidth  - The width of the display  
+* 		   aDisplayPosX    - The current X position  
+*/                                              
+void UpdateBrowserHScrollBarL(TInt aDocumentWidth, 
+                                              TInt aDisplayWidth,
+                                              TInt aDisplayPosX );
+                                              
+/**
+* From MBrCtlLayoutObserver Class
+*  Browser plug-in calls this method to Inform the layout of the page: right to left or left to right
+*  @function NotifyLayoutChange    
+*  @since S60 3.2
+*  @Param  aNewLayout - RTL or LTR 
+*/                                              
+void NotifyLayoutChange( TBrCtlLayout aNewLayout );
+  
+/**
+* From MBrCtlLayoutObserver Class
+*  Browser plug-in calls this method to Inform the layout of the page: right to left or left to right
+*  @function UpdateTitleL
+*  @since S60 3.2    
+*  @Param  aTitle - Title of the page 
+*/        
+void UpdateTitleL( const TDesC& aTitle );                                   
+
+public:  // from CCoeControl
+/** 
+*  From CoeControl class
+*  @function SizeChanged
+*  @since S60 3.2
+*  re-allocates and re-sizes components.
+*/
+	void SizeChanged();
+/** 
+*  From CoeControl class
+*  @function CountComponentControls
+*  @since S60 3.2
+*  @return Number of child controls this has.  
+*/	
+	TInt CountComponentControls() const;
+
+/** 
+*  From CoeControl class
+*  @function ComponentControl
+*  @since S60 3.2
+* @param aIndex index of child controls
+* @retrun pointer to child control
+*/	
+	CCoeControl* ComponentControl(TInt aIndex) const;
+/** 
+*  From CoeControl class
+*  @function OfferKeyEventL
+*  @since S60 3.2
+*  Progress Key Event
+*  @param aKeyEvent the key event
+*  @param aType EEventKey | EEventKeyUp | EEventKeyDown
+*  @return EKeyWasConsumed if key event is processed,
+*         otherwise EKeyWasNotConsumed
+*/
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+/** 
+*  From MBrCtlLoadEventObserver class
+*  @function HandleBrowserLoadEventL
+*  @since S60 3.2
+*  A load events notification
+*  @param aLoadEvent - The load event  
+*  		  aSize  	 - Size depends on the event  
+*  		  aTransactionId  - The transaction id of the transaction that had this event  
+*/	
+	void HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, 
+								TUint aSize, TUint16 aTransactionId);
+
+/** 
+*  @function RefreshL
+*  @since S60 3.2
+*  Used to Refresh the Content
+*  @param aTopic - CCSXHHtmlTOC2 Object  
+*/	
+	void RefreshL(CCSXHHtmlTOC2 *aTopic);
+	
+/** 
+*  @function HandleBackKeyL
+*  Handle Back Key
+*  @since S60 3.2
+*  @return ETrue, if the key is handled in the container, EFalse otherwise 
+*/ 
+	TBool HandleBackKeyL();
+
+/** 
+*  @function IsPrevHtmlPageAvblL
+*  Check for Existance of the page in the Browser history stack
+*  @since S60 3.2
+*  @return ETrue, if page is available in Browser History Stack, EFalse otherwise 
+*/ 
+	TBool IsPrevHtmlPageAvblL();
+
+/** 
+*  @function SetSelectedFontSizeL
+*  Sets BrowserFontsize
+*  @since S60 3.2
+*  @param aValue - Fontsize Value
+*/	
+	void SetSelectedFontSizeL(TInt aValue);
+	
+/** 
+*  @function SetSelectedFontSizeL
+*  Get Current Settings Value
+*  @since S60 3.2
+*  @param aValue - Any Setting 
+*  @return Current Value used by Browser
+*/	
+	TInt GetCurrentValueL(TInt aSetting);
+
+/** 
+*  @function HandleCommandBackL
+*  @since S60 3.2
+*  Handles resource changes.
+*  pass OpenLink command to the browser HandlecommandL 
+*/
+	void HandleCommandOpenHyperLinkL();
+
+/** 
+*  From CoeControl class
+*  @function Draw
+*  @since S60 3.2
+*  Draw() for drawing the Background
+*/
+    void Draw(const TRect& aRect) const;
+  
+  	void ShowIndexHtmlPageL() const;
+/** 
+*  @function HandleResourceChange
+*  @since S60 3.2
+*  Handles resource changes.
+*  This function is called by framework when when e.g skin or locale is changed.
+*  @param aType resource change type
+*/    	
+   	void HandleResourceChange(TInt aType);
+
+/** 
+*  @function HandleResourceChangeImpl
+*  @since S60 3.2
+*  Handles resource changes.
+*  Implementation function for resource change
+*  @param aType resource change type
+*/    	
+    	void HandleResourceChangeImpl(TInt aType);
+
+/** 
+*  @function HandleCommandBackL
+*  @since S60 3.2
+*  Handles resource changes.
+*  pass Back command to the browser HandlecommandL 
+*/   	
+	void HandleCommandBackL();
+	
+/**
+* Browser plug-in calls this method when embedded link is found. Used with ECapabilityClientResolveEmbeddedURL
+* @since 3.2
+* @param aEmbeddedUrl The url of the embedded content
+* @param aCurrentUrl The url of the current page
+* @param aLoadContentType The expected type of the embedded content
+* @param aEmbeddedLinkContent a callback interface to return the embedded content
+* @return EFalse, browser will resolve the link
+*/
+    TBool ResolveEmbeddedLinkL(const TDesC& aEmbeddedUrl,
+    		                               const TDesC& aCurrentUrl,
+        	                               TBrCtlLoadContentType aLoadContentType, 
+        	                               MBrCtlLinkContent& aEmbeddedLinkContent); 
+		
+/**
+* Browser plug-in calls this method when the user requests to load content via selecting a link, or any other way. Used with ECapabilityClientNotifyURL 
+* @since 3.2
+* @param aUrl The requested url
+* @param aCurrentUrl The url of the current page
+* @param aBrCtlLinkContent a callback interface to return the embedded content
+* @return EFalse, browser will resolve the link
+*/
+        TBool ResolveLinkL(const TDesC& aUrl, const TDesC& aCurrentUrl,
+                                   MBrCtlLinkContent& aBrCtlLinkContent);
+
+/**
+* @function CancelFetchL
+* Cancel all outstanding resolving operations
+*/
+        void CancelFetchL();
+/**
+* @function CancelAll
+* Cancel all outstanding resolving operations
+* @since 3.2
+*/
+        void CancelAll();
+        
+        
+/**
+* @function HandleResolveComplete
+* @since 3.2	
+* Resolver calls this method when content is resolved.
+* @param aContentType The content type of the response
+* @param aCharset The charset of the response. May be empty in case of image
+* @param aContentBuf content data. Ownership is not transfered
+* @return void
+*/
+        void HandleResolveComplete(const TDesC& aContentType,
+                                           const TDesC& aCharset,
+                                           const HBufC8* aContentBuf);
+
+/**
+* @function HandleResolveError
+* @since 3.2
+* This method is called if there is some error while resolving the content
+* @param aError system wide error code.
+*/
+        void HandleResolveError(TInt aError);
+/** 
+*  @function CheckForMSK
+*  @since S60 3.2
+*  Checks Msk flag is Enabled or not, If Enabled, Sets MSK Label
+*/      
+		void CheckForMSK();
+/** 
+*  @function IsPrevPageAvbl
+*  Check wether focus is on Hyperlink or not
+*  @since S60 3.2
+*  @return ETrue, if Focus is on Hyperlink , EFalse otherwise 
+*/		
+		TBool IsHyperLinkFocused();	
+/** 
+*  @function IsPrevPageAvbl
+*  Check for Existance of the page
+*  @since S60 3.2
+*  @return ETrue, if page is available , EFalse otherwise 
+*/		
+	 	TBool IsPrevPageAvbl();
+	 	
+/** 
+*  @function ClearHistoryL
+*  Clear Browser history stack
+*  @since S60 3.2
+*/	 	
+ 		void  ClearHistoryL(); 
+ 		
+/** 
+*  @function GetCurrActiveObject
+*  Get the Current Active Object 
+*  @since S60 3.2
+*  @return CCSXHHelpContentBase Pointer, 
+*/ 		
+ 		CCSXHHelpContentBase* GetCurrActiveObject();
+
+private:
+
+/**
+  @function ConstructL
+  @since S60 3.2
+  Perform the second phase construction of a HtmlTopicContainer object
+  @param aRect the rectangle this view will be drawn to
+  */
+    void ConstructL(const TRect& aRect);
+
+/** 
+*  @function LoadHtmlL
+*  loads HTML page in the Browser
+*  @since S60 3.2
+*/
+	void LoadHtmlL();
+
+/** 
+*  @function CheckForExternalLinkL
+*  Check for external Hyperlink, if yes launch browserNG
+*  @since S60 3.2
+*  @return ETrue, if external hyperlink available, EFalse otherwise 
+*/	
+	TBool CheckForExternalLinkL(const TDesC& aUrl);
+	
+private:
+	CBrCtlInterface* iBrCtrl;    
+	CCSXHHtmlTOC2* iTopic;
+	CCSXHDocument& iDocument;
+    CCSXHHelpContentBase *iNewTopic;
+    
+    //Check the impln comments in HandleBrowserLoadEventL function
+    TBuf<KMaxFileName> iUrlNoAnchors; 
+    
+    CCSXHHtmlTopicView* iView;    
+    AppLauncherForCSXH* iAppLauncher;
+    RLibrary iBrLibrary;
+    RFeatureControl iFeatureControl;
+    TBool iLoadHtml;    
+    TInt32 iPrevPageCount;
+    TBool iBack;
+    
+	};
+
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHHtmlTopicView.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTopicView class declaration
+*
+*/
+
+
+#ifndef INC_CCSXHHTMLTOPICVIEW_H__
+#define INC_CCSXHHTMLTOPICVIEW_H__
+
+// INCLUDES
+#include <aknview.h>
+#include <aknlists.h>
+
+class CCSXHHtmlTopicContainer;
+class TCoeHelpContext;
+// CLASS DECLARATION
+
+/** 
+* @class CCSXHHtmlTopicView
+* This class handles BrowserView of the Csxhelp Application
+*/
+class CCSXHHtmlTopicView : public CAknView
+    {
+    public: 
+    
+    enum THtmlViewType
+    	{
+    	EHtmlView = 0,
+    	EContextHtmlView
+    	};    
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHHtmlTopicView 
+*  and return a pointer to the created object
+*  @param aUid   - View Id
+*		  aFlags - Resource Id
+*		  aRect  - TRect Object	
+*  @return a CCSXHHtmlTopicView Pointer 
+*/
+    static CCSXHHtmlTopicView* NewL(const TUid&, const TInt&,const TRect& aRect);
+    
+/** 
+*  @function ~CCSXHHtmlTopicView
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/
+    virtual ~CCSXHHtmlTopicView();
+
+/**
+*  @function SetViewType
+*  @since S60 3.2
+*  Sets the view type as either normal or context view
+*/        
+	void SetViewTypeL(TInt viewType); 
+	
+/** 
+*  @function GetViewType
+*  @since S60 3.2
+*  Gets the view type as either normal or context view
+*/        
+	TInt GetViewType(); 	
+        
+    protected:
+/** 
+*  @function CCSXHHtmlTopicView
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*/  
+    CCSXHHtmlTopicView(const TUid&,const TInt&);
+
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  Perform the second phase construction of a htmltopicview object
+*/  
+    void ConstructL(const TRect& aRect);
+
+/**
+* From MEikMenuObserver
+* @function DynInitMenuPaneL 
+* used to manage the menu when
+* no item are in the list box.
+* We need to delete the "Open"
+* menu item in this case.
+*
+* @since 3.2
+* @param aResource resource ID of menu pane
+* @param aMenuPane instance of menupane
+*/         
+        void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+      
+
+    public: // Functions from base classes
+/**
+* From CAknView, return view id of this view
+*
+* @function Id
+* @since 3.2
+* @return view id
+*/
+       TUid Id() const;
+
+/** 
+ * @function HandleCommandL
+ * @since S60 3.2  
+ * takes care of command handling.
+ * @param aCommand command to be handled
+ */
+       void HandleCommandL(TInt aCommand);
+       
+/** 
+ * @function ResourceChangeHdl
+ * @since S60 3.2  
+ * Handler for resource change
+ * @param aType - Type of resource change event
+ */
+     void ResourceChangeHdl(TInt aType);             
+
+/** 
+ * @function ViewActivatedL
+ * @since S60 3.2  
+ * Takes any action required when this view is activated. 
+ * Handles this view activation event from view server
+ * @param aPrevViewId  		- Specifies the view previously active.  
+ *		  aCustomMessageId  - Specifies the message type.  
+ *  	  aCustomMessage    - Activation message 
+ */
+       void ViewActivatedL(const TVwsViewId& aPrevViewId,
+	                             TUid aCustomMessageId,
+	                             const TDesC8& aCustomMessage);
+	                             
+	                             
+/** 
+ * @function SetSoftKeysL
+ * @since S60 3.2  
+ * Sets SoftKeys 
+ * @param aSoftKeys Resource Id
+ */	                             
+	   void SetSoftKeysL(TInt aSoftKeys);
+	   
+/** 
+ * @function GetCurrentFontSize
+ * @since S60 3.2  
+ * SetSoftKeysL 
+ * @return Current FontSize 
+ */	   
+	   TInt GetCurrentFontSize();
+/** 
+*  @function SetMiddleSoftKey
+*  @since S60 3.2
+*  This will set the Label for MSK
+*/	   
+	   void SetMiddleSoftKey(TBool aValue);
+	   
+/**
+* From CAknView
+* @function DoDeactivate 
+* de-activation handler
+*
+* @since 3.2
+* @param aPrevViewId ID of previious view.
+*/  
+      void DoDeactivate();	   
+#ifdef FF_HELP_TUTORIAL_MERGE
+    /**
+    *  Lauch tutorial if exist, else popup a error message
+    *  @since S60 3.2
+    *  @param None
+    *  @return None
+    */
+    void LaunchTutorial();
+#endif // FF_HELP_TUTORIAL_MERGE
+
+    protected: // functions from base classes
+/**
+* From CAknView
+* @function DoActivateL 
+* activation handler
+*
+* @since 3.2
+* @param aPrevViewId ID of previious view.
+*/
+       void DoActivateL(const TVwsViewId& aPrevViewId,
+                             TUid /* aCustomMessageId */,
+                             const TDesC8& /* aCustomMessage */);
+
+
+        
+   private: 
+        // previous view
+      TVwsViewId iPrevious;
+	  CCSXHHtmlTopicContainer* iBCContainer;
+	  
+	  const TUid& iUid;
+      const TInt& iAppFlags;
+      
+	  static TInt iFontSize;
+	  
+	  TBool iContextTopicView;		
+    };
+
+#endif // INC_CCSXHHTMLTOPICVIEW_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHLegacyTopicContainer.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,227 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTopicContainer class declaration
+*
+*/
+
+
+// INCLUDES
+#include <aknview.h>
+#include <eikedwob.h>
+#include <txtfrmat.h>
+
+
+// FORWARD DECLARATIONS
+class CEikRichTextEditor;
+class CEikGlobalTextEditor;
+class CRichText;
+class CAknsBasicBackgroundControlContext;
+class CCSXHDocument;
+class CCSXHLegacyTOC2;
+// CLASS DECLARATION
+
+/**
+*  CCsHelpTopicContainer
+*  container control class for legacy topic view
+*  @lib etext.lib, eikcoctl.lib
+*  @since 3.2
+*/
+class CCSXHLegacyTopicContainer : public CCoeControl
+    {
+    public: // Constructors and destructor
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTopicContainer 
+*  and return a pointer to the created object
+*  @param aRect - TRect Object
+*		  aDocument - Document Object 
+*		  aTopic	- LegacyTOC2 Pointer	
+*  @return a CCSXHLegacyTopicContainer Pointer 
+*/
+        static CCSXHLegacyTopicContainer* NewL(const TRect& aRect,CCSXHDocument
+        &aDocument,CCSXHLegacyTOC2 *aTopic);
+        
+/** 
+*  @function NewLC
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTopicContainer 
+*  and return a pointer to the created object using two phase constuction
+*  @param aRect - TRect Object
+*		  aDocument - Document Object 
+*		  aTopic	- LegacyTOC2 Pointer	
+*  @return a CCSXHLegacyTopicContainer Pointer 
+*/        
+		static CCSXHLegacyTopicContainer* NewLC(const TRect& aRect,CCSXHDocument
+		&aDocument,CCSXHLegacyTOC2 *aTopic);
+		
+/** 
+*  @function CCSXHLegacyTopicContainer
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTopicContainer 
+*  and return a pointer to the created object using two phase constuction
+*  @param aDocument - Document Object 
+*		  aTopic	- LegacyTOC2 Pointer	
+*  @return a CCSXHHtmlTopicContainer Pointer 
+*/		
+		CCSXHLegacyTopicContainer(CCSXHDocument &aDocument,CCSXHLegacyTOC2 *aTopic);
+
+/** 
+*  @function RefreshL
+*  @since S60 3.2
+*  Used to Refresh the Content
+*  @param aTopic - CCSXHLegacyTOC2 Object  
+*/
+		void RefreshL(CCSXHLegacyTOC2 *aTopic);
+			
+ /**
+  @function ConstructL
+  @since S60 3.2
+  Perform the second phase construction of a LegacyTopicContainer object
+  @param aRect the rectangle this view will be drawn to
+  */      void ConstructL(const TRect& aRect);
+        
+        /**
+        * @The Mopsupply object gives the skin context to 
+        * @the scrollbar, so that the scrollbar is skinned
+        * @according the skin parameters and look transparent
+          */
+        TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+
+/** 
+ * @function ~CCSXHLegacyTopicContainer
+ * @since S60 3.2
+ * Destroy the object and release all memory objects
+ */
+      virtual ~CCSXHLegacyTopicContainer();		
+		
+    public: // New functions
+/** 
+*  @function HandleResourceChange
+*  @since S60 3.2
+*  Handles resource changes.
+*  This function is called by framework when when e.g skin or locale is changed.
+*  @param aType resource change type
+*/ 
+        void HandleResourceChange(TInt aType);
+
+/** 
+*  @function HandleResourceChangeImpl
+*  @since S60 3.2
+*  Handles resource changes.
+*  Implementation function for resource change
+*  @param aType resource change type
+*/    	
+    	void HandleResourceChangeImpl(TInt aType);
+        
+	
+    protected: // New functions
+/** 
+*  @function SetTextL
+*  @since S60 3.2
+*  Handles resource changes.
+*  set topic's text to a rich text editor
+*  @param aText help document
+*/         
+        void SetTextL(CRichText* aText);
+
+    protected: // From base classes.
+/**
+ * When focus is changed, called.
+ * Set focus editor(viewer).
+ * @function FocusChanged
+ * @since 3.2
+ * @param aDrawNow used to determine whether or not
+ *        redraw should occur now, or later
+ */
+        void FocusChanged(TDrawNow aDrawNow);
+
+
+    private: // new function
+/**
+ * Get rich text format from resource.
+ * @function GetTextFormat
+ * @since 3.2
+ */
+        void GetTextFormat();
+
+/*
+* Format the rich text help data
+* @function FormatRichTextL
+* @since 3.2
+* @param aText instance of the CRichText object to format
+*/
+        void FormatRichTextL(CRichText& aText);
+
+    private: // Functions from base classes
+/** 
+*  From CoeControl class
+*  @function SizeChanged
+*  @since S60 3.2
+*  re-allocates and re-sizes components.
+*/
+       void SizeChanged();
+
+/** 
+*  From CoeControl class
+*  @function OfferKeyEventL
+*  @since S60 3.2
+*  Progress Key Event
+*  @param aKeyEvent the key event
+*  @param aType EEventKey | EEventKeyUp | EEventKeyDown
+*  @return EKeyWasConsumed if key event is processed,
+*         otherwise EKeyWasNotConsumed
+*/
+        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,
+                                    TEventCode aType);
+
+/** 
+*  From CoeControl class
+*  @function CountComponentControls
+*  @since S60 3.2
+*  @return Number of child controls this has.  
+*/       
+		TInt CountComponentControls() const;
+
+/** 
+*  From CoeControl class
+*  @function ComponentControl
+*  @since S60 3.2
+* @param aIndex index of child controls
+* @retrun pointer to child control
+*/
+        CCoeControl* ComponentControl(TInt aIndex) const;
+
+/** 
+*  From CoeControl class
+*  @function Draw
+*  @since S60 3.2
+*  Draw() for drawing the Background
+*/
+        void Draw(const TRect& aRect) const;
+        
+
+    private: //data
+        // to show help document
+        CEikEdwin* iEdwin;
+		
+        // rich text format
+        TCharFormat iCharFormat;
+        TCharFormatMask iCharFormatMask;
+		CAknsBasicBackgroundControlContext* iSkinContext; // skin data
+		CRichText* iText; // skin data	
+		CCSXHDocument& iDocument;	
+		CCSXHLegacyTOC2* iTopic;
+    };
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CSXHLegacyTopicView.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTopicView class declaration
+*
+*/
+
+
+#include <aknview.h>
+#include <aknlists.h>
+
+class CCSXHLegacyTopicContainer;
+
+// CLASS DECLARATION
+
+/** 
+* @class CCSXHLegacyTopicView
+* This class handles RichTextView of the Csxhelp Application
+*/
+class CCSXHLegacyTopicView : public CAknView
+    {
+    public:   
+/** 
+*  @function NewL
+*  @since S60 3.2
+*  Construct a CCSXHLegacyTopicView 
+*  and return a pointer to the created object
+*  @param aUid   - View Id
+*		  aFlags - Resource Id
+*		  aRect  - TRect Object	
+*  @return a CCSXHLegacyTopicView Pointer 
+*/
+     
+    static CCSXHLegacyTopicView* NewL(const TUid& aUid, const TInt& 
+			aFlags,const TRect& aRect);
+/**
+* From CAknView
+* @function DoDeactivate 
+* de-activation handler
+*
+* @since 3.2
+* @param aPrevViewId ID of previious view.
+*/    
+    void DoDeactivate();
+    
+/** 
+*  @function ~CCSXHLegacyTopicView
+*  @since S60 3.2
+*  Destroy the object and release all memory objects
+*/
+        virtual ~CCSXHLegacyTopicView();
+    protected:
+/** 
+*  @function CCSXHLegacyTopicView
+*  @since S60 3.2
+*  Perform the first phase of two phase construction
+*/        CCSXHLegacyTopicView(const TUid&, const TInt&);
+
+/** 
+*  @function ConstructL
+*  @since S60 3.2
+*  Perform the second phase construction of a legacytopicview object
+*  @param aRect the rectangle this view will be drawn to
+*/ 
+       void ConstructL(const TRect& aRect);          
+
+    public: // Functions from base classes
+ /**
+* From CAknView, return view id of this view
+*
+* @function Id
+* @since 3.2
+* @return view id
+*/
+        TUid Id() const;
+
+/** 
+ * @function HandleCommandL
+ * @since S60 3.2  
+ * takes care of command handling.
+ * @param aCommand command to be handled
+ */
+        void HandleCommandL(TInt aCommand);  
+        
+/** 
+ * @function ResourceChangeHdl
+ * @since S60 3.2  
+ * Handler for resource change
+ * @param aType - Type of resource change event
+ */
+     void ResourceChangeHdl(TInt aType);                 
+
+    protected: // functions from base classes
+/**
+* From CAknView
+* @function DoActivateL 
+* activation handler
+*
+* @since 3.2
+* @param aPrevViewId ID of previious view.
+*/ 
+        void DoActivateL(const TVwsViewId& aPrevViewId,
+                             TUid /* aCustomMessageId */,
+                             const TDesC8& /* aCustomMessage */);
+                             
+
+/** 
+ * @function ViewActivatedL
+ * @since S60 3.2  
+ * Takes any action required when this view is activated. 
+ * Handles this view activation event from view server
+ * @param aPrevViewId  		- Specifies the view previously active.  
+ *		  aCustomMessageId  - Specifies the message type.  
+ *  	  aCustomMessage    - Activation message 
+ */                             
+       void ViewActivatedL(const TVwsViewId& aPrevViewId,
+	                             TUid aCustomMessageId,
+	                             const TDesC8& aCustomMessage);
+	                             
+/** 
+ * @function ViewActivatedL
+ * @since S60 3.2  
+ * Takes any action required when this view is deactivated. 
+ * Handles this view deactivation event from view server 
+ */
+	   void ViewDeactivated();
+
+
+    private: 
+         
+		CCSXHLegacyTopicContainer* iTopicContainer;
+		TVwsViewId iPrevious;
+		
+		const TUid& iUid;
+      	const TInt& iAppFlags;
+  
+    };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/CsHelp.hrh	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declarations for resources of cshelp.
+*
+*/
+
+
+#ifndef CSHELP_HRH
+#define CSHELP_HRH
+
+enum TCSXHIds
+    {
+    ECSXHOpenItem = 1,  // start value must not be 0
+    ECSXHOpenItemPropagated , //Propagated from container
+    ECSXHTOC1ListView,
+    ECSXHKywdTOC1ListView,
+    ECSXHTOC2ListView,
+    ECSXHSearchText,
+    ECSXHOpenTopicView,
+    ECSXHOpenTopicText,
+    ECSXHOpenApplicationTopics,
+    ECsHelpCmdFontLarge,    
+    ECsHelpCmdFontSmall,
+    ECSXHOpenHyperLink,
+    ECSXHDummyMSK,
+    ECmdAiwPlaceHolder,
+    ECmdLast
+    };
+
+
+
+// Commands
+enum TCsHelpMenuCommands
+    {
+    ECsHelpCmdViewCategoryList = 0x6000,
+    ECsHelpCmdViewTopicList,
+    ECsHelpCmdViewTopic,
+    ECsHelpCmdViewTopicForContext,
+    ECsHelpCmdViewTopicForSearch,
+    ECsHelpCmdViewSearch,
+    ECsHelpCmdViewSearchResult,
+
+    ECsHelpCmdNextTopicList,
+    ECsHelpCmdPreviousTopicList,
+
+    ECsHelpCmdNextTopic,
+    ECsHelpCmdPreviousTopic,
+
+    ECsHelpCmdNextIndex,
+    ECsHelpCmdPreviousIndex
+    };
+
+// Tab ID for category list view and search view
+enum TCsHelpTabId
+    {
+    ECsHelpCategoryTab,
+    ECsHelpSearchTab
+    };
+
+ 
+// note id
+enum TCsHelpNoteId
+    {
+    EProgressNote = 1,
+    EInstallNote
+    };
+
+
+enum TTutorialAiwCommands {
+        KLaunchTutorial = 0x10208a86,  //Launches tutorial as embedded application
+        KPlayPresentation,         //Plays tutorial presentation
+        KPresentationExists,       //Tests if the given presentation exists
+        KPlayDefaultPresentation,  //Plays tutorial default presentation 
+        KDefaultPresentationExists //Tests if the default presentation exists
+    };
+
+#endif      //  CSHELP_HRH
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/cshelp.laf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,41 @@
+/*
+* ============================================================================
+*  Name     : cshelp.laf
+*  Part of  : CsHelp
+*
+*  Description:
+*     This is the LAF specification file for the Cshelp app.
+*       
+*
+*  Version:
+*
+*  Copyright (C) 2002 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing,  adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+*
+* ============================================================================
+*/
+
+//d: laf data for Help application's topic view.
+// Edit 16 >>
+////l: main_pane_1
+//l:main_pane_1_help_item_text
+// <<
+//
+#define topic_view_font     ELatinPlain12
+#define topic_view_C        215 
+#define topic_view_l        4
+#define topic_view_r        5
+#define topic_view_B        21
+#define topic_view_W        167
+#define topic_view_J        ELayoutAlignBidi
+#define topic_view_lines    8
+#define topic_view_nextB    37
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/inc/csxhruntimeappwatcher.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  observer if any install/unistall happens at help app
+*                 runtime
+*
+*/
+
+#ifndef CSXHRUNTIMEAPPWATCHER_H
+#define CSXHRUNTIMEAPPWATCHER_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+/*
+ * Base class of Installation/Uninstallation
+ * 
+ */
+class MInstallationObserver
+    {
+public:
+    /*
+     * call back function, to handle update index
+     */
+    virtual void RuntimeUpdateIndex() = 0;
+    };
+
+/*
+ * Runtime indexing wather
+ * keep watching if user install/uninstall/modify any helps
+ * 
+ */
+class CCSXHRuntimeAppWatcher : public CActive
+    {
+public:
+    
+    /*
+     * default constructor
+     */
+    CCSXHRuntimeAppWatcher();
+    
+    /*
+     * destructor
+     */
+    ~CCSXHRuntimeAppWatcher();
+    
+    /*
+     * two-phase constructor
+     */
+    static CCSXHRuntimeAppWatcher* NewL();
+    
+    /*
+     * from base class CActive
+     * Handles an active object's request completion event
+     */
+    void RunL();
+    
+    /*
+     * from base class CActive
+     * Implements cancellation of an outstanding request
+     */
+    void DoCancel();
+    
+    /*
+     * start this active object
+     */
+    void Start();
+    
+    /*
+     * Set observer
+     * @param aObserver: App UI, notify user helps modified
+     * 
+     */
+    void SetObserver( MInstallationObserver* aObserver );
+    
+private:
+    
+    /*
+     * two-phase constructor
+     */
+    void ConstructL();
+    
+private:
+
+    /*
+     * file session
+     */
+    RFs iFileSession;
+    
+    /*
+     * observer
+     * not owned
+     */
+    MInstallationObserver* iObserver;
+    };
+    
+#endif // CSXHRUNTIMEAPPWATCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/loc/csxhelp.loc	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Localisation file for Csxhelp
+*
+*/
+
+
+//  LOCALISATION STRINGS
+//d: help application name in selection grid window
+//l: cell_app_pane_t1
+#define qtn_apps_grid_help          "Help"
+
+//d: help application name in selection list window
+//l: list_single_large_graphic_pane_t1
+#define qtn_apps_ls1_help           "Help"
+
+//d: text when there is no topic
+//l: popup_note_window
+#define qtn_help_note_no_topic      "No topic available"
+
+//d: text of wait note while sarching 
+//l: popup_note_wait_window
+#define qtn_help_noteg_searching    "Searching"
+
+//d: Command in options menu. go to categor list view
+//l: list_single_pane_t1_cp2
+#define qtn_help_om_category_list   "Help category list"
+
+//d: Command in options menu. find keywords, and go to search result view
+//l: list_single_pane_t1_cp2
+#define qtn_help_om_find_topics     "Find"
+
+
+//d: Command in options menu. go to topic list view
+//l: list_single_pane_t1_cp2
+#define qtn_help_om_open_category   "Open"
+
+//d: Command in options menu. go to topic view
+//l: list_single_pane_t1_cp2
+#define qtn_help_om_open_topic      "Open"
+
+//d: Command in options menu. go to search view.
+//l: list_single_pane_t1_cp2
+#define qtn_help_om_search          "Search by keyword"
+
+
+//d: Command in options menu. go to topic list view
+//l: list_single_pane_t1_cp2
+#define qtn_help_om_topic_list      "Topic list"
+
+//d: title text in help application
+//l: title_pane_t2/opt9
+#define qtn_help_title_help         "Help"
+
+//d: when help application is launched from options menu and no help topic is 
+//d: associated with present view, information note with this text is dsplayed.
+//l: popup_note_window
+#define qtn_help_note_no_topics "No help topics available"
+
+//d: Command in options menu. go to search view
+//l: list_single_pane_t1_cp2
+//r:3.2
+#define	qtn_help_om_search_xhtml	"Search"  
+
+//d: Command in options menu. go to help content view
+//l: list_single_pane_t1_cp2
+//r:3.2
+#define	qtn_help_om_help_contents	"Help Contents"
+
+//d: Command in options menu. go to Application topic view
+//l: list_single_pane_t1_cp2
+//r:3.2
+#define	qtn_help_om_application_topics	"Application Topics"
+
+//d: Command in options menu. To open the linked html page
+//l: list_single_pane_t1_cp2
+//r:3.2
+#define qtn_help_om_open_hyperlink		"Open link"
+
+//d: Command in options menu. To increase browser font size
+//l: list_single_pane_t1_cp2
+//r:3.2
+#define qtn_help_om_increase_text		"Increase text size"
+
+//d: Command in options menu. To decrease browser font size
+//l: list_single_pane_t1_cp2
+//r:3.2
+#define qtn_help_om_decrease_text		"Decrease text size"
+
+//d: While launching an Application from help with wrong uid/data
+//d: information note with this text is dsplayed.
+//l: popup_note_window
+//r:3.2
+#define qtn_help_note_unable_launch		"Unable to launch application"
+
+//d: When an Application is trying to launch from help using (HTTP)external links.
+//d: information note with this text is dsplayed.
+//l: popup_note_window
+//r:3.2
+#define qtn_help_note_no_internet		"Launching applications from internet content is not allowed"
+
+//d: Command for Middle SoftKey. find keywords, and go to search result view 
+//l: control_pane_t3/opt7
+//r:3.2
+#define qtn_help_msk_find     "Find"
+
+//d: Command for Middle SoftKey. To open the linked html page
+//l: control_pane_t3/opt7
+//r:3.2
+#define qtn_help_msk_open_hyperlink		"Open link"
+
+//d: 1st Item in the Top Level List,Present only if Tutorial is present in the platform.
+//d: 1st Item in the applications Topic List,Present only if Tutorial content is available
+//for that application in the platform.
+//l: navi_text_pane_t1
+//r:5.0
+#define qtn_help_toc_list_item_tutorial    			"Show Tutorial"	
+
+//d: Label for wait note
+//d: This note is used when user install/uninstall an application, which has helps.
+//l: popup_note_wait_window
+//r: 5.0
+#define qtn_help_noteg_install    "Help content changed due to install/uninstallation, please restart Help application to see new app"
+    
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/rom/AiwHelpProvider.iby	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the AiwHelpProvider application.
+*
+*
+*/
+
+#ifndef __AIWHELPPROVIDER_IBY__
+#define __AIWHELPPROVIDER_IBY__
+
+#ifdef RD_HELP_AIW_INTEGRATION
+
+
+ECOM_PLUGIN(AiwHelpProvider.dll,AiwHelpProvider.RSC)
+
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/rom/AiwHelpProviderResources.iby	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the AiwHelpProvider application.
+*
+*
+*/
+
+
+#ifndef __AIWHELPPROVIDERRESOURCES_IBY__
+#define __AIWHELPPROVIDERRESOURCES_IBY__
+
+#ifdef RD_HELP_AIW_INTEGRATION
+data=DATAZ_\APP_RESOURCE_DIR\AiwHelpProviderPlugin.rsc APP_RESOURCE_DIR\AiwHelpProviderPlugin.rsc
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/rom/Cshelp.iby	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the CsHelp application.
+*
+*
+*/
+
+
+#ifndef __CSHELP_IBY__
+#define __CSHELP_IBY__
+
+#ifdef __SERIES60_HELP // Help files are put in the image only when this flag is defined
+
+#include <hlpmodel.iby>
+
+file=ABI_DIR\BUILD_DIR\HelpEngine.dll    \SHARED_LIB_DIR\HelpEngine.dll
+
+S60_APP_EXE(cshelp)
+S60_APP_AIF_ICONS(cshelp)
+S60_APP_AIF_RSC(cshelp)
+S60_APP_BITMAP(cshelp)
+
+#endif //__SERIES60_HELP
+
+#endif //  __CSHELP_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/rom/CshelpResources.iby	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main resource file for the CsHelp application.
+*
+*
+*/
+
+
+#ifndef __CSHELP_RESOURCES_IBY__
+#define __CSHELP_RESOURCES_IBY__
+
+
+
+#ifdef __SERIES60_HELP // Help files are put in the image only when this flag is defined
+
+S60_APP_CAPTION(Cshelp)
+
+//Resource file(s) for CsHelp application
+#ifndef RD_APPS_TO_EXES
+data=ZSYSTEM\Apps\Cshelp\cshelp.rsc  APP_RESOURCE_DIR\cshelp.rsc 
+
+#else
+data=DATAZ_\APP_RESOURCE_DIR\cshelp.rsc                                 APP_RESOURCE_DIR\cshelp.rsc
+#endif
+
+
+#endif //__SERIES60_HELP
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/AppLauncherForCSXH.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  AppLauncherForCSXH class definition
+*
+*/
+
+
+#include "AppLauncherForCSXH.h"
+#include "CSXHAppUi.h"
+#include <cshelp.rsg>
+
+#include <e32std.h>
+#include <apgtask.h>
+#include <apgcli.h> 
+#include <utf.h>
+#include <aknnotewrappers.h> 
+#include <AknGlobalNote.h>
+#include "csxhconstants.h"
+#include <e32std.h> 
+
+
+const TInt KBackSlashesInPrefix = 3;
+#ifndef __SERIES60_30__ 
+	const TUid KUidBrowserApplication = { 0x10008D39 };
+#else
+	const TUid KUidBrowserApplication = { 0x1020724D };
+#endif
+
+const TInt KKeyBlockTime = 100000;  
+
+enum TAppLaunchMode
+            {
+            ENoAppLaunch = 0,   
+            EVSAMode = 1,
+            ECmdMode = 2,
+            EAppLaunchFromInternet = 3,
+            };
+enum TAppLauchParams
+    {
+    EParamsInvalid = 0,
+    EParamsNoMsg,
+    EParamsWithMsg,
+    };
+
+
+AppLauncherForCSXH* AppLauncherForCSXH::NewL()
+    {
+    AppLauncherForCSXH* self = new(ELeave) AppLauncherForCSXH();
+    self->ConstructL();
+    return self;
+    }
+
+AppLauncherForCSXH::AppLauncherForCSXH()
+    {}
+    
+void AppLauncherForCSXH::ConstructL()
+    {
+    iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); 
+    }
+    
+AppLauncherForCSXH::~AppLauncherForCSXH()
+    {
+    if(iTimer)
+        delete iTimer;      
+    }
+
+// --------------------------------------------------------------------------
+// Launches an application based on the Application Launch Link URL
+// --------------------------------------------------------------------------
+TBool AppLauncherForCSXH::LaunchAppL(const TDesC& aUrl,const TDesC& aCurrentUrl)
+    {
+    switch(GetAppLaunchModeL(aUrl,aCurrentUrl))
+        {
+        case ENoAppLaunch:
+            return EFalse;
+        case EAppLaunchFromInternet:
+            HandleAppLauchFromInternetL();
+            return ETrue;
+        case EVSAMode:
+            {
+            if(!LaunchApp(aUrl,ETrue))
+                HandleFailedAppLauchL();
+            return ETrue;
+            }
+        case ECmdMode:
+            {
+            if(!LaunchApp(aUrl,EFalse))
+                HandleFailedAppLauchL();
+            return ETrue;
+            }   
+        default:
+            return EFalse;
+        }
+    }
+
+TInt AppLauncherForCSXH::GetAppLaunchModeL(const TDesC& aUrl,const TDesC& aCurrentUrl)
+    {
+    TInt Position = aUrl.Find(_L("app://vsa@localhost/"));
+    if(KErrNotFound != Position && 0 == Position)
+        {
+        return CheckAppLaunchFromInternetL(EVSAMode,aCurrentUrl);
+        }
+    
+    Position = aUrl.Find(_L("app://cmd@localhost/"));
+    if(KErrNotFound != Position && 0 == Position)
+        {
+        return CheckAppLaunchFromInternetL(ECmdMode,aCurrentUrl);
+        }
+    
+    return ENoAppLaunch;    
+    }
+
+TBool AppLauncherForCSXH::LaunchApp(const TDesC& aUrl, TBool aVSAMode)
+    {
+    iParam1.Copy(KEmptyString);
+    iParam2.Copy(KEmptyString);
+    iParam3.Copy(KEmptyString);
+    iParam4.Copy(KEmptyString);
+    
+    switch(CheckMsgParams(aUrl))
+        {
+        case EParamsInvalid:
+            return EFalse;
+        case EParamsNoMsg:
+            {
+            ExtractTwoParams(aUrl);
+            if(aVSAMode)
+                {
+                TInt32 AId,VId;
+                GetUid(iParam1,AId);
+                GetUid(iParam2,VId);                
+                TRAPD(res,CCSXHAppUi::GetInstance()->AppLaunchL(AId,VId));
+                return (res == KErrNone) ? ETrue : EFalse;  
+                }
+            else
+                {
+                return LaunchCmdApp(EFalse);
+                }
+            }
+        case EParamsWithMsg:
+            {
+            ExtractFourParams(aUrl);
+            if(aVSAMode)
+                {
+                TInt32 AId,VId,MId;
+                GetUid(iParam1,AId);
+                GetUid(iParam2,VId);
+                GetUid(iParam3,MId);
+                TRAPD(res,CCSXHAppUi::GetInstance()->AppLaunchL(AId,VId,MId,iParam4));
+                return (res == KErrNone) ? ETrue : EFalse;  
+                }
+            else
+                {
+                return LaunchCmdApp(ETrue);
+                }
+            }
+        default:
+            return EFalse;
+        }
+    }
+TBool AppLauncherForCSXH::LaunchCmdApp(TBool aParamsMode)
+    {
+    TRAPD(res,LaunchCmdAppL(aParamsMode));
+    if(res != KErrNone)
+        return EFalse;
+    return ETrue;
+    }
+TBool AppLauncherForCSXH::LaunchCmdAppL(TBool aParamsMode)
+    {
+    /*valid cases
+    app://cmd@localhost/APP_NAME/APP_UID
+    app://cmd@localhost/APP_NAME/APP_UID/MSG_UID/Parameters
+    */
+    TApaTask task = GetCmdAppTask();
+    if (task.Exists())
+        {//App is already running
+        if(aParamsMode)
+            SendMsgToCmdAppTaskL(task);
+        
+        task.BringToForeground();
+        return ETrue;
+        }
+    //Application has to be started
+    CApaCommandLine* cmdLine=CApaCommandLine::NewLC();
+    cmdLine->SetExecutableNameL(iParam1);
+    cmdLine->SetCommandL(EApaCommandRun);
+    
+    RApaLsSession lsSession;
+    User::LeaveIfError(lsSession.Connect());
+    CleanupClosePushL(lsSession);
+    User::LeaveIfError(lsSession.StartApp(*cmdLine));
+    CleanupStack::PopAndDestroy(&lsSession);
+    CleanupStack::PopAndDestroy(cmdLine);   
+    if(aParamsMode)
+        {
+        iCount = 0; 
+        TCallBack timer_Callback_to_terminateApp( Timer_Callback_to_TerminateApp,this );
+        StartTimer(timer_Callback_to_terminateApp);    
+        }
+    
+    return ETrue;
+    }
+    
+TInt AppLauncherForCSXH::Timer_Callback_to_TerminateApp(TAny* aPtr)
+    {
+    return static_cast<AppLauncherForCSXH*>( aPtr )->SendMsgToApplication();
+    }
+        
+TInt AppLauncherForCSXH::SendMsgToApplication()
+    {
+    //If parameters has to be passed then the following is required
+    TApaTask cmdTask = GetCmdAppTask();
+    if (cmdTask.Exists())
+        {
+        TRAPD(res,SendMsgToCmdAppTaskL(cmdTask));       
+        if(res != KErrNone)
+            return 0;
+        cmdTask.BringToForeground();
+        iTimer->Cancel();
+        }
+    else if(++iCount > 20)
+        {
+        iTimer->Cancel();       
+        }
+        return 0;       
+    }   
+        
+TApaTask AppLauncherForCSXH::GetCmdAppTask()    
+    {
+    TInt32 AId;
+    GetUid(iParam2,AId);
+    TApaTaskList taskList(CCSXHAppUi::GetInstance()->GetWsSession());
+    TUid KtestAppUid( TUid::Uid( AId ) ); 
+    return taskList.FindApp(KtestAppUid);
+    }
+void AppLauncherForCSXH::SendMsgToCmdAppTaskL(TApaTask& aTask)
+    {
+    
+    TInt32 MId;
+    GetUid(iParam3,MId);
+    TUid KtestMsgUid( TUid::Uid( MId ) ); 
+    HBufC8* params = CnvUtfConverter::ConvertFromUnicodeToUtf8L(iParam4);
+    CleanupStack::PushL(params);
+    aTask.SendMessage (KtestMsgUid, *params); 
+    CleanupStack::PopAndDestroy(params);
+    }
+    
+void AppLauncherForCSXH::HandleFailedAppLauchL()
+    {
+    HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC(
+    				R_QTN_HELP_NOTE_UNABLE_TO_LAUNCH_APP);      
+    CAknGlobalNote* note = CAknGlobalNote::NewLC();
+    note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+    CleanupStack::PopAndDestroy(note); 
+    CleanupStack::PopAndDestroy(ErrorMessage); 
+    }
+void AppLauncherForCSXH::HandleAppLauchFromInternetL()
+    {
+    HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC(
+    				R_QTN_HELP_NOTE_APP_LAUNCH_NOT_ALLOWED);
+    CAknGlobalNote* note = CAknGlobalNote::NewLC();
+    note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+    CleanupStack::PopAndDestroy(note); 
+    CleanupStack::PopAndDestroy(ErrorMessage);        
+    }
+
+TInt AppLauncherForCSXH::CheckAppLaunchFromInternetL(TInt aCurrentMode,const TDesC& /*aCurrentUrl*/ )
+    {
+       
+    return aCurrentMode; 
+    //BrowserNG is lauched for Externalhyperlinks, 
+    //All the security issues are addresed by BrowserNG,    
+    
+    /*(0 == aCurrentUrl.Find(KFileUrlPrefix) ) ? 
+                    aCurrentMode : EAppLaunchFromInternet;*/
+    }
+
+TInt AppLauncherForCSXH::CheckMsgParams(const TDesC& aUrl)
+    {
+    /*
+    The following are valid cases
+    app://vsa@localhost/APP_UID/VIEW_UID
+    app://vsa@localhost/APP_UID/VIEW_UID/MSG_UID/Parameters
+    app://cmd@localhost/APP_NAME/APP_UID
+    app://cmd@localhost/APP_NAME/APP_UID/MSG_UID/Parameters
+    
+    That is, it should have exactly 4 backslashes or 
+    >= 6 backslashes (considering the possibility that parameters
+    can have embedded backslashes)
+    */
+    TBuf<KBackSlashLength> backSlash(KBackSlash);
+    TInt count = 0;
+    
+    for(TInt i = 0 ; i < aUrl.Length() ; ++i)
+        {
+        if(KErrNotFound != backSlash.Find(&aUrl[i],KBackSlashLength))
+            ++count;
+        }
+    
+    if(count == 4)
+        return EParamsNoMsg;
+    else if (count >=6)
+        return EParamsWithMsg;
+    else    
+        return EParamsInvalid;
+    }
+
+void AppLauncherForCSXH::ExtractTwoParams(const TDesC& aUrl)
+    {
+    /*Will be called for the following cases
+    app://vsa@localhost/APP_UID/VIEW_UID
+    app://cmd@localhost/APP_NAME/APP_UID
+    */
+    iParam1.Copy(KEmptyString);
+    iParam2.Copy(KEmptyString);
+    
+    TBuf<KBackSlashLength> backSlash(KBackSlash);
+    TInt count = 0;
+    TInt pos;
+    
+    for(pos = 0; pos < aUrl.Length() ; ++pos)
+        {
+        if(KErrNotFound != backSlash.Find(&aUrl[pos],KBackSlashLength))
+            ++count;
+        if(count == KBackSlashesInPrefix)
+            break;
+        }
+    TPtrC16 url = aUrl.Mid(pos + 1);
+    pos = url.Find(KBackSlash);
+    iParam1 = url.Left(pos);
+    iParam2 = url.Mid(pos + 1);
+    }
+
+void AppLauncherForCSXH::ExtractFourParams(const TDesC& aUrl)
+    {
+    /*Will be called for the following cases
+    app://vsa@localhost/APP_UID/VIEW_UID/MSG_UID/Parameters
+    app://cmd@localhost/APP_NAME/APP_UID/MSG_UID/Parameters
+    */
+    iParam1.Copy(KEmptyString);
+    iParam2.Copy(KEmptyString);
+    iParam3.Copy(KEmptyString);
+    iParam4.Copy(KEmptyString);
+    
+    TBuf<KBackSlashLength> backSlash(KBackSlash);
+    TInt count = 0;
+    TInt pos;
+    
+    for(pos = 0; pos < aUrl.Length() ; ++pos)
+        {
+        if(KErrNotFound != backSlash.Find(&aUrl[pos],KBackSlashLength))
+            ++count;
+        if(count == KBackSlashesInPrefix)
+            break;
+        }
+        
+    TPtrC16 url = aUrl.Mid(pos + 1);
+    pos = url.Find(KBackSlash);
+    iParam1 = url.Left(pos);
+    
+    TPtrC16 url2 = url.Mid(pos + 1);
+    pos = url2.Find(KBackSlash);
+    iParam2 = url2.Left(pos);
+
+    TPtrC16 url3 = url2.Mid(pos + 1);
+    pos = url3.Find(KBackSlash);
+    iParam3 = url3.Left(pos);
+    
+    iParam4 = url3.Mid(pos+1);
+    }
+
+void AppLauncherForCSXH::GetUid(TPtrC aUid, TInt32& aResult)
+    {
+    TInt hexPos = aUid.Find(_L("x"));
+    if(KErrNotFound == hexPos)
+        TLex(aUid).Val(aResult); 
+    else
+        {       
+        TPtrC16 uidt = aUid.Mid(hexPos+1);
+        TInt64 res;
+        //During this operation sometimes values exceed TInt32, but the end result is always
+        //fits into TInt32
+        TLex(uidt).Val(res,EHex); 
+        aResult = res;
+        }
+    }
+
+void AppLauncherForCSXH::LaunchBrowserNGL(const TDesC& aUrl)
+    {    
+    _LIT( KBrowserCmdFetchUrl, "4 " );
+    HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() + 
+                                 aUrl.Length() );
+	TPtr paramPtr = param->Des();
+    paramPtr.Copy( KBrowserCmdFetchUrl );
+    paramPtr.Append( aUrl );
+    
+    if(!SendMsgToBrowserNGL(param))
+	    {    
+		RApaLsSession appArcSession;
+	    User::LeaveIfError( appArcSession.Connect() );
+	    CleanupClosePushL<RApaLsSession>( appArcSession );
+	    
+	    TThreadId id;
+	    User::LeaveIfError
+	        (
+	            appArcSession.StartDocument(*param,KUidBrowserApplication,id )
+	        );
+	    CleanupStack::PopAndDestroy( &appArcSession );
+	    }
+	    
+	CleanupStack::PopAndDestroy( param );
+    }
+    
+TBool AppLauncherForCSXH::SendMsgToBrowserNGL(const HBufC* aUrl)
+    {
+    TApaTaskList taskList(CCSXHAppUi::GetInstance()->GetWsSession());
+    TApaTask task = taskList.FindApp(KUidBrowserApplication);       
+    if(task.Exists())
+        {   
+        // 8-bit buffer is required.
+        HBufC8* param8 = HBufC8::NewLC( aUrl->Length() );
+        param8->Des().Copy( *aUrl );
+        task.SendMessage( TUid::Uid( 0 ), *param8 ); // Uid is not used
+        CleanupStack::PopAndDestroy( param8 );
+        return ETrue;           
+        }
+    else
+        return EFalse;
+    }
+    
+void AppLauncherForCSXH::StartTimer(TCallBack aCallBack)
+    {
+    if( iTimer->IsActive() )
+        {
+            iTimer->Cancel();
+        }
+
+    iTimer->Start(
+        TTimeIntervalMicroSeconds32( KKeyBlockTime ),
+        TTimeIntervalMicroSeconds32( KKeyBlockTime ),
+        aCallBack );
+    }    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXH.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include "CSXHApplication.h"
+#include <eikstart.h>
+
+#ifdef __UI_FRAMEWORKS_V2__
+
+// Create an application, and return a pointer to it
+CApaApplication* NewApplication()
+    {
+    return new CCSXHApplication;
+    }
+
+TInt E32Main()
+    {
+    return EikStart::RunApplication(NewApplication);
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following is required for wins on EKA1 (using the exedll target)
+//
+#if defined(__WINS__) && !defined(EKA2)
+EXPORT_C TInt WinsMain(TDesC* aCmdLine)
+    {
+    return EikStart::RunApplication(NewApplication, aCmdLine);
+    }
+
+TInt E32Dll(TDllReason)
+    {
+    return KErrNone;
+    }
+#endif
+
+#else // __UI_FRAMEWORKS_V2__
+
+// Create an application, and return a pointer to it
+EXPORT_C CApaApplication* NewApplication()
+  {
+  return new CCSXHApplication;
+  }
+
+// DLL entry point, return that everything is ok
+GLDEF_C TInt E32Dll(TDllReason)
+  {
+  return KErrNone;
+  }
+
+#endif // __UI_FRAMEWORKS_V2__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHAppUi.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,541 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHAppUi class definition
+*
+*/
+
+
+#include "CSXHAppUi.h"
+#include "CSXHGenericView.h"
+#include "CSXHHtmlTopicView.h"
+#include "CSXHLegacyTopicView.h"
+#include "CsHelp.hrh"
+#include <cshelp.rsg>
+#include "CSXHAppUi.h"
+#include "CSXHDocument.h"
+
+#include "CSXHHelpDataBase.h"
+#include "CSXHViewIDs.h"
+
+#include <avkon.hrh>
+#include <utf.h>
+#include <aknnotewrappers.h> 
+#include <AknGlobalNote.h>
+#include <akninputblock.h>
+#include <hlplch.h>
+
+#include "csxhconstants.h"
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+#include <AiwServiceHandler.h>
+
+#if defined(_DEBUG) && defined(__WINS__)
+#include <f32file.h>
+#include <flogger.h>
+_LIT(KLogDir, "csxh");
+_LIT(KLogFile, "csxh.txt");
+inline void FPrint(const TRefByValue<const TDesC> aFmt, ...)
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
+    }
+#define FLOG(a) {FPrint(a);}
+#define FLOGF   FPrint
+#else //_DEBUG
+#define FLOG(a)
+#define FLOGF
+#endif //_DEBUG
+#endif // FF_HELP_TUTORIAL_MERGE
+CCSXHAppUi* CCSXHAppUi::iInstance = NULL;
+
+// ConstructL is called by the application framework
+void CCSXHAppUi::ConstructL()
+    {
+#ifndef __SERIES60_30__         
+    BaseConstructL(EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
+#else
+    BaseConstructL(EAknEnableSkin);
+#endif  
+  
+#ifdef FF_HELP_TUTORIAL_MERGE
+    LoadTutorialService();
+#endif // FF_HELP_TUTORIAL_MERGE
+    SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong );
+    iTOC1View = CCSXHGenericView::NewL(KCSXHToc1ViewID,R_CSXH_TOC1);
+    AddViewL(iTOC1View); 
+    
+    iTOC2View = NULL;
+    iKywdTOC1View = NULL;
+    iKywdTOC2View = NULL;
+    iHtmlTopicView = NULL;
+    iLegacyTopicView = NULL;
+    iLegacyContextTopicView = NULL;
+    
+    SetDefaultViewL(*iTOC1View);  
+        
+    iRuntimeWatcher = CCSXHRuntimeAppWatcher::NewL();
+    iRuntimeWatcher->SetObserver( this );
+    iRuntimeWatcher->Start();
+#ifdef _DEBUG
+    RDebug::Print( _L("Help app launched") );
+#endif
+    }
+
+CCSXHAppUi::CCSXHAppUi()                              
+    {
+    iInstance = this;
+    }
+
+CCSXHAppUi::~CCSXHAppUi()
+    {
+#ifdef FF_HELP_TUTORIAL_MERGE
+
+    if(iServiceHandler)
+        {
+        delete iServiceHandler;
+        }
+
+#endif // FF_HELP_TUTORIAL_MERGE
+#ifdef _DEBUG
+    RDebug::Print(_L("Help app ended"));
+#endif
+    if ( iRuntimeWatcher )
+        delete iRuntimeWatcher;
+
+    }
+
+// --------------------------------------------------------------------------
+// Message Handler
+// --------------------------------------------------------------------------
+void CCSXHAppUi::HandleCommandL(TInt aCommand)
+    {
+    switch(aCommand)
+        {
+        case EEikCmdExit:
+        case EAknSoftkeyExit:
+        case EAknSoftkeyClose:
+            Exit();
+            break;
+  
+        case ECSXHOpenTopicText:
+        case ECSXHOpenItemPropagated:
+        case ECSXHOpenItem:        
+            {
+            CAknInputBlock* inputBlock = CAknInputBlock::NewLC();
+            ActivateDisplayTopicViewL();
+            CleanupStack::PopAndDestroy( inputBlock ); 
+            }
+            break;
+        case ECSXHSearchText:
+            {
+            CCSXHDocument* doc = static_cast<CCSXHDocument*>(Document());
+            doc->SetDisplayTopic(doc->GetHelpDataBase()->GetKywdTopics());
+            ActivateDisplayTopicViewL();
+            }
+            break;
+        default:
+            break;
+        }
+    }
+void CCSXHAppUi::InitDisplayTopicViewL(TUid aViewID)
+	{
+	if(aViewID == KCSXHToc1ViewID)
+		return;
+	
+	
+  	if(aViewID == KCSXHContextLegacyTopicViewID && iLegacyContextTopicView == NULL)	
+	 	{
+        iLegacyContextTopicView = CCSXHLegacyTopicView::NewL (KCSXHContextLegacyTopicViewID,
+                                                              R_CSHELP_TOPICFORCONTEXT,
+                                                              ClientRect());
+    	AddViewL(iLegacyContextTopicView);
+	 	}	 	   
+	else if(aViewID == KCSXHToc2ViewID && iTOC2View == NULL)
+		{
+		iTOC2View = CCSXHGenericView::NewL(KCSXHToc2ViewID,R_TOPICLIST);
+    	AddViewL(iTOC2View); 
+		}
+	 else if(aViewID == KCSXHKywdToc1ViewID && iKywdTOC1View == NULL)
+	 	{
+	 	iKywdTOC1View = CCSXHGenericView::NewL(KCSXHKywdToc1ViewID,R_KYWDTOC1LIST);
+    	AddViewL(iKywdTOC1View);
+	 	}
+	 else if(aViewID == KCSXHKywdToc2ViewID && iKywdTOC2View == NULL)	
+	 	{
+	 	iKywdTOC2View = CCSXHGenericView::NewL(KCSXHKywdToc2ViewID,R_KYWDTOC2LIST);
+    	AddViewL(iKywdTOC2View); 
+	 	}
+	 else if(aViewID == KCSXHLegacyTopicViewID && iLegacyTopicView == NULL)	
+	 	{
+        iLegacyTopicView = CCSXHLegacyTopicView::NewL(KCSXHLegacyTopicViewID,
+                                                      R_TOPICTEXTLIST,ClientRect());
+    	AddViewL(iLegacyTopicView);
+	 	}	
+	 	
+	 else if(aViewID == KCSXHContextHtmlTopicViewID )	
+	 	{
+	 	if(!iHtmlTopicView)
+	 		{
+            iHtmlTopicView = CCSXHHtmlTopicView::NewL(KCSXHHtmlTopicViewID,
+                                                      R_CSHELP_HTMLTOPICFORCONTEXT,
+                                                      ClientRect());
+    		AddViewL(iHtmlTopicView);	
+	 		}
+	 	else
+	 		{
+	 		//View is already created update the softkeys to Options and Close
+	 		iHtmlTopicView->SetViewTypeL(CCSXHHtmlTopicView::EContextHtmlView);
+	 		}
+  	 	}	
+	 else if(aViewID == KCSXHHtmlTopicViewID )	
+	 	{
+	 	if(!iHtmlTopicView)
+	 		{
+            iHtmlTopicView = CCSXHHtmlTopicView::NewL(KCSXHHtmlTopicViewID,
+                                                      R_CSHELP_HTMLTOPICVIEW,
+                                                      ClientRect());
+    		AddViewL(iHtmlTopicView);
+	 		}
+	 	else
+	 		{
+	 		//View is already created update the softkeys to Options and Back
+	 		iHtmlTopicView->SetViewTypeL(CCSXHHtmlTopicView::EHtmlView);
+	 		}
+	 	}
+	}
+// --------------------------------------------------------------------------
+// Activates the view corresponding to the topic to be displayed
+// It also sets for recreating the container dending on the view to be 
+// activated, 
+// 1) Search Pane in Search Result View will be cleared if user 
+// opens the Search View.
+// 2)Search Pane in Application Topics view will be cleared, if user opens 
+//      a)Help Contents View 
+//      b)Search View 
+//      c)Context Senisitive view
+// --------------------------------------------------------------------------
+void CCSXHAppUi::ActivateDisplayTopicViewL()
+    {
+    CCSXHDocument* doc = static_cast<CCSXHDocument*>(Document());
+    TUid viewId = doc->GetDisplayTopic()->GetViewID();
+    InitDisplayTopicViewL(viewId);
+    
+    if(viewId == KCSXHKywdToc1ViewID )
+        {
+        if(iKywdTOC2View)
+        	iKywdTOC2View->ResetContainer();
+        if(iTOC2View)
+        	iTOC2View->ResetContainer();
+        }
+	else if(viewId == KCSXHToc1ViewID ||
+	        viewId == KCSXHContextHtmlTopicViewID ||
+            viewId == KCSXHContextLegacyTopicViewID )
+	    {
+	    if(iTOC2View)
+			iTOC2View->ResetContainer();
+	    }
+/*	else if(viewId == KCSXHKywdToc1ViewID)  
+		{
+		doc->InitProgressBarL();
+		}
+*/	
+	if(viewId == KCSXHContextHtmlTopicViewID)    
+		viewId = KCSXHHtmlTopicViewID;
+    ActivateLocalViewL(viewId);
+    }
+void CCSXHAppUi::HandleForegroundEventL(TBool aForeground)
+	{
+	// Call Base class method
+ 	CAknAppUi::HandleForegroundEventL(aForeground);
+
+ 	if(!aForeground && iView && 
+ 	iView->Id() != KCSXHHtmlTopicViewID
+ 	&& iHtmlTopicView)
+ 		{
+ 		//put NUll first in for bug ESXU-7JA9NS
+ 		iHtmlTopicView = NULL;
+     	// We have lost the focus
+     	//Check if the HTML view is the last active view. If it not delete it 
+     	//to free the memory used by the browser control
+     	RemoveView(KCSXHHtmlTopicViewID);
+     	//delete iHtmlTopicView;
+    	}
+	}
+// --------------------------------------------------------------------------
+// It sets a flag in the View for recreating the container 
+// --------------------------------------------------------------------------
+void CCSXHAppUi::ResetTOC2ViewContainer()
+    {
+    if(iTOC2View)
+    	iTOC2View->ResetContainer();	
+    }
+// --------------------------------------------------------------------------
+// Context sensitive help launch handling. Help is not running
+// --------------------------------------------------------------------------
+TBool CCSXHAppUi::ProcessCommandParametersL(TApaCommand aCommand,
+                                              TFileName& /* aDocumentName */,
+                                              const TDesC8& aTail)
+    {
+    if (aCommand == EApaCommandOpen)
+        { // when another app launches the help app
+        HandleContextSensitiveLaunchL(aTail);
+        }
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// Context sensitive help launch handling. Help is already running
+// --------------------------------------------------------------------------
+MCoeMessageObserver::TMessageResponse CCSXHAppUi::HandleMessageL(
+           TUint32 aClientHandleOfTargetWindowGroup,
+           TUid aMessageUid,
+           const TDesC8& aMessageParameters)
+    {
+    if (aMessageUid == KHlpAppWsMsg)
+        {
+        HandleContextSensitiveLaunchL(aMessageParameters);
+        return EMessageHandled;
+        }
+    return CAknViewAppUi::HandleMessageL(aClientHandleOfTargetWindowGroup,
+                                         aMessageUid,
+                                         aMessageParameters);
+    }
+
+// --------------------------------------------------------------------------
+// Opens the context topic. If no topic is avbl then toc1 view is activated
+// --------------------------------------------------------------------------
+void  CCSXHAppUi::HandleContextSensitiveLaunchL(const TDesC8& aContext )   
+    {
+    CCSXHDocument* doc = static_cast<CCSXHDocument*>(Document());
+        
+    if(doc->SetContextTopicAsDisplayTopicL(aContext))
+        {
+        TRAPD(res,ActivateDisplayTopicViewL());
+        if(res == KErrNone)
+            return;
+        }
+    
+    //No topic avaliable, activate the TOC1 View & Pop a message
+    doc->SetDisplayTopic(doc->GetHelpDataBase()->GetMainTopics());
+    ActivateDisplayTopicViewL();
+        
+    HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC(R_TYPE_NO_HELP_TOPICS);      
+    CAknGlobalNote* note = CAknGlobalNote::NewLC();
+    note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+
+    CleanupStack::PopAndDestroy(note); 
+    CleanupStack::PopAndDestroy(ErrorMessage); 
+    }
+
+CCSXHAppUi* CCSXHAppUi::GetInstance()
+    {
+    return iInstance;
+    }
+RWsSession& CCSXHAppUi::GetWsSession()
+    {
+    return iInstance->iCoeEnv->WsSession();
+    }
+CCoeEnv* CCSXHAppUi::GetCoeEnv()
+    {
+    return iInstance->iCoeEnv;
+    }
+
+// --------------------------------------------------------------------------
+// Launches an application based on the Application UID and a View ID
+// --------------------------------------------------------------------------
+void CCSXHAppUi::AppLaunchL(TInt32& aAppId,TInt32& aVId)
+    {
+    //Convert from TInt to TUid
+    TUid KtestAppUid( TUid::Uid( aAppId ) ); 
+    TUid KtestViewUid( TUid::Uid( aVId ) ); 
+      
+    //Launch Application
+    TVwsViewId AppLaunch(KtestAppUid,KtestViewUid);
+    ActivateViewL(AppLaunch);
+    }
+
+// --------------------------------------------------------------------------
+// Launches an application based on the Application UID and a View ID
+// --------------------------------------------------------------------------
+void CCSXHAppUi::AppLaunchL(TInt32& aAppId,TInt32& aVId,
+                            TInt32& aMsgId,
+                            const TBuf<KMaxParamLength>& aParams)
+    {
+    //Convert from TInt to TUid
+    TUid AplnUid( TUid::Uid( aAppId ) ); 
+    TUid AplnViewUid( TUid::Uid( aVId ) ); 
+    TUid MsgUid( TUid::Uid( aMsgId ) ); 
+      
+    //Launch Application
+    TVwsViewId AppLaunch(AplnUid,AplnViewUid);
+    
+    HBufC8* params = CnvUtfConverter::ConvertFromUnicodeToUtf8L(aParams);
+    CleanupStack::PushL(params);
+    ActivateViewL(AppLaunch,MsgUid,*params);
+    CleanupStack::PopAndDestroy(params);
+    }
+ 
+void CCSXHAppUi::PropagateResourceChange(TInt aType)
+    {
+    iTOC1View->ResourceChangeHdl(aType);
+    if(iKywdTOC1View)
+    	iKywdTOC1View->ResourceChangeHdl(aType);
+    if(iKywdTOC2View)
+    	iKywdTOC2View->ResourceChangeHdl(aType);
+    if(iTOC2View)
+		iTOC2View->ResourceChangeHdl(aType);    
+    if(iHtmlTopicView)
+    	iHtmlTopicView->ResourceChangeHdl(aType);
+    if(iLegacyTopicView)
+    	iLegacyTopicView->ResourceChangeHdl(aType);
+    if(iLegacyContextTopicView)
+    	iLegacyContextTopicView->ResourceChangeHdl(aType);
+    }
+ 
+void CCSXHAppUi::RuntimeUpdateIndex()
+    {
+    CAknNoteDialog* dlg = new ( ELeave ) CAknNoteDialog();
+    dlg->SetTimeout( CAknNoteDialog::EShortTimeout );
+    dlg->SetTone( CAknNoteDialog::ENoTone );
+    dlg->ExecuteLD( R_CSHELP_INSTALL_UNINSTALL_NOTE );
+    }
+   
+       
+#ifdef FF_HELP_TUTORIAL_MERGE
+// --------------------------------------------------------------------------
+// CCSXHAppUi::NewParamListLC
+// Create paramlist for provider.
+// --------------------------------------------------------------------------
+CAiwGenericParamList* CCSXHAppUi::NewParamListLC(
+                                            const TCoeHelpContext& aContext)
+    {
+    TAiwVariant variant1;
+    TAiwVariant variant2;
+    variant1.Set(aContext.iMajor);
+    TAiwGenericParam param1(EGenericParamHelpItem, variant1);
+    variant2.Set(aContext.iContext);
+    TAiwGenericParam param2(EGenericParamHelpItem, variant2);
+    CAiwGenericParamList* list = CAiwGenericParamList::NewLC();
+    list->AppendL(param1);
+    list->AppendL(param2);
+    return list;
+    }
+
+// --------------------------------------------------------------------------
+// CCSXHAppUi::LoadTutorialService
+// Load service handler and attach interest for using tutorial service command.
+// --------------------------------------------------------------------------
+void CCSXHAppUi::LoadTutorialService()
+    {
+    iServiceHandler = CAiwServiceHandler::NewL();
+
+    // Create AIW interest
+    RCriteriaArray interest;
+
+    iServiceHandler->AttachL(R_AIWTUTORIALAPP_INTEREST);
+
+    //Tutorial AIW provider exists or not
+    iTutorialExists = EFalse;
+    iServiceHandler->GetInterest(interest);
+    if(interest.Count() > 0)
+        {
+        FLOGF(_L("CCSXHAppUi::LoadTutorialService() - interest.Count()=%d"), interest.Count());
+        CAiwCriteriaItem* testCriteria = interest[0];
+        if(iServiceHandler->NbrOfProviders(interest[0]) > 0)
+            {
+            FLOGF(_L("CCSXHAppUi::LoadTutorialService() - NbrOfProviders()=%d"), iServiceHandler->NbrOfProviders(interest[0]));
+            iTutorialExists = ETrue;
+            }
+        }
+    interest.Close();
+    }
+
+// --------------------------------------------------------------------------
+// CCSXHAppUi::CallTutorialAiwProviderL
+// If tutorial exists,call play presentation command.
+// --------------------------------------------------------------------------
+void CCSXHAppUi::CallTutorialAiwProviderL()
+    {
+    CAiwGenericParamList* inlist = NewParamListLC( iTCoeHelpContext );
+
+    iServiceHandler->ExecuteServiceCmdL( KPlayPresentation,
+                                         *inlist,
+                                         iServiceHandler->OutParamListL() );
+    CleanupStack::PopAndDestroy();   //inlist
+    }
+
+// --------------------------------------------------------------------------
+// CCSXHAppUi::IsApplicationPresentInTutorialL
+// If tutorial exists,identify the presentation needed exist or not.
+// --------------------------------------------------------------------------
+TBool CCSXHAppUi::IsApplicationPresentInTutorialL()
+    {
+    TBool Result = EFalse;
+    //__ASSERT_DEBUG( iTutorialExists, User::Panic(_L("TutAiwHlp"),-1));
+    if(iTutorialExists )
+        {
+        CAiwGenericParamList* inlist = NewParamListLC(iTCoeHelpContext) ;
+
+        CAiwGenericParamList* outlist = CAiwGenericParamList::NewLC();
+
+        TUid maj = iTCoeHelpContext.iMajor;
+        TCoeContextName con = iTCoeHelpContext.iContext;
+
+        FLOGF(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - 0x%08x %S"),maj,&con);
+
+        //checks if the application specific presentation exists.
+        //Parameter list inlist must contain AppUid which refers to presentation.
+        // The other parameters are not used.
+        //The result is returned in outlist parameter list.
+        //First parameter in the outlist contains ETrue if there is presentation
+        //available and EFalse if there is not.
+        iServiceHandler->ExecuteServiceCmdL( KPresentationExists,
+                                             *inlist, *outlist );
+
+        FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-1"));
+
+        //__ASSERT_DEBUG( outlist->Count() > 0, User::Panic(_L("TutAiwHlpO"),-1));
+        __ASSERT_DEBUG(outlist->Count(), User::Panic(_L("outlist"),0));
+
+        FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-2"));
+        if( outlist->Count() > 0)
+            {
+            FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-2.4"));
+            TAiwGenericParam param = (*outlist)[0];
+            TAiwVariant variant = param.Value();
+            TInt32 val(0);
+
+            if(variant.Get(val) && val)
+                {
+                Result = ETrue;
+                }
+            FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-3"));
+            __ASSERT_DEBUG( variant.Get(val) && val, User::Panic(_L("TutAiwHlpV"),-1));
+            }
+        CleanupStack::PopAndDestroy();   //outlist
+        CleanupStack::PopAndDestroy();   //inlist
+        }
+    return Result;
+    }
+
+// --------------------------------------------------------------------------
+// CCSXHAppUi::SetHelpContext
+// If tutorial exists,identify the presentation needed exist or not.
+// --------------------------------------------------------------------------
+void CCSXHAppUi::SetHelpContext(TCoeHelpContext aTCoeHelpContext)
+    {
+    iTCoeHelpContext = aTCoeHelpContext;
+    }
+#endif // FF_HELP_TUTORIAL_MERGE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHApplication.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHApplication class definition
+*
+*/
+
+
+#include "CSXHDocument.h"
+#include "CSXHApplication.h"
+
+// UID for the application, this should correspond to the uid defined in the mmp file
+static const TUid KUidCSXHApp = {0x10005234};
+
+CApaDocument* CCSXHApplication::CreateDocumentL()
+    {  
+    // Create an CSXH document, and return a pointer to it
+    CApaDocument* document = CCSXHDocument::NewL(*this);
+    return document;
+    }
+
+TUid CCSXHApplication::AppDllUid() const
+    {
+    // Return the UID for the CSXH application
+    return KUidCSXHApp;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHDocument.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHDocument class definition
+*
+*/
+
+
+#include "CSXHDocument.h"
+#include "CSXHAppUi.h"
+
+#include "CSXHHelpDataBase.h"
+#include "CSXHKywdTOC1.h"
+#include "CSXHViewIDs.h"
+#include <eikprogi.h>
+
+#include <cshelp.rsg>
+#include <AknProgressDialog.h>
+
+
+// Standard Symbian OS construction sequence
+CCSXHDocument* CCSXHDocument::NewL(CEikApplication& aApp)
+    {
+    CCSXHDocument* self = NewLC(aApp);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCSXHDocument* CCSXHDocument::NewLC(CEikApplication& aApp)
+    {
+    CCSXHDocument* self = new (ELeave) CCSXHDocument(aApp);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+CCSXHDocument::CCSXHDocument(CEikApplication& aApp) : CAknDocument(aApp)
+    {// no implementation required
+    }
+
+CCSXHDocument::~CCSXHDocument()
+    {
+	delete iHelpDataBase;
+    }
+
+CEikAppUi* CCSXHDocument::CreateAppUiL()
+    {
+    // Create the application user interface, and return a pointer to it,
+    // the framework takes ownership of this object. ConstructL of the AppUi
+    // object will be called by the Application Framework
+    iHelpAppUi = new (ELeave) CCSXHAppUi;
+    
+    iHelpDataBase = CCSXHHelpDataBase::NewL(CCSXHAppUi::GetCoeEnv(),AppCaption());
+	iDisplayTopic = iHelpDataBase->GetMainTopics();
+	iPrevTopic = NULL;
+	
+	iProgressDialog = NULL;
+    
+    return iHelpAppUi;
+    }
+// --------------------------------------------------------------------------
+// Sets the topic to be displayed next
+// --------------------------------------------------------------------------
+void CCSXHDocument::SetDisplayTopic(CCSXHHelpContentBase* aDisplayTopic)
+	{
+	iDisplayTopic = aDisplayTopic;
+	iPrevTopic = NULL;
+	
+	if(iDisplayTopic == NULL)
+		iDisplayTopic = iHelpDataBase->GetMainTopics();
+	}
+// --------------------------------------------------------------------------
+// Sets the topic to be displayed next and the previous topic
+// The previous topic is needed to highlight the correct item in the listbox
+// --------------------------------------------------------------------------
+void CCSXHDocument::SetDisplayAndPrevTopic(CCSXHHelpContentBase* aDisplayTopic)
+	{
+	iPrevTopic = iDisplayTopic;
+	iDisplayTopic = aDisplayTopic;
+	
+	if(iDisplayTopic == NULL)
+		iDisplayTopic = iHelpDataBase->GetMainTopics();
+	
+	}
+	
+void CCSXHDocument::SendMessageToAppUiL(TInt aCommand)
+	{
+	iHelpAppUi->ProcessCommandL(aCommand);
+	}
+
+// --------------------------------------------------------------------------
+// Sets the context topic as the next topic to be displayed
+// --------------------------------------------------------------------------
+TBool CCSXHDocument::SetContextTopicAsDisplayTopicL(const TDesC8& aContextMessage)
+	{
+	CCSXHHelpContentBase* topic = iHelpDataBase->GetContextTopic(aContextMessage);
+	if(topic)
+		{
+		SetDisplayTopic(topic);	
+		return ETrue;
+		}
+	return EFalse;
+	}
+CCSXHHelpContentBase* CCSXHDocument::GetHtmlTopicForUrlL(const TDesC& url)
+	{
+	return iHelpDataBase->GetHtmlTopicForUrlL(url);
+	}
+
+void CCSXHDocument::InitProgressBarL()
+	{
+
+    iProgressDialog = new(ELeave)CAknProgressDialog(
+                           REINTERPRET_CAST(CEikDialog**,&iProgressDialog));
+    iProgressDialog->PrepareLC(R_CSHELP_SEARCH_PROGRESS_NOTE);
+    
+    CEikProgressInfo* pBar = iProgressDialog->GetProgressInfoL();
+    iTotalKeywordsInResultView = iHelpDataBase->InitGenerateKeywordTOC2ListL(
+    									STATIC_CAST(CCSXHKywdTOC1*,iDisplayTopic));
+    pBar->SetFinalValue(iTotalKeywordsInResultView);
+ 	iIdle = CIdle::NewL(CActive::EPriorityLow);
+    TCallBack callback(CallBack, this);
+    iIdle->Start(callback);
+    iProgressDialog->RunDlgLD(CAknNoteDialog::ENoTone);  
+	}
+	 	
+void CCSXHDocument::FreeProgressBarL()
+	{
+	delete iIdle;
+    iIdle = NULL;
+    if(iProgressDialog)
+    	{
+    	iProgressDialog->ProcessFinishedL();
+		iProgressDialog = NULL;
+    	}
+	}
+		
+TInt CCSXHDocument::CallBack(TAny* aThis)
+    {
+    TInt err(KErrNone);
+    TBool res(EFalse);
+    CCSXHDocument* self = STATIC_CAST(CCSXHDocument*, aThis);
+    TRAP( err, res = self->DoCallBackL() );
+    if(err != KErrNone )
+    	{
+    	TRAP_IGNORE(self->FreeProgressBarL());
+    	}
+    return res;
+    }
+TBool CCSXHDocument::DoCallBackL()
+    {
+    if(!iProgressDialog)
+        {
+        delete iIdle;
+        iIdle = NULL;
+        return EFalse;
+        }
+        
+    CEikProgressInfo* pBar= iProgressDialog->GetProgressInfoL();
+    pBar->SetAndDraw(iHelpDataBase->GetKeywordSearchCount());
+    
+    if(iHelpDataBase->GetKeywordSearchCount() >= iTotalKeywordsInResultView)
+    	{
+    	FreeProgressBarL();
+    	return EFalse;
+    	}
+    
+    return ETrue;    
+    }    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHGenericContainer.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericContainer class definition
+*
+*/
+
+
+#include "CSXHGenericContainer.h"
+#include "CSXHGenericView.h"
+#include "CSXHDocument.h"
+#include "CSXHAppUi.h"
+#include "CSXHHelpDataBase.h"
+#include "CSXHGenericTOC1.h"
+#include "CSXHGenericTOC2.h"
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+#include "CSXHHtmlTOC2.h"
+#endif
+
+#include "CsHelp.hrh"
+#include "csxhconstants.h"
+
+#include "CSXHViewIDs.h"
+#include <eikclbd.h>
+#include <aknlists.h>
+#include <featmgr.h>
+#include <AknPriv.hrh>
+
+const TInt KFindNameLength = 40;
+const TInt KComponentCount = 2;     
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+CCSXHGenericContainer* CCSXHGenericContainer::NewL(const TRect& aRect,CCSXHDocument& aDocument,CCSXHGenericView* aView)
+	{
+	CCSXHGenericContainer* self = CCSXHGenericContainer::NewLC(aRect,aDocument,aView);
+    CleanupStack::Pop(self);
+    return self;
+	}
+#else
+CCSXHGenericContainer* CCSXHGenericContainer::NewL(const TRect& aRect,CCSXHDocument& aDocument)
+    {
+    CCSXHGenericContainer* self = CCSXHGenericContainer::NewLC(aRect,aDocument);
+    CleanupStack::Pop(self);
+    return self;
+    }
+#endif
+    
+#ifdef FF_HELP_TUTORIAL_MERGE
+CCSXHGenericContainer* CCSXHGenericContainer::NewLC(const TRect& aRect,CCSXHDocument& aDocument,CCSXHGenericView* aView)
+    {
+    CCSXHGenericContainer* self = new(ELeave) CCSXHGenericContainer(aDocument,aView);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    return self;
+    }
+#else
+CCSXHGenericContainer* CCSXHGenericContainer::NewLC(const TRect& aRect,CCSXHDocument& aDocument)
+    {
+    CCSXHGenericContainer* self = new(ELeave) CCSXHGenericContainer(aDocument);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    return self;
+    }
+#endif
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+CCSXHGenericContainer::CCSXHGenericContainer(CCSXHDocument& aDocument,CCSXHGenericView* aView) : 
+iDocument(aDocument),iView(aView)
+#else
+CCSXHGenericContainer::CCSXHGenericContainer(CCSXHDocument& aDocument) : iDocument(aDocument)
+#endif
+    {//No implementation required
+    }
+    
+CCSXHGenericContainer::~CCSXHGenericContainer()
+    {
+    delete iListBox;
+    delete iFindPane;
+    }
+    
+void CCSXHGenericContainer::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+
+    CreateAndPopulateListL();
+
+    iListBox->SetListBoxObserver(this); 
+    SetRect(aRect);
+    ActivateL();    
+    }
+// --------------------------------------------------------------------------
+// Does the following
+// 1) Creates and populates the listbox
+// 2) Highlights an item in the listbox
+// 3) Check for MSK
+// --------------------------------------------------------------------------
+void CCSXHGenericContainer::CreateAndPopulateListL()
+    {
+    // First phase construction
+    iListBox = new (ELeave) CAknSingleStyleListBox;
+    iListBox->SetContainerWindowL(*this);
+
+    iListBox->ConstructL(this, 0);
+    iListBox->CreateScrollBarFrameL(ETrue);
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+                                                CEikScrollBarFrame::EOff,
+                                                CEikScrollBarFrame::EAuto);
+    iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); 
+              
+    CTextListBoxModel* model = iListBox->Model();  // not taking ownership
+    model->SetOwnershipType (ELbmOwnsItemArray);
+    CDesCArray* testArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
+    
+    CCSXHGenericTOC1* displayTopic = STATIC_CAST(CCSXHGenericTOC1*,iDocument.GetDisplayTopic());
+    
+    displayTopic->FillChildDataL(testArray);
+    
+    //Find panel Begin
+    CAknSearchField::TSearchFieldStyle flags(CAknSearchField::ESearch);
+    iFindPane = CAknSearchField::NewL(*this, flags, 
+                                       NULL,KFindNameLength);
+
+    STATIC_CAST(CAknFilteredTextListBoxModel*, iListBox->Model())
+        ->CreateFilterL(iListBox, iFindPane);
+    
+    STATIC_CAST(CAknFilteredTextListBoxModel*, iListBox->Model())
+            ->Filter()->HandleOfferkeyEventL();  
+	//Corrections to TSW Error:  KMAI-6WNACA with New UI CR: EVIA-6XAJ46            
+    if (FeatureManager::FeatureSupported(KFeatureIdJapanese) &&
+        (User::Language() == ELangJapanese))
+        {        
+        iFindPane->Editor().SetAknEditorInputMode(EAknEditorHiraganaKanjiInputMode);
+        }
+    else
+    	{
+    	iFindPane->Editor().SetAknEditorCurrentInputMode(EAknEditorTextInputMode);
+    	}
+
+    HightLightItemL();    
+    }
+    
+void CCSXHGenericContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent)
+    {
+    switch ( aListBoxEvent )
+        {
+        case MEikListBoxObserver::EEventEnterKeyPressed:
+        case MEikListBoxObserver::EEventItemSingleClicked:
+#ifdef FF_HELP_TUTORIAL_MERGE
+  	        if(IsShowTutorialItemSelectedL())
+	        	{
+                CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL();
+	        	}
+	        else
+
+#endif	        
+	        	{
+	        	iDocument.SendMessageToAppUiL( ECSXHOpenItemPropagated );
+	        	}	        	   
+
+            break;
+        default:
+            break;// do nothing with the rest of the events
+        }       
+    }
+    
+void CCSXHGenericContainer::SizeChanged()
+    {
+    iListBox->SetRect(Rect());
+    AknFind::HandleFixedFindSizeChanged(this, iListBox, iFindPane);
+    }
+    
+void CCSXHGenericContainer::FocusChanged(TDrawNow aDrawNow)
+    {
+    if (iListBox)
+        {
+        iListBox->SetFocus(IsFocused(), aDrawNow);
+        }
+    if ( iFindPane )
+        {
+        iFindPane->SetFocus( IsFocused(), aDrawNow );
+        }
+    }
+        
+TInt CCSXHGenericContainer::CountComponentControls() const
+    {
+    return KComponentCount;
+    }
+    
+CCoeControl* CCSXHGenericContainer::ComponentControl(TInt aIndex) const
+    {
+    switch (aIndex)
+        {
+        case 0:
+            return iListBox;
+        case 1:
+            return iFindPane;
+        default:
+            return NULL;
+        }
+    }
+        
+void CCSXHGenericContainer::Draw(const TRect& aRect) const
+    {
+    CWindowGc& gc = SystemGc();
+    gc.Clear(aRect);
+    }
+    
+TKeyResponse CCSXHGenericContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+    {
+    TKeyResponse result(EKeyWasNotConsumed);
+    
+    TBool needRefresh;
+    result = AknFind::HandleFindOfferKeyEventL(aKeyEvent, aType,
+                        this, iListBox, iFindPane, EFalse, needRefresh);
+    CheckForMSK();              
+    if (result == EKeyWasNotConsumed)
+        {
+        result = iListBox->OfferKeyEventL (aKeyEvent, aType);
+        }
+    return result; 
+    }
+    
+void CCSXHGenericContainer::HandleResourceChange(TInt aType)
+    {
+    CCSXHAppUi::GetInstance()->PropagateResourceChange(aType);
+
+    if (KAknSplitInputEnabled == aType || KAknSplitInputDisabled == aType)
+        {
+    // Bug fixing, SetFocus can't be called with these aType, it will lead to infinite loop in fep.
+        return;
+        }
+    
+    if ( IsFocused() )
+        {
+        SetFocus( IsFocused(), EDrawNow );
+        }
+
+    }
+    
+void CCSXHGenericContainer::HandleResourceChangeImpl(TInt aType)
+    {
+    if (aType == KEikDynamicLayoutVariantSwitch)
+        {
+        iListBox->HandleResourceChange(aType);
+        TRect mainRect; 
+        SizeChanged();
+        TRect statusPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainRect);
+        SetRect(mainRect);
+        DrawNow();
+        }
+    else
+        {
+        CCoeControl::HandleResourceChange(aType);   
+        }
+    }
+// --------------------------------------------------------------------------
+// Sets the next topic to be displayed based on the selected item
+// --------------------------------------------------------------------------    
+void CCSXHGenericContainer::SetDisplayTopicL()
+    {
+    TInt index = iListBox->CurrentItemIndex();
+    if(KErrNotFound == index)
+        return;
+        
+    TBuf<KMaxFileName> selectedTOC2 = iListBox->Model()->ItemText(index);
+    selectedTOC2 = selectedTOC2.Mid(1);
+    
+    CCSXHGenericTOC1* displayTopic = STATIC_CAST(CCSXHGenericTOC1*,iDocument.GetDisplayTopic());
+    if( displayTopic->GetChildL(selectedTOC2) )
+        {
+    	iDocument.SetDisplayAndPrevTopic(displayTopic->GetChildL(selectedTOC2));
+        }
+    }
+
+TInt CCSXHGenericContainer::GetNumberOfListItems()
+    {
+    return iListBox->Model()->NumberOfItems();
+    }
+    
+void CCSXHGenericContainer::SetCurrentView(CCSXHGenericView* aView)
+    {
+    iView = aView;
+    }
+    
+void CCSXHGenericContainer::HightLightItemL()    
+    {
+    CCSXHHelpContentBase* prevTopic = iDocument.GetPrevTopic();    
+    if(!prevTopic)
+        return;
+        
+    TInt visibleItemcount = GetNumberOfListItems();
+    for (TInt index = 0; index < visibleItemcount ; ++index )
+        {
+        TBuf<KMaxFileName> txt = iListBox->Model()->ItemText(index);
+        txt = txt.Mid(1);//remove the '/t'
+        if(txt.Compare(prevTopic->GetName()) == 0)
+            {
+            if(iListBox->CurrentItemIndex() != index)
+                iListBox->SetCurrentItemIndex(index);
+            return;
+            }
+        }
+    }
+    
+void CCSXHGenericContainer::CheckForMSK()   
+    {
+#ifndef __SERIES60_30__ 
+    if(AknLayoutUtils::MSKEnabled())
+        {   
+        if(iListBox->Model()->NumberOfItems())
+            {
+            iView->SetMiddleSoftKey(ETrue);         
+            }
+        else
+            {
+            iView->SetMiddleSoftKey(EFalse);                
+            }
+        }
+#endif      
+    }
+      
+#ifdef FF_HELP_TUTORIAL_MERGE
+// --------------------------------------------------------------------------
+// CCSXHAppUi::IsShowTutorialItemSelectedL
+// If the selected item is a tutorial item.
+// --------------------------------------------------------------------------
+TBool CCSXHGenericContainer::IsShowTutorialItemSelectedL()
+    {
+    TBool bShowTutorial = EFalse;
+    //TODO:
+    // if keyword page supported tutorial, the comments should be opened
+    if( 0 != GetNumberOfListItems /*&&  KCSXHKywdToc2ViewID != iView->Id() */)
+        {
+        TInt index = iListBox->CurrentItemIndex();
+        if(KErrNotFound == index)
+            return bShowTutorial;
+        //Get Next View
+        TBuf<KMaxFileName> selectedTOC2 = iListBox->Model()->ItemText(index);
+
+        selectedTOC2 = selectedTOC2.Mid(1);
+        CCSXHGenericTOC1* displayTopic = STATIC_CAST(CCSXHGenericTOC1*,
+                                               iDocument.GetDisplayTopic());
+        TUid NextViewId = displayTopic->GetChildL(selectedTOC2)->GetViewID();
+
+        //Check Tutorial is present for Application topic [TOC2]
+        if(NextViewId == KCSXHHtmlTopicViewID)
+            {
+            CCSXHHtmlTOC2* HTMLTOC2Ptr = STATIC_CAST(CCSXHHtmlTOC2*,
+                                      displayTopic->GetChildL(selectedTOC2));
+            TFileName filename;
+            HTMLTOC2Ptr->GetHtmlUrlL( filename );
+            if( KErrNotFound != filename.Find( KTutorialFileExtn ))
+                {
+                bShowTutorial = ETrue;
+                TCoeHelpContext helpContext;
+                HTMLTOC2Ptr->GetHelpContext(helpContext);
+                CCSXHAppUi::GetInstance()->SetHelpContext( helpContext );
+                }
+            }
+        }
+    return bShowTutorial;
+    }
+
+#endif // FF_HELP_TUTORIAL_MERGE
+
+
+void CCSXHGenericContainer::MakeVisible(TBool aVisible)
+    {
+    CCoeControl::MakeVisible(aVisible);
+    iListBox->ScrollBarFrame()->ComponentControl(0)->MakeVisible(aVisible);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHGenericView.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHGenericView class definition
+*
+*/
+
+
+#include "CSXHGenericView.h"
+#include "CSXHGenericContainer.h"
+#include "CSXHAppUi.h"
+#include "CSXHDocument.h"
+#include <cshelp.rsg>
+#include "CsHelp.hrh"
+
+#include "CSXHHelpContentBase.h"
+#include "CSXHViewIDs.h"
+#include "CSXHHelpDataBase.h"
+
+#include <akntitle.h> 
+#include <coemain.h>
+#include <eikmenup.h>
+#include <eikbtgpc.h>
+
+#ifdef FF_HELP_TUTORIAL_MERGE
+
+#include <AiwMenu.h>
+#include <AiwCommon.h>
+#include <AiwServiceHandler.h>
+#include <AknGlobalNote.h>
+
+#endif // FF_HELP_TUTORIAL_MERGE
+
+CCSXHGenericView* CCSXHGenericView::NewL(const TUid& aUid, 
+                                         const TInt& aFlags)
+    {
+    CCSXHGenericView* self = new(ELeave) CCSXHGenericView(aUid,aFlags);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+CCSXHGenericView::CCSXHGenericView(const TUid& aUid, const TInt& aFlags)
+            :iResetContainerInActivate(EFalse),iUid(aUid),iAppFlags(aFlags)
+    {//No Implementation required
+    }
+    
+void CCSXHGenericView::ConstructL() 
+    {
+    BaseConstructL(iAppFlags);
+
+    }
+    
+CCSXHGenericView::~CCSXHGenericView()
+    {
+    if(iContainer)
+    	{
+    	AppUi()->RemoveFromStack(iContainer); 
+    	delete iContainer;
+    	}
+    }
+    
+TUid CCSXHGenericView::Id() const
+    {
+    return iUid;
+    }
+
+// --------------------------------
+// Message Handler
+// --------------------------------    
+void CCSXHGenericView::HandleCommandL(TInt aCommand)    
+    {
+    switch(aCommand)
+        {           
+        case EAknSoftkeyBack:
+            {
+            CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());
+            if(iUid == KCSXHToc2ViewID)
+                doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics());
+            else if(iUid == KCSXHKywdToc2ViewID)
+                doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetKywdTopics());
+            
+            AppUi()->HandleCommandL(ECSXHOpenItem); 
+            }
+            break;
+        case ECSXHOpenItemPropagated: //Will be called for AppUi    
+            iContainer->SetDisplayTopicL();
+            break;
+        case ECSXHTOC1ListView:
+            {
+            CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());              
+            doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics());
+            AppUi()->HandleCommandL(ECSXHOpenItem);
+            }
+            break;      
+        case ECSXHOpenItem:
+        case ECSXHOpenTopicText:    
+#ifdef FF_HELP_TUTORIAL_MERGE
+
+            if(iContainer->IsShowTutorialItemSelectedL())
+                {
+                if(CCSXHAppUi::GetInstance()->IsApplicationPresentInTutorialL())
+                    {
+                    CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL();
+                    }
+                else
+                    {
+                    HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC(
+                                                        R_TYPE_NO_HELP_TOPICS);
+                    CAknGlobalNote* note = CAknGlobalNote::NewLC();
+                    note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+
+                    CleanupStack::PopAndDestroy(note);
+                    CleanupStack::PopAndDestroy(ErrorMessage);
+                    }
+                }
+            else
+
+#endif // FF_HELP_TUTORIAL_MERGE
+	        	{        	
+	            iContainer->SetDisplayTopicL();
+	            AppUi()->HandleCommandL(aCommand);  
+	            }
+            break; 
+        default:
+            AppUi()->HandleCommandL(aCommand);  
+            break;              
+        }
+    }
+// --------------------------------------------------------------------------
+// Handler for view activation. If required the container object will be 
+// recreated. The recreation can be due to 1) Resetting the search pane
+// 2) Changing the selection of the items in the list box 3) Repopulating the
+// contents of the list box
+// --------------------------------------------------------------------------
+void CCSXHGenericView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,TUid,const TDesC8& )
+    {
+    CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());
+    if(iResetContainerInActivate)
+        {
+        delete iContainer;
+        iContainer = NULL;
+        iResetContainerInActivate = EFalse;
+        }
+    if(!iContainer)
+    	{
+   	    if(iUid == KCSXHKywdToc2ViewID)
+			doc->InitProgressBarL();
+   	    
+#ifdef FF_HELP_TUTORIAL_MERGE
+        iContainer = CCSXHGenericContainer::NewL(ClientRect(),*doc,this);
+#else // !FF_HELP_TUTORIAL_MERGE
+        iContainer = CCSXHGenericContainer::NewL(ClientRect(),*doc);
+#endif // FF_HELP_TUTORIAL_MERGE
+
+        /*if(iUid == KCSXHKywdToc2ViewID)
+			doc->FreeProgressBarL();*/
+    	}
+    iContainer->HightLightItemL();	
+    iContainer->MakeVisible(ETrue);
+    iContainer->DrawNow();
+    iContainer->SetMopParent(this);
+    //iContainer->SetRect(ClientRect());   
+    iContainer->SetCurrentView(this);
+    AppUi()->AddToStackL(*this, iContainer);
+    
+    if(iUid == KCSXHToc1ViewID ||
+       iUid == KCSXHKywdToc1ViewID)
+        {
+        doc->GetHelpDataBase()->ClearAllTOC1Contents();
+        doc->ClearPrevTopic();
+        }
+    
+    iContainer->CheckForMSK();
+    
+    //Set the title of the view
+    CEikStatusPane* sp = StatusPane();
+    CAknTitlePane* title = STATIC_CAST(CAknTitlePane*, 
+    sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
+    title->SetTextL(doc->GetDisplayTopic()->GetName());
+    }
+    
+void CCSXHGenericView::DoDeactivate()
+    {
+    if(iContainer)
+        {
+        iContainer->MakeVisible(EFalse);
+        AppUi()->RemoveFromStack(iContainer);
+        }
+    }
+    
+void CCSXHGenericView::ResetContainer()
+    {
+    iResetContainerInActivate = ETrue;
+    }
+// --------------------------------------------------------------------------
+// Dynamically changing the items in the Options Menu
+// --------------------------------------------------------------------------
+
+void CCSXHGenericView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+    {    
+    if ( aResourceId == R_CSXH_MENU_TOPICLIST &&
+         iContainer->GetNumberOfListItems()== 0 )
+        {
+        aMenuPane->DeleteMenuItem(ECSXHOpenTopicText);
+        }
+        
+    if ( aResourceId == R_CSXH_MENU_KYWDTOC1LIST &&
+         iContainer->GetNumberOfListItems()== 0 )
+        {
+        aMenuPane->DeleteMenuItem(ECSXHOpenTopicText);
+        }
+        
+    if ( aResourceId == R_CSXH_MENU &&
+         iContainer->GetNumberOfListItems()== 0 )
+        {
+        aMenuPane->DeleteMenuItem(ECSXHOpenItem);
+        }
+        
+    if ( aResourceId == R_CSXH_MENU_KYWDTOC2LIST &&
+         iContainer->GetNumberOfListItems()== 0 )
+        {
+        aMenuPane->DeleteMenuItem(ECSXHOpenTopicText);
+        }
+    }    
+// --------------------------------------------------------------------------
+// MSK Handler Handling 
+// --------------------------------------------------------------------------
+void CCSXHGenericView::SetMiddleSoftKey(TBool aValue)
+    {    
+    Cba()->MakeCommandVisible(ECSXHOpenTopicText,aValue);
+    Cba()->DrawDeferred();  
+    }
+void CCSXHGenericView::ResourceChangeHdl(TInt aType)
+    {
+    if(iContainer)
+        iContainer->HandleResourceChangeImpl(aType);
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHHtmlTopicContainer.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,591 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTopicContainer class definition
+*
+*/
+
+
+#include "CSXHHtmlTOC2.h"
+#include "CSXHHtmlTOC1.h"
+#include "CSXHDocument.h"
+#include "CSXHAppUi.h"
+#include "CSXHHtmlTopicView.h"
+#include "CSXHViewIDs.h"
+#include <cshelp.rsg>
+#include "CsHelp.hrh"
+#include "CSXHHtmlTopicContainer.h"
+#include "AppLauncherForCSXH.h"
+#include "csxhconstants.h"
+
+
+#include <brctlinterface.h>
+#include <BrowserLauncher.h>
+#include <BrCtlDefs.h>
+
+#include <coemain.h>
+#include <AknUtils.h>
+#include <akntitle.h>
+#include <aknnotewrappers.h> 
+#include <AknGlobalNote.h>
+#include <apmrec.h>
+#include <apgcli.h>
+#include <zipfile.h> 
+#include <utf.h>
+#include <charconv.h>
+#include <bautils.h>
+
+_LIT(KContentType,"text/html");
+_LIT(KCsstextToRemovePathinfo,"<style>\n #APP_LAUNCH_LINK{display:none}\n</style>");
+
+// Standard construction sequence
+CCSXHHtmlTopicContainer* CCSXHHtmlTopicContainer::NewL(const TRect& aRect,CCSXHDocument 
+&aDocument,CCSXHHtmlTopicView *aView)
+    {
+    CCSXHHtmlTopicContainer* self = CCSXHHtmlTopicContainer::NewLC(aRect,aDocument,aView);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCSXHHtmlTopicContainer* CCSXHHtmlTopicContainer::NewLC(const TRect& aRect,CCSXHDocument 
+&aDocument,CCSXHHtmlTopicView *aView)
+    {
+    CCSXHHtmlTopicContainer* self = new (ELeave) CCSXHHtmlTopicContainer(aDocument,aView);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    return self;
+    }
+
+CCSXHHtmlTopicContainer::CCSXHHtmlTopicContainer(CCSXHDocument &aDocument,CCSXHHtmlTopicView *aView)
+        : iTopic(NULL),iDocument(aDocument),iView(aView)
+        ,iAppLauncher(NULL), iLoadHtml(EFalse), iPrevPageCount(0), iBack(EFalse)
+
+    {
+    // no implementation required
+    }
+
+CCSXHHtmlTopicContainer::~CCSXHHtmlTopicContainer()
+    {
+    if(iBrCtrl)
+        {
+        iBrCtrl->SetFocus(EFalse);
+        iBrCtrl->RemoveLoadEventObserver(this);
+        delete iBrCtrl;
+        iBrLibrary.Close();
+        }
+    if(iAppLauncher)
+    	{
+    	delete iAppLauncher;
+    	}     
+    }
+
+void CCSXHHtmlTopicContainer::ConstructL(const TRect& aRect)
+    {
+    // Create a window for this application view
+    CreateWindowL();
+
+    // Set the windows size
+    SetRect(aRect);
+    if(KErrNone != iBrLibrary.Load(_L("BrowserEngine.dll")))
+    	{
+       	HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC(
+    				R_CSHELP_RETRIEVE_NO_MEMORY_TEXT);      
+    	CAknGlobalNote* note = CAknGlobalNote::NewLC();
+    	note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+    	CleanupStack::PopAndDestroy(note); 
+    	CleanupStack::PopAndDestroy(ErrorMessage); 
+    	iDocument.SetDisplayTopic(iDocument.GetPrevTopic());
+		CCSXHAppUi::GetInstance()->HandleCommandL(ECSXHOpenItem);
+		User::Leave(KErrNoMemory);
+    	}     
+
+#ifdef __WINS__    
+    TLibraryFunction result = iBrLibrary.Lookup(10); 
+#else
+    TLibraryFunction result = iBrLibrary.Lookup(1);   
+#endif    
+		
+	FuncPtr_CreateBrowserControlL fptr  = (FuncPtr_CreateBrowserControlL)result;
+    
+    iBrCtrl = (*fptr)(
+                    this,aRect,
+                    TBrCtlDefs::ECapabilityDisplayScrollBar|
+                    TBrCtlDefs::ECapabilityClientResolveEmbeddedURL|
+#ifndef __SERIES60_30__                                 
+                    TBrCtlDefs::ECapabilityCursorNavigation|
+                    TBrCtlDefs::ECapabilityWebKitLite|
+#endif                                  
+                    TBrCtlDefs::ECapabilityClientNotifyURL,
+                    TBrCtlDefs::ECommandIdBase,this,this,NULL,this
+                    );
+    iBrCtrl->SetBrowserSettingL(TBrCtlDefs::ESettingsCSSFetchEnabled,1);    
+    iBrCtrl->AddLoadEventObserverL(this);   
+    
+    
+    SetSelectedFontSizeL(iView->GetCurrentFontSize());
+    iBrCtrl->MakeVisible(ETrue);
+    
+    ActivateL();
+    }
+
+void CCSXHHtmlTopicContainer::Draw(const TRect& /*aRect*/) const
+    {
+    CWindowGc& gc = SystemGc();
+    TRect rect = Rect();
+    gc.Clear(rect);    
+    }
+void CCSXHHtmlTopicContainer::SetAndLoadInitialTopicL(CCSXHHtmlTOC2* aTopic)
+	{
+	iTopic = aTopic;
+	TRAPD(err,LoadHtmlL());
+    if( KErrNone != err )
+	    {
+	    HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC(
+    				R_CSHELP_RETRIEVE_NO_MEMORY_TEXT);      
+    	CAknGlobalNote* note = CAknGlobalNote::NewLC();
+    	note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+    	CleanupStack::PopAndDestroy(note); 
+    	CleanupStack::PopAndDestroy(ErrorMessage); 
+    	iDocument.SetDisplayTopic(iDocument.GetPrevTopic());
+		CCSXHAppUi::GetInstance()->HandleCommandL(ECSXHOpenItem);
+		User::Leave(KErrNoMemory);	    
+	    }
+ 
+	}
+
+void CCSXHHtmlTopicContainer::LoadHtmlL()
+    {
+    HBufC8 *htmlBuffer = STATIC_CAST(HBufC8*,iTopic->GetTopicContentL());
+    if(htmlBuffer)
+        {
+        CleanupStack::PushL(htmlBuffer);
+        TUid uid;
+        uid.iUid = KCharacterSetIdentifierIso88591;
+        _LIT8(KContentType,"text/html");
+        TDataType dataType(KContentType());
+        iTopic->GetHtmlUrlL(iUrlNoAnchors);
+        iBack = EFalse;
+        ClearHistoryL();
+        iLoadHtml = ETrue;
+        
+        //RUNTIME
+        //if it is context sensitive launch, Add CSS content to remove
+        //Application launch link.
+        if(iView->GetViewType() == CCSXHHtmlTopicView::EContextHtmlView)
+	        {
+	        HBufC8* ContextHtmlbuffer = HBufC8::NewLC(htmlBuffer->Size() + 100);
+	        TPtr8 bufferPtr = ContextHtmlbuffer->Des();
+	        bufferPtr.Copy(KCsstextToRemovePathinfo);
+	        bufferPtr.Append(htmlBuffer->Des());
+	        iBrCtrl->LoadDataL(iUrlNoAnchors,*ContextHtmlbuffer,dataType,uid);	
+	    	CleanupStack::PopAndDestroy(ContextHtmlbuffer);    	
+	        }
+        else
+	        {
+	        iBrCtrl->LoadDataL(iUrlNoAnchors,*htmlBuffer,dataType,uid);	
+	        }
+        CleanupStack::PopAndDestroy(htmlBuffer);
+        }
+    else
+        {
+        iTopic->GetHtmlUrlL(iUrlNoAnchors);
+        iBrCtrl->LoadUrlL(iUrlNoAnchors);
+        }
+    CheckForMSK();  
+    }
+
+TKeyResponse CCSXHHtmlTopicContainer::OfferKeyEventL(const TKeyEvent &  
+aKeyEvent,TEventCode  aType )
+    {
+    TKeyResponse result(EKeyWasNotConsumed);
+    
+    if ((aKeyEvent.iCode == EKeyEnter )&& (aType == EEventKey)
+    	&& (IsHyperLinkFocused()))
+        { 
+        HandleCommandOpenHyperLinkL();
+        CheckForMSK();
+        return EKeyWasConsumed; 
+        }
+    
+    if(iBrCtrl)
+        {
+        result = iBrCtrl->OfferKeyEventL(aKeyEvent, aType);        
+		CheckForMSK();
+		}       
+    return result;  
+    }
+
+TInt CCSXHHtmlTopicContainer::CountComponentControls() const
+    {
+    return 1; 
+    }
+
+CCoeControl* CCSXHHtmlTopicContainer::ComponentControl(TInt aIndex) const
+    {
+    switch (aIndex)
+        {
+        case 0:
+            return iBrCtrl;
+        default:
+            return NULL;
+        }
+    }
+    
+void CCSXHHtmlTopicContainer::HandleResourceChange(TInt aType)
+    {
+    CCSXHAppUi::GetInstance()->PropagateResourceChange(aType); 
+    }
+void CCSXHHtmlTopicContainer::HandleResourceChangeImpl(TInt aType)
+    {
+    if (aType == KEikDynamicLayoutVariantSwitch)
+        {
+        iBrCtrl->HandleResourceChange(aType);
+        TRect mainRect; 
+        TRect statusPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainRect);
+        SetRect(mainRect);
+            if(iBrCtrl)
+#ifndef __SERIES60_30__             
+                iBrCtrl->SetRect(Rect());
+#else                       
+                iBrCtrl->SetRect(mainRect);
+#endif              
+        DrawNow();
+        }
+    else
+        {
+        CCoeControl::HandleResourceChange(aType);   
+        }
+    }
+
+void CCSXHHtmlTopicContainer::SizeChanged()
+    {
+#ifndef __SERIES60_30__ 
+    if(iBrCtrl)
+        iBrCtrl->SetRect(Rect());
+#endif  
+    }
+
+void CCSXHHtmlTopicContainer::HandleCommandBackL()
+    {
+    iBrCtrl->HandleCommandL(TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandBack);
+    }
+ 
+
+TBool CCSXHHtmlTopicContainer::IsPrevPageAvbl()
+    {
+    if (iPrevPageCount > 0)
+      	{
+      	return ETrue;
+      	}
+     else
+      	{
+      	return EFalse;
+      	}
+    } 
+
+
+
+void CCSXHHtmlTopicContainer::ClearHistoryL()
+    {
+    iBrCtrl->HandleCommandL(TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandClearHistory);
+    iPrevPageCount = 0;
+    }
+ 
+TBool CCSXHHtmlTopicContainer::ResolveEmbeddedLinkL(const TDesC& /*aEmbeddedUrl*/,
+                                           const TDesC& /*aCurrentUrl*/,
+                                           TBrCtlLoadContentType /*aLoadContentType*/, 
+                                           MBrCtlLinkContent& /*aEmbeddedLinkContent*/)
+    {
+    return EFalse;
+    }
+// --------------------------------------------------------------------------
+// Handling for
+// 1) Compressed HTML content
+// 2) Application Launch Links
+// 3) External Hyperlinks
+// --------------------------------------------------------------------------
+TBool CCSXHHtmlTopicContainer::ResolveLinkL(const TDesC& aUrl, const TDesC& aCurrentUrl,
+                                   MBrCtlLinkContent& aBrCtlLinkContent)
+    {
+#ifdef FF_HELP_TUTORIAL_MERGE
+    if( KErrNotFound != aUrl.Find( KTutorialFileExtn ))
+        {
+        iView->LaunchTutorial();
+        return ETrue;
+        }
+#endif // FF_HELP_TUTORIAL_MERGE
+    if(NULL == iAppLauncher)
+		{
+		iAppLauncher = AppLauncherForCSXH::NewL();	
+		}
+        //Handling for application launch.
+    if(iAppLauncher->LaunchAppL(aUrl,aCurrentUrl))
+        return ETrue;//Link is resolved locally.
+        
+    if(CheckForExternalLinkL(aUrl))     
+        return ETrue;//Link is resolved locally.
+    
+    //Remove the Anchor, if any     
+    TInt DotPos = aUrl.LocateReverseF('.');
+    TInt HashPos = aUrl.LocateReverseF('#');
+    if(KErrNotFound != HashPos && HashPos > DotPos )
+        {
+        //Direct assignment does not work
+        iUrlNoAnchors.Copy(KEmptyString);
+        iUrlNoAnchors.Append(aUrl.Mid(0,HashPos));
+        }
+    else
+        {
+        //Direct assignment does not work
+        iUrlNoAnchors.Copy(KEmptyString);
+        iUrlNoAnchors.Append(aUrl);
+        }   
+    
+    HBufC8 *htmlBuffer = CCSXHHtmlTOC2::GetContentsFromUrlL(iUrlNoAnchors,CCSXHAppUi::GetCoeEnv(),iFeatureControl);
+    if(htmlBuffer)
+        {
+        TPtrC p(NULL,0);
+        aBrCtlLinkContent.HandleResolveComplete(KContentType,p,htmlBuffer);
+        delete htmlBuffer;
+        iLoadHtml = EFalse;
+        if (iBack)
+        	{
+        	iPrevPageCount--;
+        	iBack = EFalse;
+        	}
+        else
+        	{
+            iPrevPageCount++;
+        	}
+
+        return ETrue;//Link is resolved locally.    
+        }
+        
+    return  EFalse;
+    }
+
+void CCSXHHtmlTopicContainer::CancelFetchL()
+    {
+    if (iBrCtrl)
+        {
+        iBrCtrl->HandleCommandL(
+        	    		(TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ); 
+        }
+    }
+
+void CCSXHHtmlTopicContainer::CancelAll()
+    {
+
+    }
+
+
+void CCSXHHtmlTopicContainer::HandleResolveComplete(const TDesC& /*aContentType*/,
+                                           const TDesC& /*aCharset*/,
+                                           const HBufC8* /*aContentBuf*/)
+    {
+
+    }
+
+void CCSXHHtmlTopicContainer::HandleResolveError(TInt /*aError*/)
+    {
+    
+    }
+void CCSXHHtmlTopicContainer::RefreshL(CCSXHHtmlTOC2 *aTopic)
+    {
+  	SetAndLoadInitialTopicL(aTopic);
+    }
+
+// --------------------------------------------------------------------------
+// This callback function is used for the following
+// 1) When an HTML page is loaded, this callback function will be called. If 
+// this callback is invoked for hyperlink navigation, then the display topic
+// has to be updated. For example, the Application Topics option menu is
+// dependent on the dipslay topic.
+// 2) Updation of the softkey from Options-Close to Options-Back (& Vice-Versa)
+// in the context view as a result of hyperlink traveral
+// --------------------------------------------------------------------------
+void CCSXHHtmlTopicContainer::HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, 
+                                    TUint /*aSize*/, TUint16 /*aTransactionId*/)
+    {
+    if(aLoadEvent == TBrCtlDefs::EEventLoadFinished)
+        {
+        
+        HBufC* title = iBrCtrl->PageInfoLC(TBrCtlDefs::EPageInfoTitle);
+        if(!title)
+            {
+            CleanupStack::PopAndDestroy(title);
+            return;
+            }
+        
+        //Update the title bar
+        CEikStatusPane* sp = CCSXHAppUi::GetInstance()->StatusPane();
+        CAknTitlePane* titlePane = STATIC_CAST(CAknTitlePane*, 
+        sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
+        titlePane->SetTextL(*title);
+        CleanupStack::PopAndDestroy(title);
+        
+        //For the context sensitive view, the softkey texts need to be changed.
+        //add label iLoadHtml for ESNN-7N9CLN.If the html is opened by 
+        //loadHtmlL, the iLoadHtml will be set to ETrue, which 
+        //can guarantee the RSK keep as "CLOSE" when context is sensitive.
+        if ((!iLoadHtml) && (iView->GetViewType() == CCSXHHtmlTopicView::EContextHtmlView))
+        {  
+            iView->SetViewTypeL(IsPrevHtmlPageAvblL() ? 
+                    CCSXHHtmlTopicView::EHtmlView : CCSXHHtmlTopicView::EContextHtmlView);
+        }
+        
+        //TSW Error:TKOI-74KE89: Help crashes when closing after viewing a link topic
+        //When user presses back keys very quickly, TOC2 objects use to destroy and 
+        //then browser call back function triggers which leads to crash. This check 
+        //will avoid crash.
+        TUid viewId = iDocument.GetDisplayTopic()->GetViewID();
+		if(viewId == KCSXHToc1ViewID ||	viewId == KCSXHKywdToc1ViewID
+		|| viewId == KCSXHToc2ViewID || viewId == KCSXHKywdToc2ViewID)
+			return;
+		
+        //When user clicks on Application Topics, application topics 
+        //corresponding to the topic being displayed has to be opened
+        //Hence update the Display topic information if required.
+        
+        //Check if this event is triggered for the first load after construction
+        TFileName url;
+        iTopic->GetHtmlUrlL(url);
+        if(url.Compare(iUrlNoAnchors) == 0)
+        	{
+        	iDocument.SetDisplayTopic(iTopic);
+        	iNewTopic = NULL;
+        	//Move the code from SetAndLoadInitialTopicL
+        	//TSW Error:EJZG-7E2BUV
+        	ClearHistoryL();
+        	return;
+        	}
+            
+        iNewTopic = iDocument.GetHtmlTopicForUrlL(iUrlNoAnchors);            
+        CheckForMSK();
+        }
+    }
+    
+CCSXHHelpContentBase* CCSXHHtmlTopicContainer::GetCurrActiveObject()
+    	{
+    	return iNewTopic;
+    	}    
+// --------------------------------------------------------------------------
+// Back Key Handling
+// --------------------------------------------------------------------------
+TBool CCSXHHtmlTopicContainer::HandleBackKeyL()
+    {
+    //When this view is initially created, the HTML content is loaded 
+    //using the LoadDataL function and hence it will not be part of the
+    //History stack but all other subsequest navigation by the user 
+    //using the hyperlinks will be part of the History Stack
+    if(IsPrevPageAvbl())
+        {
+        iBack = ETrue;
+        TRAPD(res,HandleCommandBackL());
+        if(res == KErrNone)
+            return ETrue;
+        else
+            ClearHistoryL();
+        }
+    ClearHistoryL();
+        
+    return EFalse;  
+    }
+TBool CCSXHHtmlTopicContainer::IsPrevHtmlPageAvblL()
+    {
+    if(IsPrevPageAvbl())
+        return ETrue;
+    
+    return EFalse;  
+    }
+
+void CCSXHHtmlTopicContainer::SetSelectedFontSizeL(TInt aValue)
+    {
+    iBrCtrl->SetBrowserSettingL(TBrCtlDefs::ESettingsFontSize,aValue);  
+    }
+    
+TInt CCSXHHtmlTopicContainer::GetCurrentValueL(TInt aSetting)
+    {
+        return iBrCtrl->BrowserSettingL(aSetting);  
+    }   
+
+void CCSXHHtmlTopicContainer::UpdateSoftkeyL(TBrCtlKeySoftkey /*aKeySoftkey*/,
+                                    const TDesC& /*aLabel*/,
+                                    TUint32 /*aCommandId*/,
+                                    TBrCtlSoftkeyChangeReason /*aBrCtlSoftkeyChangeReason*/)
+    {
+    }
+
+void CCSXHHtmlTopicContainer::UpdateBrowserVScrollBarL(TInt /*aDocumentHeight*/, 
+                                              TInt /*aDisplayHeight*/,
+                                              TInt /*aDisplayPosY*/ ) 
+    {
+    if(iBrCtrl)
+        CheckForMSK();
+}
+void CCSXHHtmlTopicContainer::UpdateBrowserHScrollBarL(TInt /*aDocumentWidth*/, 
+                                              TInt /*aDisplayWidth*/,
+                                              TInt /*aDisplayPosX*/ )
+    {
+    if(iBrCtrl)
+        CheckForMSK();
+    }
+void CCSXHHtmlTopicContainer::NotifyLayoutChange( TBrCtlLayout /*aNewLayout*/ )
+    {
+    }
+        
+void CCSXHHtmlTopicContainer::UpdateTitleL( const TDesC& /*aTitle*/ )
+    {
+    }
+
+void CCSXHHtmlTopicContainer::CheckForMSK()
+    {
+    if(IsHyperLinkFocused())
+        {
+        iView->SetMiddleSoftKey(ETrue); 
+        }
+    else
+        {
+        iView->SetMiddleSoftKey(EFalse);    
+        }
+    }
+    
+TBool CCSXHHtmlTopicContainer::IsHyperLinkFocused() 
+    {
+    if(TBrCtlDefs::EElementAnchor == iBrCtrl->FocusedElementType())
+        return ETrue;
+    else
+        return EFalse;
+    }
+    
+void CCSXHHtmlTopicContainer::HandleCommandOpenHyperLinkL()
+    {
+    iBrCtrl->HandleCommandL(TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandOpen);
+    }
+
+TBool CCSXHHtmlTopicContainer::CheckForExternalLinkL(const TDesC& aUrl)
+	{
+    TBool Result = EFalse;
+        
+    if( KErrNotFound != aUrl.Find(_L("http://")) |
+        KErrNotFound != aUrl.Find(_L("https://")) |
+        KErrNotFound != aUrl.Find(_L("ftp://")))
+        {
+        iAppLauncher->LaunchBrowserNGL(aUrl);           
+        Result = ETrue;
+        }
+        
+    return Result;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHHtmlTopicView.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,375 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHHtmlTopicView class definition
+*
+*/
+
+// INCLUDES
+#include "CSXHHtmlTopicView.h"
+#include "CSXHHtmlTopicContainer.h"
+#include "CSXHHtmlTOC2.h"
+#include "CSXHAppUi.h"
+#include "CSXHDocument.h"
+#include <cshelp.rsg>
+#include "CsHelp.hrh"
+
+#include "CSXHViewIDs.h"
+#include "CSXHKywdTOC1.h"
+#include "CSXHHelpDataBase.h"
+#include "CSXHContextTopic.h"
+#include "CSXHHtmlTOC2.h"
+#include "CSXHHtmlTOC1.h" 
+
+#include <avkon.hrh>
+#include <aknnotewrappers.h> 
+#include <BrCtlDefs.h>
+#include <f32file.h>
+#include <apgcli.h>
+#include <akntitle.h>
+
+#include <AiwMenu.h>
+#include <AiwCommon.h>
+#include <AiwServiceHandler.h>
+#include <AknGlobalNote.h>
+TInt CCSXHHtmlTopicView::iFontSize = TBrCtlDefs::EFontSizeLevelNormal;
+
+CCSXHHtmlTopicView* CCSXHHtmlTopicView::NewL(const TUid& aUid, const TInt& aFlags,const 
+TRect& aRect)
+    {
+    CCSXHHtmlTopicView* temp = new(ELeave) CCSXHHtmlTopicView(aUid,aFlags);
+    CleanupStack::PushL(temp);
+    temp->ConstructL(aRect);
+    CleanupStack::Pop(temp);
+    return temp;
+    }
+
+CCSXHHtmlTopicView::CCSXHHtmlTopicView(const TUid& aUid, const TInt& aFlags):
+                        iUid(aUid),iAppFlags(aFlags)
+    {   
+    }
+CCSXHHtmlTopicView::~CCSXHHtmlTopicView()
+    {
+    if(iBCContainer)
+        {
+        delete iBCContainer;
+        iBCContainer = NULL;
+        }
+    }
+    
+void CCSXHHtmlTopicView::ConstructL(const TRect& /*aRect*/)
+    {
+    BaseConstructL(iAppFlags);
+    }
+
+void CCSXHHtmlTopicView::SetViewTypeL(TInt type)
+	{
+	if(type == iContextTopicView)
+		return;
+	
+	if(type == EContextHtmlView)
+		{
+		iContextTopicView = ETrue;
+		SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK);
+		}
+	else
+		{
+		iContextTopicView = EFalse;
+		SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_BACK_OPENLINK);
+		}	
+	}
+	
+TInt CCSXHHtmlTopicView::GetViewType()	
+	{
+	return iContextTopicView ? EContextHtmlView : EHtmlView;
+	}
+    
+TUid CCSXHHtmlTopicView::Id() const 
+    {
+    return iUid;
+    }
+// --------------------------------------------------------------------------
+// Launches an application based on the Application UID and a View ID
+// --------------------------------------------------------------------------    
+void CCSXHHtmlTopicView::HandleCommandL(TInt  aCommand  )
+    {
+    switch(aCommand)
+        {
+        case EAknSoftkeyBack:
+            {
+            if(iBCContainer->HandleBackKeyL())
+                return;
+            CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document());              
+            //if not the current view, return
+            TUid viewId = doc->GetDisplayTopic()->GetViewID();
+            if( viewId != KCSXHHtmlTopicViewID && viewId != KCSXHKywdToc2ViewID )
+                {
+                return;
+                }          
+            CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic());
+            CCSXHKywdTOC1* kywdParent = displayTopic->GetKywdParent();
+            if(kywdParent)
+                {
+                doc->SetDisplayAndPrevTopic(kywdParent);    
+                AppUi()->HandleCommandL(ECSXHOpenItem); 
+                }
+            else
+                {
+                HandleCommandL(ECSXHOpenApplicationTopics); 
+                }   
+            break;  
+            }
+        case ECSXHOpenApplicationTopics:       
+            {
+            CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document());   
+            if(iBCContainer->GetCurrActiveObject())
+            	{
+            	doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject());
+            	CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer();
+            	}            	           
+            CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic());
+            doc->SetDisplayAndPrevTopic(displayTopic->GetParent()); 
+            AppUi()->HandleCommandL(ECSXHOpenItem);
+            }
+            break;
+        case ECSXHTOC1ListView:
+            {
+            CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document());      
+            if(iBCContainer->GetCurrActiveObject())
+            	{
+            	doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject());
+            	CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer();
+            	}            	        
+            	
+            CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic());
+            //These two steps are necessary to set the correct display and prev topics
+            doc->SetDisplayTopic(displayTopic->GetParent());    
+            doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics());   
+            AppUi()->HandleCommandL(ECSXHOpenItem); 
+            }
+            break;
+        case ECsHelpCmdFontLarge:
+            {
+            TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize);
+            iBCContainer->SetSelectedFontSizeL(++CurrentFontSize);
+            iFontSize = CurrentFontSize;
+            }
+            break;
+        case ECsHelpCmdFontSmall:
+            {
+            TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize);
+            iBCContainer->SetSelectedFontSizeL(--CurrentFontSize);
+            iFontSize = CurrentFontSize;
+            }
+            break;
+        case ECSXHOpenHyperLink: 
+            {           
+            iBCContainer->HandleCommandOpenHyperLinkL();
+            }
+            break;
+		case ECSXHSearchText:
+			{		
+        	CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document()); 
+        	if(iBCContainer->GetCurrActiveObject())
+	        	{
+	        	doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject());
+	       		CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer();
+	        	}            
+        	}
+			AppUi()->HandleCommandL( aCommand );
+			break;
+        case EAknSoftkeyExit:
+        case EAknSoftkeyClose: 
+            AppUi()->HandleCommandL( aCommand );
+            break;
+        default:
+            break;      
+        }     
+    }
+// --------------------------------------------------------------------------
+// Handlign for view activation. For a context view, the actual display topic
+// has to be modified
+// --------------------------------------------------------------------------
+void CCSXHHtmlTopicView::DoActivateL(const TVwsViewId& aPrevViewId,TUid,const TDesC8&)  
+    {
+    iPrevious = aPrevViewId;    
+    CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document());  
+     
+    if(!iBCContainer)
+    	{
+    	TRAPD(Result,iBCContainer = CCSXHHtmlTopicContainer::NewL(ClientRect(),*doc,this));
+    	if(KErrNone != Result)
+    		return;
+    	}
+    
+    //Set the correct display topic here for context sensitive launch
+    if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextHtmlTopicViewID)
+        {
+        CCSXHContextTopic *topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic());
+        doc->SetDisplayTopic(topic->GetTopic());
+        iContextTopicView = ETrue;
+        }
+    else
+    	{
+    	iContextTopicView = EFalse;
+    	}    
+	
+	CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic());
+    TRAPD(err,iBCContainer->SetAndLoadInitialTopicL(displayTopic));
+
+   	if( KErrNone != err )    
+   	    {
+   	    delete iBCContainer;
+   	    iBCContainer = NULL;
+   	    return;
+   	    }
+   	if( iContextTopicView )
+   	    {
+   	    SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK);
+   	    }
+   	else
+   	    {
+   	    SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_BACK_OPENLINK);
+   	    }
+    iBCContainer->SetMopParent(this); 
+    iBCContainer->SetRect(ClientRect());
+    AppUi()->AddToStackL(*this, iBCContainer);    
+    iBCContainer->MakeVisible(ETrue);     
+    }
+                             
+void CCSXHHtmlTopicView::DoDeactivate()                             
+    {   
+    if(iBCContainer)
+        {
+        TRAP_IGNORE(iBCContainer->CancelFetchL());
+        iBCContainer->MakeVisible(EFalse);
+        AppUi()->RemoveFromStack(iBCContainer);
+        }
+    }
+// --------------------------------------------------------------------------
+// When a view which was previously activated, goes to background and gets
+// activated again, the DoActivateL will not be called only ViewActivatedL 
+// will be called. Special handling is required for the context view for the
+// scenario, open context help from any application, with out changing the 
+// help view, open context help from another application, the contents of the
+// context view has to be refreshed with the new topic
+// --------------------------------------------------------------------------    
+void CCSXHHtmlTopicView::ViewActivatedL(const TVwsViewId& aPrevViewId,
+                                 TUid aCustomMessageId,
+                                 const TDesC8& aCustomMessage)
+    {
+    
+    if(iBCContainer)
+    	{
+        //This handling is required for the following scenario
+    	//Context sensitive help launch more than once with no 
+	    //other view navigation in the help application
+    	CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document());
+     	if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextHtmlTopicViewID)
+ 	    	{
+        	CCSXHContextTopic *topic = static_cast<CCSXHContextTopic*>(doc->GetDisplayTopic());
+        	doc->SetDisplayTopic(topic->GetTopic());
+        	CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic());
+        	iBCContainer->RefreshL(displayTopic);
+        	SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK);
+         	}
+        iBCContainer->CheckForMSK();
+    	}
+    CAknView::ViewActivatedL(aPrevViewId,aCustomMessageId,aCustomMessage);
+    }
+    
+void CCSXHHtmlTopicView::SetSoftKeysL(TInt aSoftKeys)
+    {    
+    if( Cba() )
+        {
+        Cba()->SetCommandSetL( aSoftKeys );
+        Cba()->DrawDeferred();   	
+        }
+    }
+// --------------------------------------------------------------------------
+// Dynamically updating Options menu item
+// --------------------------------------------------------------------------    
+void CCSXHHtmlTopicView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+    {
+
+    if( R_CSXH_MENU_HTMLTOPICVIEW == aResourceId)
+        {    
+        TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize);
+        
+        if(CurrentFontSize == TBrCtlDefs::EFontSizeLevelAllSmall)
+            {
+            aMenuPane->SetItemDimmed(ECsHelpCmdFontSmall,ETrue);
+            }
+        else if(CurrentFontSize == TBrCtlDefs::EFontSizeLevelAllLarge)
+            {
+            aMenuPane->SetItemDimmed(ECsHelpCmdFontLarge,ETrue);
+            }
+        
+        if(!iBCContainer->IsHyperLinkFocused())
+            {
+            aMenuPane->SetItemDimmed(ECSXHOpenHyperLink,ETrue);
+            }
+        }
+    }
+// --------------------------------------------------------------------------
+// MSK Handling
+// --------------------------------------------------------------------------
+void CCSXHHtmlTopicView::SetMiddleSoftKey(TBool aValue)
+    {
+#ifndef __SERIES60_30__    
+    if(AknLayoutUtils::MSKEnabled())
+        {        
+        Cba()->MakeCommandVisible(ECSXHOpenHyperLink,aValue);
+        Cba()->DrawDeferred();
+        }
+#endif      
+    }
+    
+TInt CCSXHHtmlTopicView::GetCurrentFontSize()
+ 	{
+ 	return iFontSize;
+ 	}
+ 	
+void CCSXHHtmlTopicView::ResourceChangeHdl(TInt aType)
+    {
+    if(iBCContainer)
+        iBCContainer->HandleResourceChangeImpl(aType);
+    } 
+    
+#ifdef FF_HELP_TUTORIAL_MERGE
+ // --------------------------------------------------------------------------
+// CCSXHAppUi::LaunchTutorial
+// Lauch tutorial if exist, else popup a error message.
+// --------------------------------------------------------------------------
+void CCSXHHtmlTopicView::LaunchTutorial()
+    {
+    CCSXHDocument *doc = static_cast<CCSXHDocument*>(AppUi()->Document());
+    CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic());
+    TCoeHelpContext helpContext;
+    displayTopic->GetHelpContext(helpContext);
+    CCSXHAppUi::GetInstance()->SetHelpContext(helpContext);
+    if( CCSXHAppUi::GetInstance()->IsApplicationPresentInTutorialL() )
+        {
+        CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL();
+        }
+    else
+        {
+        HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC(R_TYPE_NO_HELP_TOPICS);
+        CAknGlobalNote* note = CAknGlobalNote::NewLC();
+        note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage);
+
+        CleanupStack::PopAndDestroy(note);
+        CleanupStack::PopAndDestroy(ErrorMessage);
+        }
+    }
+#endif // FF_HELP_TUTORIAL_MERGE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHLegacyTopicContainer.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,343 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTopicContainer class definition
+*
+*/
+
+
+#include "CSXHLegacyTOC2.h"
+#include "CSXHLegacyTopicContainer.h"
+#include "CSXHDocument.h"
+
+#include "CSXHAppUi.h"
+
+#include <eikrted.h>
+#include <txtrich.h>
+#include <aknkeys.h>
+#include <AknUtils.h>
+#include <barsread.h>
+#include <applayout.cdl.h>    //Dynamic layout functions
+#include <AknsDrawUtils.h> 
+#include <AknsBasicBackgroundControlContext.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknappui.h>
+#include <txtfrmat.h> 
+
+CCSXHLegacyTopicContainer* CCSXHLegacyTopicContainer::NewL(const TRect& 
+aRect,CCSXHDocument &aDocument,CCSXHLegacyTOC2 *aTopic)
+    {
+    CCSXHLegacyTopicContainer* self = CCSXHLegacyTopicContainer::NewLC(aRect,aDocument,aTopic);
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+CCSXHLegacyTopicContainer* CCSXHLegacyTopicContainer::NewLC(const TRect& 
+aRect,CCSXHDocument &aDocument,CCSXHLegacyTOC2 *aTopic)
+    {
+    CCSXHLegacyTopicContainer* self = new (ELeave) CCSXHLegacyTopicContainer(aDocument,aTopic);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRect);
+    return self;
+    }
+
+CCSXHLegacyTopicContainer::CCSXHLegacyTopicContainer(CCSXHDocument 
+&aDocument,CCSXHLegacyTOC2 *aTopic):iDocument(aDocument),iTopic(aTopic)
+    {
+    }
+
+void CCSXHLegacyTopicContainer::ConstructL(const TRect& aRect/*, CRichText* aText*/)
+    {
+    CreateWindowL();
+    TRect rect(0,0,0,0);
+    // Temporary rect is passed. Correct rect is set in SizeChanged.
+    iSkinContext = CAknsBasicBackgroundControlContext::NewL(
+       KAknsIIDQsnBgAreaMain , rect, EFalse);
+       
+    iText = STATIC_CAST(CRichText*,iTopic->GetTopicContentL());
+    
+    GetTextFormat();
+
+    iEdwin = new(ELeave) CEikEdwin();
+    const TInt flags(CEikEdwin::EKeepDocument |
+                     CEikEdwin::EUserSuppliedText |
+                     CEikEdwin::ENoAutoSelection |
+                     CEikEdwin::EAvkonDisableCursor |
+                     CEikEdwin::EReadOnly |
+                     CEikEdwin::EDisplayOnly);
+    iEdwin->SetContainerWindowL(*this);
+
+    iEdwin->ConstructL(flags);
+    iEdwin->CreatePreAllocatedScrollBarFrameL()->SetScrollBarVisibilityL(
+                                                 CEikScrollBarFrame::EOff,
+                                                 CEikScrollBarFrame::EAuto);
+    SetTextL(iText);
+    FormatRichTextL(*iText);
+    SetRect(aRect);
+    ActivateL();
+    }
+
+CCSXHLegacyTopicContainer::~CCSXHLegacyTopicContainer()
+    {
+    delete iEdwin;
+    delete iSkinContext;
+    }
+
+void CCSXHLegacyTopicContainer::RefreshL(CCSXHLegacyTOC2 *aTopic)
+    {
+    iTopic = aTopic;
+    iText = STATIC_CAST(CRichText*,iTopic->GetTopicContentL());
+    SetTextL(iText);
+    FormatRichTextL(*iText);
+    SizeChanged();
+    }
+
+void CCSXHLegacyTopicContainer::SetTextL(CRichText* aText)
+    {
+    iEdwin->SetDocumentContentL(*aText, CEikEdwin::EUseText);
+    iEdwin->SetCursorPosL(0, EFalse);
+    
+    }
+
+void CCSXHLegacyTopicContainer::FocusChanged(TDrawNow aDrawNow)
+    {
+    if (iEdwin)
+        {
+        iEdwin->SetFocus(IsFocused(), aDrawNow);
+        }
+    }
+
+void CCSXHLegacyTopicContainer::GetTextFormat()
+    {
+    
+    TAknMultiLineTextLayout layoutToUse;
+    if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+        {
+        
+        TAknTextLineLayout layoutnew1 = AknLayoutScalable_Apps::help_list_pane_t1(0).LayoutLine();
+        
+
+        TAknLayoutScalableParameterLimits limits1 = 
+            AknLayoutScalable_Apps::help_list_pane_t1_ParamLimits();
+            
+        TInt numberoflines = limits1.LastRow() + 1;
+        
+        layoutnew1.iNumberOfLinesShown = numberoflines ;
+    
+        layoutToUse.iC = layoutnew1.iC;
+        layoutToUse.il = layoutnew1.il;
+        layoutToUse.ir = layoutnew1.ir;
+        layoutToUse.iB = layoutnew1.iB;
+        layoutToUse.iW = layoutnew1.iW;
+        layoutToUse.iJ = layoutnew1.iJ;
+        layoutToUse.iFont = layoutnew1.iFont;
+        layoutToUse.iBaselineSkip = layoutnew1.iBaselineSkip;
+        layoutToUse.iNumberOfLinesShown = layoutnew1.iNumberOfLinesShown;
+        }
+    else
+        {
+        layoutToUse = AppLayout::Multiline_Help_texts_Line_1(0);
+        }
+
+    const CFont* font = AknLayoutUtils::FontFromId(layoutToUse.FontId() /*iFont*/, NULL);
+    iCharFormat.iFontSpec = font->FontSpecInTwips();
+    iCharFormatMask.SetAttrib(EAttFontTypeface);
+    iCharFormatMask.SetAttrib(EAttFontHeight);
+
+    TRgb color;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TInt error = AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors, 
+    													EAknsCIQsnTextColorsCG6 );
+    if(error==KErrNone)
+        iCharFormat.iFontPresentation.iTextColor = color;
+    
+    iCharFormatMask.SetAttrib(EAttColor);
+    iCharFormatMask.SetAttrib(EAttFontPosture);    
+ }
+void CCSXHLegacyTopicContainer::FormatRichTextL( CRichText& aText )
+    {
+    TInt length = aText.DocumentLength();
+    length++;
+    // Apply the general formatting rules...
+    aText.ApplyCharFormatL( iCharFormat, iCharFormatMask, 0, length );
+    
+    TParaFormatMask paraFormatMask;
+	paraFormatMask.SetAttrib( EAttBullet );
+	CParaFormat *paraFormat  = new ( ELeave ) CParaFormat;
+	CleanupStack::PushL(paraFormat);	
+	TInt paraCount = aText.ParagraphCount();
+	for(TInt i = 0; i < paraCount ; ++i)
+		{
+		TInt paraLength;
+		TInt paraStart = aText.CharPosOfParagraph(paraLength,i);
+		
+		aText.GetParagraphFormatL(paraFormat,paraStart);
+		if(paraFormat->iBullet)
+			{
+			TBullet* bullet = new ( ELeave ) TBullet;
+			CleanupStack::PushL(bullet);
+			bullet->iColor = iCharFormat.iFontPresentation.iTextColor;
+			bullet->iHeightInTwips = iCharFormat.iFontSpec.iHeight;
+			
+			CParaFormat* paraFormatNew = new ( ELeave ) CParaFormat;			
+			paraFormatNew->iBullet = bullet; // ownership xfer
+			
+			CleanupStack::Pop();
+			CleanupStack::PushL(paraFormatNew);
+			
+			aText.ApplyParaFormatL( paraFormatNew, paraFormatMask, paraStart, paraLength - 1);
+			CleanupStack::PopAndDestroy(paraFormatNew);
+			}
+		}
+	CleanupStack::PopAndDestroy(paraFormat);
+    }
+
+
+void CCSXHLegacyTopicContainer::SizeChanged()
+    {
+	if(iSkinContext)
+        	iSkinContext->SetRect(Rect());
+    if(iEdwin)
+    	{
+    	TRect clientrect = Rect();
+    	if(AknLayoutUtils::LayoutMirrored())
+			{
+			clientrect.iTl.iX = clientrect.iTl.iX + (iEdwin->ScrollBarFrame()
+    				->ScrollBarBreadth(CEikScrollBar::EVertical))* 1.1;    		
+			}
+		else
+			{
+    		TInt RectWidth =  clientrect.Width() - (iEdwin->ScrollBarFrame()
+    				->ScrollBarBreadth(CEikScrollBar::EVertical))* 1.1;      
+			
+    		clientrect.SetWidth(RectWidth);
+			}
+    	
+       	iEdwin->SetRect(clientrect);
+       	TRAP_IGNORE(iEdwin->ForceScrollBarUpdateL());
+    	}    
+    }
+
+// ---------------------------------------------------------
+// CCsHelpTopicContainer::OfferKeyEventL(...)
+// Processing a key event
+//  
+// (other items were commented in a header).
+// ---------------------------------------------------------
+TKeyResponse CCSXHLegacyTopicContainer::OfferKeyEventL(
+                                      const TKeyEvent& aKeyEvent,
+                                      TEventCode aType)
+    {
+    TKeyResponse result(EKeyWasConsumed);
+ 
+    switch (aKeyEvent.iCode)
+        {            
+        case EKeyUpArrow:
+            iEdwin->MoveDisplayL(TCursorPosition::EFLineUp);
+            iEdwin->UpdateScrollBarsL();
+            break;
+        case EKeyDownArrow:
+            iEdwin->MoveDisplayL(TCursorPosition::EFLineDown);
+            iEdwin->UpdateScrollBarsL();
+            break;
+        default:
+            result = iEdwin->OfferKeyEventL(aKeyEvent, aType);
+        }
+
+    return result;
+    }
+
+
+// ---------------------------------------------------------
+// CCsHelpTopicContainer::CountComponentControls() const
+//
+//  
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCSXHLegacyTopicContainer::CountComponentControls() const
+    {
+    return 1; // return nbr of controls inside this container
+    }
+
+// ---------------------------------------------------------
+// CCsHelpTopicContainer::ComponentControl(TInt aIndex) const
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CCoeControl* CCSXHLegacyTopicContainer::ComponentControl(TInt aIndex) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iEdwin;
+        default:
+            return NULL;
+        }
+    }
+
+// ---------------------------------------------------------
+// CCsHelpTopicContainer::Draw(..)
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCSXHLegacyTopicContainer::Draw(const TRect& aRect) const
+    {
+    CWindowGc& gc = SystemGc();
+    gc.Clear(aRect);
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    if (iSkinContext)
+        {//Draw the skin background
+        AknsDrawUtils::Background(
+            skin, iSkinContext, this, gc, aRect);
+        }
+    }
+void CCSXHLegacyTopicContainer::HandleResourceChange(TInt aType)
+    {
+     CCSXHAppUi::GetInstance()->PropagateResourceChange(aType);                
+    }
+
+void CCSXHLegacyTopicContainer::HandleResourceChangeImpl(TInt aType)
+    {
+    if(aType == KEikDynamicLayoutVariantSwitch)
+        {
+        iEdwin->HandleResourceChange(aType);
+        TRect mainRect; 
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainRect);        
+        SetRect(mainRect);        
+        }
+    else
+        {
+        CCoeControl::HandleResourceChange(aType);
+        }
+    
+    }
+
+
+// ---------------------------------------------------------
+// CCsHelpTopicContainer::MopSupplyObject()
+// Pass skin information if need.
+// ---------------------------------------------------------
+
+TTypeUid::Ptr CCSXHLegacyTopicContainer::MopSupplyObject(TTypeUid aId)
+    {
+    if (aId.iUid == MAknsControlContext::ETypeId && iSkinContext)
+        {
+        return MAknsControlContext::SupplyMopObject(aId, iSkinContext);
+        }
+
+    return CCoeControl::MopSupplyObject(aId);
+    }
+// End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/CSXHLegacyTopicView.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHLegacyTopicView class definition
+*
+*/
+
+
+// INCLUDES
+#include "CSXHLegacyTopicView.h"
+#include "CSXHLegacyTopicContainer.h"
+#include "CSXHAppUi.h"
+#include "CSXHDocument.h"
+#include <cshelp.rsg>
+#include "CsHelp.hrh"
+
+#include "CSXHHelpContentBase.h"
+#include "CSXHLegacyTOC2.h"
+#include "CSXHLegacyTOC1.h" 
+#include "CSXHViewIDs.h"
+#include "CSXHHelpDataBase.h"
+#include "CSXHContextTopic.h"
+
+#include <akntitle.h>
+
+CCSXHLegacyTopicView* CCSXHLegacyTopicView::NewL(const TUid& aUid, 
+                                        const TInt& aFlags,const TRect& aRect)
+    {
+    CCSXHLegacyTopicView* temp = new(ELeave) CCSXHLegacyTopicView(aUid,aFlags);
+    CleanupStack::PushL(temp);
+    temp->ConstructL(aRect);
+    CleanupStack::Pop(temp);
+    return temp;
+    }
+
+CCSXHLegacyTopicView::CCSXHLegacyTopicView(const TUid& aUid, const TInt& aFlags)
+                        : iUid(aUid),iAppFlags(aFlags)
+    {
+    }
+    
+CCSXHLegacyTopicView::~CCSXHLegacyTopicView()
+    {
+    }
+    
+void CCSXHLegacyTopicView::ConstructL(const TRect& /*aRect*/)
+    {
+    BaseConstructL(iAppFlags);
+    }
+    
+TUid CCSXHLegacyTopicView::Id() const   
+    {
+    return iUid;
+    }
+// --------------------------------------------------------------------------
+// Launches an application based on the Application UID and a View ID
+// --------------------------------------------------------------------------
+void CCSXHLegacyTopicView::HandleCommandL(TInt aCommand)
+    {
+    switch(aCommand)
+        {       
+        case ECSXHOpenApplicationTopics:
+            {
+            CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());              
+            CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic());
+            CCSXHLegacyTOC1* toc1 = displayTopic->GetLegacyParent();
+            if(toc1)
+                {
+                doc->SetDisplayAndPrevTopic(toc1);
+                AppUi()->HandleCommandL(ECSXHOpenItem);
+                }
+            else
+                {
+                //Handling will be same as EAknSoftkeyBack
+                HandleCommandL(EAknSoftkeyBack);
+                }
+            break;      
+            }
+        case EAknSoftkeyBack:
+            {
+            CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());              
+            CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic());
+            doc->SetDisplayAndPrevTopic(displayTopic->GetParent());
+            AppUi()->HandleCommandL(ECSXHOpenItem);                 
+            }               
+        break;
+        case ECSXHTOC1ListView:
+            {
+            CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());              
+            CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic());
+            CCSXHGenericTOC1* toc1 = displayTopic->GetLegacyParent();
+            if(!toc1)
+                toc1 = displayTopic->GetParent();
+            doc->SetDisplayTopic(toc1);
+            doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics());   
+            AppUi()->HandleCommandL(ECSXHOpenItem);
+            }
+            break;  
+        default:
+            AppUi()->HandleCommandL(aCommand);  
+            break;
+        }   
+    }
+
+// --------------------------------------------------------------------------
+// Handlign for view activation. For a context view, the actual display topic
+// has to be modified
+// --------------------------------------------------------------------------
+void CCSXHLegacyTopicView::DoActivateL(const TVwsViewId& aPrevViewId,TUid /* aCustomMessageId */,
+                             const TDesC8& /* aCustomMessage */)    
+    {
+    iPrevious = aPrevViewId;
+    CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());
+     //Set the correct display topic here for context sensitive launch
+    if(iUid == KCSXHContextLegacyTopicViewID)
+        {
+        CCSXHContextTopic* topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic());
+        doc->SetDisplayTopic(topic->GetTopic());
+        }
+            
+    if(!iTopicContainer)
+        {
+        CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic());
+        iTopicContainer = CCSXHLegacyTopicContainer::NewL(ClientRect(),*doc,displayTopic);
+        }
+        
+    iTopicContainer->SetMopParent(this);
+    iTopicContainer->SetRect(ClientRect());
+    AppUi()->AddToStackL(*this, iTopicContainer);
+    iTopicContainer->MakeVisible(ETrue);
+    
+    //Set the title of the view
+    CEikStatusPane* sp = StatusPane();
+    CAknTitlePane* title = STATIC_CAST(CAknTitlePane*, 
+            sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
+    title->SetTextL(doc->GetDisplayTopic()->GetName());
+    
+   	//MSK: Should be Inactive in this view
+	//TSW Error:EAJA-6XLFTW :
+	//S60 3.2 Help: Selection key opens Option menu in Topic view 
+	//If MSK is not defined, "." appears in the MSK, 
+	//On Middle key press, Options menu items are shown to the user 
+#ifndef __SERIES60_30__    
+    if(AknLayoutUtils::MSKEnabled())
+        {        
+        Cba()->MakeCommandVisible(ECSXHDummyMSK,EFalse);
+        Cba()->DrawDeferred();
+        }
+#endif 
+    }
+                             
+void CCSXHLegacyTopicView::DoDeactivate()                             
+    {
+    if(iTopicContainer)
+        {
+        iTopicContainer->MakeVisible(EFalse);
+        AppUi()->RemoveFromStack(iTopicContainer);
+        delete iTopicContainer;
+        iTopicContainer = NULL;
+        }
+    }
+// --------------------------------------------------------------------------
+// When a view which was previously activated, goes to background and gets
+// activated again, the DoActivateL will not be called only ViewActivatedL 
+// will be called. Special handling is required for the context view for the
+// scenario, open context help from any application, with out changing the 
+// help view, open context help from another application, the contents of the
+// context view has to be refreshed with the new topic
+// --------------------------------------------------------------------------
+void CCSXHLegacyTopicView::ViewActivatedL(const TVwsViewId& aPrevViewId,
+                                 TUid aCustomMessageId,
+                                 const TDesC8& aCustomMessage)
+    {
+    if(iTopicContainer && iUid == KCSXHContextLegacyTopicViewID)
+        {
+        CCSXHDocument* doc = static_cast<CCSXHDocument*>(AppUi()->Document());
+        
+        if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextLegacyTopicViewID)
+            {
+            CCSXHContextTopic* topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic());
+            doc->SetDisplayTopic(topic->GetTopic());
+            CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic());
+            iTopicContainer->RefreshL(displayTopic);    
+            }
+        
+         //Set the title of the view
+        CEikStatusPane* sp = StatusPane();
+        CAknTitlePane* title = STATIC_CAST(CAknTitlePane*, 
+            sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
+        title->SetTextL(doc->GetDisplayTopic()->GetName());
+        }
+        
+    CAknView::ViewActivatedL(aPrevViewId,aCustomMessageId,aCustomMessage);
+    }
+void CCSXHLegacyTopicView::ViewDeactivated()
+    {
+    CAknView::ViewDeactivated();
+    }
+void CCSXHLegacyTopicView::ResourceChangeHdl(TInt aType)
+    {
+    if(iTopicContainer)
+        iTopicContainer->HandleResourceChangeImpl(aType);
+    }
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/src/csxhruntimeappwatcher.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCSXHRuntimeAppWatcher class definition
+*
+*/
+
+
+#include "csxhruntimeappwatcher.h"
+#include "csxhconstants.h"
+
+// ========================================================================
+// CCSXHRuntimeAppWatcher
+// ========================================================================
+//
+CCSXHRuntimeAppWatcher::CCSXHRuntimeAppWatcher()
+                         : CActive( CActive::EPriorityIdle )
+    {
+    }
+    
+CCSXHRuntimeAppWatcher::~CCSXHRuntimeAppWatcher()
+    {
+    if ( IsActive() )
+        Cancel();
+    iFileSession.Close();
+    }
+    
+CCSXHRuntimeAppWatcher* CCSXHRuntimeAppWatcher::NewL()
+    {
+    CCSXHRuntimeAppWatcher* self = new ( ELeave ) CCSXHRuntimeAppWatcher();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+void CCSXHRuntimeAppWatcher::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    User::LeaveIfError( iFileSession.Connect() );
+    }
+    
+void CCSXHRuntimeAppWatcher::RunL()
+    {
+    // iStatus equals to KErrNone means completion
+    //
+    if ( iStatus == KErrNone )
+        {
+        iObserver->RuntimeUpdateIndex();
+        Start();
+        }
+        
+    }
+    
+void CCSXHRuntimeAppWatcher::DoCancel()
+    {
+    iFileSession.NotifyChangeCancel( iStatus );
+    }
+    
+void CCSXHRuntimeAppWatcher::Start()
+    {
+    // Requests a notification of change to files or directories
+    // Addition or deletion of a directory entry, or changing or formatting a disk
+    //
+    TBuf<KMaxFileName> obsrvPath;
+    obsrvPath.Append( TChar('?') );
+    obsrvPath.Append( KInstallPath );
+    iFileSession.NotifyChange( ENotifyEntry, iStatus, obsrvPath );
+    
+    // starts
+    SetActive();
+    }
+    
+void CCSXHRuntimeAppWatcher::SetObserver( MInstallationObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "../csxhelp/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/helps_info/helps_metadata/helps_metadata.mrp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+component           helps_metadata
+source   \sf\app\helps\helps_info\helps_metadata 
+source   \sf\app\helps\package_definition.xml
+source   \sf\app\helps\distribution.policy.s60
+notes_source      \component_defs\release.src
+ipr T 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+  <!ENTITY layer_real_source_path "sf/app/helps" >
+]>
+
+<SystemDefinition name="helps" schema="1.4.0">
+  <systemModel>
+    <layer name="app_layer">
+      <module name="helps">
+        <unit unitID="abs.helps" mrp="" bldFile="&layer_real_source_path;/group" name="helps" />
+      </module>
+    </layer>
+  </systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+  <package id="helps" name="Help Apps" levels="eng tools if ui">
+    <collection id="csxhelp" name="Context Sensitive Extended Help" level="if">
+      <component id="aiwhelpprovider" filter="s60" name="AIW Help Provider" class="plugin">
+        <!-- <unit bldFile="csxhelp/aiwhelpprovider/group"/> -->
+      </component>
+      <component id="csxhelp_build" filter="s60" name="Context Sensitive Extended Help Build">
+        <unit bldFile="csxhelp/group"/>
+      </component>
+    </collection>
+    <collection id="symhelp" name="Symbian Help" level="eng">
+      <component id="helpmodel" name="Help" introduced="6.0" purpose="optional">
+        <unit bldFile="symhelp/helpmodel/group" mrp="symhelp/helpmodel/group/app-services_hlpmodel.mrp"/>
+      </component>
+    </collection>
+    <collection id="helps_info" name="Help Apps Info" level="ui">
+      <component id="helps_metadata" name="Help Apps Metadata" class="config" introduced="^2" purpose="development" target="desktop">
+        <unit mrp="helps_info/helps_metadata/helps_metadata.mrp"/>
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
Binary file symhelp/helpmodel/TestData/Boss-1.hlp has changed
Binary file symhelp/helpmodel/TestData/Boss-2.hlp has changed
Binary file symhelp/helpmodel/TestData/ER5Help_Part1.hlp has changed
Binary file symhelp/helpmodel/TestData/PlatSecSearchTestA.hlp has changed
Binary file symhelp/helpmodel/TestData/PlatSecSearchTestC.hlp has changed
Binary file symhelp/helpmodel/TestData/PlatSecSearchTestF.hlp has changed
Binary file symhelp/helpmodel/TestData/PlatSecSearchTestZ.hlp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/Boss1/Boss1.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,189 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f32\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f40\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f41\froman\fcharset238\fprq2 Times New Roman CE;}{\f42\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f44\froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fswiss\fcharset238\fprq2 Arial CE;}{\f48\fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f50\fswiss\fcharset161\fprq2 Arial Greek;}{\f51\fswiss\fcharset162\fprq2 Arial Tur;}{\f52\fswiss\fcharset186\fprq2 Arial Baltic;}{\f53\fmodern\fcharset238\fprq1 Courier New CE;}{\f54\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f56\fmodern\fcharset161\fprq1 Courier New Greek;}{\f57\fmodern\fcharset162\fprq1 Courier New Tur;}{\f58\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f233\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f234\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}
+{\f236\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f237\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f238\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{
+\s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 
+\tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{\s4\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{
+\s5\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\*
+\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd 
+List Bullet;}{\s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{\s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}
+\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang
+{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext20 Category UID;}{\*\cs21 \additive 
+\b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{
+\s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{
+\s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\cf9\lang2057 \sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 
+\sbasedon0 \snext28 Tip;}{\s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{
+\s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\nowidctlpar\widctlpar
+\tx284\adjustright \f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\nowidctlpar\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 
+\sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f32\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext36 Context;}{\s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \f1\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\*\listtable
+{\list\listtemplateid1633989036\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\jclisttab\tx720 }{\listname ;}\listid-129}{\list\listtemplateid-1125073150
+\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720 }{\listname ;}\listid-125}{\list\listtemplateid-1590529442\listsimple
+{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid860106858\listsimple{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0
+\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid850702968\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'02\'00\u-4050 ?;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid193228087}{\list\listtemplateid850702968\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'02\'00\u-4050 ?;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid480197068}{\list\listtemplateid850702968\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'02\'00\u-4050 ?;}{\levelnumbers\'01;}\fi-283\li567 }{\listname ;}\listid1384720679}}{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}
+{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8}
+{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120\listoverridecount0\ls10}{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-2\listoverridecount1{\lfolevel
+\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3934 ?;}{\levelnumbers;}\f40\fbias0 \fi-283\li283 }}\ls13}{\listoverride\listid-2\listoverridecount1{\lfolevel
+\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f40\fbias0 \fi-283\li283 }}\ls14}{\listoverride\listid-2\listoverridecount1{\lfolevel
+\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls15}{\listoverride\listid480197068\listoverridecount0\ls16}
+{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls17}
+{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls18}
+{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3970 ?;}{\levelnumbers;}\f40\fbias0 \fi-283\li283 }}\ls19}
+{\listoverride\listid193228087\listoverridecount0\ls20}{\listoverride\listid1384720679\listoverridecount0\ls21}}{\info{\title Author: }{\author Alex Wilbur}{\operator EvangelosM}{\creatim\yr1999\mo8\dy5\hr11\min4}{\revtim\yr2001\mo2\dy22\hr12\min53}
+{\version6}{\edmins7}{\nofpages4}{\nofwords641}{\nofchars3655}{\*\company Dell Computer Corporation}{\nofcharsws0}{\vern71}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale100 
+\fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain \qc\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {Author:Symbian Ltd.
+\par Date:January 1999
+\par Version:1.0
+\par }\pard\plain \s1\sb360\sa240\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Boss Puzzle
+\par }\pard\plain \s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x01000000
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Boss puzzle: }{\i quick}{ start
+\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}}\pard\plain \s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls13\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}
+\ls13\adjustright \f1\fs20\lang2057 {context1 }{\cs38\cf11 this is a comment for this context}{
+\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}This is a multi word context2 }{\cs38\cf11 this is another context comment}{
+\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}context3
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}}\pard\plain \s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}}
+\ls14\adjustright \f1\fs20\lang2057 {Quick start inde}{\fs28 x 1}{
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}Quick start index 2
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}this is }{\b\i the}{ final quick start index (3)
+\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {start begin activate run
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing.
+
+\par }{\cs35\scaps\f32\cf13 archive=pictures name=zoombitmaps}{
+\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round.
+\par With the Boss Puzzle application you can:
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls15\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls15\adjustright 
+\f1\fs20\lang2057 {move tiles on this board }{\cs35\scaps\f32\cf13 archive=pictures name=board}{
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}pointing with the pointer
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}move them using the arrow keys
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}deal the game either fully ordered or Boss ordered
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}save games as files
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}save games as embedded objects
+\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Which is a really useful thing to do
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Building the &Boss Puzzle
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}}\pard\plain \s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}}
+\ls14\adjustright \f1\fs20\lang2057 {this is }{\b\i the}{ index 3
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {All instructions in this refer to the full EIKON versions of the Boss Puzzle.  Full instructions for building are contained in the EPOC32 C++ SDK, in the }{\b Practical Guide}{
+.  For a very quick start, try
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 1\hich\f1 \u-4050\'3f\tab}}\pard\plain \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls16\adjustright 
+\f1\fs20\lang2057 {cd \\boss\\group\\
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 2\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls16\adjustright {
+ebld eik7 wins deb
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {and then invoke the WINS emulator.  You should see that the Boss Puzzle is available on the Extras bar.
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Starting the game
+\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {invoking initializing invoke initialize
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {You can start the game by selecting its icon from the Extras bar, or by selecting a file from the Shell, or by selecting or creating an embedded object from a document.
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Resetting the game
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {You can reset the game to fully ordered using }{\cs35\scaps\f32\cf13 archive=pictures name=full-but}{, or to Boss ordered using }{\cs35\scaps\f32\cf13 archive=pictures name=boss-but}
+{.
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Playing the game
+\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {keyboard
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {To play the game, use the pointer to select and move tiles.  Alternatively, use the arrow keys to move tiles in the direction you want to.
+\par In order to show how to use simple menus, menu support for moving is also provided.  But this is not a very convenient way to play the game.
+\par {\pntext\pard\plain\s29 \f14\fs20\lang2057 \loch\af14\dbch\af0\hich\f14 \'3f\tab}}\pard\plain \s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlblt\ilvl0\ls17\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls17\adjustright 
+\f1\fs20\lang2057 {This is a note paragraph.
+\par {\pntext\pard\plain\s28 \f14\fs20\lang2057 \loch\af14\dbch\af0\hich\f14 \'46\tab}}\pard\plain \s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlblt\ilvl0\ls18\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls18\adjustright 
+\f1\fs20\lang2057 {This is a tip paragraph
+\par {\pntext\pard\plain\s30 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'7e\tab}}\pard\plain \s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlblt\ilvl0\ls19\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls19\adjustright 
+\f1\fs20\lang2057 {This is an important paragraph
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Embedding objects
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {You can embed a Boss Puzzle game into other documents.  For instance, from Word, try
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 1\hich\f1 \u-4050\'3f\tab}}\pard\plain \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright 
+\f1\fs20\lang2057 {insert object (}{\b CTRL+SHIFT+O}{)
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 2\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {select 
+}{\b Boss Puzzle}{ as the \ldblquote from program\rdblquote 
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 3\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {select 
+}{\b Ok}{
+\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 4\hich\f1 \u-4050\'3f\tab}}\pard\plain \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright 
+\f1\fs20\lang2057 {This is a list within a list
+\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 5\hich\f1 \u-4050\'3f\tab}}\pard \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {
+this is more of a list within a list
+\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 6\hich\f1 \u-4050\'3f\tab}}\pard \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {
+and yet more
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 7\hich\f1 \u-4050\'3f\tab}}\pard\plain \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright 
+\f1\fs20\lang2057 {make a few moves in the Boss Puzzle game
+\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 8\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {
+exit the embedded Boss Puzzle game
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is a the start of another list
+\par }\pard\plain \s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {List continue level two starting a list
+\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {List continue level 1
+\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 1\hich\f1 \u-4050\'3f\tab}}\pard\plain \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls21\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls21\adjustright 
+\f1\fs20\lang2057 {Level 2 list
+\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 2\hich\f1 \u-4050\'3f\tab}}\pard \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls21\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls21\adjustright {
+and another list entry
+\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {List continue level 1
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The end of the list
+\par The Boss Puzzle is then displayed in Word, using the glass door capability.  The Boss Puzzle supports zooming: try zooming the word document in and out using }{\b CTRL+M}{ and }{\b CTRL+SHIFT+M}{.
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Manual and definition list test topic
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is a manually numbered list the list items must be proceeded with a number followed optionally by a period, which must be followed by a tab.
+\par }\pard\plain \s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 {1,\tab This is list item 1
+\par 5-\tab This is list item 2
+\par 8)\tab This is list item 3
+\par 2.\tab This is list item 4
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is a definition list
+\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Aleppo
+\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {First Epoc Help
+\par }\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {This is a comment in a definition list
+\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is another term
+\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {This is the definition for the term
+\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Aleppo
+\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {The first Epoc Help compiler. This was used as the bases for the CS-help compiler.
+\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Samaria
+\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {Symbian\rquote s HTML authoring tool.
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The end of the definition list
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Manual Formatting: }{\i\fs28 quick}{ start
+\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}}\pard\plain \s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls13\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}
+\ls13\adjustright \f1\fs20\lang2057 {newcontext1 }{\cs38\fs28\cf11 this }{\cs38\cf11 is a comment for this context}{
+\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}new This is a multi word context2 }{\cs38\cf11 this is another }{\cs38\fs28\cf11 context}{\cs38\cf11  comment}{
+\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}new context3
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}}\pard\plain \s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}}
+\ls14\adjustright \f1\fs20\lang2057 {this is & the index 1
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}this is }{\cf6 the \ldblquote index}{\rdblquote  2
+\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}this is }{\b\i the}{ index 3
+\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {start begin }{\cf5 activate}{ run
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing.
+
+\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round.
+\par With the Boss Puzzle application you can:
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls15\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls15\adjustright 
+\f1\fs20\lang2057 {move tiles on this board
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}pointing with }{\fs28 the pointer}{
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}move them using the arrow keys
+\par {\pntext\pard\plain\s15 \f3\fs32\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\fs32 deal the game either fully ordered or Boss ordered
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{save games as files
+\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}save games as embedded objects
+\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Which is a }{\cf4 really}{ useful thing to do
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Allowed entities
+\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {Etities
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\lquote lquote  \rquote rquote 
+\par \ldblquote  ldquote \rdblquote  rdquote
+\par This paragraph contains\line a break in it
+\par This\~sentence\~has\~non\~breaking\~spaces
+\par This\_one\_has\_non\_breaking\_hyphens
+\par \emdash  mdash
+\par \endash  ndash
+\par \tab tab
+\par & ampersand
+\par > gt
+\par < lt
+\par 
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Uses the two defined character styles
+\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {character style
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This topic contains text in the two defined character styles.
+\par These are }{\cs34\b App Text}{ and }{\cs21\b\f2 Key name}{.
+\par 
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/Boss1/Boss1.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x10005000</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\Source\Boss1\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\Source\Boss1\</graphics>
+    <working>\hlpmodel\TestData\Source\Boss1\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>Boss1.rtf</file>
+    </source>
+    <destination>Boss-1.hlp</destination>
+    <customization>\hlpmodel\TestData\Source\Boss1\uk.alc.xml</customization>
+  </files>
+</cshproj>
Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/board.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/boss-but.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit-but.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/full-but.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/zoombitmaps.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/Boss1/uk.alc.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshcust PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHcush.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHcust.xsl" title="CS-Help customisation" type="text/xsl"?>
+<cshcust>
+<bodystyle fontstyle="sansserif" size="10"/>
+<titlestyle fontstyle="sansserif" size="14"/>
+<listbullet1style bulletchar="149"/>
+<listbullet2style bulletchar="45"/>
+<tipeffects leftindent="36"><b>Tip:</b></tipeffects>
+<noteeffects leftindent="36"><b>Note:</b></noteeffects>
+<importanteffects leftindent="60"><b>Important:</b></importanteffects>
+</cshcust>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/Boss2/Boss2.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,141 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f21\fswiss\fcharset0\fprq2 Arial Narrow;}{\f34\froman\fcharset2\fprq2 Webdings;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11
+\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext15 List Bullet;}{\s16\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext16 List Continue;}{\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10
+\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext17 List Number;}{\*\cs18 \additive\super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}
+\f5\fs20\lang2057 \sbasedon0\snext19 List Bullet 2;}{\s20\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext20 Category UID;}{\*\cs21 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar \f5\fs20\cf13\lang2057 
+\sbasedon0\snext22 Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon17\snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext24 
+List Number 2;}{\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar \f5\fs20\cf9\lang2057 \sbasedon26\snext27 
+Definition Definition;}{\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}
+\f5\fs20\lang2057 \sbasedon28\snext29 Note;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf34\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon29\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon24\snext31 List Manual 2;}{\s32\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext32 footer;}{\s33\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext33 Comment;}{\*\cs34 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs35 
+\additive\scaps\f21\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf34\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext36 Context;}{
+\s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext37 Index;}{\*\cs38 \additive\f5\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\info
+{\title Author: }{\author Alex Wilbur}{\operator Alex Wilbur}{\creatim\yr1999\mo8\dy5\hr11\min4}{\revtim\yr2000\mo6\dy27\hr10\min58}{\version2}{\edmins1}{\nofpages4}{\nofwords642}{\nofchars3662}{\*\company Dell Computer Corporation}{\vern57395}}
+\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade \fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere {\footer \pard\plain \qc\sa120\widctlpar \f5\fs20\lang2057 
+{\field{\*\fldinst  PAGE }{\fldrslt {\lang1024 4}}}
+\par }{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5
+\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
+{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s33\sa120\widctlpar \i\f5\fs20\lang2057 Author:Symbian Ltd.
+\par Date:January 1999
+\par Version:1.0
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Boss Puzzle 2
+\par \pard\plain \s20\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 0x01000001
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Boss puzzle: {\i quick} start 2
+\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}\pard\plain \s36\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 context1 {\cs38\cf11 
+this is a comment for this context}
+\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}This is a multi word context2 {\cs38\cf11 this is another context comment}
+\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}context3
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}\pard\plain \s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 This is boss2 index 1
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}This is boss2 index 2
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}This is boss2 index 3
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 start begin activate run
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing.
+\par {\cs35\scaps\f21\cf13 archive=pictures  name=board}
+\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round.
+\par With the Boss Puzzle application you can:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 move tiles on this board {\cs35\scaps\f21\cf13 archive=pictures name=board}
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}pointing with the pointer
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}move them using the arrow keys
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}deal the game either fully ordered or Boss ordered
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}save games as files
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}save games as embedded objects
+\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 Which is a really useful thing to do
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Building the &Boss Puzzle 2
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}\pard\plain \s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 this is {\b\i the} index 3
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 All instructions in this refer to the full EIKON versions of the Boss Puzzle.  Full instructions for building are contained in the EPOC32 C++ SDK, in the {\b Practical Guide}.  For a very quick start, try
+
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 cd \\boss\\group\\
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}ebld eik7 wins deb
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 and then invoke the WINS emulator.  You should see that the Boss Puzzle is available on the Extras bar.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Starting the game 2
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 invoking initializing invoke initialize
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can start the game by selecting its icon from the Extras bar, or by selecting a file from the Shell, or by selecting or creating an embedded object from a document.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Resetting the game 2
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can reset the game to fully ordered using {\cs35\scaps\f21\cf13 archive=pictures name=full-but}, or to Boss ordered using {\cs35\scaps\f21\cf13 archive=pictures name=boss-but}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Playing the game 2
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To play the game, use the pointer to select and move tiles.  Alternatively, use the arrow keys to move tiles in the direction you want to.
+\par In order to show how to use simple menus, menu support for moving is also provided.  But this is not a very convenient way to play the game.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 This is a note paragraph.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 This is a tip paragraph
+\par {\pntext\pard\plain\f34\fs20\lang2057 ~\tab}\pard\plain \s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 This is an important paragraph
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Embedding objects 2
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can embed a Boss Puzzle game into other documents.  For instance, from Word, try
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 insert object ({\b CTRL+SHIFT+O})
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}select {\b Boss Puzzle} as the \ldblquote from program\rdblquote 
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}select {\b Ok}
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}\pard\plain \s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 This is a list within a list
+\par {\pntext\pard\plain\f5\fs20\lang2057 5.\tab}this is more of a list within a list
+\par {\pntext\pard\plain\f5\fs20\lang2057 6.\tab}and yet more
+\par {\pntext\pard\plain\f5\fs20\lang2057 7.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 make a few moves in the Boss Puzzle game
+\par {\pntext\pard\plain\f5\fs20\lang2057 8.\tab}exit the embedded Boss Puzzle game
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This is a the start of another list
+\par \pard\plain \s25\li566\sa120\widctlpar \f5\fs20\lang2057 List continue level two starting a list
+\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 List continue level 1
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Level 2 list
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}and another list entry
+\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 List continue level 1
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The end of the list
+\par The Boss Puzzle is then displayed in Word, using the glass door capability.  The Boss Puzzle supports zooming: try zooming the word document in and out using {\b CTRL+M} and {\b CTRL+SHIFT+M}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Manual and definition list test topic 2
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This is a manually numbered list the list items must be proceeded with a number followed optionally by a period, which must be followed by a tab.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 1,\tab This is list item 1
+\par 5-\tab This is list item 2
+\par 8)\tab This is list item 3
+\par 2.\tab This is list item 4
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This is a definition list
+\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 Aleppo
+\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 First Epoc Help
+\par \pard\plain \s33\sa120\widctlpar \i\f5\fs20\lang2057 This is a comment in a definition list
+\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 This is another term
+\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 This is the definition for the term
+\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 Aleppo
+\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 The first Epoc Help compiler. This was used as the bases for the CS-help compiler.
+\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 Samaria
+\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 Symbian\rquote s HTML authoring tool.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The end of the definition list
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Manual Formatting: {\i\fs28 quick} start 2
+\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}\pard\plain \s36\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 newcontext1 {\cs38\fs28\cf11 this }{\cs38\cf11 
+is a comment for this context}
+\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}new This is a multi word context2 {\cs38\cf11 this is another }{\cs38\fs28\cf11 context}{\cs38\cf11  comment}
+\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}new context3
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}\pard\plain \s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 this is & the index 1
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}this is {\cf6 the \ldblquote index}\rdblquote  2
+\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}this is {\b\i the} index 3
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 start begin {\cf5 activate} run
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing.
+\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round.
+\par With the Boss Puzzle application you can:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 move tiles on this board
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}pointing with {\fs28 the pointer}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}move them using the arrow keys
+\par {\pntext\pard\plain\f1\fs32\lang2057 \'b7\tab}{\fs32 deal the game either fully ordered or Boss ordered
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}save games as files
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}save games as embedded objects
+\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 Which is a {\cf4 really} useful thing to do
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Allowed entities 2
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 Etities
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 \lquote lquote  \rquote rquote 
+\par \ldblquote  ldquote \rdblquote  rdquote
+\par This paragraph contains\line a break in it
+\par This\~sentence\~has\~non\~breaking\~spaces
+\par This\_one\_has\_non\_breaking\_hyphens
+\par \emdash  mdash
+\par \endash  ndash
+\par \tab tab
+\par & ampersand
+\par > gt
+\par < lt
+\par 
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Uses the two defined character styles 2
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 character style
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This topic contains text in the two defined character styles.
+\par These are {\cs34\b App Text} and {\cs21\b\f11 Key name}.
+\par 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/Boss2/Boss2.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x10005001</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\Source\Boss2\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\Source\Boss2\</graphics>
+    <working>\hlpmodel\TestData\Source\Boss2\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>Boss2.rtf</file>
+    </source>
+    <destination>Boss-2.hlp</destination>
+    <customization>\hlpmodel\TestData\Source\Boss2\uk.alc.xml</customization>
+  </files>
+</cshproj>
Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/board.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/boss-but.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit-but.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/full-but.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/Boss2/uk.alc.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshcust PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHcush.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHcust.xsl" title="CS-Help customisation" type="text/xsl"?>
+<cshcust>
+<bodystyle fontstyle="sansserif" size="10"/>
+<titlestyle fontstyle="sansserif" size="14"/>
+<listbullet1style bulletchar="149"/>
+<listbullet2style bulletchar="45"/>
+<tipeffects leftindent="36"><b>Tip:</b></tipeffects>
+<noteeffects leftindent="36"><b>Note:</b></noteeffects>
+<importanteffects leftindent="60"><b>Important:</b></importanteffects>
+</cshcust>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Agen-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,296 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - AGENDA"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy18\hr15\min6}{\revtim\yr2000\mo4\dy25\hr15\min45}{\printim\yr1997\mo6\dy25\hr13\min25}{\version2}{\edmins3}
+{\nofpages11}{\nofwords2968}{\nofchars16921}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template 
+C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3
+\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}
+{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar 
+\i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 18th 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 AGENDA{\revised\revauth1\revdttm1178913770 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913771 0x10006051}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Agenda: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913770 agenda.quick-start}
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax scheduler
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Agenda is the EPOC machine's diary program. If you have EPOC CONNECT the files created in Agenda are compatible with PC agenda applications (##names of applications##), and can be synchronised with any PC that has EPOC CONNECT installed.
+\par Use Agenda to keep track of appointments, events, birthdays, anniversaries and lists of things to do.
+\par The first time Agenda is used, or a new Agenda file is created , the xxx view is displayed. The current position is marked by the "cursor" (bullet).
+\par Agenda has 6 views:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Day view - view entries for one day, hour by hour.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Week view - view entries for one week, day by day.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Busy view - for an overview of free and busy time during a 4 week period.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Year planner - see an overview of entries for the year.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Anniversary view - view annual entries, such as birthdays, anniversaries, public holidays etc.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To-do view - view the lists of things to do.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an entry, move the cursor to the date of the entry and start typing the text, e.g. 'Lunch with John'. A dialog will then appear where you can set the entry details.
+\par To add to-dos or anniversaries, move to the appropriate view first, or use {\cs33\b Create new entry }on the {\cs33\b Entry} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If you start typing an entry before realising you want it to be a different type -
+ complete it and change it using {\cs33\b Change type} on the {\cs33\b Entry} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the EPOC machine has \ldblquote dialling\rdblquote  capabilities, you can automatically "dial" phone numbers stored in entries in an Agenda file.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding appointments (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax midnight set alarm am pm timed entry meeting
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an appointment, e.g. a meeting, in the Day or Week view:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Move the cursor to the date and time and start typing the details, e.g. 'Sales meeting'.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the appointment's time and duration or remove the tick from the {\cs33\b Timed entry }box if it doesn't need a start time.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Press the relevant key to select am or pm.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Alarms/More} to change other settings, e.g. an alarm.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add an appointment in other views using {\cs33\b Create new entry} on the {\cs33\b 
+Entry} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding anniversaries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax set alarm annually anniversary birthdays yearly
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an anniversary, e.g. a birthday, in the Anniversary view:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Move the cursor to the month of the anniversary and start typing the details, e.g. 'Jane's birthday'.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the day of the anniversary, and the entry symbol.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 The entry symbol is a letter that appears on the anniversary date in all views.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Alarms/More} to change other settings, e.g. an alarm. You can also choose to display the anniversary with the Start year (from 30000 BC) and/or Number of years.
+
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add an anniversary in other views using {\cs33\b Anniversary} from the {\cs33\b 
+Create new entry }cascade on the {\cs33\b Entry} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+As a reminder to buy a gift for someone's birthday, add a yearly repeating to-do entry on a date a few days before it.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding To-do entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax tasks set alarm to do todo priority task list tasklist
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an important task that you want to remember as a "to-do" entry in the To-do view:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Start typing the details of the to-do entry, e.g. 'Book tickets'.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the {\cs33\b To-do list} and {\cs33\b Priority} of the entry.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You can use the to-do list preferences to set up a to-do list to sort by priority.
+
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Alarms/More} to change other settings, e.g. to set an alarm.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add a to-do entry in other views using {\cs33\b To-do} from the {\cs33\b 
+Create new entry }cascade on the {\cs33\b Entry} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To keep notes in the to-do list, attach a memo to a to-do entry, and use the memo for the notes.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 To-do lists (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax task list project worklist todo list to do list task list tasklist
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To create a new to-do list, e.g. for a project or hobby, use {\cs33\b Create new to-do list} on the {\cs33\b To-do lists} menu. Agenda orders the to-do lists according to the page number.
+\par Rename or delete a to-do list using {\cs33\b Rename to-do list} or {\cs33\b Delete to-do list} on the {\cs33\b To-do lists} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding events (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax midnight multiple week-long holiday
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 An "event" is an Agenda entry that can span a number of days, but does not have a start time. To add an event, e.g. a business trip, in the Year view:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Move the cursor to the first day of the event and start typing the details, e.g. 'Trip to New York'.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the duration of the event, and the entry symbol.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The entry symbol is a letter that appears on the event days in other views.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add an event in other views using {\cs33\b Event} from the {\cs33\b Create new entry }
+cascade{\cs33\b  }on the {\cs33\b Entry} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting alarms for Agenda entries
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax notify set alarm warning reminder bell chimes beeps notice alert
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Set an alarm for an entry, e.g. as a reminder that a meeting starts in 15 minutes.
+\par To set an alarm while adding the entry, press {\cs33\b Alarms/More} in the New entry dialog.
+\par To change the alarm details for an existing entry, move the cursor to it and use {\cs33\b Set alarm} on the {\cs33\b Entry} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the
+ EPOC Record program is installed on the EPOC machine you can create your own alarm sounds.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+If you set an alarm for an entry which has no text (e.g. if the entry consists of an object without text, perhaps a picture created with the EPOC Sketch program), a standard message is displayed when the alarm rings.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax change type edit entry
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the details of any entry, e.g. the time, move the cursor to the entry and tap again or press Enter.
+\par To change an Agenda entry from one type to another, e.g. from an event to an anniversary, use {\cs33\b Change type} on the {\cs33\b Entry} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Agenda automatically reclaims the space used by entries you delete or change. If you have a very large Agenda file, this may take a few moments when you are changing or deleting entries. To avoid this delay, remove the tick from the {\cs33\b 
+Auto compress on} box in the General preferences dialog. Note that if you do this, the unused space will not be reclaimed, so you should periodically switch auto compression on to pr
+event the Agenda file from becoming too large. To do this, tick the box and close the dialog; the file will then be compressed.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax tidy/archive file
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete an entry, move the cursor to it and use {\cs33\b Delete} on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+For anniversaries and repeating entries, you can delete all occurrences, or only the selected one.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}For event entries, the whole event will be deleted.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete all your out-of-date entries select {\cs33\b Tidy/archive file} from the {\cs33\b More }cascade on the {\cs33\b File} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To mark an entry as completed, but keep it in your Agenda, cross it out instead using 
+{\cs33\b Cross out} on the {\cs33\b Entry} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete all the entries on a to-do list, delete the to-do list itself, using {\cs33\b Delete to-do list} on the {\cs33\b To-do lists} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Finding entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax searching go to jump
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To search the Agenda for a piece of text or for entries with particular settings, e.g. all entries with an alarm, select {\cs33\b Find} on the {\cs33\b Edit} menu.
+\par Press {\cs33\b Options} to select the entry types you want to find.
+\par Press {\cs33\b OK} to start the search.
+\par A list of matching entries is shown. To go to an entry in the list, move the cursor to it and press {\cs33\b Enter}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Use the {\cs33\b Date, Next entry }or{\cs33\b  Previous entry }commands on the {
+\cs33\b Go to }cascade on the {\cs33\b Edit} menu to go to the previous or next entry in the Agenda, or to jump to a specific date.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting objects (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax linking paint attaching edit object sketch embedding memo OLE
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the EPOC Word, Record, Sheet or Sketch programs are included on the EPOC machine, you can add an object to an existing entry. To do this move the cursor onto the entry and select {\cs33\b Edit object}
+ on the {\cs33\b Edit} menu. Then select the object type you want to insert.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 A Word or Record file is inserted as an icon.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the entry already contains an object of the type that you select, it will be opened for you to edit.
+\par To insert a new handwritten entry or sketch, move the cursor to a date and time and tap {\cs33\b Sketch} on the {\cs33\b Toolbar}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To insert the sketch as an icon press {\cs33\b Alarms/More} in the {\cs33\b 
+Create new entry} dialog, go to the {\cs33\b Text} page of the {\cs33\b New entry details} dialog. Then select the Sketch and press {\cs33\b Format}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}If you have made a large picture, it may not be fully visible in some views. (To re-edit such an entry, select {\cs33\b Sketch} from the {\cs33\b Edit object }cascade on the {\cs33\b Edit} menu.)
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Repeating entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax recurring annually yearly by day of week monthly by days monthly by date daily weekly set repeat interval
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can set an entry to repeat daily, weekly, monthly or annually, e.g. a regular meeting.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You cannot set a repeat for an event entry.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Move the cursor to the entry and select {\cs33\b Set repeat} on the {\cs33\b Entry}
+ menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the repeat frequency and other details, e.g. to set a repeat:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 once every three days, select {\cs33\b Daily} and set the {\cs33\b Interval}
+ to 3.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same days every week, e.g. for Monday and Friday every week, select {\cs33\b Weekly}, press {\cs33\b More} and tick the days you want.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same dates every month, e.g. for the 7th and the 15th of each month, select {\cs33\b Monthly by date}, and press {\cs33\b More}
+. For each day in the month that you want a repeat, select the date and press {\cs33\b Set day}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same day in particular weeks per month, e.g. the last Friday of each month, select {\cs33\b Monthly by days}, then press {\cs33\b More}
+. For each day/week combination in the month that you want a repeat, select the day/week and press {\cs33\b Set day}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same day/week/month each year, e.g. the 3rd Tuesday in February each year, select {\cs33\b Yearly by day of week}, press {\cs33\b More} and select the day/week combination.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Crossing out entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax cancelled canceled completed cross out
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To "cross out" an entry that has been completed or cancelled, move the cursor to it and use {\cs33\b Cross out} on the {\cs33\b Entry} menu.
+\par The entry text will appear crossed out on the screen, and any alarm associated with it will be cancelled.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If you want to remove the entry permanently, select {\cs33\b Delete} from the {
+\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cutting, copying & pasting (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax amend alarm cut paste move
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the {\cs33\b Cut}, {\cs33\b Copy} and {\cs33\b Paste} commands on the {\cs33\b Edit} menu to copy and move entries and all their details.
+\par Alarms relative to the entry are amended accordingly, e.g. if you move a 10 o'clock entry with an alarm set for 15 minutes warning, to 12 o'clock, the alarm is also moved (in this case, to 11:45).
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The position of to-dos on a to-do list is determined by their sort order. If you want to be able to be able to change their positions by cutting and pasting them, set the sort order to {\cs33\b Manual} in the to-do list preferences.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Tentative entries (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax gray greying out graying out pencil in pencilled in make tentative
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To mark an entry that has not been confirmed (one that is "pencilled in"), e.g. to reserve the time for an unconfirmed meeting, move the cursor to it and use {\cs33\b Make tentative} on the {\cs33\b Entry}
+ menu.
+\par The entry text will be displayed in grey.
+\par To confirm the entry, select the {\cs33\b Make tentative} command again.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax timeslots time slots customise customize view preferences standard entry type allowed types manual entry preferences general preferences wrapping to-do preferences
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the appearance of Agenda views (except the To-do view), use {\cs33\b View preferences} on the {\cs33\b Tools} menu:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the {\cs33\b Standard entry type}
+ line to define the type of entry that will be added when you just start typing in a time slot in the associated view. E.g., you may want to add an event entry when you start typing in the Week view.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To display only certain entry types in this view, press {\cs33\b Allowed types}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the way a to-do list is displayed, select {\cs33\b To-do list preferences} on the {\cs33\b To-do lists} menu:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b Page number}
+ line determines the order in which to-do lists are shown in the To-do view.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set the {\cs33\b Sort order} line to prioritise entries according to date or priority, or set it to {\cs33\b Manual} if you want to be able to arrange the to-do entries in the list yourself.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick the boxes according to how you want to-do entries to be displayed in the To-do view and other views.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the way each type of entry is displayed, and the standard settings for new entries, use the {\cs33\b Entry preferences} cascade on the {\cs33\b Tools} menu.
+\par To prevent long entries taking up several lines on the screen, switch text wrapping off using {\cs33\b Wrap to screen} on the {\cs33\b View} menu.
+\par To change the view displayed when Agenda is opened, use {\cs33\b General preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Entry symbols (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax entry code categories
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 An entry symbol (a letter, number or other character) can be used to identify entries of a particular type, e.g. an "A" can be used to represent anniversaries. You can:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Add your own symbols to entries, to be able to identify particular projects, hobbies and so on.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set preferences to display only one entry symbol in the Year planner.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Print only one entry symbol.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the standard symbols used for day entries, events, to-dos and anniversaries, use {\cs33\b Entry preferences} on the {\cs33\b Tools} menu.
+\par To change the symbol for an individual entry, press {\cs33\b Alarms/More} in the create or edit dialog and go to the {\cs33\b Details} page. Then type in any letter, number or character as the entry symbol.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - General (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl shift fn spacebar tab keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are:
+\par Shift+Ctrl+D, W, A, Y or T - go to the Day, Week or Anniversary view, the Year planner or the To-do lists.
+\par Spacebar - move between the current day (today) and the previously selected day.
+\par Tap on the "dog-ears" in the bottom corners of the Agenda pages to move through the days in the Day view, the weeks in the Week view etc.
+\par Arrow keys - move the cursor around the times, days, weeks etc.
+\par Tab - display the built-in calendar in the Week, Day or Anniversary view.
+\par Shift+Enter - while an entry is selected to add a new entry.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Day view (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl fn keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Ctrl+up and down arrow keys - go to the previous or next time slot.
+\par Ctrl+left and right arrow keys - go to the same time slot in the previous or next day.
+\par Ctrl+Fn+left and right arrow keys - go to the same day in the previous or next week.
+\par Ctrl+Fn+up and down arrow keys - go to the same day in the previous or next month.
+\par Fn+up and down arrow keys - page up or down.
+\par Fn+left and right arrow keys - go to the first or last time slot.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Week view (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl fn keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Ctrl+up and down arrow keys - go to the previous or next day.
+\par Ctrl+left and right arrow keys - go to the same day in the previous or next week.
+\par Ctrl+Fn+left and right arrow keys - go to the same day in the previous or next month.
+\par Ctrl+Fn+up and down arrow keys - go to the same day in the previous or next year.
+\par Fn+up and down arrow keys - page up or down.
+\par Fn+left and right arrow keys - go to the first or last day of the week.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Busy view (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl shift fn spacebar tab keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tab - show a list of entries for the selected time slot.
+\par Ctrl+left and right arrow keys - go to the same day in the previous or next week, leaving the cursor in the same place on the screen.
+\par Shift+left and right arrow keys - go to the same day in the previous or next week.
+\par Ctrl+Fn+left and right arrow keys - go to the same day in the previous or next 4 week period, leaving the cursor in the same place on the screen.
+\par Fn+up and down arrow keys - go to the first or last time slot of the day.
+\par Fn+left and right arrow keys - go to the first or last day of the 4 week period.
+\par Tap on the date title to display the built-in calendar.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Year planner (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl shift fn spacebar tab keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tab - show a list of entries for the selected day.
+\par Ctrl+left and right arrow keys - go to the same day in the previous or next week.
+\par Ctrl+up and down arrow keys - go to the same day in the previous or next month.
+\par Shift+up and down arrow keys - move the planner up and down 1 month, leaving the cursor in the same place on the screen.
+\par Fn+up and down arrow keys - move up and down 1 year, leaving the cursor in the same place on the screen.
+\par Tap on the date title to display the built-in calendar.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Anniversary view (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax home end ctrl tab keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Ctrl+left and right arrow keys - go to the previous or next 2, 4 or 6 months.
+\par Tap on the date title or press Tab to display the built-in calendar.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - To-do view (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax home endfn tab keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Fn+left and right arrow keys - go to the first or last to-do list.
+\par Tap on the title of a to-do list or press Tab to see a menu of all the to-do lists.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Combining Agenda files
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax merge in
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add the entries from one Agenda file to another, e.g. to combine personal and business agendas, open the Agenda file that you wish to add the entries to and merge in the file using {\cs33\b Merge in}
+ from the {\cs33\b More }cascade on the {\cs33\b File} menu.
+\par The entries you have added are not removed from their original file. You can delete the file whose entries you have merged in, to save disk space.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Printing Agenda entries
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax page setup print preview
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+You can print Agenda entries to a serial, parallel or Infrared printer. If you have a fax program installed on the EPOC machine, you can also print Agenda entries to fax. Before printing, set up the page (paper size, margins, headers & footers, etc.) usin
+g {\cs33\b Page setup} from the {\cs33\b Printing} cascade on the {\cs33\b File} menu.
+\par When you select the {\cs33\b Print} or {\cs33\b Print preview} command, a dialog is displayed in which you can choose:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The date range of the entries to print and the number of copies.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 By pressing {\cs33\b Entry types}, you can also choose:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To print all repeat entries or only the next one.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To print crossed out entries.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To print entries with a particular entry symbol.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Synchronising Agenda with a PC
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Schedule Lotus Organizer synchonise synchronizing Agenda synchronisation private on synchronised agendas diary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+If you have the EPOC CONNECT program with Agenda Synchronisation you can synchronise the EPOC machine Agenda with the agenda on a PC. You can specify for each entry whether you want to transfer it to the PC agen
+da, and if so, whether the entry is marked as private on the PC.
+\par {\cs33\b To change the synchronisation settings:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 for a single entry, move the cursor to the entry and select {\cs33\b 
+Agenda synchronisation} on the {\cs33\b Entry} menu. Tick the {\cs33\b Synchronise with other agendas} box if you want it to be transferred to the PC, and tick the {\cs33\b Private on synchronised agendas} box to mark the entry as confidential on the PC.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for a to-do list, select {\cs33\b Agenda synchronisation} on the {\cs33\b To-do lists} menu. Remove the tick from the {\cs33\b Synchronise with other agendas}
+ box if you don't want any of the to-dos in the list to be transferred to the PC, or tick the {\cs33\b Private on synchronised agendas} to mark all the to-dos in the list as private on the PC.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for all new entries of one type, select {\cs33\b Entry preferences} on the {\cs33\b Tools} menu and then select an entry type. Tick the {\cs33\b Synchronise with other agendas}
+ box if you want this type of entry to be transferred to the PC, and tick the {\cs33\b Private on synchronised agendas} box to mark the entries as confidential on the PC.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The settings of existing entries of this type will not be changed.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Refer to the EPOC CONNECT Documentation for details of how to synchronise diaries.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting text (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax type face typestyle type style crossout emphasis emphases bold italics underlined font
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the formatting of the text while adding or editing an entry, press {\cs33\b Alarms/More} in the create new entry or edit entry dialog.
+\par Go to the {\cs33\b Text} page, highlight the text you want to format and tap on the buttons beneath the text box. Here you can change text to Bold, Italic or Underline, or change the {\cs33\b Font}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+You can make text bold, italic or underlined using the shortcut keypresses as you type.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting objects (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax resize stretch rescale trim cropping resizing
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To format an object (change the size, scaling and appearance of pictures, graphs etc.), press {\cs33\b Alarms/More} in the add or edit entry dialog.
+\par \pard \sa120\widctlpar Go to the {\cs33\b Text} page and select the object you want to format. Then tap on {\cs33\b Format}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Free & busy time (Agenda)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary busy view month view time planner free time
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the Busy view to see an overview of free and busy time for a 4 week period.
+\par Only timed entries are shown.
+\par You can add, edit, delete, cut, copy or paste entries just as in any other view.
+\par Use {\cs33\b View preferences} on the {\cs33\b Tools} menu to change the start and end times of the {\cs33\b Working day} and {\cs33\b Normal day}. Zooming in the Busy view switches between the Working day, Normal day and the whole day.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The times which you have specified as the start and end of your Working
+ day are shown as dotted lines.
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Bomb-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,55 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - <app name>"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy11\hr11\min7}{\revtim\yr2000\mo4\dy25\hr15\min46}{\version2}{\edmins1}{\nofpages2}{\nofwords353}{\nofchars2016}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 BOMBS{\revised\revauth1\revdttm1178913774 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913774 0x10006670}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Bombs: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913774 bombs.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 minesweeper mines mine-sweeper games skill level
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Bombs is a game of speed and logical thinking. The object of the game is to discover and mark the position of "bombs" concealed in a grid of s
+quares as quickly as possible. Do this by "stepping" on the squares (by tapping with the pen or moving to them and pressing the Spacebar), one at a time.
+\par If a square conceals a bomb, you lose and the game is over.
+\par If there isn't a bomb under the square, the number of bombs in the 8 surrounding squares is shown.
+\par If you uncover a blank square there are no bombs in the surrounding 8 squares, and so all of the adjacent squares are revealed.
+\par If you suspect that a square conceals a bomb you can mark it with a flag, by moving to it and pressing Enter.
+\par To set the skill level (easy, medium or hard), use the {\cs33\b Skill level} button on the {\cs33\b Toolbar}. The harder the skill level, the more bombs are hidden in the grid.
+\par The score is the time it takes to mark all the bombs with a flag. The time starts when you "step" on the first square. The top two scores for each level, together with the name of the player, are kept in the {\cs33\b Best times} list.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Bombs)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 minesweeper games flag keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are:
+\par Highlight a square by tapping on it or by moving to it with the arrow keys.
+\par To "step" on the highlighted square, tap on it, tap on the {\cs33\b Bombs} counter or press the Spacebar.
+\par To mark a square with a flag, hold down the shift key and tap on the square, tap on the {\cs33\b Flags} counter or highlight the square and press Enter. Remove a flag in the same way.
+\par When you think that all the bombs surrounding a numbered square have been marked with a flag, tap on the square or press the Spacebar to uncover all the surrounding squares.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Preferences (Bombs)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 minesweeper games align play area auto complete double tap to expose difficulty skill level
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap on {\cs33\b Skill level} to select the degree of difficulty and grid size. For the 'Custom' level you can specify how many bombs are hidden in the grid.
+\par To change the position of the grid on the screen use {\cs33\b Align play area} on the {\cs33\b View} menu.
+\par Set the following preferences from the {\cs33\b Tools} menu:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Remove the tick from {\cs33\b Auto complete}
+, if you want to have to mark all bombs with a flag, before the game is complete.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Remove the tick from {\cs33\b Double tap to expose}, to use a single tap to "step" on a square.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/CONT-HLP.RTF	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,164 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\fi-357\li357\sa120\sl-184\slmult0\widctlpar \f5\fs20\lang2057 \sbasedon0\snext38 bullet;}{\s39\fi-300\li420\ri140\sb100\sl-210\slmult0\widctlpar\tx140\tx420 \f25\fs19 \snext39 *Cbx;}{\s40\fi-851\li851\sa60\widctlpar\tx284\tx851 \f5\fs20\lang2057 
+\sbasedon0\snext40 Icon hanging 2cm;}{\s41\fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext41 Number;}{\s42\qc\sb80\sa120\sl184\slmult0\widctlpar \f5\fs20\lang2057 \sbasedon0\snext42 picture;}{\s43\sb360\sa240\keepn\widctlpar 
+\b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext43 Category UID;}{\s44\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext44 Context;}{
+\s45\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext45 Index;}{\*\cs46 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}
+{\info{\title "PROTEA HELP FILE - DATA"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo3\dy21\hr18\min49}{\revtim\yr2000\mo4\dy25\hr16\min21}{\printim\yr1997\mo4\dy28\hr14\min21}{\version2}{\edmins1}{\nofpages6}{\nofwords1413}{\nofchars8056}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: February 18{\super th} 1999
+\par Version: ER5 release (generic)
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Contacts{\revised\revauth1\revdttm1178913812 
+\par }\pard\plain \s43\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913812 0x10004df4}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Contacts: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913813 contacts.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 address book telephone numbers
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Contacts is the EPOC machine's name and address book. The contact list on your EPOC machine can be synchronised with a PC scheduler on any PC that has EPOC Connect.
+\par When the Contacts program is first used you'll see an empty contact list on the left of the screen and an empty contact \ldblquote card\rdblquote  on the right.
+\par To add new entries straight away: tap {\cs33\b New contact} on the {\cs33\b Toolbar}. Type in the first entry, press {\cs33\b Save} to add it, then add further entries in the same way.
+\par To sort contacts in a different way, tap the {\cs33\b Sort} button on the {\cs33\b Toolbar}.
+\par To move between the contacts list and the contact card, use the left and right arrow keys.
+\par \pard\plain \s16\sa120\widctlpar\tx284 \f5\fs20\lang2057 To move between contacts use the up and down arrow keys to move up and down the list. Use the up and down arrow keys in the contact card to scroll the contact details.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels of all new contact cards using {\cs33\b Setup labels}
+ on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding contacts (Contacts)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 add entry new entry new contact add contact
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap {\cs33\b New contact} on the {\cs33\b Toolbar}.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Type in the information next to the appropriate labels.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Tap on the line you want to type on or use the up and down arrow keys to move between the lines.
+\par 4.\tab Move to the other pages of the dialog to enter the appropriate details there.
+\par 5.\tab When the entry is complete, press {\cs33\b Save}.
+\par 6.\tab Add the next entry in the same way.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels in the contact card using {\cs33\b Setup labels} on the {
+\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Changing contacts (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 edit contact
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change a contact, e.g. to update someone's address, find and select it in the contact list and then press {\cs33\b Edit contact} on the {\cs33\b Toolbar}.
+\par Tap on the line for the information to be changed, or use the up and down arrow keys to move to it and edit the text as required.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To add new labels to the contact, tap the {\cs33\b New item} button.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels in the contact card using {\cs33\b Setup labels} on the {
+\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Deleting contacts (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 undo delete contact remove contact erase contact
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To delete a single contact, find it in the list view and use {\cs33\b Delete contact} on the {\cs33\b File} menu.
+\par If a contact is accidentally deleted, use {\cs33\b Undo delete} on the {\cs33\b Edit} menu to get it back again.
+\par To delete all contacts, use {\cs33\b More|Delete all contacts} on the {\cs33\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing the labels (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 field order Setup labels
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the labels or their order in the contact card use {\cs33\b Setup labels} on the {\cs33\b Tools} menu.
+\par Use the buttons on the dialog to move labels around, to add new labels or to delete unwanted labels or to rename them.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The changes you make here will only affect new contacts and not existing ones.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Finding contacts (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 wild cards strings searching wildcards search esc unknown
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To search for contacts in type a "search clue" in the '{\cs33\b Find:}' box and press Enter.
+\par All matching contacts are shown.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Only the \lquote First name\rquote , \lquote Last name\rquote  and \lquote Company
+\rquote  labels are searched. To search all labels, use the {\cs33\b Find} command on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If you want to search for a person\rquote s full name (e.g. \lquote Thomas Daniels
+\rquote ), use the \lquote {\cs33\b Find:}\rquote  box as this will search the \lquote First name\rquote  and \lquote Last name\rquote  labels together.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To remove the search clue:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press Esc to go to the {\cs33\b Find:} box, then ty
+pe a new clue, or press Del.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To find entries using any of the last 5 search clues you typed in:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on the menu button, then tap on the clue you want to use, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Tab, use the up and down arrow keys to select the clue and press Enter.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b Search clues}
+\par This is a p
+iece of text contained within the entry; it might be a person's name, e.g. 'Patterson-Reid', or part of the other text in the contact details, e.g. 'Bream Road'. Contacts looks for an exact match for the text entered as a search clue, disregarding differe
+nces in case. So if the search clue 'tony' is entered, Contacts will find: Tony, tony, TONY, Antony etc. but will not find: Paignton Yachtclub
+\par {\cs33\b Wildcards}
+\par You can use wildcards in the {\cs33\b Find in all text} dialog. Type a ? for a single unknown letter or a * for any number of unknown letters (known as "wildcards").
+\par If 'sm?th' is entered, Contacts will find: Smethwick, Smith, Smyth etc.
+\par If 'sm*th' is entered, Contacts will find: Smiley-Thomas, Smethwick etc.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Labels (Contacts)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 first name surname company phone address fields
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Names, addresses, and other contact details are identified by \ldblquote labels\rdblquote  which appear next to boxes in the New contact dialog. 
+\par Each contact can have a different set of labels.
+\par To add new labels, e.g. to add further phone numbers, tap the {\cs33\b New item} button on the {\cs33\b Add contact} or {\cs33\b Edit contact} dialog. Then select the type of label you want to add.
+\par If you add a label to a particular contact, it does not mean that the label will be available when adding new contacts.
+\par You can have more than one label of the same type in the contact list although this may cause synchronisation problems with a PC based contacts list.
+\par Unwanted duplicate labels are not displayed if they contain no information..
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels and their order in the contact card using {\cs33\b 
+Setup labels} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Adding labels (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 add fields change fields change labels add labels
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To add new labels tap the {\cs33\b New item} button on the {\cs33\b Add contact} or {\cs33\b Edit contact} dialog.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+You can only add a label to a dialog page if that label type doesn't already appear on a different dialog page.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Add any further labels, as required.
+\par If you add a label to a particular contact, it does not mean that the label will be available when adding new contacts.
+\par You can have more than one label of the same type in the contact list although this may cause synchronisation problems with a PC based contacts list.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Deleting labels (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 delete labels change labels change fields delete fields
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 You can delete a label for all new contacts using {\cs33\b Setup labels} on the {\cs33\b Tools} menu.
+\par You can't delete a label for an existing contact, but you can hide a label that\rquote s no longer required by deleting the information contained in it in the {\cs33\b Edit contact} dialog.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Sorting contacts (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 sort contacts alphabetical order reorder rearrange
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Contacts are listed alphabetically as they are added. To change the sort order, tap the {\cs33\b Sort} button on the {\cs33\b Toolbar} and select the required sort order.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Keypresses (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 esc ctrl tab keyboard
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The default keypresses are:
+\par Use the left and right arrow keys to move between the contact card and the contact list.
+\par Use the up and down arrow keys to move up and down in the contact card or contact list.
+\par Press Esc twice to clear the {\cs33\b Find:} line.
+\par Hold the Shift key down and use the left and right arrow keys to select text in a contact card.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Contact store
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 move contacts file compression file size
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The file containing the contacts list (the \ldblquote contacts store\rdblquote ) is normally stored on the C: disk. You can move the file to the D: disk using the {\b Preferences}
+ command on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 It is not possible to have two contacts lists simultaneously
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To see the number of contacts in the contacts store and its size in K, use the {\cs33\b Contacts store info} command on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The contact store is automatically compressed every time Contacts is opened to reclaim any space that may become free when contacts are deleted. If you rarely close Contacts, you can manually compress the contact store using the {\cs33\b Compress}
+ button on the Contacts store info dialog.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Printing contacts
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 page setup print setup
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Contacts can be printed to a serial, parallel or Infrared printer. Before printing, set up the page (paper size, margins, headers & footers, etc.) using {\cs33\b Page setup }from the {
+\cs33\b Printing }cascade on the {\cs33\b File} menu.
+\par Use {\cs33\b Page setup }from the {\cs33\b Printing }cascade on the {\cs33\b File}
+ menu to specify whether you want to print 'All contacts in view' (i.e. all the contacts that result from a search, or the entire contact list if you haven't done a search), or only the current one, and to indicate the number of copies required.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Display preferences (Contacts)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 view preferences
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the way Contacts looks use {\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par To make more space in the Card view, change the width of the card or hide the labels.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Use the {\cs33\b Flip screen layout} command on the {\cs33\b View}
+ menu to swap the position of the contact card and contact list.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Dialling from Contacts
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 telephoning DTMF dialing
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Phone numbers entered in Contacts can be \ldblquote dialled\rdblquote  automatically, by tapping the {\cs33\b Dial} button on the {\cs33\b Toolbar}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+To be able to dial a phone number, it must be in a phone number label and the label may not contain any text.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Importing into Contacts
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 import contacts import vCard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To import a vCard file into the contact list use the {\b More|Import contact} command on the {\cs33\b File}
+ menu and select the file to be imported. All labels from the imported vCard file will appear in the resulting contact entry.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exporting from Contacts
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 export contacts export vCard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To export a contact as a vCard file use the {\b More|Export contact} command on the {\cs33\b File} menu and select the location for the exported file.
+\par To export a number of contacts into the same vCard file, display the set of contacts you want to export (by searching for a piece of text contained in all of them) before using the {\b More|Export contact} command.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exchanging contacts using infrared
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 export contacts export vCard import contacts import vCard infrared palm pilot irobex
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can transfer a contact to another EPOC machine or to another device that supports IrObex and the vCard format.
+\par Select the contact to be transferred and use the {\cs33\b Infrared} commands on the {\cs33\b Tools} menu to transfer the contact.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Synchronising contacts with a PC
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 synchronize synchronizing contacts synchronisation
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have EPOC Connect version 2.1 or higher, you can synchronise the contacts on your EPOC machine with a contacts database on a PC.
+\par Refer to EPOC Connect documentation for details of how to synchronise contacts.
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Calc-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,295 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - <app name>"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy23\hr10\min3}{\revtim\yr2000\mo4\dy25\hr16\min12}{\version2}{\edmins10}{\nofpages10}{\nofwords2704}
+{\nofchars15413}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template 
+C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3
+\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}
+{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar 
+\i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Calc{\revised\revauth1\revdttm1178913775 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913804 0x100056B3}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Calc: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913804 calc.quick-start}
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 calculator adding machine
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Calc is the EPOC machine\rquote s calculator program. It has two views: a desktop calculator, Desk, and a scientific calculator, Sci.
+\par The first time Calc is used the xxx view opens. To switch between the views:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap {\cs33\b Desk} or {\cs33\b Sci} on the {\cs33\b Toolbar}, or use {
+\cs33\b Desk} or {\cs33\b Scientific} from the {\cs33\b Switch view} cascade on the {\cs33\b View} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The calculators are separate, so calculations carried out in one view do not appear in the other.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To perform a calculation:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Press the number and operator buttons to enter the calculation. Tap the = button or press Enter to get the result.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Desk view, use the up and down keys to browse the "till roll" to view previous calculations.
+\par In the Scientific view, there are two types of function:
+\par Prefix functions: these include all functions using sin, cos or tan, roots, e{\super x}, 10{\super x}, ln and log. For these, press the function button BEFORE entering the value to which the function refers.
+\par Postfix functions: these include reciprocals, squares, cubes and x{\super y}. For these, press the function button AFTER entering the value to which the function refers.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Calculations in Desk view (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR clear operators till roll flip screen layout esc
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Desk view is a desktop-style calculator with a single memory. Use it for ordinary calculations, and those involving percentages.
+\par To perform a calculation in Desk:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter the calculation, then tap =.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the +, -, \'d7 and \'f7 operators.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+There is no "operator precedence" in Desk view. Calculations are solved as you enter them. So, 10 + 5 \'d7 3 = 45 (not 25).
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To clear the display and end the current calculation, tap {\cs33\b AC} or press Esc.
+\par To remove a number from the display without losing the rest of the current calculation: press C.
+\par To delete the furthest right digit on the calculation line, press Del.
+\par To change the sign of a number: tap the +/- button.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tap {\cs33\b Shortcuts} on the {\cs33\b Toolbar}
+ to display the keyboard equivalents of on-screen buttons.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b The "till roll":
+\par }Desk prints results on a "till roll", displayed to one side of the keypad.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Use the scroll bar, the up and down arrow keys or the arrow keys combined with the Fn key to browse the till roll.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear the till roll use Clear till roll on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap Flip layout on the {\cs33\b Toolbar}, or use {\cs33\b Flip screen layout} on the {\cs33\b View} menu, to swap the till roll to the other side of the screen.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+'E' appears in the calculator display when there has been an error entering the calculation.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Memory in desk view (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR memories memory save in mr recall add to subtract from Min MR+ M-
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Desk view has a single memory. If you need more, use the Scientific view; which has 26.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To store a number, tap {\cs33\b Min} or select {\cs33\b Save in} from the {
+\cs33\b Memory }cascade on the {\cs33\b Tools} menu while the value is on the calculation line. An '{\cs33\b M}' will be displayed.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To retrieve a number, tap {\cs33\b MR} or select {\cs33\b Recall} from the {\cs33\b Memory} cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To add the current number to the stored number, tap {\cs33\b M+} or choose {\cs33\b Add to} from the {\cs33\b Memory }cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To subtract the current number from the stored number, tap {\cs33\b M-} or choose {\cs33\b Subtract} from from the {\cs33\b Memory} cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear the memory, select {\cs33\b Clear} from the {\cs33\b Memory} cascade on the {\cs33\b Tools} menu, or tap {\cs33\b Min} while 0 is on the calculation line.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Memories in Sci view (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR storing recall remember assign to show all clear all memory Mem
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The 26 memories in Scientific view are named A through to Z. You can assign a number to each of these names, and then incorporate the names into calculations.
+\par \pard \fi-357\li357\sa120\widctlpar To assign a number to a memory:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Enter the number. If the number you want to store is currently displayed as a result, go on to the next step.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b ->} button, or select {\cs33\b Assign to} from the {\cs33\b Memories }cascade from the {\cs33\b Tools} menu and type the memory letter (upper case).
+\par \pard\plain \s17\li284\sa120\widctlpar \f5\fs20\lang2057 Alternatively, tap {\cs33\b Mem}, choose the memory you want to use and press {\cs33\b Assign to}.
+\par Press -> again to assign the same number to more than one memory. When you have finished specifying the memories you want the number to be stored in, tap {\cs33\b =}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+If you try to assign a calculation to a memory before pressing Enter to get the result, the scientific calculator will store the RESULT of that expression.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To display a list of memories, tap {\cs33\b Mem}, or use {\cs33\b Show all} from the {\cs33\b Memories} cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To use a stored number in a calculation, type the capital letter corresponding to the memory (this will normally require you to hold down Shift whilst pressing the appropriate key). Alternatively, tap {
+\cs33\b Mem} to display the list of memories, highlight the memory you want, and tap {\cs33\b Select}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear a memory, assign it a value of zero, e.g. 0\endash >A.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear all memories, select {\cs33\b Clear all} from the {\cs33\b Memories} cascade on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Operator precedence (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR priority parenthesis parentheses
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Operator precedence is the order in which calculators solve expressions. This order affects the result of calculations. The two views have different rules for precedence:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+There is no operator precedence in the Desk view; calculations are solved as they are entered. So, 10 + 5 \'d7 3 = 45 (not 25).
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 The Scientific view solves expressions in the following order:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Information in brackets.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Functions which come after the value they refer to, e.g. 'x!'. These are called "postfix" functions.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Powers (e.g. squares and cubes).
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}Implicit multiplication before a memory value, e.g. 30A.
+\par {\pntext\pard\plain\f5\fs20\lang2057 5.\tab}Functions which come before the value they refer to, e.g. 'sin'. These are called "prefix" functions.
+\par {\pntext\pard\plain\f5\fs20\lang2057 6.\tab}Implicit multiplication before prefix functions, such as 5sin, or before brackets, as in 3(10+5).
+\par {\pntext\pard\plain\f5\fs20\lang2057 7.\tab}Multiplication and division equal, solved left to right.
+\par {\pntext\pard\plain\f5\fs20\lang2057 8.\tab}Addition and subtraction equal, solved left to right.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Percentage calculations (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR percentages %age
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the % button in the Desk view to calculate percentages.
+\par E.g., to calculate 30% of 80:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter 80 \'d7 30, then tap %.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The % button can be used in a number of other ways:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To increase 80 by 30%, enter 80 + 30, then tap %.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To decrease 80 by 30%, enter 80 - 30, tap %.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To calculate what % 80 is of 400, enter 80 \'f7 400, then tap %.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To find the number that 80 is 25% of, enter 80 \'f7 25, then tap %.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap {\cs33\b Shortcuts} on the {\cs33\b Toolbar}
+ to see a list of shortcut keypresses.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the up and down arrow keys to scroll the till roll in the Desk view or to move through the last 10 calculations in the Scientific view.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the M key to change the sign of a number.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Scientific view (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR esc
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Scientific view is a powerful scientific calculator with 26 memories for storing values. Use this view for calculations involving trigonometry, logarithms etc.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To perform a calculation, enter the expression and tap = or press Enter to display the result.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Scientific view, there are two types of function:
+\par Prefix functions: these include all functions using sin, cos or tan, roots, e{\super x}, 10{\super x}, ln and log. For these, press the function button BEFORE entering the value to which the function refers.
+\par Postfix functions: these include reciprocals, squares, cubes and x{\super y}. For these, press the function button AFTER entering the value to which the function refers.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To clear the calculator display, tap {\cs33\b AC} or press Esc.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To remove the item to the left of the cursor, press Del.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tap {\cs33\b Shortcuts} on the {\cs33\b Toolbar} to display th
+e keyboard equivalents of on-screen buttons.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Scientific buttons (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR keys
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The scientific keypad buttons perform the following actions:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b inv}
+ inverts the next scientific operation, so a square becomes a square root etc.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ( )} brackets for separating and assigning precedence to parts of expressions.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Ans} inserts the last answer at the cursor.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b hyp} sets the hyperbolic function for sin, cosine and tangent.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b sin}, {\cs33\b cos}, {\cs33\b tan} calculate the sine, cosine or tangent of a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b x!} calculates the factorial of a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=squareroot} calculates the square root of a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super 3} calculates the cube root of a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super X} calculates the xth root of a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ex} calculates e raised to the power of a given number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b 10x} calculates 10 raised to the power of a given number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ->} assigns a value to memory.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Mem} displays all memories.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ln} calculates the natural log (base e) of a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b log} calculates the log (base 10) or a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=pisymbol} inserts the pi symbol at the cursor.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b exp} inserts an exponent.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Previous calculations (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR answers results incorporate edit previous edit next
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Desk view previous calculations are shown on the till roll. Look over these using the scroll bar or arrow keys.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To clear the till roll, select {\cs33\b Clear till roll} on the {\cs33\b 
+Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Scientific view:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the up and down arrow keys, or {\cs33\b Edit previous} and {\cs33\b 
+Edit next} on the {\cs33\b Edit} menu, to move backwards and forwards through the last 10 calculations. To repeat any of these calculations press = while it is on the calculation line.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+When re-using expressions containing 'Ans', the value inserted for 'Ans' will be the most recent answer calculated. This means using an old expression again may not give the original result.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Re-using results & calculations (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR incorporate edit previous edit next
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To edit and re-use previous calculations in the Scientific view, use the up and down keys, or {\cs33\b Edit previous} and {\cs33\b Edit next} on the {\cs33\b Edit}
+ menu, to move backwards and forwards through the list of previous expressions. These are displayed one by one on the calculation line. When the required calculation is displayed, remove or change any part of it and proceed as normal.
+\par To start a new expression with the answer to the last calculation, enter the rest of the calculation as though the answer was already written at the start. The calculator prefixes the expression with 'Ans'.
+\par To insert the last answer anywhere in an expression, with the cursor at the appropriate point, tap {\cs33\b Ans}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Trigonometric functions (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR arctangent arccosine trigs asine acosine atangent arcsine
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The trigonometric functions in the Scientific view include:
+\par \tab Sin \tab aSin
+\par \tab Cos\tab aCos
+\par \tab Tan\tab aTan
+\par To calculate the trigometric sine, cosine or tangent of a number, tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}, enter the value and tap {\cs33\b =}.
+\par To calculate the inverse trigonometric sine (arcSine), arcCosine or arcTangent of a value, tap {\cs33\b inv} once to depress it. Tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}, enter the value and tap {\cs33\b =}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Results of trigonometric calculations vary according to the angle format selected. To choose between degrees, radians and gradients, use {\cs33\b Formats} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Hyperbolic functions
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR hyps arctanh arccosh arcsinh
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The hyperbolic functions in the Scientific view include:
+\par \tab Sinh\tab aSinh
+\par \tab Cosh\tab aCosh
+\par \tab Tanh\tab aTanh
+\par To calculate the hyperbolic sine, cosine or tangent of a value, tap {\cs33\b hyp} once to depress it. Tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}, enter the value and tap {\cs33\b =}.
+\par To calculate the inverse hyperbolic sine (hyperbolic arcSine), arcCosine or arcTangent of a value, tap {\cs33\b hyp} and {\cs33\b inv} once each to depress them, then tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}. Enter the value and tap {\cs33\b =}.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Logarithms (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR natural logs etothex e to the x common logs logarithmic ln
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate a common logarithm (base 10) in the Scientific view:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap {\cs33\b log}, enter the value you want to find the log of and tap {
+\cs33\b =}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate a natural logarithm (base e), tap {\cs33\b ln}, enter the value you want to find the natural log of and tap {\cs33\b =}.
+\par To calculate e to the power of a given value, tap the {\cs33\b ex} button, enter the value you want to find e to the power of and tap {\cs33\b =}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Angle formats (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR degrees radians gradients formats
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Scientific view displays angles in degrees, radians or gradients. An abbreviation: DEG, RAD or GRAD, appears in the calculator display.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The angle units chosen affect the outcome of trigonometric calculations.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The relationships between the three types of unit are: 360 degrees = 400 gradients = 2\'d7Pi radians.
+\par To change the current angle units, tap on the abbreviation in the display, or use {\cs33\b Formats} on the {\cs33\b Tools} menu.
+\par To convert results displayed in one format to another format tap on the format abbreviation or use {\cs33\b Formats} on the {\cs33\b Tools} menu while the result is displayed.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Number formats (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR normal fixed scientific formats
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Scientific view can display numbers in three formats: Normal, Fixed and Scientific.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Normal}: suitable for most calculations. Numbers are present
+ed in standard notation, with decimal places and exponents if they are required.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Fixed}: numbers are always displayed with a specified number of digits after the decimal point.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Scientific}: useful for very large or small numbers. Numbers are displayed as a single digit to the left of the decimal point, a specified number of significant figures, and then an exponent.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the number format, select {\cs33\b Formats} on the {\cs33\b Tools}
+ menu and choose the format you want. If you choose Fixed or Scientific, set the number of decimal places or significant figures in the box below.
+\par To convert an answer to a different format, change the number format while the result is in the display.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Squares, cubes & powers (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR power second third second third fourth fifth biquadratic 10x x2 x3 x^y
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the Scientific view for calculating squares and cubes.
+\par To calculate a square, enter the number you want to square, then tap the {\cs33\b x2} button and tap {\cs33\b =}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 When squaring a negative number, put it in brackets.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate a cube, enter the number you want to cube, then tap the {\cs33\b x3} button and tap {\cs33\b =}.
+\par To raise a number to a given power, enter the number you want to raise and tap the {\cs33\b x^y} button. Enter the power to which you want your value to be raised, e.g. 12x^y4 raises 12 to the 4th power, and tap {\cs33\b =}.
+\par You can raise ten to a given power to save you entering long numbers. This is sometimes known as the common antilogarithm.
+\par To raise ten to a given power, tap the {\cs33\b 10x} button, enter the power you want to raise 10 to, and tap {\cs33\b =}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Reciprocals (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR one over x x-1
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate the reciprocal of a number in the Scientific view:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter the value you want to find the reciprocal of, tap the {\cs33\b x-1}
+ button, and tap {\cs33\b =}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Square & other roots (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR square root cube root
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate the square root of a number in the Scientific view, tap the square root button {\cs34\scaps\f25\cf13 archive=Calc name=squareroot}
+, enter the number of which you want to find the square root and tap =.
+\par To calculate a cube root, tap the cube root button {\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super 3}, enter the number of which you want to find the cube root and tap {\cs33\b =}.
+\par To calculate the xth root of a number, enter the number corresponding to x, the root you want to find. E.g. 4 for the 4th root, 5 for the 5th root and so on. Tap the xth root button {\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super X}
+ and enter the number you want to find the x root of. Tap {\cs33\b =}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Factorials (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR x!
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate the factorial of a number in the Scientific view, enter the number of which you want to find the factorial, tap the {\cs33\b x!} button, then tap {\cs33\b =}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+A factorial is the result of multiplying all the whole numbers from a given starting number down to one. So, the factorial of 4 (written as 4!) is
+\par \pard\plain \s17\li284\sa120\widctlpar \f5\fs20\lang2057 4 \'d7 3 \'d7 2 \'d7 1 = 24
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Factorials are useful for calculating how many different ways things can be arranged. For example, if you know the four digits of a security code, but cannot remember their orde
+r, you now know that there are 24 different combinations to try.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Factorials are the product of all POSITIVE integers from a number down to one, so you cannot calculate the factorial of a negative number or of a fraction. The factorial of zero is 1.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exponents (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the exponents function in the Scientific view to express long numbers more concisely.
+\par Exponents are of the form:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+A value between 1 and ten (the "mantissa"), followed by an E, followed by another value.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the second value is 
+positive, it indicates the number of places the decimal point of the first value should be moved to the right to get the number as it would be written in standard notation. Use positive exponents for large numbers.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To enter a positive exponent, enter the first part of the number, normally as a decimal fraction. Tap the {\cs33\b exp} button. An 'E' will be displayed. Enter the number of places the decimal point should be moved to the right.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the second value is negative, it indicates the number of places the decimal point should be moved left. Use negative exponents for small numbers.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To enter a negative exponent, enter the first part of the number, tap exp and then tap the {\cs33\b +/-} button. Enter the number of places the decimal point should be moved to the left.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Maths error message (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR problems errors mistakes
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A 'Maths error' message indicates a problem with the mathematical logic of an expression.
+\par Check, e.g., that you have not:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tried to calculate the square root, factorial or log of a negative number.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tried to calculate the factorial of a fraction.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Entered an expression involving division by zero.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap {\cs33\b AC} to clear the message, or press the up arrow key to return to the expression.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Overflow error message (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR problems errors mistakes large numbers
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 An 'Overflow error' message appears when a result:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Is out of the calculator's range.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Cannot be displayed in the present number format. If you are using Fixed format, try decreasing the number of decimal places or changing the number format to Normal or Scientific using {\cs33\b Formats}
+ on the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap {\cs33\b AC} to clear the message, or press the up arrow key to return to the expression.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Syntax error message (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR errors problems parenthesis parentheses mistakes
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A 'Syntax error' indicates that the calculator cannot understand the expression entered. Check that you have not:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Missed an opening or closing bracket.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Used two operators in a row.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Included two decimal points in a number.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Used the subtract operator as a negative sign, or vice versa.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Put the number before the function in a trigonometric or logarithmic expression.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap {\cs33\b AC} to clear the message, or press the up key to return to the expression.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Copying & pasting numbers (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR cut paste
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+In the Desk view you can copy whatever is currently on the calculation line using {\cs33\b Copy} on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}In the Scientific view copy the last result calculated using {\cs33\b Copy} on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Paste numbers from other programs into either view, using {\cs33\b Paste} on the {\cs33\b Edit} menu. You can also copy and paste between the two calculator views.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (Calc)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR show toolbar flip layout lefthanded left handed
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To swap the right side of the calculator screen over to the left, and vice versa, tap {\cs33\b Flip layout} on the {\cs33\b Toolbar}.
+\par To hide the Toolbar, deselect {\cs33\b Show toolbar} on the {\cs33\b View} menu. Choose this command again to return the {\cs33\b Toolbar} to the display.
+\par 
+\par }
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Calc/PiSymbol.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Calc/SquareRoot.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Calc/readme.txt	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,36 @@
+This directory contains a Protea sketch file of:
+
+	a square root symbol
+	a pi symbol
+
+
+for insertion into the Protea Word version of the file CALC-HLP.DOC held on this drive.
+
+The square root symbol should be inserted as it is in the following places:
+
+	Scientific buttons (Calc) topic: in place of the start of the line 
+	"Sqrt calculates the square root of a number."
+
+	Square & other roots (Calc) topic: in place of "the square root button"
+	in the second line.
+
+	
+It needs to be inserted prefixed with a superscript 3 in the following
+places:
+
+	Scientific buttons (Calc) topic: in place of the start of the line
+	"Cbrt calculates the cube root of a number."
+
+	Square & other roots (Calc) topic: in place of "the cube root button" in the
+	second point.
+
+It needs to be inserted prefixed with a superscript x in the following places:
+
+	Scientific buttons (Calc) topic: in place of the start of the line
+	"Xthrt calculates the xth root of a number."
+	
+	Square & other roots (Calc) topic: in place of "the xth root button" in the
+	last point.
+
+The pi symbol should be inserted in the Scientific buttons (Calc) topic in front of 'inserts
+the pi symbol at the cursor'.
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Calc/squareroot.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Comm-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,259 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11
+\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext15 List Bullet;}{\s16\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext16 List Continue;}{\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10
+\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext17 List Number;}{\*\cs18 \additive\super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}
+\f5\fs20\lang2057 \sbasedon0\snext19 List Bullet 2;}{\s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 Hypertext Anchor;}{\*\cs21 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext22 
+Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon17\snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext24 List Number 2;}{
+\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon26\snext27 Definition Definition;}{
+\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+\sbasedon28\snext29 Note;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon29\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon24\snext31 
+List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 
+\f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 
+\sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb
+\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info
+{\title "PROTEA HELP FILE - <app name>"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy11\hr11\min7}{\revtim\yr2000\mo4\dy25\hr16\min19}{\version2}{\edmins1}{\nofpages8}{\nofwords1832}{\nofchars10444}{\*\company Psion SW}{\vern57395}}
+\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Comms{\revised\revauth1\revdttm1178913809 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913809 0x}{\revised\revauth1\revdttm1178913811 10000087}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Comms: Quick start
+\par \pard\plain \s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913809 comms.quick-start
+\par }\pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 terminal emulation online offline
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Comms provides terminal emulation and file transfer to and from other computers.
+\par To exchange files with another computer, the other computer must have communications software that supports terminal emulation, that can transmit and receive ASCII files, or that is capable of XMODEM or YMODEM file transfer.
+\par \ldblquote Scripts\rdblquote  can also be created to automate dialling, logging on and file transfer.
+\par Further information about Comms can be obtained from the Comms documentation, available from xxxxxxx.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Using Comms
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 link cable off-line on-line on line off line online offline
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have EPOC CONNECT use the link cable supplied to connect the EPOC machine to the serial port o
+f the other computer. Set up the EPOC machine's port to have the same settings as the port on the computer you are connected to using {\cs33\b Set up} on the {\cs33\b Toolbar}.
+\par The EPOC machine can also be connected to a remote computer via a modem, e.g. to access electronic mail or a bulletin board. In this case you need a modem adaptor. See your supplier for details.
+\par When Comms is started the terminal emulation screen is displayed. The status bar at the bottom of the screen shows if you are online or offline. Each character 
+typed in will be transmitted via the serial port. When a character is received it is displayed on the screen.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the desktop link is on then Comms will be offline when opened. To go on-line, go to the System screen and switch the link off, using {\cs33\b Link to desktop} on the {\cs33\b Tools} menu. Then go back to Comms and select {\cs33\b Port active} on the {
+\cs33\b Transfer} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Scripts & names (Comms)
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use Comms to create "Scripts" to automate dialling, logging on and file transfer, by using the commands on the {\cs33\b Scripts} menu.
+\par Set up script variables (or "names"), e.g. for log-on details, and password protect them using the commands on the {\cs33\b Names} menu.
+\par To copy sample scripts to a selected folder, select {\cs33\b Create standard files} on the {\cs33\b Tools} menu. The sample scripts can then be used directly, or edited to suit your needs.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting up (Comms)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 handshaking flow control stop bits parity teletype VT100
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Select {\cs33\b Communication settings} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Set the {\cs33\b Use comms port} line to 'Serial port 0\rquote 
+ if you're using a docking cable and adaptor connection to a modem or 'Infrared\rquote  to use infrared communications.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set the {\cs33\b Baud rate} line to the data communication speed. It should match the speed setting on the remote machine, and should not exceed the maximum speed of the modem being used.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Modern modems can sense and adjust to the transmission speed. With older modems, it may be necessary to specify the exact speed of the connection.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Set the {\cs33\b Data bits}, {\cs33\b Stop bits} and {\cs33\b Parity}
+ lines to the same settings as the remote machine.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the tick boxes on the {\cs33\b Handshaking}
+ page to select the flow control required.For a modem connection, XON/XOFF, DSR/DTR and RTS/CTS should normally be set, but this depends on the remote setup and the modem manufacturer\rquote s guidelines. For \lquote Hardware\rquote 
+ flow control, tick the \lquote RTS/CTS\rquote  box.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Comms is initially set to emulate a VT100 terminal. To select a teletype terminal, select Terminal emulation on the Tools menu and set the {\cs33\b Terminal to emulate}
+ line to 'TTY'. Set the screen width and height as the number of characters.
+\par Comms is initially set to add a \ldblquote line feed\rdblquote  character to incoming and outgoing \ldblquote carriage returns\rdblquote . To change this select {\cs33\b Translate codes} on the {\cs33\b Tools} menu, then use the {\cs33\b 
+Add LF to incoming CR} and {\cs33\b Add LF to outgoing CR} lines.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting to another machine (Comms)
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To communicate between the EPOC machine and, say, a PC:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Connect the serial linkcable to the serial port and to a COM port on the PC.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Make sure neither machine is running software that uses the communications ports (e.g. EPOC CONNECT on the PC). Make sure the EPOC machine has the {\cs33\b Link to desktop}
+ switched off, and is not trying to carry out an infrared transfer.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Start Comms on the EPOC machine, and run a Terminal application on the PC. If using Windows 95, this may be HyperTerminal.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}
+Set both pieces of software to use the appropriate ports, and to use identical settings for Baud rate, Data bits, Stop bits, Parity and Handshaking. The two machines are now ready to exchange characters and files.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting via a modem (Comms)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 pause pausing
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To communicate using a modem:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Connect the EPOC machine to the modem using the Docking cable and a modem adaptor lead. Connect the modem to a telephone socket.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Use {\cs33\b Link to desktop} on the {\cs33\b Tools} menu in the System screen and set the {\cs33\b Link} line to 'Off'.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 When you want to turn the link back on again later, you should close Comms first.
+
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Set the communication settings appropriate to the modem\rquote s maximum speed, and identical to the remote machine\rquote 
+s settings. Check that the Baud rate used does not exceed the maximum for the two machines.
+\par 4.\tab To start communications with the modem, type "AT" and press Enter.
+\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 The modem will return \lquote OK\rquote , in the Terminal emulation screen. If it doesn\rquote 
+t, make sure all cables are connected correctly and the communication settings are appropriate to the modem according to the manufacturer\rquote s instructions.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 5.\tab Type the modem initialisation string appropriate to the modem. This may be \lquote ATZ\rquote  or \lquote AT&F\rquote ; check the modem manual for details.
+\par 6.\tab Type \lquote ATDT\rquote  followed by the telephone number (including any dial-out prefix required) of the remote modem. When the other modem answers, \lquote CONNECT\rquote 
+ will be displayed in the Terminal window, and you can begin to log in. This may require pressing the Enter key a few times to get a \ldblquote prompt\rdblquote  (a line of text sent by the remote machine, such as \lquote username:\rquote 
+ which waits for a command or a response).
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If characters from a remote host are received too quickly to read, use {\cs33\b Pause}
+ on the {\cs33\b Transfer} menu to temporarily stop incoming information. Use {\cs33\b Pause} again to resume the transfer.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If handshaking cannot be used, data may be lost if the EPOC machine is paused while the other machine is sending information. To avoid this, set a lower Baud rate.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting via infrared (Comms)
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To communicate with another EPOC machine, an infrared-enabled PC or an infrared-enabled modem:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Communication settings} on the {\cs33\b Tools}
+ menu and set the comms port to \lquote Infrared\rquote .
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}When the other machine is ready to communicate with the EPOC machine via infrared, continue as you would normally using the serial link cable.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+Use Comms to transfer multiple files between two EPOC machines using YModem (batch) protocol (multiple files can't be transferred using normal infrared transfer).
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Sending & receiving files (Comms)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 capture to file transferring files
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Before files can be transferred, you must establish a connection to the remote machine.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To send a file:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Send file} on the {\cs33\b Transfer} menu, or tap {\cs33\b Send file}
+ on the Toolbar.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the transfer protocol in the {\cs33\b Send file} dialog. Make sure it is one the remote machine supports and is prepared to receive.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Use the {\cs33\b Name}, {\cs33\b Folder} and {\cs33\b Disk} lines to locate the file to be sent.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}Press {\cs33\b OK} on the EPOC machine and prepare the other machine to receive a file. If possible, perform these actions simultaneously.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To send more than one file:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Create a folder specifically for the files to be sent, place all the relevant files in it and select {\cs33\b Send file} on the {\cs33\b Transfer} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the \lquote YModem (batch)\rquote  protocol, then select the folder containing the files to be sent in the {\cs33\b Folder} line.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Press the Tab key in the {\cs33\b Name} line, hold down Shift while using the down arrow key to select all the files in the folder, then press Enter. Press {\cs33\b OK}
+ and prepare the remote machine to receive a file.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To receive files:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Receive file} on the {\cs33\b Transfer} menu, or tap {\cs33\b 
+Receive file} on the Toolbar.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the transfer protocol in the {\cs33\b Receive file} dialog. Make sure it is the one the remote machine will use to send the file. Use Ymodem (batch) protocol for multiple files.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Choose a folder for the file to be saved in. If a file is being received using either the ASCII or XModem protocol, specify a filename (YModem transfers take the filename from the sending machine).
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Remember to include filename extensions where appropriate.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 4.\tab Press {\cs33\b OK} on the EPOC machine and instruct the remote machine to send the file. If possible, perform these actions simultaneously.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To stop transfer at any time, tap the {\cs33\b Cancel} button in the
+ file transfer dialog.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b {\*\bkmkstart _Toc389538043}{\*\bkmkstart _Toc389564382}Receiving information with no protocol{\*\bkmkend _Toc389538043}{\*\bkmkend _Toc389564382}:
+\par }If information is being received as plain ASCII characters, e.g. e-mail from a server, it can be "captured" to a file. To do this:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Capture to file} on the {\cs33\b Transfer} menu and type filename.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+For the new information to be added to the end of an existing file, enter the name of the existing file and tick the {\cs33\b Append} box.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}For incoming control characters to be recorded in angled brackets, e.g. \lquote <13>\rquote  for a carriage return, tick the {\cs33\b Debug} box.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab To end the capture, deselect the {\cs33\b Capture to file} menu option.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Captures are stored as plain text files. A plain text file can be viewed in Word, by using the {\cs33\b More|Import text file} command on the {\cs33\b File} menu.
+\par If problems are encountered when transferring information with no protocol, try setting both computers to use a lower Baud rate.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Creating & running scripts (Comms)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 run script create standard files edit script stop script
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use a "Scripts" to automate dialling, logging on and file transfer, by using the commands on the {\cs33\b Scripts} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Create new script} from the {\cs33\b Scripts}
+ menu. Enter a name and location for the script and press {\cs33\b OK}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Script names must have a \lquote .scr\rquote 
+ extension. When a script is saved, Comms will add \lquote .scr\rquote  to the end of its name.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Comms will move to the script editor and you can type in the script.
+\par 3.\tab Tap {\cs33\b Save} to return to the main Comms view.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+When creating a new script for, e.g., a connection to a BBS system, it can be useful to first record the logging in process using {\cs33\b Capture to file }on the {\cs33\b Transfer}
+ menu. This records the prompts sent from the remote machine when connecting, and can be used as the starting point for your script.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To access the EPOC machine's example script, select {\cs33\b Create standard files} on the {\cs33\b Tools} menu. Select a folder for Comms to place the example script in, and press {\cs33\b OK}.
+\par To edit the example script or one of your own, select {\cs33\b Open} on the {\cs33\b Scripts} menu, and choose the script to be worked on. Press {\cs33\b OK}.
+\par To check a script, select {\cs33\b Syntax check} on the {\cs33\b Scripts} menu and specify the script to be checked.
+\par {\cs33\b To run a script:
+\par }Select {\cs33\b Start Script} from the {\cs33\b Scripts} menu, and choose the appropriate script in the {\cs33\b Start} {\cs33\b script} dialog.
+\par The name of the running script is displayed at the bottom of the Terminal emulation screen.
+\par {\cs33\b To stop a script:}
+\par Select {\cs33\b Stop script} from the {\cs33\b Scripts} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Script commands (Comms)
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Here is a summary of commands for the Script language.
+\par & see Send
+\par //
+\par ALERT <string exp>[,<string exp>]
+\par AND
+\par AS see Open
+\par ASC (<string exp>)
+\par BEEP <value>,<value>
+\par BREAK
+\par CALL <filename>
+\par CAPTURE <filename>,[APPEND[,DEBUG]]
+\par CAPTURE OFF
+\par CATCH [INCLUDE/EXCLUDE] ,<string>, <variable>, <timeout>, <maxlength> GOTO <label>
+\par CHAIN <filename>
+\par CLOSE see Open
+\par CLS
+\par COLLATE (<string exp>)
+\par CONNECT <value> GOTO <label>
+\par CONTINUE
+\par COPY <filename>,<filename>
+\par DELETE <filename>
+\par DIR (<string exp>)
+\par DO see While
+\par DOWNLOAD <filename>,<string>
+\par DRAIN
+\par EOF see Open
+\par EXISTS <filename>
+\par EXIT
+\par FALSE
+\par FOLD <string exp>
+\par FOR see Open
+\par FORGET
+\par GOTO <label>
+\par HANGUP
+\par IF <exp>THEN<command>[[ELSE]<command>[ELSEIF<exp>THEN<command>]] ENDIF
+\par INFO <string exp>
+\par INPUT see Open
+\par LEFT (<string exp>,<value>)
+\par RIGHT (<string exp>,<value>)
+\par LEN <string exp>
+\par LOADNAMES <filename>
+\par SAVENAMES <filename>
+\par LOWER <string exp>
+\par MENU <string exp>
+\par \tab <string exp> GOTO <label>
+\par \tab <string exp> GOTO <label>
+\par \tab \'85
+\par ENDMENU
+\par MID (<string exp>,<value>[,<value>])
+\par MOVE <filename>,<string exp>
+\par NOT
+\par ON ERROR GOTO <label>
+\par ON ERROR OFF
+\par OPEN <filename> FOR [INPUT/OUTPUT/APPEND] AS <handle>
+\par \tab READ <length>,<variable>,<handle>
+\par \tab WRITE <handle>,<string>
+\par \tab EOF <handle>
+\par CLOSE <handle>
+\par OR
+\par OUTPUT see Open
+\par QUERY <string exp>
+\par \tab <string exp>,<variable>
+\par \tab <string exp>,<variable>
+\par ENDQUERY
+\par READ see Open
+\par RENAME <filename>,<filename>
+\par REPEAT
+\par \tab <command>
+\par UNTIL <expression>
+\par RESET
+\par RIGHT see Left
+\par SAVENAMES see Loadnames
+\par SEND <string exp> [;] [& <string exp>]
+\par SENDBREAK
+\par SENDWAIT <value> <string exp>,<string exp> GOTO <label>
+\par SET <variable>=<value>
+\par SETUP
+\par \tab BAUD [rate]
+\par \tab PORT [COMM::0][IRCOMM::0]
+\par \tab DATA [5][6][7][8]
+\par \tab FAIL [DSR][DCD][PARITY]
+\par \tab HANDSHAKE [DCD][RTSCTS][DSR][XONXOFF][NONE]
+\par \tab PARITY [NONE][ODD][EVEN]
+\par \tab STOP [1][2]
+\par \tab TIMEOUT [timeout]
+\par ENDSETUP
+\par STATUS <string exp>
+\par TRUE
+\par UNTIL see Repeat
+\par UPLOAD <filename>,<string>
+\par UPPER <string exp>
+\par VERSION
+\par WAIT <value>
+\par \tab <string exp> GOTO <label>
+\par \tab <string exp> GOTO <label>
+\par \tab \'85
+\par ENDWAIT
+\par WHILE <exp> DO
+\par \tab \'85
+\par ENDWHILE
+\par WRITE see Open
+\par 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Data-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,268 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - DATA"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo3\dy21\hr18\min49}{\revtim\yr2000\mo4\dy25\hr16\min22}{\printim\yr1997\mo4\dy28\hr14\min21}{\version2}{\edmins0}
+{\nofpages10}{\nofwords2564}{\nofchars14617}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template 
+C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3
+\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}
+{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar 
+\i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: January 18{\super th}  1999
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 DATA{\revised\revauth1\revdttm1178913813 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913814 0x10000086}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Data: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913814 data.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 database
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Data is the EPOC machine's database. The files created in it are compatible with PC database applications; they can be copied to any PC, using EPOC CONNECT, and worked on there.
+\par Use Data to store information as you would in a card index. The ready-made Data file contains \ldblquote labels\rdblquote 
+ suitable for storing information as a "knowledgebase" database. Data files can be created for any other type of information, e.g. recipes, CD lists, train times etc.
+\par When Data is first used, or a new Data file created, you'll see an empty knowledge database, with labels for Name/subject, URL and Notes.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 "URL" means a Web page or Web site.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can add new entries to the database straight away. To do this, tap {\cs33\b New entry} on the {\cs33\b Toolbar}. Type in the first entry, press {\cs33\b Save} to add it, then add further 
+entries in the same way. Press {\cs33\b Close} when you\rquote ve finished.
+\par You may want to use the database for another type of information. If you do, you may need to customise the labels for the type of information you want to record. To do this, use {\cs33\b Change labels} on the {\cs33\b Tools}
+ menu to set up suitable labels before adding any entries.
+\par To sort entries, e.g., alphabetically by Name/subject, select {\cs33\b Sort by label} on the {\cs33\b Tools} menu.
+\par Data has two views: press {\cs33\b List} to see entries as a list, or {\cs33\b Cards} to see individual entries.
+\par {\cs33\b To move between entries in the Card view:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on {\cs33\b Prev} and {\cs33\b Next}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the Enter and Shift+Enter keys.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b In the List view press:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The up and down arrow keys to move up and down the list.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The left and right arrow keys to see columns not currently shown.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+In the List view information can be sorted just as a table of information might be sorted.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the List view for viewing information as a table, where information can be sorted quickly and easily.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding entries (Data)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 add entry new entry new card new page
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap {\cs33\b New entry} on the {\cs33\b Toolbar}.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Type in the information next to the appropriate labels.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Tap on the line you want to type on or use the up and down arrow keys to move between the lines.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 While adding the entry the text can be formatted and objects inserted, such as a picture from the EPOC Sketch program.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 4.\tab When the entry is complete, press {\cs33\b Save}.
+\par 5.\tab Add the next entry in the same way, or press {\cs33\b Close} to finish.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 New entries are added to the end of the Data file. To place new entries in alphabetical order, use {\cs33\b Sort by label} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing entries (Data)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 edit entry
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change an entry, e.g. to update a web address, find and select it in the Card or List view and then press {\cs33\b Edit entry} on the {\cs33\b Toolbar}.
+\par Tap on the line for the information to be changed, or use the up and down arrow keys to move to it and edit the text as required.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To change the labels for the entry or add new ones, first update the labels using {
+\cs33\b Change labels} on the {\cs33\b Tools} menu, then change the entry if required.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Deleting entries (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 undo delete entry remove entry erase entry
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To delete an entry, find it in the Card or List view and use {\cs33\b Delete entry} on the {\cs33\b Edit} menu.
+\par If you accidentally delete an entry, use {\cs33\b Undo} {\cs33\b delete} on the {\cs33\b Edit} menu to get it back again.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Finding entries (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 wild cards strings searching wildcards search esc unknown
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To search for entries in the Card or List view type a "search clue" in the '{\cs33\b Find:}' box and press Enter.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Type a ? for a single unknown letter or a * for any number of unknown letters (known
+ as "wildcards").
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The first matching entry is shown, with the search word highlighted.
+\par Press Enter to go to the next match, or move directly to another entry until the one you want is displayed.
+\par {\cs33\b To remove the search clue:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press Esc to go to the {\cs33\b Find:}
+ box, then type a new clue, or press Del.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To find entries using any of the last 5 search clues you typed in:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on the menu button, then tap on the clue you want to use, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Tab, use the up and down arrow keys to select the clue and press Enter.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b Search clues}
+\par This is a piece of text contained within the entry; e.g. 'Chicken', and can be any part of the text in the entry. Data looks for an exact match for the text entered as a search clue, disregarding differences in case. So if the search clue 'cheese' is ente
+red, Data will find: Cheese, cheese, CHEESE etc.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+If you have a label with the Data type 'Number' then only exact numerical matches will be found (e.g. if you have '123' in an entry, searching for '12' won't find it).
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b Wildcards}
+\par If '?ish' is entered, Data will find: dish, fish, relish etc.
+\par If 'ch*se' is entered, Data will find: chose, cheese etc.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Labels (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 fields
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 In the Card view, labels appear on the left of the screen, and describe the content of each line in the entry. In the List view, they appear as the titles above the columns.
+\par To change the labels, e.g. to add further labels, or make the database suitable for a completely different kind of information, select {\cs33\b Change labels} on the {\cs33\b Tools} menu. Then add further labels, change the existin
+g ones, or remove them as required.
+\par {\cs33\b To change the label order in the Card view:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use {\cs33\b Label preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To change the column order in the List view:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use {\cs33\b Column preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Data can be set to only find text by a particular label when searching for entries, e.g. to search just the \ldblquote Name/Subject\rdblquote  line.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The label order in the Card and List views and the "Find by label" list are independent of each other.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Adding labels (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 add fields change labels floating point numbers entry too big
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To add new labels and specify the type of information which that line in the entry will contain, e.g. the "Source" of the information, select {\cs33\b Change labels} on the {\cs33\b 
+Tools} menu then press {\cs33\b Add}.
+\par Enter the text for the label and select one of the following Data types:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Text}
+ - set a large enough number of characters for the information to be included on the line (the maximum is 250). This length can\rquote t be changed once entries have been added. Press {\cs33\b Options}
+ to include phone numbers for dialling on this line or limit the number of characters used for sorting.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Numbers} - press {\cs33\b Options} to set the upper and lower limits for numbers allowed in this label.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Floating point numbers} - press {\cs33\b Options} to set the upper and lower limits and the number of digits after the decimal point.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Date} - only dates will be allowed.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Yes/No} - only 'Yes' or 'No' will be allowed.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Memo} - this is a text field which allows an unlimited number of characters. If you create Memo lab
+els and you then use the 'Sort by label' command, you can only use one Memo label in it, and it must come last in the series of labels to sort by.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The Data type can\rquote t be changed once entries have been added.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Add any further labels, as required.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Position labels in the order that they are to appear in the Card view. This order can be changed later using {\cs33\b Label preferences} on the {\cs33\b Tools}
+ menu. The width of the entry text in the Card view is determined by the length of the longest label name. If long label names are used, the rest of the text will be indented a long way to the right.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Deleting labels (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 deleting fields change labels
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To remove labels that are no longer required, select {\cs33\b Change labels} on the {\cs33\b Tools} menu, select the label and press {\cs33\b Delete}.
+\par Warning: When you remove a label, any information which has been entered next to it will be lost forever. If you are unsure about whether you will ever need it again, it's probably better to move the label to the bottom of the list of labels in the Label 
+preferences dialog, rather than removing it.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Changing labels (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 fields change labels hide/show
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the name of a label, select {\cs33\b Change labels} on the {\cs33\b Tools} menu, select the label to be changed and press {\cs33\b Edit}.
+\par To change the number of characters used for sorting, whether phone numbers may be dialled or the range of allowed numbers, press {\cs33\b Options}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The type or length of an existing label can\rquote t be changed.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the position of a label, select {\cs33\b Label preferences} on the {\cs33\b Tools} menu, in the Card view, or {\cs33\b Column preferences} on the {\cs33\b Tools}
+ menu, in the List view. Tick a label and move it using the dialog buttons.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To make a label invisible in the Card or List view, tick it and press {\cs33\b 
+Hide/show}.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To tick several consecutive labels, tap on the first label in the range, hold down the Shift key and tap on the last label.
+\par To tick a number of labels that aren't consecutive, hold down the Ctrl key and tap on the labels you want to select.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Finding text by labels (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 searching find by label
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Normally when search clues are typed in, Data searches for the text in all the labels. To restrict the search to certain labels to make finding entries quicker, select {\cs33\b 
+Find by label} on the {\cs33\b Tools} menu. The list of labels is displayed, and the labels used for searching are marked with a tick.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The label order in the Card and List views and the "Find by label" list are independent of each other.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Sorting entries (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 sort by label alphabetical order reorder rearrange
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Entries appear in the order in which the
+y were added to the database; when new entries are entered, they are put at the end of the file. To resort all entries, e.g., alphabetically by CD title, select {\cs33\b Sort by label} on the {\cs33\b Tools} menu.
+\par Set the number of labels you wish to sort by.
+\par Select the labels to sort by, and ascending (A-Z) or descending (Z-A) order.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Sorting re-orders entries in the current file - the new order is used when you open the file. However, for entries to appear in their sorted order when the file is transferred to the PC using EPOC CONNECT , you must use {\cs33\b Save as}
+ to create a new "sorted" version of the file to transfer to the PC.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the number of characters of a 'Text' or 'Memo' label used for sorting, select {\cs33\b Change labels} from the {\cs33\b Tools} menu, select the label to change and press {
+\cs33\b Edit}. Then press {\cs33\b Options}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+To reduce the size of a sorted Data file, open the file and sort it as required. Then select {\cs33\b Create new file}, with a new file name. Select {\cs33\b Merge in }from the {\cs33\b More} cascade and use the old filename.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 List view (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 column preferences
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The List view displays the information as a table; each row is an entry in the Data file, and each column is a labelled line in the entry.
+\par {\cs33\b To move between entries:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the vertical scroll bar.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the up and down arrow keys to move up and down the list.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To see columns not currently shown:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the horizontal scroll bar.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the left and right arrow keys.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To change how this view looks:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To change the order of columns, the font used in each column and whether the column is visible, select {\cs33\b Column preferences} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To change the column width, number of "frozen" columns, row height and graphics, select {\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Card view (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 label preferences
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The Card view displays each of the entries as a separate record. The entries displayed initially depend on the labels used for sorting.
+\par {\cs33\b To move between entries:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on {\cs33\b Prev} and {\cs33\b Next}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the Enter and Shift+Enter keys.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To change how this view looks:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To change the order of labels, the font used in each label and whether the label is visible, select {\cs33\b Label preferences} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To change the card width and whether card labels are shown, select {\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Keypresses (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 esc ctrl tab keyboard
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The default keypresses are:
+\par Ctrl+Tab - insert a tab in the text.
+\par Press Esc twice to clear the {\cs33\b Find:} line.
+\par Hold the Shift key down and use the arrow keys to select text in an entry in the Card view.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Creating a file (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 create new file
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To create a new Data file, e.g. to keep separate business and priveat knowledgebases, select {\cs33\b Create new file} on the {\cs33\b File} menu.
+\par To use different labels in this database, use {\cs33\b Change labels} on the {\cs33\b Tools} menu and edit the labels as required.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+To position the labels in the order that they are to appear in the Card and List views, use {\cs33\b Label} or {\cs33\b Column} {\cs33\b preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Now entries can be added to the new database.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Combining Data files
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 merge in
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To add the entries from one Data file to another file, e.g. to combine your personal and business knowledge bases, open the Data file to which the entries will be added. Then select {
+\cs33\b Merge in }from the {\cs33\b More} cascade on the {\cs33\b File} menu and select the file to merge in.
+\par The entries will be added to the end of the current file. To re-sort the database, tap in the Find: line and press Enter.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Only entries with the same labels and type will be added.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The inserted entries are not removed from their original file. The file whose entries have been merged in can be deleted , to save disk space.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Printing Data entries
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 page setup print setup
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Data entries can be printed to a serial, parallel or Infrared printer. Before printing, set up the page (paper size, margins, headers & footers, etc.) using {\cs33\b Page setup }
+from the {\cs33\b Printing }cascade on the {\cs33\b File} menu.
+\par Use {\cs33\b Page setup }from the {\cs33\b Printing }cascade on the {\cs33\b File} menu to specify whether you want to print 'All entries in view' (i.e. all the entries that result from a search, or the entire database if you haven't done a search)
+, or only the current one, and to indicate the number of copies required.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Columns in Data
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 column preferences freeze freezing frozen
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Each column in Data's List view displays the information for a particular label of each entry.
+\par To change the order of columns, the font used in each column, and whether the column is visible, select {\cs33\b Column preferences} on the {\cs33\b Tools} menu.
+\par To change the column width, number of frozen columns, row height and graphics (grid lines), select {\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par Frozen columns stay on the screen all the time - the scroll bar and left and right arrow keys work only on the other columns. The rightmost column can\rquote 
+t be frozen. You may want to change the column widths of frozen columns so that they fit better on the screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Display preferences (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 view preferences
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the way the Card view or List view looks use {\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par To make more space in the Card view, change the width of the card or hide the labels.
+\par To make more information visible in the List view, change the width of the columns and height of the rows.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The row height is given in points (72 points=1 inch).
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Printing the database will mirror the Card view settings.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Formatting text (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 typestyle typeface type style type face font bold italics underlined
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change text formatting in individual labels, e.g. to make recipe titles larger than the rest of the text, select {\cs33\b Label preferences} on the {\cs33\b Tools}
+ menu, in the Card view, or select {\cs33\b Column preferences}, in the List view. Then select the label to be formatted and press {\cs33\b Font}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To change the formatting of individual pieces of text use {\cs33\b Font}
+ in the New entry or Edit entry dialogs, or use the shortcut keypresses.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Inserting objects (Data)
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 linking paint picture attaching embedding OLE
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To insert an object in the database, move to the place where the object is to be inserted in the add or edit entry dialog and press {\cs33\b Object}. Then select {\cs33\b Insert object
+} and the EPOC program to be used to create the object.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 An EPOC Word or Record file is inserted as an icon.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To view an inserted EPOC Word file or listen to an inserted EPOC Record sound, tap on the icon twice.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Dialling from Data
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 telephoning DTMF dialing
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Phone numbers entered in entries in a Data file can be \ldblquote dialled\rdblquote  automatically, as long as the labels containing the numbers have been set up to allow dialling.
+
+\par To set up a label to allow dialling select {\cs33\b Change labels} on the {\cs33\b Tools} menu, select the label and press {\cs33\b Edit}. Then press {\cs33\b Options} and tick the appropriate box.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 When dialling a number, up
+ to 5 numbers can be displayed from labels for which dialling is allowed. Any number can be displayed, even if it isn't a phone number.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Importing into Data
+\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 import text file ASCII ANSI delimiter
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 
+To import plain text into a Data file, e.g. to convert a text file into a database, the text file must be made in the following way (many PC applications can produce "CSV" files in this format):
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Entries must be separated by an "Entry separator" character, normally an "end of line" character, which means that each entry is on a new line of text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Each label must be separated by a "Label separator" character, normally a comma (,).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}If the label separator character is one which might also appear in the label text, e.g. a comma, each label must be enclosed in "Text qualifier" characters, normally double quotes (").
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Empty labels at the end of the entry may be omitted.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Empty labels anywhere else should be included as just two text qualifier characters.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 E.g., a line in the text file could be:
+\par 
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+"Symbian Ltd","www.symbian.com","Makers of EPOC software."Any character can be used as a separator or text qualifier. To include the text qualifier character within the text, put it in twice.
+\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To import the file, select {\cs33\b Import text file }from the {\cs33\b More} cascade on the {\cs33\b File} menu. Select the filename and location of the file to be imported.
+\par To change the Text qualifier, Label separator or Entry separator characters, press {\cs33\b Options}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 It is a good idea to make a backup copy of the original Data file, in case impor
+ting the text file causes unwanted results.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting objects (Data)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 resize stretch rescale trim resizing cropping format object
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To format an object (change the size, scaling and appearance of pictures, graphs etc.), select the object in the Add or Edit entry dialog. Then press {\cs33\b Object} and select {\cs33\b Format object}.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Synchronising Data with a PC
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 synchronize synchronizing Data synchronisation
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have EPOC Connect version 2.1 or higher, you can synchronise a Data file used as an address book with a contacts database on a PC.
+\par Be careful to put the correct information in each label to ensure that information can be synchronised correctly.
+\par Refer to EPOC Connect documentation for details of how to synchronise contacts databases.
+\par 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Dial-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,86 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - AGENDA"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy18\hr15\min6}{\revtim\yr2000\mo4\dy25\hr16\min24}{\version2}{\edmins0}{\nofpages3}{\nofwords695}{\nofchars3967}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: February 18{\super th} 1999
+\par Version: ER5 release (generic)
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 DIALLING{\revised\revauth1\revdttm1178913815 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913816 0x100067C8}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Dialling: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913816 dialling.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 dialing telephone
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The EPOC machine can generate the tones used to dial from push-button phones ("DTMF"). You can dial phone numbers entered in EPOC Contacts, Agenda or Data, or dial 
+numbers by "free-form" to use the tones to communicate with another device over the phone, e.g. an automated banking service.
+\par First set up the EPOC machine for dialling by tapping the {\cs33\b Control panel} button in the System screen, and then tapping the Dialling icon.
+\par To dial a telephone number from EPOC Contacts, Agenda or Data, select the entry containing the number to be dialled and press the relevant key combination for dialling (the default is Fn+Menu) or press the key combination for free-form dialling (the
+ default is Ctrl+Fn+Menu).
+\par The EPOC machine can usually work out which international prefix, national and area codes to dial based on the Country (set in the Control panel in the System screen), and Home country and Home city (set in the EPOC Time program).
+\par To dial phone numbers when abroad, change the Home city in EPOC Time to reflect the current location.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting up for dialling
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 dialing home problems Dial out code tone time delay time pause time telephone
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To set up the EPOC machine for dialling, select the{\cs33\b  Control panel} from the {\cs33\b Toolbar} or {\cs33\b Tools} menu in the System screen, and then select the Dialling icon. Then set the:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Dial out code}
+ - e.g. the code needed to get an outside line from an office. Add a comma to insert a pause after the code, if required. The length of the pause is determined by the Pause time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Tone time} - the length of the generated tones.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Delay time} - the length of silence between tones.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Pause time} - the length of silence caused by a comma.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The three times are specified in units of 1/32 seconds.
+\par The preset tone and delay times will normally be OK for dialling, unless the telephone line is of poor quality. If dialling doesn't work in a particular location, try increasing the value of the Tone and Delay times.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the {\cs33\b Country}
+ button to set the country where you would normally dial non-international numbers, i.e. your country of residence.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The dialling settings can be tested by typing in the test box and tapping the {\cs33\b Test dial} button.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Phone numbers
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 dialling dialing telephone numbers
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Telephone numbers can be entered in EPOC Contacts, Agenda or Data with the country code and area code. Use a + instead of the international prefix e.g.:
+\par +44 (171) 208 1800
+\par Put either the area code or the national prefix between brackets, e.g.:
+\par +44 (171) 208 1800 or
+\par +44 (0) 171 208 1800
+\par Any other character (except a comma) can be used to separate parts of the number.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you want to be able to dial numbers from within Data you must ensure that the label in which they are entered has the 'Search label for phone numbers when dialling' option selected. To do this, select {\cs33\b Change labels} on the {\cs33\b Tools}
+ menu, select the label and press {\cs33\b Edit}. Then press {\cs33\b Options} and tick the appropriate box.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+If you are abroad, the EPOC machine can usually work out which international prefix, national and area codes to dial based on the Country (in the dialling settings), Home country, Home city and the numbers displayed in the EPOC Time program. If not, parts
+ of the number may have to be dialled using free dialling.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Country and city codes are listed in the EPOC Time program.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The code shown in the EPOC Time program is the number which would be dialled from the Home city to the selected city and comprises:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+If the selected city is abroad: the international prefix of the Home country, the national code of the selected country and the area code of the selected city.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}If the selected city is not abroad: the national prefix and area code of the selected city.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Dialling phone numbers
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 dialing telephone dial outfree form
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To dial a telephone number from EPOC Contacts, Agenda or Data:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the entry containing the number to be dialled.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Press the required key combination (the default keypress is Fn+Menu.) In Contacts you can also use the {\cs33\b Dial} button on the toolbar.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Press the required key combination to go straight to the Free dial dialog (The default keypress is Ctrl+Fn+Menu.)
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Select the number to dial.
+\par 4.\tab Hold the mouthpiece about 5 cm (2 inches) from the EPOC machine's loudspeaker. Then:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To dial just the number, press {\cs33\b Dial}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To use the dial out code first (e.g. from an office), press {\cs33\b Dial out}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The selected number can be edited if required.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To dial additional digits, press {\cs33\b Free input}, and then dial the numbers in the Free dial dialog using the keyboard. The digits 0...9, *, # and A...F can be used.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The number can be edited if necessary and redialled by pressing {\cs33\b Redial}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 When travelling abroad, remember to set the Home country to the current location.
+
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Dict-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,93 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11
+\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext15 List Bullet;}{\s16\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext16 List Continue;}{\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10
+\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext17 List Number;}{\*\cs18 \additive\super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}
+\f5\fs20\lang2057 \sbasedon0\snext19 List Bullet 2;}{\s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 Hypertext Anchor;}{\*\cs21 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext22 
+Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon17\snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext24 List Number 2;}{
+\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon26\snext27 Definition Definition;}{
+\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+\sbasedon28\snext29 Note;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon29\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon24\snext31 
+List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 
+\f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 
+\sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb
+\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info
+{\title @@TTL:SERIES 5 HELP FILE - TEMPLATE}{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo3\dy26\hr17\min33}{\revtim\yr2000\mo4\dy25\hr17}{\printim\yr1997\mo7\dy1\hr15\min1}{\version2}{\edmins1}{\nofpages3}{\nofwords700}{\nofchars3992}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: February 18{\super th} 1999
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 DICTAPHONE{\revised\revauth1\revdttm1178913817 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913819 0x1000007e}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Voice Note: Quick start
+\par \pard\plain \s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913820 voice-note.quick-start
+\par }\pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone buttons alarm
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the EPOC machine to make sound recordings without opening it by using the external buttons to record "voice notes".
+\par Slide back the cover on the bottom of the EPOC machine to reveal the buttons (the cover prevents against accidental recordings).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=RECORD}({\cs33\b record}
+) button (marked with a red circle) and wait for the red "recording light" to go on before recording (if the program was not running, it will start and you'll hear a beep; press the {\cs33\b record}
+ button again to start recording). Release the button to stop recording. Press again to add to the recording.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=PLAY}({\cs33\b play}) 
+button (marked with a triangle) to listen to the most recent recording, and press it again to stop (if the recording has been rewound, play starts from the current position).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=STOP}({\cs33\b stop/rewind}) button (marked with a square) to stop, or to rewind if already stopped.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can also play back the recording using the Record program. Use the volume control in the EPOC Record program to adjust the playback volume.
+\par {\cs33\b Important}: Any alarms set to sound while you are recording or playing a voice note, will not sound until you have finished.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Recording a voice note (Record)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone overdub drop in edit overwrite LED lamp light
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Voice notes can be recorded at any time, even if the EPOC machine is closed and switched off. Voice notes are automatically saved to disk as you record them.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Press and hold down the external {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=RECORD}
+ button (if the program was not running, it will start and you'll hear a beep; press the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=RECORD} button again to start recording). The recording light remains on while the recording is made.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+If this is the first voice note recorded, a voice note file called 'Voice note' will be created in the Standard folder.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}If a file named 'Voice note' already exists, the new recording will be added on to the end.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Release the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=RECORD} button when the recording is finished.
+\par 3.\tab Press and hold down the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=RECORD} button again to add to the voice note.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The EPOC machine will remain on in between recordings, and after th
+e recording is finished, for as long as is specified in the System screen 'Auto switch-off' option.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To record from the current position, press and hold {\cs34\scaps\f25\cf13 
+ARCHIVE=DICT NAME=PLAY}{\cs33\b  }then, within \'bd second, press and hold {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=RECORD}, then release {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=PLAY}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+To keep the current voice note and start a new one, rename the 'Voice notes' file from the System screen. The next time a voice note recording is made, a new file named 'Voice notes' will be created. Alternatively, use {\cs33\b Save as} on the {\cs33\b 
+File} menu in Record, type in a new filename, leave the {\cs33\b Use new file} box unticked and press {\cs33\b OK}. Then select {\cs33\b Erase all} on the {\cs33\b Record} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Playing a voice note (Record)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone listen hear button
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To play back a voice note:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Press the external {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=PLAY}
+ button to start from the beginning of the recording. The EPOC machine will turn on, if necessary.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}To pause playback, press the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=PLAY} button again.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To play back a voice note using the Record program:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Open the file named 'Voice notes'.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b PLAY} button or press the Spacebar to begin playing the file.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Tap the {\cs33\b STOP} button or press the Esc key to stop playing the file.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting & erasing voice notes (Record)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone erase remove cut delete
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To erase the entire contents of a voice note, open the file in EPOC Record and select {\cs33\b Erase all} on the {\cs33\b Record} menu.
+\par To erase the most recent portion of a voice note:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Open the voice note file (unless the file has been renamed, it is called 'Voice notes').
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Play through the file and press the {\cs33\b STOP} button at the end of the section to be kept.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select {\cs33\b Crop} on the {\cs33\b Record} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To delete a voice note, delete the file from the System screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Moving through voice notes (Record)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone rewind fast forward move skip replay REW FFWD
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If a sound is not being recorded or played:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To rewind through the file in 2-second jumps, press and release the {
+\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=}{\cs34\scaps\f25\cf13\revised\revauth1\revdttm1178913856 STOP}{\cs34\deleted\scaps\f25\cf13\revauth1\revdttm1178913856 stop}
+ button once; you'll hear a click for each jump. To stop rewinding before the beginning press {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=STOP} again.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To rewind to the beginning, press and hold the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=STOP} button.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When the start of the file is reached a beep sounds.
+\par During playback:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To replay the current message, press and release the {\cs34\scaps\f25\cf13 
+ARCHIVE=DICT NAME=PLAY} button.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To play the next message, press and hold the {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=PLAY} button.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Press {\cs34\scaps\f25\cf13 ARCHIVE=DICT NAME=PLAY}{\cs33\b  }again within \'be second to jump to the previous or next message.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the file contains only a single message, the above actions jump backw
+ards or forwards 5 seconds.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Dict/Dictaphone.txt	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,10 @@
+Put the play, record and stop symbols in front of the bracketed record, play and stop/rewind
+in the Quick Start topic.
+
+In other topics, replace the word play, record or stop with the appropriate symbols.
+Note that these words are lower case bold in the original W4W file.
+The uppercase words refer to the screen buttons in the Record program and should not
+be replaced.
+
+In total the play (triangle) should occur 8 times, the record (round) 7 times and
+the stop (square) 4 times.
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Dict/PLAY.MBM has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Dict/RECORD.MBM has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Dict/STOP.MBM has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/EPOCHlp.order	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,23 @@
+general.using-help
+general.hints-and-tips
+general.setting-up-the-epoc-machine
+general.entering-information
+general.keypresses
+system.quick-start
+word.quick-start
+sheet.quick-start
+contacts.quick-start
+agenda.quick-start
+time.quick-start
+jotter.quick-start
+calc.quick-start
+dialling.quick-start
+sketch.quick-start
+data.quick-start
+extras.quick-start
+comms.quick-start
+bombs.quick-start
+record.quick-start
+program.quick-start
+spell.quick-start
+voice-note.quick-start
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Gen--hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,552 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon28\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}
+\f5\fs20\lang2057 \sbasedon0\snext24 List Number 2;}{\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon26\snext27 Definition Definition;}{\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext29 Important;}{\s30\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon24\snext30 List Manual 2;}{\s31\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext31 
+Comment;}{\*\cs32 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs33 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{\s34\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext34 footer;}{\*\cs35 \additive\fs16 \sbasedon10 
+annotation reference;}{\s36\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext36 annotation text;}{\s37\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext37 List Manual;}{\s38\sb360\sa240\keepn\widctlpar 
+\b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext39 Context;}{
+\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}
+{\info{\title @@TTL:SERIES 5 HELP FILE - GENERAL}{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo5\dy1\hr17\min12}{\revtim\yr2000\mo4\dy25\hr16\min30}{\version2}{\edmins2}{\nofpages19}{\nofwords5385}{\nofchars30698}{\*\company Psion SW}
+{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 18{\super th} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 GENERAL{\revised\revauth1\revdttm1178913821 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913821 0x10000171}
+\par \pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 ## There may be a button for tasking away from help.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 How to use Help
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913821 general.using-help
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 searching assistance scrolling scrollbar card browser searching close help closing help
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To find help on a particular subject, type the subject in the '{\cs32\b Find:}' box and press Enter. A list of topics containing this subject appears in the "card browser".
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+To find help on a particular program, type the program name followed by an exclamation mark, e.g. Agenda!
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 It isn\rquote t necessary to type in whole words for searching - just a few letters is enough.
+\par The text will normally be shown highlighted where it occurs in the help card. Sometimes cards which don't contain the text but are still relevant will also be listed.
+\par If the word is not found, try tapping on {\cs32\b Find in all text} on the {\cs32\b Toolbar}.
+\par {\cs32\b To scroll help text:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 drag the {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=vertical-scrollbar}
+ on the "scroll bar" to the right of the card, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}tap on the {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=up-button} or {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=down-button} on the scroll bar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}press the {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=up-key} or {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=down-key} key
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To move between help topics for the subject:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 tap the {\cs32\b Prev} or {\cs32\b Next} buttons on screen, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}press the {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=left-key} or {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=right-key} key.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the scroll bar on the right of the screen to move up and down the "card browser", and tap directly on the topic of interest.
+\par {\cs32\b To cancel the selection of topics, press Esc twice.}
+\par Help has its own "Menubar" of "commands" which can be used to print topics and change the way the Help looks.
+\par The Help database doesn\rquote t have to be closed to use the EPOC machine as usual; just tap on {\cs32\b Go back}, to keep Help open and use the machine as well. Press the Help key at any time to return to the Help database.
+\par To close the Help database, select {\cs32\b Close} on the {\cs32\b File} menu, or press Ctrl+E.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Read me first
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913821 general.hints-and-tips
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+You can set up the EPOC machine to switch on automatically when you press a program icon or switch on and off when you open and close the case, by selecting the {\cs32\b Switch on/off} icon on the {\cs32\b Control panel}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap on the clock to change from analog to digital (with date).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Shift+Ctrl+C to see a list of accented and special characters, that aren't on the keyboard.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Word:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Initially new files take their settings from a 
+standard template. To make your own templates, set up the file as you wish, then use {\cs32\b Save as template} from the {\cs32\b More} cascade on the {\cs32\b File} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Remove the tick from {\cs32\b Wrap to screen} on the {\cs32\b View} menu to see your file as WYSIWYG.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Sheet:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Use Ctrl+C to copy a Sheet formula from the help information, then paste it into your spreadsheet.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Drag the line on the right edge of a column heading or the bottom edge of a row heading to change the column width or row height.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}When in the Graph view, tap on parts of the graph to edit the settings.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Data:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Drag the right hand edge of a column heading in the List view to change the column width (if a column is hidden, tap to the right of the line to drag it into view again).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Drag the bottom edge of a row (at the left side) to change the height for all rows.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Highlight some text in the Card view, press Ctrl+C then Ctrl+V (copy then paste). The text appears in the '{\cs32\b Find:}' box and all the entries matching that text will be found.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Agenda:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+You can set a General preference so that tapping twice in a time slot inserts a handwritten entry instead of text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the Spacebar to go to and from today's date.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap the page "dog-ears" to turn the page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To see your Agenda entries as a list, use {\cs32\b Find} on the {\cs32\b Edit} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Insert a Sketch object and use clipart to denote the type of Agenda entry, e.g. balloons for a party. Set the standard scaling factor in General preferences.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Agenda automatically reclaims the space used by entries you delete or change.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Jotter:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Just start typing in the List view to add a new entry.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Time:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap twice on an alarm to edit it.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap on the next alarm text in the Alarms view to get a list of pending alarms.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap or drag on the map to go to nearest city.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap on the distance in the Map view to change distance units.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Calc:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Scroll through previous calculations in the Scientific view using the up and down arrows.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Sketch:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use {\cs32\b Rotate} or {\cs32\b Flip} on the {\cs32\b Transform}
+ menu to get further clipart variations.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the Ctrl key while drawing an ellipse to produce a circle or while drawing a rectangle to produce a square.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Drag a corner "handle" to resize a selection and keep the "aspect ratio" (i.e. the ratio between the height and the width).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the pen to position the selection in roughly the right place, then use the arrow keys to line it up exactly.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}You can trace over a paper drawing in Sketch.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b In Spell:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use Ctrl+up or down arrow keys to jump between the {\cs32\b 
+Word to look up:} box and the main screen.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b Infrared:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+You can only send entries from one Data file to another when individual labels have the same name, type and length. If they do not, you might instead send the information to a Word file on the receiving machine, and copy it from there.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b Files and programs:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Tap on the name in the top right corner of the screen to see a list of open files and programs. Press Ctrl+Fn and tap the System icon to cycle round the open files and programs.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}
+If you've removed a memory disk, you may find that files open on that disk can't be closed. If you need to close them, press Shift+Ctrl+E in the list of open files - note that you'll lose any changes made since the last time you saved the file.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting up the EPOC machine
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913822 general.setting-up-the-EPOC-machine
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 setup set up owner password control panel
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Before using the programs, tap the {\cs32\b System} icon, and then tap {\cs32\b Control panel} on the {\cs32\b Toolbar} on the right hand side of the screen.
+\par Each icon in the Control panel displays a "dialog" where you change machine settings.
+\par To make best use of the programs, set up Time & date, International, Screen (contrast) and Password.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Basics: Entering information
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913822 general.entering-information
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 open file entry
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap on the program icon for the type of information which is to be entered, e.g. tap on 'Word' to type a letter.
+\par If this is the first time that you have run the program, you'll see a blank "page". If information has been entered, the information which was being worked on the last time the program was open is displayed.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+For programs that don't have "pages" the same principle applies - the same view is displayed as the last time the program was used.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In most programs, you can start typing straight away. In others, e.g. in EPOC Data, you will need to select a 'New entry' command first.
+\par Use a program's menu commands to format and manipulate the information entered in it. Commands with ... after their names display a "dialog" in which settings can be changed.
+\par The information entered in programs is stored in "files", e.g. each letter typed will be an EPOC Word file. Use the commands on the {\cs32\b File} menu in programs to open, close, save, and create new files.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913822 general.keypresses
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 hotkey hot-key accelerator shortcut page down caps lock zoom screen calendar date Fn Ctrl arrow keys backlight contrast shift tab pgup pgdn page up page down
+\par \pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 ##Remove and replace as appropriate
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses for the EPOC machine are:
+\par Ctrl+M - cycle through the screen zoom levels.
+\par Shift+Ctrl+M - cycle the other way through the zoom levels.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The notation Ctrl+M means 'hold down the Ctrl key and press M at the same time'.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b For moving around the screen:
+\par }Fn+up arrow key or 'Page up' (PgUp) - move up the screen by one page.
+\par Fn+down arrow key or 'Page down' (PgDn) - move down the screen by one page.
+\par Fn+left arrow key or 'Home' - go to the far left of the screen.
+\par Fn+right arrow key or 'End' - go to the far right of the screen.
+\par {\cs32\b Switching between files & programs:
+\par }Fn and tap System - go to the last open file or program which has been used.
+\par Ctrl+Fn and tap System - cycle round the open files and programs.
+\par Ctrl+Fn+Shift and tap System - cycle the other way.
+\par Ctrl and tap System - display the list of open files and programs.
+\par Fn and tap program icon - open a new file in the standard folder.
+\par Shift+Fn and tap program icon - open a new file in the current folder.
+\par Ctrl and tap program icon - open the corresponding program on the Extras bar.
+\par {\cs32\b In some programs:
+\par }Ctrl+Z - undo the last action.
+\par Ctrl+Y - redo the action that was last undone.
+\par Ctrl+X - cut (or "move" for files and folders on the System screen).
+\par Ctrl+C - copy (including files and folders).
+\par Ctrl+V - paste (including files and folders).
+\par Ctrl+B - make text bold.
+\par Ctrl+I - make text italic.
+\par Ctrl+U - underline text.
+\par {\cs32\b When editing text:
+\par }Shift+Ctrl+F - set font.
+\par Shift+Ctrl+C - insert special character.
+\par Ctrl+nnn - insert special character (nnn is the code displayed in the Insert special character dialog).
+\par Shift+Ctrl+O - insert object.
+\par Shift+Ctrl+J - format object.
+\par Shift+Ctrl+Z - edit object.
+\par {\cs32\b On dialog lines with "number selectors":
+\par }Left and right arrow keys (or M and ?) - decrease or increase a number by 1.
+\par Shift+M and Shift+? keys - decrease or increase a number by 10.
+\par {\cs32\b Wherever a date is entered:
+\par }Tab - display the built-in calendar and browse for dates.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The characters and functions on the front of the keys are accessed by holding down the Fn key, and then pressing the relevant key:
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Fn+Tab (Caps) - switch between upper and lower case letters.
+\par Fn+Spacebar (Backlight) - switch the screen light on and off.
+\par Fn+, (Help) - display help information.
+\par Fn+M (contrast -) - make the display lighter.
+\par Fn+? (contrast +) - make the display darker.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Accented characters
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 accents grave acute circumflex umlaut tilde fn shift
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 These are the keypresses used to insert accented characters:
+\par Fn+Z, letter - umlaut/diaeresis
+\par (e.g. Fn+Z, followed by E gives \'eb)
+\par Fn+X, letter - grave
+\par Fn+C, letter - acute
+\par Fn+V, letter - tilde
+\par Fn+B, letter - circumflex
+\par Shift+' - a tilde on its own.
+\par Use Fn+Z, Shift+letter to give upper case letters.
+\par Fn+Q, A - \'e5
+\par Fn+Q, C - \'e7
+\par Fn+Q, D - \'f0
+\par Fn+Q, E - \'e6
+\par Fn+Q, O - \'f8
+\par Fn+Q, T - \'de
+\par Use Fn+Q, Shift+letter to give upper case letters.
+\par Fn+Q, L - \'ab
+\par Fn+Q, P - \'a3
+\par Fn+Q, Q - \'bf
+\par Fn+Q, R - \'bb
+\par Fn+Q, S - \'df
+\par Fn+Q, X - \'a1
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The EPOC Data program searches for characters independent of any accents.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+Press Shift+Ctrl+C to see a list of accented and special characters, that aren't on the keyboard.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Menus & commands
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 options menu bar shortcut
+\par \pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 ##Replace keypress as appropriate
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap on the {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=menu-icon} icon or press the Menu key to see the "Menubar" of commands for a program.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on the menus and commands to select them.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The arrow keys can also be used to select a command, then press Enter to confirm the selection.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A command with a {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=right-arrow} next to it (a "cascading" command) displays further commands when selected.
+\par Some commands do something immediately (e.g. Zoom in), while those with ... after their names display a "dialog" in which further information is entered or settings are selected.
+\par Some commands have "shortcut keypresses" for selecting them. These are shown beside the command names on the menu; e.g. Ctrl+M, which means hold down the Ctrl key and press the M key at the same time.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Dialogs
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 check box radio button arrow menu save button dialogue command calendar selector tick box windows esc
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 "Dialogs" are displayed whenever information needs to be entered, often after a menu command has been selected or a Toolbar button tapped.
+\par To move between lines in a dialog, press the up and down arrow keys. Some dialogs have more than one "page"; just tap on the tab at the top of the page, or move the highlight up to the tab and press the left and right arrow keys to move between them.
+
+\par {\cs32\b Dialog controls:}
+\par {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=text-box} A "text box" where information is entered.
+\par {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=choice-box} A "choice list" where you select from a list of settings. Use the {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=left-key} or {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=right-key}
+ to change the setting. Alternatively, tap the box or press the Tab key to see the full list, and then select the required setting by either tapping it or using the arrow keys and pressing the Enter key.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the required option is known, type the first few letters to move to it immediately.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=date-box} A "date box" where dates are typed in. Press the Tab key to view a calendar and browse for dates.
+\par {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=number-box} A "number selector" where a number is selected. Use the left and right arrow keys to increase or decrease the number by 1; use Shift+M and Shift+? keys to increase or decrease by 10.
+\par {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=checkbox-ticked} A "check box" which can be selected or de-selected. Tap on the box, or press the Tab key to add or remove the tick that shows it's selected.
+\par {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=radio-on-off} A "radio button" that you select. Tap on the button next to the required option, or press Tab to move the selection between the options.
+\par To save the information in a dialog, press the {\cs32\b OK} "button", or Enter.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Some dialogs may use a "{\cs32\b Save}" button labelled something other than {\cs32\b 
+OK}; the equivalent keypress is displayed underneath it.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you do not want to save the information, press the {\cs32\b Cancel} button, or Esc.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Some dialogs have other buttons that display further dialogs when selected.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To move the dialog box around on the screen to make things under it visible, position the pen in the grey title area and drag it.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cutting, copying & pasting
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 cut paste bring move document move folder move file copying Multiple Choose Tagging Marking Directory Directories backspace clear clipboard several
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Select the {\cs32\b Cut}, {\cs32\b Copy} and {\cs32\b Paste} commands on the {\cs32\b Edit}
+ menu or tap the appropriate icon on the left of the screen, to move and copy information between files and programs or to move and copy files or folders.
+\par {\cs32\b Information within EPOC programs:}
+\par If you highlight information and select {\cs32\b Cut} or {\cs32\b Copy}, it is copied to the "clipboard", a separate area where information is temporarily plac
+ed (text deleted using backspace is not copied to the clipboard). Insert the information from the clipboard at the cursor position using {\cs32\b Paste}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The information stays on the clipboard until something else is cut or copied, so the same information can be pasted many times.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 EPOC Sheet has a {\cs32\b Paste special} command for inserting formulae and formats in a number of ways.
+\par {\cs32\b To cut (move) or copy files or folders}, go to the System screen and:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the item(s) to be moved/copied.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To select a consecutive lis
+t of items, highlight the first one, hold down the Shift key, and highlight the last one. To select non-consecutive items, hold down the Ctrl key and highlight each file/folder in turn (by tapping or pressing the Spacebar). To select all the items in the 
+current folder, use {\cs32\b Select all} on the {\cs32\b Edit} menu. To deselect items, press the Esc key.
+\par \pard\plain \s37\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Select the {\cs32\b Cut\~(move)} or {\cs32\b Copy} command.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The selected files and folders are copied to a separate "clipboard".
+\par \pard\plain \s37\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Go to the d
+estination disk drive and folder. If you copy an item within the same folder, a copy number is added to the name of the new item; e.g. "Report" is copied to "Report(01)".
+\par 4.\tab Select the {\cs32\b Paste} command.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Moving or copying a folder includes the contents of the folder.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To clear the clipboard
+\par }To remove information, files and folders from the clipboard, select {\cs32\b Clear clipboard} from the {\cs32\b Edit} menu in the System screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting up printers
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 hard copy Printer via PC HP LaserJet HP DeskJet Epson Citizen Canon Bubblejet serial port parallel Infrared printer model default printer settings
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can print from the EPOC machine to a serial or parallel printer using the serial port, or to an Infrared (IrDA) enabled printer using the Infrared port.
+\par You can also print to a file; which you can transfer somewhere else (e.g. a PC) for printing later.
+\par {\cs32\b To set up the standard printer:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap {\cs32\b Control panel}
+ on the Toolbar in the System screen and then select the Printer icon.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the required settings.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 If you have selected the 
+serial printer and want to change the serial port settings, press the {\cs32\b Settings} button and change the settings following the instructions in the printer\rquote s manual.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}If you have selected printing to file, then the file will normally be created in the root of the 'C' disk drive and given the name 'PrintFile'. To change this, press the {\cs32\b Settings}
+ button and select a new filename or folder.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To set up the printer for an individual program:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs32\b Print setup }from the {\cs32\b Printing} cascade on the {\cs32\b File
+} menu in an open file, and then press the {\cs32\b Setup} button.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the printer on the Printer model line.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If you have EPOC CONNECT you can use a printer connected to a PC. To do this select {
+\cs32\b Printer via PC}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Printing from programs
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 hard copy printing a file
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can print from the EPOC Word, Sheet, Agenda, Data, Sketch and Program editor programs.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Before printing the document can be previewed to see how it will look when printed.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To print information:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs32\b Print }from the {\cs32\b Printing} cascade on the {\cs32\b File}
+ menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Enter the range of pages to print and the number of copies.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+If necessary, change the printer and the method by which you want to print by pressing the {\cs32\b Printer} button.
+\par \pard\plain \s37\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs32\b Print} to start printing the document.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can cancel the print by pressing the {\cs32\b Cancel} button in the {\cs32\b Print
+} {\cs32\b progress} dialog.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}If you see the message "Cannot open port, Infrared or communications program may be using it", it's because the serial port is set up for some other program. Use {\cs32\b Link to desktop} on the {\cs32\b Tools}
+ menu in the System screen and set the {\cs32\b Link} line to 'Off'.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Print preview
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 page layout printing a file
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you want to print the current file, you can preview it first on the screen to check the page layout using {\cs32\b Print preview }from the {\cs32\b Printing} cascade on the {\cs32\b File} menu.
+\par {\cs32\b In the print preview screen:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To change the page layout, press {\cs32\b Setup} and select {\cs32\b Page}.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To change the printer settings, press {\cs32\b Setup} and select {\cs32\b Printer}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To change the number of pages shown in the preview and to show or hide margins, press {\cs32\b Setup} and select {\cs32\b Preview}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b If the file comprises more than one page:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press the left and right arrow buttons to see the previous and next pages.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the {\cs32\b Go\~to} button to go to a specific page.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When you are ready to print the file, press {\cs32\b Print}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Page layout for printing
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 file name margin header footer page size landscape portrait page numbers portrait landscape page layout
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The page layout for printing can be set up from any program using {\cs32\b Page setup }from the {\cs32\b Printing} cascade on the {\cs32\b File} menu or by tapping the {\cs32\b Setup} button i
+n a print preview followed by {\cs32\b Page}.
+\par In the {\cs32\b Page setup} dialog you can specify:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs32\b Page size}
+ - choose from one of the standard page sizes or select Custom and specify your own page size.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs32\b Portrait} or {\cs32\b Landscape orientation} - in portrait the height is greater than the width, in landscape the width is greater than the height.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs32\b Page margins} - information will be printed within the margins.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs32\b Header} - text that appears in the top margin of the page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs32\b Footer} - text that appears in the bottom margin of the page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs32\b Other} - specify which page to start numbering on, and whether or not to print a header and footer on page one.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When typing the header or footer the normal formatting tools can be used to select the bold, italic and underlined emphases.
+\par Press the {\cs32\b Format} button to change the font, text size, text alignment or colour, set tab positions, or add a border to headers and footers.
+\par Press the {\cs32\b Insert} button to include the filename, an object (e.g. a sketch or text from EPOC Word), page number, the total number of pages in the document (e.g. if you want the footer to be 'page 1 of 4'), or the current date or time.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+You can also specify the distance between the top of the page and the header text, and the distance between the bottom of the page and the footer text.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Passwords on files
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Security protection password protecting forget revert to saved
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Some programs allow you to set passwords for individual files. Passwords are case sensitive, so 'pass' is not the same as 'Pass'.
+\par {\cs32\b To set a password for a file:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 While you are in the file, select {\cs32\b Password} on the {\cs32\b File} menu.
+
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Type the password twice in the password dialog.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Close the file.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When the file is opened again you will first have to type in your password.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If you forget your password, the file can\rquote 
+t be opened again. If you set a password for an open EPOC Word file, the program immediately saves the file in a password-protected form. You will not then be able to revert to an earlier version.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Switching views in a program
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Some programs have a number of different views.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs32\b Switch view} cascade on the {\cs32\b View}
+ menu to see a list of available views; select one of them to switch to that view.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Some programs also have buttons on the Toolbar for selecting views.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}You can also use Ctrl+Q to move between views.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Saving & reverting to saved
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 save as revert to saved
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can normally leave programs and files open when you switch off the machine.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To save a file without closing it, select {\cs32\b Save }from the {\cs32\b 
+More} cascade on the {\cs32\b File} menu in a program.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To save the file with a different name, select {\cs32\b Save as }from the {\cs32\b More} cascade on the {\cs32\b File }
+menu. You will be asked for a filename, and the folder and disk drive in which to save the file.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To undo all the changes made since the last time the file was saved, use {\cs32\b Revert to saved} from the {\cs32\b More }cascade on the {\cs32\b File }menu. Not all the programs have this option.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 When a file is closed, it is automatically saved.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Creating a file
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 open filename new file name New Document Path Name application creating files program file extensions
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Files can be created from the System screen, or from within programs. As a general rule:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Create a file from the System screen to start with the standard EPOC machine settings.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Create a file from within a program to use the settings you have already customised for an existing file, e.g. Agenda entry preferences in EPOC Agenda.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To create a new file from the System screen:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Move to the folder within which you wish to create the file.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs32\b (Create) New file} on the {\cs32\b Toolbar} or {\cs32\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select the EPOC program to be used to create the file.
+\par {\*\bkmkstart here}{\*\bkmkend here}{\pntext\pard\plain\f5\fs20\lang2057 4.\tab}A filename is suggested. If you do not want to use this, type another one. Then press {\cs32\b OK}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If an existing file is already open within the program, and you want to leave it open, for example, in order to copy and paste from the existing file to the new file, hold down the Fn key while pressing {
+\cs32\b OK}.
+\par A preference can be set in the System screen to do this without using the Fn key.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 File & folder names
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 open filename 
+folder name new file name New Document Path Name application creating files program file extensions Desktop Root subdirectory tree subfolder create new folder create new directory create directory
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The maximum length of a filename, including the disk drive letter, and the names of the folders within which the file is contained (known as the "path"), is 256 characters.
+\par The maximum length of a folder name, including the path, is 252 characters.
+\par A file or folder name can contain spaces.
+\par The following characters cannot be used in a file or folder name: < > : / \\ * ?
+\par File extensions are not required.
+\par You can have up to 64 files and folders in the root of 'C'.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Opening files & programs
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 desktop running file name files launching start application filename open files closing files close files
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To open a file from the System screen:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Tap the icon on the Program icon, or tap the Extras icon first to display more program icons.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+When you tap on a program icon on the Program icon bar, the program will attempt to open the
+ last file used. If the file has been moved, renamed or deleted, a new file will be created in the "standard folder" instead. To open the last file you were using, look for it in the System screen and open it there.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Highlight the filename and tap it or press the Enter key.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+To open a number of files of the same type, e.g. so that you can copy and paste between them, hold down the Fn key while opening the file (you can set a preference in the System screen to be able to do this without using Fn). To cyc
+le through the open files, tap on the program icon.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b To open a file from within a program:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs32\b Open file} on the {\cs32\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the name of the file and the folder and disk where it can be found:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the {\cs32\b Name}
+ line or move to it and press Tab to see a list of files, in the selected folder and disk, for the program you are in.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap the {\cs32\b Folder} line or move to it and press Tab to see folders on the selected disk, displayed as a "tree" structure. Tap on the required folder, or highlight it and pre
+ss the Enter key. Use the up and down arrow keys to select a folder; press Tab to open or close it.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap on the {\cs32\b Disk} line or move to it and press Tab to see a list of available disk drives.
+\par \pard\plain \s37\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab When the required filename is displayed, press {\cs32\b OK}.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Closing files & programs
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Exit Killing Quit end Task List close files tasklist opening files open files
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can normally leave programs and files open when the EPOC machine is switched off. When you switch on again, you'll see the last thing you were working on.
+\par However, you might want to close a file or program to free up some memory, or to restrict access to a password-protected file.
+\par To close a file from within a program, select {\cs32\b Close} on the {\cs32\b File} menu.
+\par To close a file from the System screen, highlight it and select {\cs32\b File }from the {\cs32\b Close }cascade on the {\cs32\b File} menu. Then press {\cs32\b Yes}.
+\par Alternatively, display the list of open files and programs by holding down the Ctrl key and tapping the System icon, or by selecting {\cs32\b List open files} on the {\cs32\b File} menu on the System screen. T
+hen select the program or file you want to close and press {\cs32\b Close file}.
+\par Closed files are saved automatically.
+\par To close a file without saving changes you have made, press Shift+Ctrl+E with the file selected in the list of open files. (This may be useful if the disk the file was opened from is no longer present.)
+\par You cannot close the System program.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Switching between files & programs
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 multitasking move changing switch task switching
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To move to a different program:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the relevant program icon on the Program
+ icon bar. If the program is file-based, e.g. EPOC Data or EPOC Word, the program displays the last file you were looking at.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Fn and tap the System icon to go to the last open file or program which was in use.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Ctrl+Fn and tap the System icon to cycle round the open files and programs. Press Ctrl+Fn+Shift and tap System to cycle the other way.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Display the list of open files and programs by holding down the Ctrl key and tapping the System icon, or by selecting {\cs32\b List open} {\cs32\b files} on the {\cs32\b File}
+ menu. To move to a file or program in the list, highlight it and press the {\cs32\b Go to file} button.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To switch between open files in the same program, tap the program icon.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Selecting text
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 highlighting selection paragraph sentence select all
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can select text in many programs and dialogs by highlighting it. Place the cursor in the text and extend the highlight using the following keypresses:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Shift+tap at the other end of the area you want to select - an area of any size.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+left and right arrow keys - one character at a time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+up and down arrow keys - one line at a time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+Ctrl+left and right arrow keys - one word at a time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+Ctrl+up and down arrow keys - one paragraph at a time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+Fn+right arrow key - to the end of the line.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+Fn+left arrow key - to the beginning of the line.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+Fn+down arrow key - to the end of the page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shift+Fn+up arrow key - to the beginning of the page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use {\cs32\b Select all} in the {\cs32\b Edit} menu (if available) to select the entire file.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting information
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 backspace Remove Removing Clear Erase Erasing undeleting subfolders subdirectories contents
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete information from a file, highlight it and press Del or use the command on the {\cs32\b Edit} menu.
+\par The Del key is also backspace, used when editing text.
+\par To remove files and folders highlight them on the System screen, and press the Del key or select {\cs32\b Delete} on the {\cs32\b File} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+When deleting folders, remember that the entire contents of the folders, including all the other folders contained within them and all their files, will also be deleted. You cannot undo the deletion of any files or folders.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To remove all the files and folders from a Memory disk, select {\cs32\b 
+Format disk} on the {\cs32\b Disk} menu in the System screen and select the 'D' drive.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Zooming in & out
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 enlarge shrink reduce magnify
+\par \pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 ##Change as appropriate
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can change the size of text and pictures on the screen by tapping on the magnifying glass symbols on the left side of the screen or by selecting {\cs32\b Zoom in} and {\cs32\b Zoom out} on the {\cs32\b 
+View} menu.
+\par You can set a specific zoom level in some programs using the command on the {\cs32\b View} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Calendars
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 today dates months years jump to weeks
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When entering a date in a dialog the built-in calendar can be used to select the required date. To do this:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on the Date line in the dialog; or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Move the highlight to the Date line and press Tab.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You will see the calendar with the current month. Today's date is circled, and the currently selected date marked by a highlight.
+\par Highlight the required day and tap it or press Enter to return to the date dialog with this date filled in.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Use the buttons in the top corner of the calendar or press the Tab key to see a 1, 3 or 12 month calendar.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap on a day, or use the arrow keys to move around the days.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Shift+up arrow key or Shift+down arrow key to move to the same date in the previous or next year.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap on the "corners" at the bottom of the \ldblquote pages\rdblquote  of the calendar or use Fn+up arrow key or Fn+down arrow key to move to the previous or next month, 3 month or 12 month calendar.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the Spacebar to go to today's date.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Importing files
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 merge exporting file formats conversion convert
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Some programs allow you to insert information of a different format into the current file. This is known as "importing".
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Importing is not the same as "merging"; merging allows you to combine information that is in the same format.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To import information, select {\cs32\b Import }from the {\cs32\b More} cascade on the {\cs32\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exporting files
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 merge importing file formats conversion convert
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Some EPOC programs allow you to convert the information in the current file into another format. This is known as "exporting".
+\par To export information, select {\cs32\b Export }from the {\cs32\b More} cascade on the {\cs32\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Undoing changes
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 undelete deleted remove mistake oops error revert to saved
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Some programs allow you to undo changes made to a document, using {\cs32\b Undo} on the {\cs32\b Edit} menu. Note that this must be done straight away.
+\par Use {\cs32\b Undo delete} in EPOC Word or EPOC Program (and Ctrl+Z in some dialogs) to undo the last block of text deleted.
+\par Use {\cs32\b Undo} in EPOC Sheet to undo the last addition, change or deletion.
+\par Use {\cs32\b Undo delete} in EPOC Data to undo the last entry deleted.
+\par Use {\cs32\b Undo} in EPOC Sketch to undo the last 5 actions.
+\par If you have changed a file, but do not want to keep any of the changes, select {\cs32\b Revert to saved }from the {\cs32\b More} cascade on the {\cs32\b File}
+ menu. This takes you back to the file as it was when last saved or to the file as it was when you opened it.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Undo does not work on a single character deleted with the Del key unless it was a picture or other object. Undo will not work on selections removed with the {\cs32\b Cut} command (use {\cs32\b Paste}
+ instead), or if anything else has been copied or deleted since.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Spell checking a file
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 spellchecker rectify spelling checker ignore all correct all add to dictionary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To check a particular word, phrase, or section of text, highlight it. If you don't highlight part of the file, the complete file will be checked from the beginning.
+\par To run the check, tap the {\cs32\b Spell} button on the {\cs32\b Toolbar}, or select the command on the {\cs32\b Tools} menu.
+\par If a word is not recognised, you can:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press the {\cs32\b Correct} button and move to the {\cs32\b Suggestions}
+ line. Tap on this line or press the Tab key to display the list of suggestions, and select the word to be used instead. Press {\cs32\b Correct} to replace this occurrence, or {\cs32\b Correct all} to replace all occurrences of the word.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the {\cs32\b Skip} button to bypass the current occurrence of the word, or {\cs32\b Skip all} to bypass all occurrences of the word (you might want to do this if it is a name or part of an address).
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press the {\cs32\b Add to dictionary} button to make the word available as a suggestion in future spell checking.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press {\cs32\b Stop} to halt the spell check.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Objects
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 inserting objects linking attaching embedding OLE
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+An "object" is information created in one EPOC program, that can be inserted into a file created in another EPOC program, e.g. a sketch inserted into a Word file. You can insert an object into a Word file, or into a Data or Agenda entry.
+\par To insert an object, select the command or button, and the object type you want to insert.
+\par This opens EPOC Word, Sheet, Sketch or Record, where you can create a new memo, spreadsheet, graph, picture or sound recording (you can merge in an existing Sketch or Record file). You may also be able to insert an object created in another program.
+
+\par When you are finished, tap on {\cs32\b Done} to return to the original program.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+An inserted Sheet object is displayed as a table or graph according to which view was active when you return.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Once an object has been inserted, use the formatting command or button to resize or scale it.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting objects
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 resize stretch scale trim display as icon cropping scaling appearance format object format picture spreadsheet graph
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can change the way a picture or spreadsheet looks when it is inserted in a file in another EPOC program.
+\par {\cs32\b To resize the object:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the object you want to format.\line 
+"Handles" appear on the corners and sides of the object.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap on one of the handles and drag it to resize the object.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs32\b For other formatting options:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the object you want to format.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the command or button to format the object or press the keys Shift+Ctrl+J.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Then in the {\cs32\b Format object} dialog:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To display a picture or other object as an icon (a small symbol) in order to save screen space, tick the {\cs32\b Display as an icon} box on the {\cs32\b Appearance} page. This will also affect how the object is printed.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To resize a picture or graph without losing any of the content, either set a new height or width, or specify a new size as a percentage of the original on the {\cs32\b Scaling} page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To trim the sides of the object without losing any of the content, specify the percentage that you want to cut from each edge on the {\cs32\b Cropping} page.
+\par \pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 ## Watch out for the formatting in the next paragraph, especially the coloured bit.##
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting text
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 typefaces typestyles cross out grey gray colored text colours emphasis emphases italics set fonts bold underlined strikethrough printer point
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The appearance of text can be changed by making it {\cs32\b bold}, italic or underlined or by using a different font, font size or colour. You can also make the text superscript or subscript or strikethrough.
+
+\par {\cs32\b To make text bold, italic or underlined:}
+\par First highlight the text, then:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To make the text bold, tap {\cs33\scaps\f25\cf13 
+ARCHIVE=GENERAL NAME=bold-button} or press the keys Ctrl+B.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To make the text italic, tap {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=italic-button} or press the keys Ctrl+I.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To underline the text, tap {\cs33\scaps\f25\cf13 ARCHIVE=GENERAL NAME=underlined-button} or press the keys Ctrl+U.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the same keypresses to undo the format - e.g. to change bold text to normal text, tap the button or press the keys Ctrl+B.
+\par You can also use the same keypresses while typing, to format the text as you go along.
+\par {\cs32\b To select a different font or font size:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Highlight the text you want to change.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the {\cs32\b Font} command or button or press the keys Shift+Ctrl+F.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}In the {\cs32\b Set font} dialog on the {\cs32\b Font} page:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select the required font.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select the font size. Font sizes are measured in points: 10 or 12 point is generally a good size for printed text, and 16 point is suitable for headings. There are 72 points to an inch.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick the appropriate boxes to make the text bold, italic or underlined.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The fonts and font sizes which are available are determined by the settings on the printer being used.
+\par \pard\plain \s37\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 4.\tab On the {\cs32\b Other} page:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tick the {\cs32\b Strikethrough} box to put a line though the text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select the position of the text on the line.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select the text colour.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You can see what the text will look like on the {\cs32\b Preview} line.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Number formats
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 normal fixed scientific formats international currency decimal point decimal comma time format date format number format distance units
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the time, date, number, currency or distance formats, tap on {\cs32\b Control panel} on the {\cs32\b Toolbar} or {\cs32\b Tools} in the System screen and select the {\cs32\b International} icon.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Screen contrast
+\par \pard\plain \s31\sa120\widctlpar \i\f5\fs20\lang2057 ## Change as appropriate
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the screen contrast, use the keys Fn+M (lighter) and the keys Fn+? (darker).
+\par Alternatively, tap on {\cs32\b Control panel} on the {\cs32\b Toolbar} or {\cs32\b Tools} in the System screen and select the {\cs32\b Screen} icon. Then set the contrast level to a number between 1 and 50.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cannot open port message
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 troubleshooting help error message information message problems can't print serial port link to desktop
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If, when trying to print, you see the message "Cannot open port, Infrared or communications program may be using it", it's because the serial port is set up for some other program. Use {\cs32\b 
+Link to desktop} on the {\cs32\b Tools} menu in the System screen and set the {\cs32\b Link} line to 'Off'.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Access denied message
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 troubleshooting help error message information message problems serial port link to desktop
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you try to set {\cs32\b Link to desktop}
+ to 'Cable' or 'Infrared' and you see the message "Access denied", it's because a program such as Comms is using the serial port. You should close the program using the port and then try again.
+\par 
+\par }
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Bold-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Cascade.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/CheckBox-Ticked.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Choice-Box.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Date-Box.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Depressed-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Down-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Down-Key.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/General/General.txt	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,5 @@
+All pictures are marked in the 'General' document in the following format:
+
+<Picture.mbm>
+
+where 'Picture' is a Protea sketch file.
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Horizontal-Scrollbar.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Infrared-Icon.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Italic-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Arrow.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Key.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Left-Up-Down-Right-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Menu-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Menu-Icon.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Number-Box.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Radio-Off.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Radio-On-Off.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Radio-On.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Right-Arrow.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Right-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Right-Key.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Save-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Scissor-Icon.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Symbols page.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Text-Box.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Underlined-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Up-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Up-Key.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Vertical-Scrollbar.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/General/Zoom-Icon.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Hard-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,208 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - HARDWARE"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy11\hr16\min40}{\revtim\yr2000\mo4\dy25\hr16\min31}{\version2}{\edmins1}{\nofpages8}{\nofwords2289}{\nofchars13050}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: 4{\super th} March 1999
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Hardware{\revised\revauth1\revdttm1178913823 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913823 0x10007000}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 The EPOC machine pen
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ###This topic needs to be revised if the machine does not have a pen.
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 stylus pointer mouse click tap screen calibrate
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The EPOC machine has a pen that you should use to operate the touch-sensitive screen. It's specially designed not to harm the screen.
+\par ### Say where the pen is stored, how it\rquote s ejected and how you replace it in the holder.
+\par You can usually select something on the screen, simply by tapping it.
+\par To select text with the pen, put the pen on the first character you want to select and move the pen across the text to the last character you want to select; this is known as "dragging".
+\par You can also change some aspects of the display by tapping them, e.g. tap the clock in a program's Toolbar to change it from an "analog" to a "digital" clock.
+\par If you have difficulty selecting things with the pen, you may need to re-calibrate the screen. To do this, tap the {\cs33\b Control panel} button on the {\cs33\b Toolbar} in the System screen and select the {\cs33\b Screen} icon. Then press {\cs33\b 
+Calibrate} and follow the instructions on the screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Switching on & off
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Turn off Power voice note dictaphone back light screenlight screen light on/off backlight Automatic switch off switch on/off esc
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To switch the EPOC machine off, press the Off key, or select {\cs33\b Switch off} on the {\cs33\b Tools} menu in the System screen.
+\par The EPOC machine switches off automatically after xx minutes of not being used; this is to save battery power. To change this setting tap {\cs33\b Control panel} on the {\cs33\b Toolbar} in the System screen, and select the {\cs33\b Switch on/off} icon.
+
+\par If you set {\cs33\b Automatic switch off} to 'No' the EPOC machine will not switch off automatically. Do not select 'No' if you only use batteries - the batteries will run down if you inadvertently leave the EPOC machine turned on.
+\par 'If no external power' means the EPOC machine will switch off automatically only if it is being powered by batteries. If you are using a mains adapter, it will stay on.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Select the {\cs33\b Screen}
+ icon to change the 'Backlight automatic switch off' settings.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Disks & memory
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Freeing memory Desktop Show Bytes Kilobytes memory meter memory usage System memory Root c drive c disk d drive d disk drop down Show disk gauge C drive D drive current disk formatting memory gauge
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The folders and files displayed on the System screen are those on the current disk ('C' for the EPOC machine's internal drive, or 'D' for an external
+ disk). To view the files and folders on an external disk that is plugged into the machine, tap on the disk letter on the Title bar and select the alternative from the list, or select {\cs33\b Current disk|C }(internal) or {\cs33\b Current disk|D }
+(external) on the {\cs33\b Disk} menu.
+\par To display the amount of internal memory that is free, select {\cs33\b Show disk gauge} on the {\cs33\b View} menu on the System screen. To see how much memory is used and how much is free in kilobytes (K), select {\cs33\b Memory} on the {\cs33\b 
+Information} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 One K is just over a thousand characters of text. One megabyte (M) is a thousand K.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To display information about an external disk, select {\cs33\b Disk} on the {\cs33\b Information} menu.
+\par If you are short of memory on the internal drive, try removing unwanted files (or moving them to an external disk), closing a program you are not using or clearing the clipboard.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+To format an external disk (and lose any information that was previously on the disk), select {\cs33\b Format disk} from the {\cs33\b Disk} menu and select Disk D. {\cs33\b Do not format the C disk.}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Screen Backlight
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 screenlight back light screen light on/off
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ###This topic is relevant for machines with a backlight only.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The EPOC machine has a light in the screen (or "backlight") that you can switch on to make text on the screen more easily visible in poorly lit locations.
+\par To turn the backlight on and off: press the required key combination.
+\par The backlight switches off automatically after xx minutes of not being used; this is to save battery power.
+\par To change the Backlight setting: tap {\cs33\b Control panel} on the {\cs33\b Toolbar} in the System screen, and select the {\cs33\b Screen} icon.
+\par When using batteries as opposed to mains power, use the backlight sparingly, and keep its automatic switch off time set to a low value, to save the batteries.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Batteries & power
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 power dictaphone back light screenlight screen light RS232 RS 232 V24 V.24 link cable battery
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 EPOC machine takes the following types of batteries:
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Include a description of the batteries below.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 xx for the main batteries.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}xx for the backup battery.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A message will tell you when either of the batteries are getting low and need replacing.
+\par To prolong battery life:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Set the automatic switch off time to a lower value.
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ##Check the following note points for relevance to your machine. Also check the names.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Use the Backlight sparingly and set its automatic switch off time to a lower value.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}If the EPOC machine has a cable which allows you to connect it to a PC with EPOC CONNECT installed set the {\cs33\b Link to desktop}
+ to Off when you are not using the link. The EPOC machine uses more battery power when the {\cs33\b Link to desktop} is On, even if it is not being used.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}If the EPOC machine has external buttons for recording voice notes do not leave any of them pressed.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 For information about the batteries, select {\cs33\b Battery} on the {\cs33\b Information} menu on the System screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Alarms & other sounds
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 volume keyclick Try Reminder Warning Noise Record Erase Remove dialogue all sounds on
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To switch all the sounds that can be produced by EPOC programs off (with the exception of alarm sounds): tap {\cs33\b Control panel} on the {\cs33\b Toolbar} in the System screen and select the {\cs33\b Sound
+} icon. Then remove the tick from the {\cs33\b Sounds on} box.
+\par To turn alarm sounds off: go to the Time program, tap {\cs33\b Sound} on the {\cs33\b Toolbar}, and set it to 'Off'.
+\par In the EPOC Time and Agenda programs, you can select any of the EPOC machine's built in alarms, or use the EPOC Record program to create your own sounds (these then become automatically available to EPOC Time and Agenda).
+\par To hear an alarm sound: select{\cs33\b  New alarm }from the {\cs33\b Edit} cascade in the EPOC Time program, select the sound, and press the {\cs33\b Test sound} button.
+\par You can use the EPOC Record program to delete any alarms that you have created yourself, but you cannot delete the sounds supplied with the EPOC machine.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keyboard settings
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 setting key keys repeat delay repeat rate
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ##Reword this topic as appropriate.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the EPOC machine has a keyboard the delay time can be changed.
+\par Keyboard delay times work as follows:
+\par If you hold down a character key while typing, the character will be repeated after a short delay (the 'Initial delay time'). If you keep the key pressed, the character will be repeated again after another delay, the 'Subsequent delay time'.
+\par To change the keyboard delay settings, tap {\cs33\b Control panel} on the {\cs33\b Toolbar} in the System screen and select the {\cs33\b Keyboard} icon.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 External disks
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CF Compact flash Disk Floppy CompactFlash
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ##Reword or remove topic as appropriate.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 External disks are removable devices which can be used to provide a
+dditional space for storing files and folders created on the EPOC machine. External disks can be inserted in the D disk drive. You can save files and folders direct to External disks, or use them to back up files and folders from the EPOC machine's 'C' di
+sk.
+\par External disks can also be used to hold additional programs that can be selected from the Extras bar.
+\par Some types of disk are supplied ready formatted.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting to PCs
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Comms Communication Desktop on/off RS232, RS 232, V24, V.24 remote link to desktop cable
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ##Reword or remove topic as appropriate.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have EPOC CONNECT you can integrate your EPOC machine with PCs running Windows 95 or NT 4.0. EPOC CONNECT creates a 'EPOC machine' icon on the PC desktop and within Windows Explorer, with options to:
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b View}
+ your EPOC machine files, and drag and drop files between the two machines. The files will be automatically converted to the appropriate file format at the same time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Convert files} from another machine. Convert the files from the other machine to a PC format and then convert them again to EPOC machine format before copying them to the EPOC machine.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Synchronise} Agenda files on the EPOC machine with any of the PC agenda applications that EPOC CONNECT supports.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Print} files on the EPOC machine to a printer connected to the PC.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Back up} the EPOC machine\rquote s files to a PC, and restore them to the EPOC machine should you need to.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Install} new programs on your EPOC machine.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can also {\cs33\b open} files on your EPOC machine in an associated PC program, edit them, and save them back to the EPOC machine.
+\par \pard \fi-357\li357\sa120\widctlpar To connect the EPOC machine to a PC:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Install EPOC CONNECT on the PC from the disk or CD. See the EPOC CONNECT documentation for information on how to do this.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Use {\cs33\b Link to desktop} on the {\cs33\b Tools} menu in the EPOC machine System screen to make sure the link is set to \lquote Cable\rquote .
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Use the commands from the \lquote EPOC machine\rquote  desktop icon or the icon in Windows Explorer to perform the EPOC CONNECT functions.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When you are not using an EPOC link cable or Infrared link, set the {\cs33\b Link to desktop} to 'Off', to save battery power.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you leave the link set to 'Cable' or 'Infrared', then you will not be able to print, or use the link for the Comms program.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared data transfer
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Beam Document Copy IR Transfer RS232 RS 232 V24 V.24
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ##Replace or remove as appropriate
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+If the EPOC machine has Infrared capabilities, you can copy highlighted information, or whole files (regardless of which EPOC programs were used to create them), to another EPOC machine without using a cable. You cannot transfer information between a EPOC
+ machine and xx.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Transferred files have the same information and attributes as the original files, including passwords.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To transfer information using Infrared:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Link to desktop} on the {\cs33\b Tools}
+ menu in the System screen and set the {\cs33\b Link} line to Off on both EPOC machines.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the sending EPOC machine, select the piece of information to be copied - this might be a section of text, or an entry in Agenda or Data. To copy a whole file, highlight it on the System screen.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}
+On the receiving EPOC machine, open the file into which the information is to be copied and place the cursor where it is to be inserted. If copying a file, move to the System screen and open the folder that the file is to be copied into. Then select the {
+\cs33\b Receive} command from the {\cs33\b Infrared }cascade on the Side bar or {\cs33\b Tools} menu. The EPOC machine should display a 'Ready to receive' message.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}
+The Infrared "window" on each EPOC machine is located xx. Ensure that the two EPOC machines are facing each other, on a similar horizontal plane (ideally, both should be resting on the same flat surface). The EPOC machines should be no more than xx metres
+ apart.
+\par {\pntext\pard\plain\f5\fs20\lang2057 5.\tab}Select the {\cs33\b Send} command from the {\cs33\b Infrared }cascade on the sending EPOC machine.
+\par {\pntext\pard\plain\f5\fs20\lang2057 6.\tab}The information is now transferred. To stop the transfer while it is in progress, press the Esc key on either of the EPOC machines.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you are transferring a file, and the folder to which the file is being copied already contains a file of the same name, then the screen of the receiving EPOC machine will display a \ldblquote file already exists\rdblquote 
+ message, and will display a dialog suggesting a new name. Either accept the suggested name or type in an alternative. If you want to keep the same filename, you can save the file to another folder and/or disk drive.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}If you leave the link set to 'Cable' or 'Infrared', then you will not be able to print, or use the link for the Comms program.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared transfer (Agenda entries)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Hardware Beam Diary Copy IR Transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Infrared transfer can be used to copy an entire Agenda entry, including date, time and alarm settings to an Agenda file on another EPOC machine, or to copy Agenda entry text and embedded objects to any other text-based EPOC program. (You can also copy an 
+Agenda file to the System screen of another EPOC machine.)
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 On th
+e sending EPOC machine, move the cursor to the Agenda entry or highlight the text and objects.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the receiving EPOC machine, open the Agenda file to which the entry is to be copied or move the cursor to the place where the text and objects are to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select Infrared receive on the receiving EPOC machine and Infrared send on the sending EPOC machine.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you transfer an entry from a To-do list to an EPOC machine that does not have a To-do list of the same name, the entry is placed in the first To-do list.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared transfer (Data entries)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Hardware Beam Copy IR Transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Infrared transfer can be used to copy an entire Data entry to a Data file on another EPOC machine. A Data file can also be copied to the System screen of another EPOC machine.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+On the sending EPOC machine, move the cursor to the Data entry or highlight the text and objects.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the receiving EPOC machine, open the Data file to which the information is to be copied or move the cursor to the place where the text and objects are to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select Infrared receive on the receiving EPOC machine and Infrared send on the sending EPOC machine.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+For an entry to be successfully transferred, the receiving database must have the same labels and label settings as the sending database.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared transfer (Sketches)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Hardware Beam Drawing Copy IR Transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Infrared transfer can be used to copy part of a sketch to a Sketch file, or to a Sketch window in another program (e.g. Word), on another EPOC machine. A Sketch file can also be copied
+ to the System screen of another EPOC machine.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 On the sending EPOC machine, select the area of the sketch to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the receiving EPOC machine, open the Sketch file/window to which the information is to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select Infrared receive on the receiving EPOC machine and Infrared send on the sending EPOC machine.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared transfer (Word documents)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Hardware Beam WP Copy IR Transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Infrared transfer can be used to copy highlighted Word text and embedded objects to any text-based program on another EPOC machine. You can also copy a Word file to the System screen of another EPOC machine.
+
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 On the sending EPOC machine, highlight the text and objects to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the receiving EPOC machine, move the cursor to the place where the text and objects are to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select Infrared receive on the receiving EPOC machine and Infrared send on the sending EPOC machine.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If text is copied from one Word file to another, style and formatting details are preserved. Where there is a clash of styles, the style settings in the receiving file will take precedence over similarly named styles in the incoming paragraph(s).
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared transfer (Program text)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Hardware OPL Beam Program Copy IR Transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Infrared can be used to copy highlighted OPL text to any text-based program on another EPOC machine. An OPL file can also be copied to the System screen of another EPOC machine.
+\par \pard \fi-357\li357\sa120\widctlpar To transfer OPL information using Infrared:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 On the sending EPOC machine, highlight the text.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the receiving EPOC machine, move the cursor to the place where the text is to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select Infrared receive on the receiving EPOC machine and Infrared send on the sending EPOC machine.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Infrared transfer (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Hardware Beam Worksheet Copy IR Transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Infrared transfer can be used to copy the contents of cells highlighted in Sheet to a Sheet file on another EPOC machine, or to copy the text in the cells to any other text-based program. A Sheet file can also be copied to the System screen of anoth
+er EPOC machine.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 On the sending EPOC machine, highlight the cells.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the receiving EPOC machine, move the cursor to the place where the information is to be copied.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select Infrared receive on the receiving EPOC machine and Infrared send on the sending EPOC machine.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you copy cells to another Sheet file, then the formulae for calculations are also copied (relative and absolute cell references are preserved and behave normally). If you copy cells to a file in a program other than Sheet, the re
+sults of any formulae, not the formulae themselves, are copied.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Jott-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,232 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f16\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f17\fswiss\fcharset0\fprq2{\*\panose 020b0506020102020204}Arial Narrow;}{\f18\froman\fcharset238\fprq2 Times New Roman CE;}{\f19\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f21\froman\fcharset161\fprq2 Times New Roman Greek;}{\f22\froman\fcharset162\fprq2 Times New Roman Tur;}{\f23\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f24\fswiss\fcharset238\fprq2 Arial CE;}{\f25\fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f27\fswiss\fcharset161\fprq2 Arial Greek;}{\f28\fswiss\fcharset162\fprq2 Arial Tur;}{\f29\fswiss\fcharset186\fprq2 Arial Baltic;}{\f30\fmodern\fcharset238\fprq1 Courier New CE;}{\f31\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f33\fmodern\fcharset161\fprq1 Courier New Greek;}{\f34\fmodern\fcharset162\fprq1 Courier New Tur;}{\f35\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f120\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f121\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}
+{\f123\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f124\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f125\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt
+\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{
+\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{\s5\sa120\keepn\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\widctlpar\adjustright 
+\i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{
+\s9\sb240\sa60\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang
+{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd List Bullet;}{\s16\li284\sa120\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{
+\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{
+\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sa120\widctlpar\adjustright 
+\f1\fs20\ul\cf13\lang1024 \sbasedon0 \snext0 Hypertext Anchor;}{\*\cs21 \additive \b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284\adjustright 
+\f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{
+\s25\li566\sa120\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\widctlpar\adjustright \f1\fs20\cf11\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\widctlpar\adjustright \f1\fs20\cf11\lang2057 
+\sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext28 Tip;}{
+\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{
+\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf16\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284\adjustright 
+\f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext33 Comment;}{\*\cs34 
+\additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f17\fs20\cf13 \sbasedon10 Graphic Link;}{\*\cs36 \additive \fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 
+annotation text;}{\s38\sb360\sa240\keepn\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0
+\pnf16\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0
+\pnf16\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext40 Index;}{\*\cs41 \additive \i\f1\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\listtable{\list\listtemplateid-1680333476
+\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\s24\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid-1674158954\listsimple{\listlevel
+\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s19\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid-991690572\listsimple{\listlevel\levelnfc0
+\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\s17\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid240448108\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0
+\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s15\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0
+\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}
+\fi-283\li283 }{\listname ;}\listid207957057}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname 
+;}\listid485588484}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid594243028}
+{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid717053932}{\list\listtemplateid-1680333476
+\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid834304327}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0
+\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid1155489854}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0
+\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid1546522089}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold
+\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid1665085049}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283
+{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid1688218886}{\list\listtemplateid-1680333476\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid1911385297}}{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}
+{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid1546522089\listoverridecount0\ls5}{\listoverride\listid1665085049\listoverridecount0\ls6}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23
+\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls7}{\listoverride\listid207957057\listoverridecount0\ls8}{\listoverride\listid-2\listoverridecount1{\lfolevel
+\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li567 }}\ls9}{\listoverride\listid-2\listoverridecount1{\lfolevel
+\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls10}{\listoverride\listid834304327\listoverridecount0\ls11}
+{\listoverride\listid717053932\listoverridecount0\ls12}{\listoverride\listid1688218886\listoverridecount0\ls13}{\listoverride\listid594243028\listoverridecount0\ls14}{\listoverride\listid1155489854\listoverridecount0\ls15}{\listoverride\listid485588484
+\listoverridecount0\ls16}{\listoverride\listid1911385297\listoverridecount0\ls17}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283
+{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls18}}{\info{\title Author: }{\author Symbian}{\operator Symbian}{\creatim\yr1998\mo4\dy22\hr10\min20}{\revtim\yr2001\mo2\dy7\hr14\min33}{\version3}{\edmins4}{\nofpages6}{\nofwords1189}
+{\nofchars6780}{\*\company Psion SW}{\nofcharsws0}{\vern113}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\linkstyles\hyphcaps0\formshade\viewkind1\viewscale132\viewzk2 \fet0\sectd 
+\psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain \qc\sa120\widctlpar\adjustright \f1\fs20\lang2057 {\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s33\sa120\widctlpar\adjustright \i\f1\fs20\lang2057 {Author: Clive Whitear
+\par Date: June 24}{\super th}{ 1998
+\par Version: ER4 release
+\par }\pard\plain \s1\sb360\sa240\keepn\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Jotter
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x10000CEA
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Jotter: Quick start
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {notepad quick notes jottings notebook scribble minutes
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {Jotter is the EPOC machine\rquote s \ldblquote notepad\rdblquote . Use it to jot down information quickly, e.g. if you\rquote re on the phone or in a meeting.
+\par When you first start Jotter, you\rquote ll see a new blank entry, so you can start typing straight away.
+\par From then on, tap the }{\cs34\b New entry}{ button on the toolbar to create new entries.
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls18\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls18\adjustright \f1\fs20\lang2057 {
+You can set up the Jotter program so it always starts on a new entry when you open the program. To do this, select }{\cs34\b Entry preferences}{ from the }{\cs34\b Tools}{ menu and set the }{\cs34\b Always start on a new entry}{ line to }{\cs34\b Yes}{. }
+{board }{\cs35\scaps\f17\cf13 archive=calc name=squareroot}{
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {
+\par You can view your entries as a list, as individual cards, or as a combination of the two, where you see a list of entries with the currently selected entry displayed on a card.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Keypresses (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {ctrl fn pgdn pgup keyboard
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {Ctrl+PgDn to move to the next entry.
+\par Ctrl+PgUp to move to the previous entry.
+\par Ctrl+Fn+PgDn to move to the last entry.
+\par Ctrl+Fn+PgUp to move to the first entry.
+\par Fn+PgDn to move down through the current entry one screenful at a time.
+\par Fn+PgUp to move up through the current entry one screenful at a time.
+\par Tap on the dog ears to move to the next or previous entry.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Combining Jotter files
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {merge in
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can merge another Jotter file into the one you are currently using. The resultant file will contain all the entries from both files.
+\par }{\b To merge in another Jotter file:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls5\adjustright \f1\fs20\lang2057 {Select }{\cs34\b 
+More|Merge in}{ from the }{\cs34\b File}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls5\adjustright {Select the file you want to insert and tap }{
+\cs34\b OK}{.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Deleting entries (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {delete entry
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can delete any Jotter entries you no longer require.
+\par }{\b To delete an entry:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls6\adjustright \f1\fs20\lang2057 {
+Go to the entry you want to delete.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls6\adjustright {Select }{\cs34\b Delete entry}{ on the }{\cs34\b 
+Edit}{ menu.
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {If you delete an entry by mistake, you can restore it by selecting }{\cs34\b Undo delete entry}{ on the }{\cs34\b Edit}{ menu.
+\par {\pntext\pard\plain\s29 \f14\fs20 \loch\af14\dbch\af0\hich\f14 \'3f\tab}}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls7\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls7\adjustright \f1\fs20\lang2057 {
+You can only restore the last entry you deleted.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Finding entries (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {wild cards wildcards strings searching
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can locate the entry you need quickly, by searching through all entries for specific text.
+\par }{\b To search for entries:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls8\adjustright \f1\fs20\lang2057 {Select }{\cs34\b Find}{
+ from the }{\cs34\b Edit}{ menu, or tap the }{\cs34\b Find}{ button on the Toolbar.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls8\adjustright {Enter the text you want to search for and tap }{
+\cs34\b OK}{.
+\par {\pntext\pard\plain\s29 \f14\fs20 \loch\af14\dbch\af0\hich\f14 \'3f\tab}}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls7\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls7\adjustright \f1\fs20\lang2057 {
+Type a ? for a single unknown letter or * for any number of unknown letters (known as "wildcards").
+\par }\pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\lang2057 {3.\tab Jotter highlights the first occurrence of the text. Tap the:
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {\cs34\b Next}{
+ button to move to the next occurrence of the text.
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\cs34\b Prev}{ button to display the previous occurrence of the text.
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\cs34\b Done}{ button to stop the search.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Formatting text (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {typestyle typeface type style type face font bold italics underlined bullets
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can edit and format the text in Jotter entries.
+\par }{\b To format highlighted text:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b Bold}{ from the }{\cs34\b Text}{ menu to make the text bold.
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Select }{\cs34\b Italic}{ from the }{\cs34\b Text}{ menu to make the text italic.
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Select }{\cs34\b Underline}{ from the }{\cs34\b Text}{ menu to underline the text.
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {\b To add a bullet to the start of the paragraph:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b Bullet}{ from the }{\cs34\b Text}{ menu.
+\par }\pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\lang2057 {\b To change the font and size of text:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b Font}{ from the }{\cs34\b Text}{ menu.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\outlinelevel1\adjustright \b\f1\lang2057 {Views in Jotter
+\par }\pard\plain \s22\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\cf13\lang2057 {list view edit view split view
+\par }\pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\lang2057 {Jotter has three different views, so you can choose how to display your entries.
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {\b List view:}{
+ shows a list of the entries displaying one line of text for each entry.
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\b Edit view:}{ displays one entry at a time.
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\b Split view:}{ combines the List and Edit views, so you can view a list containing the first line of each entry, and a card showing the current entry.
+\par {\pntext\pard\plain\s28 \f14\fs20 \loch\af14\dbch\af0\hich\f14 \'46\tab}}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls10\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls10\adjustright \f1\fs20\lang2057 {
+You can change the display of the Split view by selecting }{\cs34\b View preferences}{ from the }{\cs34\b Tools}{ menu.
+\par }\pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\lang2057 {\b To change view:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {
+Select the view you want from the }{\cs34\b Switch}{ }{\cs34\b view}{ cascade on the }{\cs34\b View}{ menu, or
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Tap the }{\cs34\b View}{ button on the toolbar and select the view.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Adding entries (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {add entry new entry
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {Each Jotter file can contain as many entries as you need. 
+\par }{\b To create a new entry:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b New entry}{ from the }{\cs34\b Insert}{ menu, or tap the }{\cs34\b New entry}{ button on the toolbar.
+\par }\pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\lang2057 {New entries are added to the end of the list of 
+entries. If you create a new entry when in the List view, the view changes to the Edit view so you can see the whole entry as you type it in.
+\par }{\b To move between the entries:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b Next entry}{ or }{\cs34\b Previous entry}{ on the }{\cs34\b View}{ menu, or
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Display the list of entries and tap on the entry you want.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Inserting objects (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {linking paint picture attaching embedding OLE link drawing
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can insert Sketch, Word, Record and Sheet objects into a Jotter entry.
+\par }{\b To insert a Sketch object:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls11\adjustright \f1\fs20\lang2057 {Tap the }{\cs34\b 
+Insert sketch}{ button on the toolbar, or select }{\cs34\b Sketch}{ from the }{\cs34\b Insert}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls11\adjustright {Once you\rquote 
+ve finished creating the sketch, tap the Done button to return to Jotter and insert the sketch into the current entry.
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {\b To insert objects from other programs:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls12\adjustright \f1\fs20\lang2057 {Select }{\cs34\b 
+Other object}{ from the }{\cs34\b Insert}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls12\adjustright {
+Choose the program you want to create the object in and tap }{\cs34\b OK}{.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls12\adjustright {When you have finished the object tap the }{
+\cs34\b Done}{ button to return to Jotter and insert the object into the current entry.
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can re-edit objects you insert into Jotter entries, and you can change the display format of Sketch and Sheet objects (Word and Record objects are always displayed as icons).
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Formatting objects (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {resize stretch scale trim resizing croping format object
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can edit objects you have inserted into Jotter entries, and change the formatting of Sketch and Sheet objects.
+\par }{\b To edit an object:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls13\adjustright \f1\fs20\lang2057 {Select the object.
+
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls13\adjustright {Select }{\cs34\b Object|Edit object}{ from the 
+}{\cs34\b Edit}{ menu to open the object.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls13\adjustright {Once you\rquote ve finished
+ editing the object, tap }{\cs34\b Done}{ to return to Jotter and update the object.
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {\b To format a sketch or sheet object:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls14\adjustright \f1\fs20\lang2057 {Select the object.
+
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls14\adjustright {Select }{\cs34\b Object|Format object}{
+ from the }{\cs34\b Edit}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls14\adjustright {You can:
+\par {\pntext\pard\plain\s19 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {
+display an icon instead of the sketch or sheet by ticking the }{\cs34\b Display as icon}{ box on the }{\cs34\b Appearance}{ page.
+\par {\pntext\pard\plain\s19 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}change the size of the sketch or sheet on the }{\cs34\b Scaling}{ page.
+\par {\pntext\pard\plain\s19 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}trim the sketch or sheet on the }{\cs34\b Cropping}{ page.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Special characters & the date (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {symbol sign em dash en dash nonbreaking space non-breaking space non breaking space ellipsis
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can add special characters to Jotter entries and also insert the present day\rquote s date.
+\par }{\b To insert a special character:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b Special character}{ from the }{\cs34\b Insert}{ menu. Highlight the character you want to insert and tap }{\cs34\b OK}{.
+\par }\pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f1\fs20\lang2057 {\b To insert today\rquote s date:
+\par {\pntext\pard\plain\s15 \f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {Select }{
+\cs34\b Date}{ from the }{\cs34\b Insert}{ menu.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Display preferences (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {view preferences
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can change the look of the Split view.
+\par }{\b To change the display:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls15\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls15\adjustright \f1\fs20\lang2057 {Select }{\cs34\b 
+View preferences}{ from the }{\cs34\b Tools}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls15\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls15\adjustright {You can amend these settings:
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {\cs34\b Display:}
+{ choose whether the date you created an entry or the date you last updated an entry is displayed on each entry.
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\cs34\b Show titles of entries on:}{ select whether the list of entry titles is displayed on the left or right hand side of the screen.
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\cs34\b Entry width:}{ specify the width of entries as a percentage of the screen size.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Entry preferences (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {new entry
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can choose to automatically create a new entry, and specify the amount of text shown in List view.
+\par }{\b To change the entry preferences:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls16\adjustright \f1\fs20\lang2057 {Select }{\cs34\b 
+Entry preferences}{ from the }{\cs34\b Tools}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls16\adjustright {You can change these settings:
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls9\adjustright \f1\fs20\lang2057 {\cs34\b 
+Always start on a new entry:}{ choose whether to start on a new entry each time you open Jotter, or each time the machine is turned on, or not to create a new entry, unless specified.
+\par {\pntext\pard\plain\s19 \cs34\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\cs34\b Include in list:}{ select whether just the first line of text or all the text of an entry is displayed in the list of entries.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Sorting entries (Jotter)
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {reorder alphabetical order rearrange
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {Your Jotter entries are listed in the order you create them, unless you specify an alternative order.
+\par }{\b To change the sort order:
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls17\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls17\adjustright \f1\fs20\lang2057 {Select }{\cs34\b Sort}{
+ from the }{\cs34\b Tools}{ menu.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls17\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls17\adjustright {
+Specify whether you want to search the entries according to the date they were created, the date they were last updated or alphabetically.
+\par {\pntext\pard\plain\s17 \f1\fs20 \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\ilvl0\ls17\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\ls17\adjustright {
+Indicate whether you want to sort the entries in ascending or descending order and tap }{\cs34\b OK}{.
+\par }\pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Printing Jotter entries
+\par }\pard\plain \s22\sa120\widctlpar\adjustright \f1\fs20\cf13\lang2057 {page setup print setup
+\par }\pard\plain \sa120\widctlpar\adjustright \f1\fs20\lang2057 {You can print Jotter entries to a serial, parallel or Infrared printer. Before you can print, you need to set up your page (paper size, margins, headers & footers, etc.) using }{\cs34\b 
+Printing|Page setup}{ from the }{\cs34\b File}{ menu.
+\par Use }{\cs34\b Printing|Print setup }{on the }{\cs34\b File}{
+ menu to specify whether you want to print 'All entries in view' (i.e. all the entries that result from a search, or the entire Jotter file if you haven't done a search), or only the current one and to indicate the number of copies you want.
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Prog-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,74 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - <app name>"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy11\hr11\min7}{\revtim\yr2000\mo4\dy25\hr16\min35}{\version2}{\edmins1}{\nofpages2}{\nofwords478}{\nofchars2730}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: May 13{\super th} 1998
+\par Version: ER4 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Program{\revised\revauth1\revdttm1178913826 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913827 0x10000074}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Program: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913827 program.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 OPL OPO translate compile run programming language
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Program is a text editor for writing, translating (compiling) and running OPL programs.
+\par When Program is first started you see:
+\par PROC :
+\par ENDP
+\par These are the "keywords" that mark the start and end of an OPL "procedure". Type your program as a list of "statements" between the keywords.
+\par \pard \fi-357\li357\sa120\widctlpar To create an OPL program:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Write the program, using the text formatting and indenting features.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Translate the program using the button on the {\cs33\b Toolbar} or {\cs33\b Translate }from the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If an error is found during translation, the cursor goes to the point in the program where the error is found and an error message is given.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab When the program translates without errors, a dialog with the option to run the program is displayed.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The translated (executable) file will be given the same filename as the source file, but will have the filename extension .OPO (this is displayed on the System screen).
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You can also run an OPL program by selecting {\cs33\b Run program} on the {\cs33\b 
+Tools} menu. A translated file can be run by selecting it in the System screen, then tapping on it or pressing the Enter key.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have an old OPL program you want to use, create a new file and "import" the old file into it (do this by selecting {\cs33\b Import text file }from the {\cs33\b More }cascade on the {\cs33\b File}
+ menu).
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Combining files in Program
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 OPL importing exporting merge in export as text import text ascii
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can include another OPL file or an ASCII text file into the current OPL file. E.g. you may want to include a previously written program.
+\par To insert smaller pieces of an OPL file, use the normal copy and paste commands on the {\cs33\b Edit }menu.
+\par To include an entire OPL file, you must first convert the file to ASCII format. To do this:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Open the OPL file that you wish to convert.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Export as text} from the {\cs33\b More }cascade on the {\cs33\b File} menu. Select the folder you want to export the file to and type in the name you want to use.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To import an ASCII file into the current OPL file:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Open the OPL file that you wish to add the other file to.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Move the cursor to the point where you want to insert the other file.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select {\cs33\b Import} {\cs33\b text} from the {\cs33\b More }cascade on the {\cs33\b File} menu and select the file you want to import.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Indenting text (Program)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 OPL tab stop indentation
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Normally the text you type will be automatically indented, using a tab positioned 2 characters in from the left. Any additional tabs inserted will be spaced at further intervals of 2 characters. To change this, select {\cs33\b Indentation} on the {
+\cs33\b Format} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To stop automatic indenting, remove the tick from the indenting box.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set the distance you want between tab positions.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting text (Program)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 OPLtypestyle type style typeface type face font bold
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can format the text in an OPL file for display purposes; this does not affect the translated (complied) program.
+\par To change the formatting (font, letter size, bold emphasis and text colour) of all the text in the OPL file:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Set the font using {\cs33\b Font} on the {\cs33\b Format}
+ menu, and then select the font, letter size etc.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the bold emphasis of the entire file, press Ctrl+B.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Normally you can only choose monospaced fonts; but you can change this using the {
+\cs33\b Preferences} command from the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Rec--hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,130 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title @@TTL:SERIES 5 HELP FILE - TEMPLATE}{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy11\hr10\min40}{\revtim\yr2000\mo4\dy25\hr16\min36}{\version2}{\edmins1}{\nofpages4}{\nofwords1104}
+{\nofchars6294}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}
+\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Record{\revised\revauth1\revdttm1178913827 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913828 0x1000007e}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Record: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913828 record.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 music sounds dictaphone fader level digital microphone loudspeaker outside buttons
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Record is for recording and playing back sounds. You can also:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Insert recordings as objects in EPOC Word, Data or Agenda files, and send them to another EPOC machine user.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use them as alarm sounds, in addition to the sounds built into the EPOC machine.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Record "voice notes" using the buttons on the exterior of the EPOC machine.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Use the Record buttons to record, play, and move through sound files. Use the volume control to set a playback level, and use the numeric indicators to check details of the current sound file length, available time remaining (during recording), and the nu
+mber of repeats which have been set (if applicable).
+\par The EPOC machine saves recordings as files on disks. There is no need for tapes.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b microphone}
+ is #add location of the microphone#. You can experiment with placement to obtain the clearest recording, with the least distortion and background noise.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The {\cs33\b loudspeaker} is #add location of the loudspeaker#
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The {\cs33\b buttons} are used to record, play and move around sound files; use the external "voice notes" buttons to record notes when you are on the move.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The {\cs33\b Progress bar}, above the buttons on the screen, displays a graphic representation of the current file.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If, during the recording (or playing) of a sound file, an alarm was due to sound, it will be delayed until the recording has finished.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Progress bar (Record)
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+When Record is first started the progress bar is light grey. During recording it turns white and begins to fill up with grey from the left, like a fuel gauge. When recording stops, the entire progress bar turns dark grey, representing the full length of t
+he recorded sound.
+\par During playback the progress bar turns to light grey again and a simila
+r dark grey area sweeps across it. The boundary between dark and light greys is the position marker which shows the current point within the recording, with the far right position being the end.
+\par The start points of multiple recordings made in the current session are marked with vertical lines (the lines will be lost when Record is closed).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+The 'Position' counter also shows the current point, but measured in minutes and seconds.
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 gauge graph dictaphone cursor indicator counter
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Recording a sound (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone sound file
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To record a new sound:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Press the {\cs33\b Extras}
+ button on the icon bar and press the Record program icon, or tap the {\cs33\b New file} button in the System screen Toolbar and select Record.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b REC} button, or press the Enter key, to begin recording. The 'Recorded' indicator shows how long your recording is in seconds.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Tap the {\cs33\b STOP} button, or press the Esc key, to finish recording. The recording is stored as a file named 'Record' on the Internal disk, unless you use {\cs33\b Save as} on the {\cs33\b File} menu 
+to specify a different name or location.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To save a recording and work on a copy of it, use {\cs33\b Save as} on the {\cs33\b File} menu and specify a different name for the new version.
+\par The maximum length of a recording depends on the amount of free space left on the disk drive (one minute of sound using standard compression takes up 500K of disk space). The 'Time remaining' indicator shows how much more recording could be done if you wa
+nted to use up all the free space, but in general its advisable to leave plenty of space for running other programs.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Record will not allow you to completely fill up the Internal disk, and always leaves a minimum of 100K free.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Playing a sound (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 replay playback dictaphone loud quiet soft fader volume rewind fast forward
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To listen to the current sound:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the {\cs33\b PLAY} button, or press the Spacebar, to start playback.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b STOP} button, or press the Esc key, to stop playback before the end.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b PLAY}
+ button can also be used to pause, and then restart playback.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the volume, use the pen to drag the volume control, or use the up and down arrow keys.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To listen to part of the current sound:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Use the {\cs33\b FFWD} and {\cs33\b REW}
+ buttons to move the position marker, or drag it with the pen, to the point in the file where you want to begin playback.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b PLAY} button, or press the Spacebar, to start playback. Record will play the sound from the position marker and stop at the end unless you press the {\cs33\b STOP} button.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs33\b Open file} on the {\cs33\b File}
+ menu to open, then listen to another sound.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Recording alarm sounds (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 dictaphone repeats Time Agenda alarms
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use Record to make alarm sounds for use in the EPOC Time and Agenda programs. You can also save a copy of an existing Record file as an alarm sound.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the Record icon.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Open a sound file or record a new one.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Edit the recording and set repeats, if desired.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}Tap the {\cs33\b Alarm sound} button on the Toolbar or select the command on the {\cs33\b File} menu and enter a name.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The alarm sound will appear alongside the in-built sounds in the EPOC Time and Agenda programs.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To delete a custom alarm sound, select {\cs33\b Delete alarm sound} on the {
+\cs33\b File} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The in-built alarm sounds cannot be deleted.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Rewinding & fast forwarding (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 move speed dictaphone rewind fast forward REW FFWD go to time
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can jump to the beginning or end of a sound, or move to any other point within it.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Use the pen to tap at any point in the progress bar to move the position marker or to drag the position marker to the beginning or end of a sound file.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap the {\cs33\b REW} button, or hold down Fn and use the left arrow key to jump backwards through a sound in two-second intervals.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap the {\cs33\b FFWD} button, or hold down Fn and use the right arrow key to jump forwards through a sound in two-second intervals.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Hold down the left arrow key to move quickly backwards through a sound.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Hold down the right arrow key to move quickly forwards through a sound.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Go to time} on the {\cs33\b Play} menu and enter a position in minutes and seconds.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Press {\cs33\b PLAY} to start playback from the position marker.
+\par Select {\cs33\b Record & replace} on the {\cs33\b Record} menu to start recording from the position marker.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing a sound (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 append lengthen edit dictaphone cut add
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add further recorded sound on to the end of an existing recording, select {\cs33\b Record & append} on the {\cs33\b Record} menu.
+\par \pard \fi-357\li357\sa120\widctlpar All or part of an existing sound can be recorded over. To do this:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Use the pen to drag the position marker to any point in the file, or select {\cs33\b 
+Go to time} on the {\cs33\b Play} menu and enter a position in minutes and seconds.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Record and replace} on the {\cs33\b Record} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The recording starts from the current cursor position. This will delete and overwrite any previously recorded sound from this point in the file.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 You can shorten a sound file by selecting {\cs33\b Crop} from the {\cs33\b 
+Record} menu. All sound after the selected point is deleted.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To erase all sound from the current file, select {\cs33\b Erase all} on the {\cs33\b Record} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Repeating a sound (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 replay dictaphone pause
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To play a sound file several times in succession, set it to repeat by selecting the {\cs33\b Repeat sound} command on the {\cs33\b Tools} menu and entering a number between 1 and 60000.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 A pause between repeats of up to 2000 seconds can be set.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Compressing sound files (Record)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 compact file size dictaphone
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The EPOC machine normally compresses recorded sound so that 2 minutes of sound takes up 1Mbyte of memory. You can reduce the amount of space used for a new recording even further by selecting {\cs33\b 
+Compress sound} on the {\cs33\b Tools} menu and then {\cs33\b ADPCM Compression (4 minutes per Mbyte)} before starting the recording.
+\par Use standard compression to use a Record file in a program that cannot use ADPCM compressed files.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Skipping and searching through sound files may be slightly quicker with uncompressed files.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/AutoSum.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/CircularReference.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/FreezePanesButton.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/Recalculation.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/Sum-Button.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/circularreference.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/freezepanesbutton.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Sheet/readme.txt	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,26 @@
+This directory contains Protea sketch files of the following:
+
+	an 'autosum' button
+	a picture of the circular reference sign
+	a picture of the 'recalculation is needed' sign
+	a picture of the 'Freeze panes' button
+
+for insertion into the Protea Word version of the file SHET-HLP.DOC, held on this drive.
+
+They should be inserted as follows:
+
+Autosum:
+
+	Formulae (Sheet) topic: in place of "the SUM button" in the second Note.
+
+Circular reference:
+
+	Formulae (Sheet) topic: in place of "a circular arrows sign" in the last note.
+
+Recalculation:
+
+	Recalculation (Sheet) topic: in place of "+?-" in the second bullet point.
+
+Freeze panes:
+
+	Adding titles (Sheet) topic: in place of 'the Freeze panes button' in point three.
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/recalculation.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sheet/sum-button.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Shet-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,593 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title \'93PROTEA HELP FILE - Sheet\'94,\'94 }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy30\hr12\min32}{\revtim\yr2000\mo4\dy25\hr16\min38}{\version3}{\edmins2}{\nofpages24}{\nofwords6492}
+{\nofchars37008}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template 
+C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3
+\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}
+{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar 
+\i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: February 18{\super th} 1999
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Sheet{\revised\revauth1\revdttm1178913829 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913829 0x10000088}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Sheet: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913830 sheet.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 basics graphs charts spreadsheets worksheets transfer
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Sheet is the EPOC machine's spreadsheet. The files created in it are compatible with PC spreadsheet applications. If a PC has EPOC CONNECT installed Sheet files can be copied to the PC and you can work on them there.
+\par {\cs33\b Use Sheet to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Display information in a table.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Perform calculations based on sets of numbers, or that use formulae and functions.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Create graphs from sets of numbers.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Sheet has two views.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Sheet: for spreadsheet work, and for creating the ranges of information used to draw graphs.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Graph: for creating and printing graphs.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To switch between the two views: tap the appropriate button on the {\cs33\b Toolbar}, or select {\cs33\b Sheet} from the {\cs33\b Switch view }cascade or {\cs33\b Graph} from the {\cs33\b Switch view }
+cascade on the {\cs33\b View} menu.
+\par {\cs33\b In Sheet you can:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Format cells easily using the {\cs33\b Top toolbar}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Freeze panes to keep some areas on screen while you scroll others.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use "named" cells and ranges in calculations.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To enter information in a cell, tap on it and type the information.
+\par To move around the worksheet:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Tap the cell you want to move to. Use the scroll bars or the arrow keys to move to other areas of the worksheet. Combine the arrow keys with the {\cs33\b Ctrl} key to move a page at a time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use {\cs33\b Go\~to} from the {\cs33\b Find }cascade on the {\cs33\b Edit} menu to jump to a specific cell.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the {\cs33\b Find commands} on the {\cs33\b Edit} menu to move to cells if you know their content.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can insert spreadsheets as "objects" within other EPOC programs, but you cannot insert an object in a spreadsheet.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cell references (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Spreadsheet mixed references absolute relative go to
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The worksheet is a grid of cells divided into horizontal rows and vertical columns. A reference, e.g. B4, consists of the letter of the column that the cell is in, followed by the number of its row.
+\par Use cell references when:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Creating formulae for calculations.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Moving to cells using {\cs33\b Go\~to} from the {\cs33\b Find }cascade on the {\cs33\b Edit} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 There are two types of cell reference that can be used in formulae:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Relative references, e.g. A3, which update automatically when the formula is moved or copied. E.g. =SUM(A5:A8) in A9 becomes =SUM(D6:D9) when copied to D10.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Absolute references, e.g. $A$3, with a $ sign before any part of a reference that you do not want to change when you copy or move the formula elsewhere. 
+E.g. =SUM($A$3:$A$8) in A9 remains as it is when copied to D10.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Relative and absolute references can be combined. E.g. =SUM(A$5:A$8) in A9 becomes =SUM(D$5:D$8) when copied to D10.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Entering information (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 active cell # hashes clear formula square gate hatch pound octothorpe
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Highlight the cell and enter the information to be stored there. This information will be displayed in the input line above the worksheet. Move to another cell or press Enter to store the information.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 A single selected cell will have a thicker border than other cells.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The first character typed in tells Sheet what type of information the cell will contain.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+For numbers: make the first character a number or one of the following: + - . (
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}For text: type it in. If the text starts with a number, type a ' first, e.g. '16 Queen Street. To make your text begin with a ' type two of them.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Start formulae with an equals sign, as in '=A1+B2'.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+# marks appear in the cell if a number is too long for the column width, though the numerical information is still stored. To change the column width, use {\cs33\b Column width }on the {\cs33\b Format} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To replace a selected cell's contents: type the new information and press Enter.
+\par To change its contents: press Enter, then edit the contents on the input line.
+\par To remove certain aspects of a selected cell's information: use {\cs33\b Clear} on the {\cs33\b Edit} menu and choose whether you want to delete the formatting, contents or all the information associated with a cell.
+\par To delete a selected cell's contents: press the Del key.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Selecting cells (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 selecting range painting nonadjacent highlighting non-contiguous
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Highlight cells in order to change their formatting, create a range for a graph or formula, cut or copy their information, or paste information into them.
+\par To highlight a range of cells:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on the first cell and drag the highlight to cover the des
+ired area, or highlight the first cell in the range and hold down the Shift key while you use the arrow keys to extend the highlight.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To highlight a whole column or row: tap the column or row heading.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To highlight the whole worksheet: tap the top left-hand box (to the left of the column headings and above the row headings).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To highlight unconnected areas: hold down the Ctrl key and tap in turn on each area you want to highlight.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting cells (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 overrun typeface font emphasis wrapping bold italics underline wrap text to cell alignment
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the way information is displayed on the worksheet, select the cells, then:
+\par {\cs33\b To change the format:}
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the {\cs33\b Top toolbar}
+ buttons to change the font and size of characters, or to make the text bold, italic or underlined, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Font} on the {\cs33\b Format} menu and select the formatting options you require.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To change the alignment:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the {\cs33\b Top toolbar}
+ button to choose from Left aligned, Centre aligned, Right aligned text and Standard alignment (numbers on the right and text on the left), or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Alignment} on the {\cs33\b Format} menu. Use this dialog to set the vertical alignment of information in a cell.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To make information stay within cell boundaries, tick {\cs33\b Wrap text to cell}.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding borders & shading to cells (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 borders shading background colours colors outlines grey gray white lines
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add borders and shading to cells, select them, then:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the {\cs33\b Border} button on the {\cs33\b Top toolbar}, or select {
+\cs33\b Border} on the {\cs33\b Format} menu, and choose the type of border required.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap the {\cs33\b Shading} button on the {\cs33\b Top toolbar}, or select {\cs33\b Shading} on the {\cs33\b Format} menu, and choose the type of shading required.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Column and Row size (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 column width row height wider taller narrower shorter
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the width of a column or the height of a row:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Drag the right-hand edge of the column heading, or the lower edge of the row label.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+You can change multiple columns or rows, by highlighting them first (tap in the middle of the column or row title and drag across the adjacent columns or rows)
+. If a column is hidden, tap to the right of the line to drag it into view again (you'll see an arrow on one side of the line only); if a row is hidden, tap under the line. To change a column to the left of a hidden column, tap to the left of the line and
+ drag it (you'll see two arrows); to change a row above a hidden row, tap above the line.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To set the column width as a number of characters, use {\cs33\b Column} {\cs33\b width} on the {\cs33\b Format} menu. To apply the new setting to a range of columns, specify the range in the {\cs33\b For co
+lumns} line of the dialog.
+\par To set the row height in points (there are 72 points in an inch), use {\cs33\b Row} {\cs33\b height} on the {\cs33\b Format} menu. To apply the new setting to a range of rows, specify the range in the dialog.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting cells, rows & columns (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 insert cells insert columns insert rows
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To insert a single cell: select {\cs33\b Cells} on the {\cs33\b Insert} menu, and choose the direction in which you want the surrounding cells to move in order to make way for the insertion.
+\par \pard \fi-357\li357\sa120\widctlpar To insert rows:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Position the cursor in the row you want to be immediately BELOW the new row(s).
+
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Rows} on the {\cs33\b Insert} menu and enter the number of rows required.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 To insert columns:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Position the cursor in the column you want to be immediately to the RIGHT of the new column(s).
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Columns} on the {\cs33\b Insert} menu and enter the number of columns required.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Protecting cells (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 unprotecting freeze freezing frozen protection lock worksheet unprotected cells
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The worksheet can be locked to prevent any changes being 
+made to the information it contains. You can also remove the protection from certain cells before locking the worksheet; the information in the unprotected cells can then be changed while leaving the remainder protected.
+\par \pard \fi-357\li357\sa120\widctlpar Locking the worksheet is done in two stages:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Remove the protection from any cells you want to be able to change, by highlighting the cells, selecting {\cs33\b Protection} on the {\cs33\b Tools} menu and removing the tick from {\cs33\b Protect cell(s)}.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Lock the worksheet, by selecting {\cs33\b Protection} on the {\cs33\b Tools} menu and ticking {\cs33\b Lock} {\cs33\b worksheet}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This means that cells containing critical information like formulae can be protected before, e.g., giving the spreadsheet to a workgroup.
+\par A padlock symbol appears at the right end of the input line when the cursor is on a protected cell and the worksheet is locked.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formulae (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 autosum button sigma formulae Formulas ranges range painting circular references arrows
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use formulae to perform the same calculation on different sets of numbers, e.g. when working out the sales tax on a number of differently priced products.
+\par \pard \fi-357\li357\sa120\widctlpar To use a formula:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Put the components of the calculation, e.g. price and tax rate, in separate cells and note their cell references, e.g. A1 and B1.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}In another cell, type = followed by the calculation to be performed using the cell references, e.g. =A1*B1. If the cells used in the formula have been \ldblquote named\rdblquote 
+, you can use these names, e.g. =Price*Tax.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Some functions can use ranges instead of normal cell references, e.g. AVERAGE(A1:A4).
+
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press Enter to see the result in the cell that contains the formula.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you place the cursor at the end of a row or column of numbers and press the SUM button {\cs34\scaps\f25\cf13 ARCHIVE=SHEET NAME=sum-button} on the {\cs33\b Top toolbar}
+, Sheet inserts the formula for calculating the total of those numbers in the current cell.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can now perform "what if" calculations by changing the numbers in the cells which the formula refers to. The result will update automatically.
+\par When entering a range, you can highlight the cells on the worksheet and Sheet will automatically insert the range in the formula. This is called "range painting".
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+A cell which refers to itself in a formula, directly or indirectly, causes a circular reference, indicated by a circular arrows sign {\cs34\scaps\f25\cf13 ARCHIVE=SHEET NAME=circularreference}
+ in the input line. Results of calculations that involve circular references may be incorrect.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Formulas insert functions f(x) fx
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Sheet has a large number of functions available for performing operations on the worksheet. They are divided into the following types:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Financial: for calculations that involve, e.g., interest or loan repayments.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Date & Time: for calculations that involve time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Mathematical: for calculations such as square roots and logarithms.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Statistical: for calculations such as averages and sums of sets of numbers.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Lookup: for locating information within ranges.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Text: for performing actions on text contained in cells.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Logical: for logical testing of information on the worksheet.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Information: for returning information about cells on the worksheet.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Each group has a help topic showing the list of functions and how to use them.
+\par \pard \fi-357\li357\sa120\widctlpar To use a function, either type it in or:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the Function button, or select {\cs33\b Function} on the {\cs33\b Insert} menu.
+
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the function you require and add your variables to the expression on the input line.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Operators (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 plus minus divided by adding subtracting multiplying dividing comparisons logical operators arithmetic equals
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the following operators in calculations and formulae:
+\par {\cs33\b Arithmetic operators:
+\par }+, -, *, / for addition, subtraction, multiplication and division.
+\par ^\tab for raising to a power (e.g. squaring or cubing)
+\par -\tab unary minus (to make a number negative)
+\par {\cs33\b Comparison operators:
+\par }>\tab greater than
+\par >=\tab greater than or equal to
+\par <\tab less than
+\par <=\tab less than or equal to
+\par =\tab equal to
+\par <>\tab not equal to
+\par {\cs33\b Logical operators:
+\par }NOT:\tab for negating conditions in IF tests
+\par AND:\tab for linking conditions in IF tests
+\par OR:\tab for specifying alternative conditions in IF tests.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Operator precedence (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 parentheses priority parenthesis brackets
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Operator precedence is the order in which Sheet solves calculations; this order is important as it affects the results. Sheet evaluates sums according to the following order:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 ( ) information in brackets
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}^ powers
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}* and / (equal importance), solved left to right.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}+ and - (equal importance), solved left to right.
+\par {\pntext\pard\plain\f5\fs20\lang2057 5.\tab}All comparison operators.
+\par {\pntext\pard\plain\f5\fs20\lang2057 6.\tab}NOT.
+\par {\pntext\pard\plain\f5\fs20\lang2057 7.\tab}AND and OR (equal importance), solved left to right.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 When inserting brackets in a formula, do not use 
+implicit multiplication such as 5(4+5). Use the * operator instead.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Recalculation (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 preferences auto recalculation plus minus positive +?- polarity recalculate now
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+Sheet updates answers to calculations whenever one of their components is changed. You might want to disable this feature if you are updating a lot of figures and don't want the worksheet to be continually recalculating.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To turn{\cs33\b  auto recalculation} off, use {\cs33\b Preferences} on the {
+\cs33\b Tools} menu and remove the tick from {\cs33\b Auto} {\cs33\b recalculation}. 
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}A +?- {\cs34\scaps\f25\cf13 ARCHIVE=SHEET NAME=recalculation} sign appears at the right end of the input line if recalculation is needed. Use {\cs33\b Recalculate} {\cs33\b now} on the {\cs33\b Tools}
+ menu to recalculate. You can continue using other Sheet features while it is recalculating.
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 ##add freeze panes button to next topic##
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding titles (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Fix freezing panes add titles Header headings locking freeze panes frozen
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can create "titles" for columns and rows by "freezing" panes (horizontal or vertical areas of cells) which will stay in place when you scroll the worksheet. To do this:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Enter text in the cells which are to be the column and row titles (for example, row 1 and column A).
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Move to the cell immediately below the row you want to freeze and to the right of the column you want to freeze (in the above example this is B2).
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the cursor is in cell A1 panes cannot be frozen.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Tap the {\cs33\b Freeze} {\cs33\b panes} button {\cs34\scaps\f25\cf13 ARCHIVE=SHEET NAME=freezepanesbutton} on the {\cs33\b Top toolbar}, or use {\cs33\b Freeze} {\cs33\b panes}
+ on the {\cs33\b View} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 A line will separate the frozen panes from the scrolling area.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Any cells which are above a frozen row or to the left of a frozen column, will not scroll when you move around the screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Ranges (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 naming areas insert names named areas
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A "range" is a reference to a block of cells and consists of the cell references of the top left and bottom right corners of the block, separated by a colon, e.g. A3:D8.
+\par Use ranges to refer to areas of the worksheet when creating:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Formulae for calculations, e.g. =SUM(A3:A8)
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Graphs from numbers stored on the worksheet.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To create a range: highlight the cells to include in the range.
+\par To name a range or cell:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Highlight the range or cell, then use {\cs33\b Add name} from the {\cs33\b 
+Names }cascade on the {\cs33\b Insert} menu to add a name, e.g. 'Outgoings'. You can use this name in sums and formulae, e.g. =Sum(Outgoings). You can edit the range name using {\cs33\b Edit name }on the {\cs33\b Names }cascade on the Insert menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+To help keep track of ranges, put labels in adjacent cells, or use the borders and shading options.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Graphs (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Charts create new graphs rename graph multiple graphs
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Graphs are based on ranges of cells on the worksheet.
+\par To create a graph: highlight a range of cells and tap the {\cs33\b Graph} button on the {\cs33\b Toolbar}. This will create a graph called Graph 1. To rename this, use the command on the {\cs33\b Graphs} menu.
+\par To create further graphs: highlight another range in the Sheet view and select {\cs33\b Create} {\cs33\b new} {\cs33\b graph} on the {\cs33\b Graphs} menu in the Graph view. To move between graphs, tap on the furthest left button on the {\cs33\b 
+Top toolbar}.
+\par While viewing a graph, use the menu commands and {\cs33\b Toolbar} buttons in the Graph view to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Add more ranges.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add labels, titles and legends.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Change the graph display from 2D to 3D.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Print the graph.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Replacing graph ranges (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 replace ranges Charts change graphs
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When you create a graph, it is "locked" to the range you specified. The graph will reflect changes to the data within that range, but will not reflect any other ranges highlighted on the worksheet.
+\par \pard \fi-357\li357\sa120\widctlpar To replace the current graph range with a new one:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 In the Sheet view, highlight the new range to be portrayed in the graph.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Switch to the Graph view and press the {\cs33\b Set ranges} button on the {\cs33\b Top toolbar} or use the command on the {\cs33\b Ranges} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Graph settings (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 formatting graphs graph titles graph type formatting charts legends 3d 3-dimensional format x-axis format y-axis show titles show range labels change range
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To customise a graph:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Change its "type", e.g. to a bar graph or X/Y Scatter graph, by tapping the 
+{\cs33\b Type} button on the {\cs33\b Top toolbar}, and select the graph type you want.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Choose between 2D and 3D presentation, by tapping the {\cs33\b 3D} button on the {\cs33\b Top toolbar}, or using {\cs33\b Graph settings} on the {\cs33\b Graphs} menu and ticking {\cs33\b 3-dimensional}.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add legends, by tapping the {\cs33\b Legends} button on the {\cs33\b Top toolbar} and choosing a position, or using {\cs33\b Graph settings} on the {\cs33\b Graphs} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add titles, by selecting {\cs33\b Graph} {\cs33\b settings} on the {\cs33\b Graphs} menu, and entering the title. The appearance of the title can be changed by selecting {\cs33\b Title} {\cs33\b font} on the {
+\cs33\b Graphs} menu and setting the formatting options.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add labels to each element of a range, e.g. at the top of each bar, by selecting the type of label required on the {\cs33\b Labels} page of the {\cs33\b Change} {\cs33\b range} dialog.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add titles to the axes, by using {\cs33\b Format X-axis} and {\cs33\b Format Y-axis} on the {\cs33\b Axes} menu, ticking the {\cs33\b Show title} box and typing in the title.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Turn axis labels off, by removing the ticks from the {\cs33\b Show range labels} boxes in the {\cs33\b Format X-axis} and {\cs33\b Format Y-axis} dialogs.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The formatting of titles and labels can be changed by tapping on them.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Axis markings on graphs (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 format x-axis format y-axis tick marks grid lines Show minor grid lines range where axes cross
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Put major and minor "tick marks" across the axes of graphs and add grid lines to make divisions and values clearer.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 A tick mark is a small line which helps divide the X and Y axis into smaller sections.
+
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To add tick marks:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the axis to which you want to add tick marks, or select {\cs33\b Format Y-Axis}
+ or {\cs33\b Format X-axis} on the {\cs33\b Axes} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the {\cs33\b Other} page in the dialog. Choose the type of tick marks required.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tick marks can be inside, outside or across the axis.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To add grid lines:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the axis to which you want to add grid lines or select {\cs33\b Format Y-axis}
+ or {\cs33\b Format X-axis} on the {\cs33\b Axes} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the {\cs33\b Other} page and tick {\cs33\b Show major grid lines} and/or {\cs33\b Show minor grid lines}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the point at which the Y-axis crosses the X-axis: alter the {\cs33\b Range where axes cross} value in the {\cs33\b Format X-axis} dialog.
+\par To hide an axis altogether: remove the tick from {\cs33\b Show axis} line on the {\cs33\b Other} page in the {\cs33\b Format X-axis} or {\cs33\b Format Y-axis} dialogs.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Shading graphs (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Chart change range appearance range name fill style fill colours line colours fill colors line colors
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To customise the appearance of the graph, change the:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Background and text colours, by selecting {\cs33\b Graph settings} on the {
+\cs33\b Graphs} menu and using the {\cs33\b Colours} page. Select the colours for the title and label text, and for the screen background.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Shading options for each range, by selecting {\cs33\b Change} {\cs33\b range} on the {\cs33\b Ranges} menu and using the {\cs33\b Appearance} page. Choose the range you want to edit in the {\cs33\b Range} {
+\cs33\b name} line, then use the {\cs33\b Fill} {\cs33\b style}, {\cs33\b Fill} {\cs33\b colour} and {\cs33\b Line} {\cs33\b colour} lines to create the style for that range.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding ranges to graphs (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 add range pie charts more ranges
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To display a number of ranges on the same graph, e.g., to compare sets of monthly figures for several different years:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Once a one-range graph has been created, highlight the next range in the Sheet view and go to the Graph view.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Add range} on the {\cs33\b Ranges} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+"Pie chart" graphs only display the first of the ranges selected in the Sheet view. A graph with multiple ranges can be created by selecting several columns or rows before switching to the Graph view.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing cell information formats (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 general fixed scientific percent triad true/false currency Data type formatting cells number format
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The information format can be changed for individual cells, individual ranges or for the whole worksheet.
+\par To change the format for selected cells, select {\cs33\b Number} on the {\cs33\b Format} menu, and select the appropriate settings in the dialog.
+\par Sheet can display information in the following formats:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b General}
+: this displays numbers in standard notation, with decimal places if required. It aligns text to the left side of a cell, and numbers to the right.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Fixed}: this displays numbers with a specified number of decimal places.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Scientific}: this displays values as a single digit to the left of the decimal point, a specified number of decimal places, and then an exponent.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Currency}: this prefixes numbers with your chosen currency sign.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Percent}: this displays numbers as percentages with a % sign after them. 1 is taken to be 100%, so 0.45 will be displayed as 45%.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Triad}: this splits long numbers before the decimal point into groups of 3 digits, e.g. 3,000,000.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b True/False}: in this format, a value of 0 will be displayed as FALSE, while all other values are displayed as TRUE.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Text}: this treats all information as text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Date & Time}: a variety of formats which display dates and times in a range of styles.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Times and dates (Sheet)
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To enter a date: type the day, month and year, separating them with spaces, e.g. '29\~10\~73'. You can also use '29\~Oct\~73'.
+\par To enter a time: type the hours, minutes and seconds, separating them with colons, e.g. '14:10:25'.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The time and date will be displayed
+ according to the "Number format" settings for the particular cells.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 show grid lines show grid labels show zero values scroll bars scrollbars
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Change the way the worksheet looks by setting {\cs33\b Preferences} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To hide the grid in the Sheet view: remove the tick from the {\cs33\b 
+Show grid lines} box.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the worksheet is printed while grid lines are displayed, the grid lines will be printed as well.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To hide the labels on the top and left sides of the worksheet, remove the 
+tick from the {\cs33\b Show grid labels} box.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To permanently hide or display either of the scroll bars, tap either {\cs33\b Off} or {\cs33\b On} on the {\cs33\b Horizontal} and {\cs33\b Vertical scroll bar} lines.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The {\cs33\b Auto}
+ setting for scroll bars means they will automatically appear whenever your work extends off the present screen area.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To display results of calculations that come to zero, tick the {\cs33\b 
+Show zero values} box.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cutting, copying & pasting (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Formulas Paste special
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Cells can be copied and pasted in Sheet using the {\cs33\b Cut}, {\cs33\b Copy} and {\cs33\b Paste} commands.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Where a cell contains a formula, it is the formula which is copied, not the value displayed in the cell. When the formula is pasted into the new cell it will refer to an equivalent range of cells relative to its new position (except when using 'absolute r
+eferences').
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To paste into an area different in size and shape from the area copied, highlight the top left-hand cell of the new area and then select Paste from the {\cs33\b Edit }menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the new area is larger than the copied one, Sheet will repeat the information as many times as it takes to fill the area. This will only work, however, if the information can be repeated a whole number of times in the new area.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use {\cs33\b Paste special} from the {\cs33\b Paste }cascade on the {\cs33\b Edit} menu to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Overwrite the information in the cells you are pasting to.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Paste the values that appear in cells, rather than the formulae stored in them.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add the new values to, or subtract the new values from, the values in the cells you are pasting to.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Multiply or divide the new values by the values in the cells you are pasting to.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Paste only part of the information in the new cells, such as formatting, in the cells you are pasting to.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the area you are copying from contains blank cells, select {\cs33\b 
+Skip empty cells} from {\cs33\b Paste special} on the {\cs33\b Paste }cascade on the {\cs33\b Edit} menu to prevent these empty cells overwriting anything in the pasting area.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 ctrl fn keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 These are the default keypresses:
+\par Fn+left arrow key - go to column A.
+\par Fn+right arrow key - go to the right most column of the sheet.
+\par Ctrl+Fn+up arrow key - go to row 1.
+\par Ctrl+Fn+down arrow key - go to the bottom most row of the sheet.
+\par Ctrl+Fn+left arrow key - go to cell A1.
+\par Ctrl+Fn+right arrow key - go to the bottom right cell of the sheet.
+\par Ctrl+Space select a whole column.
+\par Ctrl+Tab select a whole row.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Mathematical functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Maths functions abs acos asin atan2 cos degrees exp fact tan trunc sumproduct sqrt sin sign rand round radians int pi mod log10 ln
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Sheet has a wide range of mathematical functions as follows:
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The results of trigonometric calculations are displayed in radians.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 ABS(value) returns the absolute value of a number, i.e. regardless of whether it is positive or negative.
+\par ACOS(value) returns the arcCosine (inverse cosine) of a value.
+\par ASIN(value) returns the arcSine (inverse sine) of a value.
+\par ATAN(value) returns the arcTangent (inverse tangent) of a value.
+\par ATAN2(x_value,y_value) returns the angle, in radians, whose tangent is y/x.
+\par COS(value) returns the cosine of a number.
+\par DEGREES(value) converts a given value from radians into degrees.
+\par EXP(value) returns the value of e raised to a given number.
+\par FACT(value) returns the factorial of a given number.
+\par INT(value) rounds a value down to the nearest whole number.
+\par LN(value) returns the natural logarithm of a number.
+\par LOG10(value) returns the base-10 logarithm of a value.
+\par MOD(value1,value2) returns the remainder (called the modulus) when value1 is divided by value2.
+\par PI: use this to insert pi in a cell, sum or formula.
+\par RADIANS(value) converts a given value from degrees into radians.
+\par RAND returns a random number between zero and one. Use +RAND to insert a random number in a cell which does not change with each recalculation.
+\par ROUND(number,number_of_digits) to round a number to a given number of digits. Make the second number a negative to round to a digit to the left of the decimal point. E.g. -2 to round to the nearest 100.
+\par SIGN(value) indicates the sign of a number or of the number contained in a given cell. It returns 1 if the sign is positive, -1 if the sign is negative, and 0 if the number is 0.
+\par SIN(value) returns the sine of a number.
+\par SQRT(value) returns the square root of a number.
+\par SUMPRODUCT(range1,range2) returns the sum of the products of corresponding items in two ranges. I.e., the first item in range1 is multiplied by the first item in range2, the second by the second, and so on. The result is the sum total of all these product
+s.
+\par TAN(value) returns the tangent of a number.
+\par TRUNC(value) returns a number or the number stored in a cell with any fraction removed. So, =TRUNC(5.845) returns 5. TRUNC and INT only differ where the value is negative, as INT always rounds down to the lower number, where TRUNC just removes the section
+ after the decimal point.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Statistical functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 testing stats combin permut average choose varp sum stdevp product min counta countblank max
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The statistics functions are as follows:
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Where a function requires a list of items between brackets, sepa
+rate the items with commas. Alternatively, insert a range or a range name in the brackets.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 COMBIN(n1,n2) returns the number of possible unique groups containing n2 number of items that could be made from a given total number of items, n1.
+\par PERMUT(n1,n2) returns the number of possible permutations for a number, n2, of items selected from a given total number of items, n1. Unlike COMBIN, PERMUT treats the order of the possible groups as being important, so xy is different from yx.
+\par AVERAGE(list) returns the average of the numbers in the list. E.g. =AVERAGE(3,4,5,6) returns 4.5.
+\par CHOOSE(x,list) returns the xth item in the list, taking the first item to be number 1. The list may contain both text strings and values.
+\par COUNT(list) returns the number of cells in the list which contain numerical information. Blank cells are not counted.
+\par COUNTA(list) returns the number of cells in the list which contain any information. This excludes blank cells, but includes those which contain blank text (i.e. where the cell contains a ' mark).
+\par COUNTBLANK(list) returns the number of blank cells in the list. This counts cells which contain blank text, or formulae which return blank text.
+\par MAX(list) returns the maximum value in a list. MAX takes account of + and - signs, so 2 is larger than -10.
+\par MIN(list) returns the minimum value in a list. MIN takes account of + and - signs, so -10 is smaller than 2.
+\par PRODUCT(list) calculates the product of a list of values.
+\par STDEVP(list) returns the standard deviation of the values in the list, treating them as a population.
+\par STDEV(list) returns the standard deviation of the values in the list, treating them as a sample.
+\par SUM(list) returns the sum of a list of values.
+\par SUMSQ(list) calculates the sum of the squares of a list of values. E.g. =SUMSQ(3,5) returns 34.
+\par VARP(list) returns the population variance of a list of values, treating them as a population.
+\par VAR(list) returns the variance of values in a list, treating them as a sample.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Date & time functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 datevalue day hour minute month now second today timevalue year
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The date and time functions in Sheet treat both dates and times as numbers.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Dates use a count of days that takes 31/12/1899 as 1. Thus, 1/1/1900 has a value of 2, and 31/07/1997 has a value of 35642.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Times use a count that takes midnight as 0, noon as 0.5, and just before midnight as 0.999\'85
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 DATE(year,month,day) returns the day number for the specified year, month and day.
+\par DATEVALUE(datestring) returns the appropriate number, given the date string. E.g. =DATEVALUE("31 Jul 97") returns a value of 35642.
+\par DAY(x) returns the day of the month (1 to 31) according to the day number x. E.g., =DAY(15476) returns 15, since day 15476 is the 15th of the month.
+\par HOUR(x) returns the hour number between 0 and 23, according to the time value x. E.g., =HOUR(0.6) returns 14.
+\par MINUTE(x) returns the minute number between 0 and 59, according to the time value x. E.g., =MINUTE(0.612) returns 41.
+\par MONTH(x) returns the month number between 1 and 12, according to the day value x. E.g., =MONTH(15476) returns 5, since day 15476 falls in May.
+\par NOW returns the value of the present time, combining both date and time numbers. E.g. 35642.5 is noon on 31/07/1997.
+\par SECOND(x) returns the second number between 0 and 59, according to the time number x. E.g., =SECOND(0.612) returns 16.
+\par TODAY returns the day number of the current day.
+\par TIME(hour,minute,second) returns the time number for the specified hour, minute and second.
+\par TIMEVALUE(timestring) returns the appropriate number, given the timestring. E.g., =TIMEVALUE("15:52:12") returns 0.66125.
+\par YEAR(x) returns the year number (from 0 to 255) from the day number x. E.g., =YEAR(35642) returns 97, since day 35642 falls in 1997.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Lookup functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 address columns hlookup index vlookup rows offset at
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The lookup functions are as follows:
+\par ADDRESS(row_number,column_number) returns an absolute cell reference as a string, given the row and column numbers. So, =ADDRESS(5,4) returns '$D$5'.
+\par COLUMN(x) returns the column number of a cell, or the number of the first column in a range.
+\par COLUMNS(range) returns the number of columns in a range.
+\par HLOOKUP(x,range,offset) looks along the top row of a range until it finds x. It then counts down to the cell which is offset rows below, taking the row that x is in as 1, and returns the value contained in that cell. The values in the first row of the ran
+ge must be in ascending order.
+\par INDEX(range,column,row) returns the contents of the cell at position (column,row) in range, where the top left cell in range is column 1, row 1.
+\par INDIRECT(x) returns the information stored in the first cell that the cell x refers to. So, if B5 contains 'A2' and A2 contains '6', the function =AT(B5) will return 6.
+\par LOOKUP(x,range1,range2) looks for x (either a string or a number) in range1, then returns the value in the corresponding cell in range2. Each of the ranges should be either a single row or a single column of cells, and they must both be equal in length.
+
+\par OFFSET(reference,rows,columns) returns a new reference offset by rows and columns from the one you specify. Use p
+ositive numbers for rows and columns to offset right and down, and negative ones to offset left and up. If a range is specified in reference, the offset will be from the top left corner of the range.
+\par ROW(x) returns the row number of a cell, or the number of the first row in a range.
+\par ROWS(range) returns the number of rows in a range.
+\par VLOOKUP(x,range,offset) works the same way as HLOOKUP, but counts down first, then across. The values in the first column of the range must be in ascending order.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Logical functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 false true if then and not or
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The logical functions are as follows:
+\par FALSE returns FALSE or 0.
+\par TRUE returns TRUE or 1.
+\par IF(x,then,else) where x, then and else may be cell references, values or expressions. Returns the value of then if x is non-zero (true), or the value of else if x is zero (false).
+\par Sheet has 3 logical operators:
+\par AND: use this to link more than one condition in an IF expression where both conditions must be true. E.g. =IF(D2>2000 AND D3>15000,"Taxable","No tax") will return 'Taxabl
+e' only if the conditions for both D2 and D3 are met. Otherwise it will return 'No tax'.
+\par NOT: use this to negate the condition in an IF test. E.g. IF(NOT A1+A2=3,1,0) will return 1 if the sum of A1+A2 is NOT equal to 3.
+\par OR: use this to link more than one condition in an IF test where only one of the conditions must be true. E.g. IF(A1=1 OR A1=2,1,0) will return 1 if A1 contains either 1 or 2, but will return a 0 in any other case.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Information functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 cell error.type istext isnumber isnontext iserrors isna islogical isblank
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The information functions are as follows:
+\par CELL(information,range) returns a type of information about the upper left cell in a range.The text string, 'information' can have the values "ROW", "COL", "ADDRESS" or "CONTENTS", which return the row number, column number, cell reference or the contents
+ respectively.
+\par ERROR.TYPE(x) returns a number between 1 and 7, according to the type of error value that exists in cell x. The numbers signify the following errors:
+\par 1\tab #NULL!: the information in the cell refers to an intersection of ranges that do not in fact intersect.
+\par 2\tab #DIV/0: the information in the cell involves division by zero.
+\par 3\tab #VALUE!: a formula contains the wrong kind of item, such as =3+"ghost".
+\par 4\tab #REF!: the cell contains an invalid reference.
+\par 5\tab #NAME?: the cell contains a reference to an invalid name.
+\par 6\tab #NUM!: the information in the cell involves an impossible calculation, or one whose result lies outside of Sheet's range.
+\par 7\tab #N/A: no information is available for the current cell.
+\par ISBLANK(x) returns TRUE if x contains no information, or FALSE if x contains information.
+\par ISERR(x) where x is a cell reference returns TRUE if the value in x is any error except #N/A, otherwise it returns FALSE.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Any cells which refer to other cells containing either an error or #N/A will also display the error or #N/A. To check for this ripple-through effect use ISERR or ISNA
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 ISNA(x) where x is a cell reference returns TRUE if the value in x is #N/A, or FALSE if the value in x is not #N/A.
+\par ISERROR(x) where x is a cell reference returns TRUE if the value in x is any error, otherwise it returns FALSE.
+\par ISLOGICAL(x) returns TRUE if the information in cell x is logical, FALSE if it is not.
+\par ISNONTEXT(x) returns TRUE if the information in x is not text, or FALSE if the information in x is text.
+\par ISNUMBER(x) returns TRUE if x is a number or a cell containing either a number or a formula which returns a number. Otherwise it returns FALSE.
+\par ISTEXT(x) returns TRUE if the information in x is text, or FALSE if the information in x is not text.
+\par N(x) returns the number in a cell or in the top left cell of a range. If the cell does not contain a number, Sheet returns FALSE.
+\par TYPE(x) returns a code according to the type of information x contains. The codes are:
+\par 1\tab Number.
+\par 2\tab Text.
+\par 4\tab Logical value.
+\par 8\tab Formula.
+\par 16\tab Error value.
+\par T(x) returns the text contained in a cell or in the top left cell of a range. If the cell does not contain text, blank text (an "empty string") is returned.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Text functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 char code exact find left len value upper trim string right rept replace proper mid lower
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The text functions are as follows:
+\par & joins together ("concatenates") one or more text strings. So, ="here"&"and"&"now" will return 'hereandnow'.
+\par CHAR(x) returns the character indicated by the character code x.
+\par CODE(string) returns the character code for the first character in string. E.g. =CODE("Hillcrest") returns the value 72, the character code for 'H'.
+\par EXACT(string1,string2) will return TRUE if string1 is exactly the same as string2, otherwise it will return FALSE. The comparison takes account of case and accents.
+\par FIND(searchstring,string,start_position) returns the position in string where searchstring starts. The search begins at start_position. Make start position 1 to start searching from the first character, 2 to start at the second, and so on.
+\par LEFT(string,n) returns the first n letters of string. E.g. =LEFT("discotheque",5) will return 'disco'.
+\par LEN(string) returns the number of characters, including spaces, in the string. E.g. =LEN("Hillcrest") will return the value 9.
+\par LOWER(string) returns the string converted entirely to lower case. E.g. =LOWER("Clive") will return 'clive'.
+\par MID(string,start_position,n) returns a string n characters long, taken from the start_position in string. For the start position, 0 is the first character, 1 the second and so on.
+\par PROPER(string) returns the string with the first letter of each word in upper case and the rest in lower case. E.g. =PROPER("clive browning") returns 'Clive Browning'.
+\par REPLACE(string,start_position,n,newstring) removes n characters from string, starting from start_position, then inserts newstring at start_position, and returns the resulting string. E.g. =REPLACE("electorate",6,5,"ion") returns 'election'.
+\par REPT(string,n) returns string repeated n times. E.g. =REPT("*",50) will return a bar ***** 50 characters long.
+\par RIGHT(string,n) returns the last n letters of a string. E.g. =RIGHT("farmhouse",5) will return 'house'.
+\par STRING(x,n) returns a number x as a string to n decimal places. So, =STRING(3.1416,3) returns the string '3.142'.
+\par TRIM(string) returns the string with leading and trailing spaces removed, and reduces multiple spaces to a single space.
+\par UPPER(string) returns the string converted to upper case.
+\par VALUE(string) converts a string to a number. E.g. =VALUE("45.9") returns the number 45.9.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cash flow functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 irr npv financial
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The financial functions include functions for dealing with cash flow.
+\par In these functions, the item cash_flows should be a range refere
+nce, e.g. D2:D8, for cells containing the initial cost of the investment and the receipts resulting from it. Arrange these in chronological order, with the initial outlay in the first cell. Make all expenditures negative amounts, and all receipts positive
+.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 When using these functions:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter rates as a percentage or a decimal, e.g. 17.5% or 0.175.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Enter interest rates for the same unit of time as the term. So if you use 8 as the term to indicate 8 months, use the interest rate per month rather than per year.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 IRR(guess,cash_flows) calculates the Internal Rate of Return of a an investment, to give the approximate interest rate earned. 'Guess' is a number you suppose to be close to the IRR.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Cash flows are assumed to occur at equal intervals. If there are no receipts for a period, leave the cell blank.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 NPV(interest,cash_flows) calculates the Net Present Value of an investment: what it would be worth if you had it as a lump sum now rather than a future receipt. Interest is the interest rate per receipt pe
+riod. NPV assumes the receipt occurs at the beginning of the period. If receipt occurs at the end of the period, use the formula:
+\par npv = first_receipt + NPV(interest,remaining_receipts)
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Lump sum investments (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 cterm rate financial
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The financial functions include functions for dealing with lump sum investments. These assume an investment earns a fixed rate of interest.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter rates as a percentage or a decimal, e.g. 17.5% or 0.175.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Enter interest rates for the same unit of time as the term. So if 8 is used as the term to indicate 8 months, use the interest rate per month rather than per year.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 CTERM(interest,future_value,principal) returns the number of periods it will take for an investment of principal to reach future_value at a given interest rate. CTERM uses the formula:
+\par term = ln(future_value/principal)/ln(1+interest)
+\par RATE(future_value,principal,periods) returns the interest rate for an investment, principal, to reach future_value over the given number of periods. RATE uses the formula:
+\par interest rate = ((future_value/principal){\super 1/periods}) - 1
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Interest rates are often calculated for a month. The annual rate of interest cannot be calculated by multiplying this rate by 12. Instead, use the formula:
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 annual rate = ((1+monthly rate){\super 12})-1
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Depreciation functions (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 sln syd ddb double declining balance straight-line depreciation sum of the years digits sum-of-the-years-digits financial
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The financial functions include functions for calculating the depreciation in value of an asset over time. They use the terms:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Cost: the initial outlay on the asset.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Salvage: the value at the end of its life.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Life: the number of periods of the assets life.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Period: the length of time of a period of depreciation.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 SLN(cost,salvage,life) returns the depreciation per period for the asset's life. SLN assumes that the asset loses the same amount of its value during each period, and uses the formula:
+\par depreciation per period=(cost-salvage)/life.
+\par SYD(cost,salvage,life,period) returns the depreciation per period, assuming that the asset loses more of its value at the beginning of its life than at the end. SYD uses the formula:
+\par depreciation per period= (cost-salvage)*(life-period+1)/(life*(life+1)/2).
+\par DDB(cost,salvage,life,period) returns the depreciation per period, assuming that the asset loses much more of its value at the beginning of its life than at the end. DDB uses the formula:
+\par depreciation per period=(book value*2)/life
+\par where
+\par book value at the start of each period= (total cost-total depreciation over all previous periods).
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Annuities & loans (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 fv pv pmt term borrowed interest payments periodic payment financial
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The financial functions include functions for calculating annuity investments and loan payments.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter rates as a percentage or a decimal, e.g. 17.5% or 0.175.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Enter interest rates for the same unit of time as the term. So if 8 is used as the term to indicate 8 months, use the interest rate per month rather than per year.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b Annuity investments:
+\par }An annuity is an investment of a series of equal payments earning a fixed rate of interest, e.g. a savings account into which you pay \'a3500 a month.
+\par FV(interest,term,payment) returns the matured value of an investment given the interest rate, the term, and the payment per period. FV uses the formula:
+\par fv=payment*(((1+interest){\super term})-1)/interest
+\par where term is the number of periods.
+\par PV(interest,term,payment) returns the present value of an investment given the interest rate, the term, and the payment per period. PV uses the formula:
+\par present_value = payment * (1-(1+interest){\super -n}) / interest.
+\par TERM(payments,interest,future_value) returns the number of payments needed to accumulate future_value from a series of payments earning a periodic interest rate. TERM uses the formula:
+\par number of payments= ln(1+future_value*interest/payment))/ln(1+interest)
+\par where ln is the natural logarithm.
+\par {\cs33\b Loan payments:
+\par }PMT(interest,term,principal) returns the amount to be repaid per period on a loan, given the interest rate, the number of repayment periods and the principal amount loaned.
+\par The function assumes repayment is made at the end of each period. If repayment is at the beginning of each period, use the formula =PMT(interest,term,principal)/(1+interest). PMT uses the formula:
+\par payment=principal*interest/(1-(1+interest){\super -term}).
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Sorting (Sheet)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 alphabetical order re-order sorted sort rows sort columns
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can sort the information in rows and columns in ascending or descending order. You can specify the sort order for up to three rows or columns at a time.
+\par {\b To sort rows:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Highlight the rows which you want to sort.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Sort|Left-to-right} from the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Specify the first row you want to sort on the {\cs33\b 1st row} line, and the order in which you want to sort it.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}To sort more than one row, select the row on the {\cs33\b 2nd row} and then the {\cs33\b 3rd row} lines, and select the order in which you want to sort.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If you want to make the sort order case sensitive for one or more rows, tap the {
+\cs33\b Options} button and tick the box beside the row.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\b To sort columns:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Highlight the columns which you want to sort.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Sort|Top-to-bottom} from the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select the first column you want to sort on the {\cs33\b 1st column} line, and the order in which you want to sort it.
+\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}To sort more than one column, select the column on the {\cs33\b 2}{\cs33\b\super nd}{\cs33\b  column} and {\cs33\b 3rd column} lines, and then select the order in which you want to sort.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If you want to make the sort order case sensitive for one or more columns, tap the {
+\cs33\b Options} button and tick the box beside the column.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Sket-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,267 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - SKETCH"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy7\hr18\min46}{\revtim\yr2000\mo4\dy25\hr16\min40}{\version2}{\edmins1}{\nofpages10}{\nofwords2315}{\nofchars13199}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16834\margl567\margr7371 \widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709\endnhere {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 SKETCH{\revised\revauth1\revdttm1178913830 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913830 0x}{\revised\revauth1\revdttm1178913832 1000007D}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Sketch: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913832 sketch.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 illustration painting design flowchart pictures
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Sketch is the EPOC machine's drawing program. Use Sketch to produce maps, flowcharts, party invitations, etc.
+\par Sketch includes ## four/16 ## colours, a range of different line widths and drawing tools including the Freehand tool, Line tool, various shape tools, Spray paint tool, Clipart tool, Text tool, Erase tool and Select area tool.
+\par When Sketch is first used a blank page is displayed. If Sketch has been used before, the last file worked on is opened. You can:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 select a drawing tool and start drawing.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}open a different file.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}create a new file.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Each picture is made up of a series of dots, known as "pixels". Use {\cs33\b Zoom in} to view and edit the individual pixels more clearly.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Drawing tools (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 ellipses graphic hollow toolbox select area freehand line erase spray filled rectangle filled oval
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use these drawing tools to produce the picture:
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=freehandtool}\tab for freehand drawing.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=linetool}\tab for drawing straight and diagonal lines.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=spraytool}\tab for spray painting.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=clipart}\tab for inserting one of the pictures supplied with Sketch.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=rectangletool}\tab for drawing rectangles and squares.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=filledrectangletool}\tab for drawing filled rectangles and squares.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=ovaltool}\tab for drawing ovals and circles.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=filledovaltool}\tab for drawing filled ovals and circles.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=texttool}\tab for adding text to a sketch.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=selectareatool}\tab for highlighting part of a sketch.
+\par {\cs34\scaps\f25\cf13 ARCHIVE=SKETCH NAME=erasetool}\tab for deleting part of a sketch.
+\par {\cs33\b To select a drawing tool:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap a button on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select one of the drawing tools on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Palette tools (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 grey shade gray colors toolbox pen width line width colours transparent opaque
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The palette tools at the bottom of the Toolbar contain:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 the drawing colour for all tools
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}the "transparency" control
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}the "pen width" of the {\cs33\b Line}, {\cs33\b Erase} and {\cs33\b Spray} tools.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The pen width also applies to the borders surrounding hollow rectangles and ovals. The transparency palette is only displayed when the {\cs33\b Select area} drawing tool is in use; when a different drawing tool is selected the width palette is displayed.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To change the drawing colour:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the colour on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Colour tool} from the {\cs33\b Palette tools }cascade on the {\cs33\b Tools} menu and change the colour in the dialog.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To change the "transparency":
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Choose the {\cs33\b Select area} drawing tool and tap the {\cs33\b 
+Transparent} or {\cs33\b Opaque} button on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select or deselect {\cs33\b Make transparent} on the {\cs33\b Transform} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To change the line width:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the line width on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Width tool} from the {\cs33\b Palette tools }cascade on the {\cs33\b Tools} menu and change the width in the dialog.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting sketches
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 clear clearing errors rubber rub out erase cut undo redo
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 All or part of a picture can be deleted.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To delete part of a picture:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the {\cs33\b Erase} button on the Toolbar, or select {\cs33\b Erase }from the {
+\cs33\b Drawing tools} cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the erase width by tapping the required width on the Toolbar, or selecting {\cs33\b Width tool} from the {\cs33\b Palette tools }cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Use the pen to erase, or hold down {\cs33\b Shift} and use the arrow keys to erase, starting at the cursor position, or position the eraser and press the {\cs33\b Spacebar}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Alternatively, delete part of a sketch by selecting an area and pressing {\cs33\b Del}
+.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete the entire picture select {\cs33\b Delete all} on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you accidentally delete all or part of a picture, the area can be retrieved by selecting {\cs33\b Undo} on the Toolbar or {\cs33\b Edit} menu. Up to the previous five actions performed can be undone.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cutting, copying & pasting (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 erase duplicate clone clipboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete the selected area of a drawing, but keep a copy of the deleted area on the clipboard to use in another sketch, select {\cs33\b Cut} on the {\cs33\b Edit}
+ menu. The selected area is stored on the clipboard until its replaced by another area being cut or copied to the clipboard.
+\par To copy the selected area of the picture to the clipboard (without removing it from your drawing), select {\cs33\b Copy} on the {\cs33\b Edit} menu.
+\par To insert the contents of the clipboard into the sketch select {\cs33\b Paste} on the {\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Flipping pictures over (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 turn rotate tool horizontal vertical transform mirror-image reflect spin revolve rotation twist
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To flip a selected area over, either horizontally or vertically:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the area, by using:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b Select area} drawing tool on the Toolbar, or from the{\cs33\b 
+ Drawing tools }cascade on the {\cs33\b Tools} menu to highlight part of the sketch, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Select all} on the {\cs33\b Edit} menu to highlight the whole picture.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Select either {\cs33\b Flip horizontally} or {\cs33\b Flip vertically} on the {\cs33\b Transform} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 The flip commands "mirror" the selected area. To
+ turn the area around by 90 degrees select {\cs33\b Rotate} on the {\cs33\b Transform} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting pictures from clipart (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 gallery images houses arrows roads transport clip-art image library
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Sketch has a number of images which can be added to pictures, including houses, roads and arrows. This is known as "clipart".
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+You can flip and rotate the existing pictures to get extra shapes, e.g., to insert a down arrow in the picture, insert the up arrow from the clipart and flip it vertically.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To insert a picture:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the {\cs33\b Clipart} button on the Toolbar, or select {\cs33\b Clipart} on the 
+{\cs33\b Tools} menu to display the Clipart palette.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Use the scroll bar, or the arrow keys to view all the pictures.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Tap on a picture to insert it into the sketch, or use the arrow keys to select the picture and then press the {\cs33\b Enter }key.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+The picture is highlighted when inserted so it can be moved, resized, rotated etc, as required. Use the arrow keys to line up two pieces of clipart.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Moving pictures (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 move place placing align position
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To move the selected part of a picture into a different position:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Place the pen inside the highlighted area and drag it to the required position, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Hold down {\cs33\b Shift} and use the arrow keys to move the cursor inside the highlighted area, and then use the arrow keys to position it.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Resizing pictures (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 enlarge reduce smaller bigger larger decrease scaling scale stretch shrink handles
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To increase or decrease the size of a selected area:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Drag on one of t
+he "handles" surrounding the selected picture. Drag on a corner handle to resize the picture proportionally. Tap elsewhere on the page to remove the handles and fix the picture to the page, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Hold down {\cs33\b Shift} and use the arrow keys to move the cursor onto one of the handles surrounding the selected picture, and then use the arrow keys to resize the picture. Press the {\cs33\b Enter}
+ key to fix the picture to the page.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting text (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 write labels text tool type tool
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Text can be inserted into the sketch, using different fonts, sizes and it can be formatted, e.g. by making the text bold.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Once the text has been inserted you cannot reformat it.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To add text:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the {\cs33\b Insert text} button on the Toolbar, or select {\cs33\b Insert text}
+ on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Type the text into the {\cs33\b Insert text} dialog. Change the appearance of the text using the:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Bold,} {\cs33\b Italics} or {\cs33\b Underline}
+ buttons or the equivalent shortcut keypresses.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Font} button to specify the font, size, colour and print position before inserting the text.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Insert} to add the text to the picture. The text is selected so it can be moved into position.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If more text than will fit on the page is inserted, the option to resize the sketch is given. Press {\cs33\b Yes} to increase the sketch size, or {\cs33\b No} to insert as much text as will currently fit.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting text (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 type face typestyle type style crossout font bold italics underlined
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can change the appearance of text by applying formatting options before you add it to your drawing.
+\par To change the font (typeface), size, colour and print position of text, select the {\cs33\b Insert text} drawing tool. Press the {\cs33\b Font} button to display the {\cs33\b Set font} dialog.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Any changes made to the format of the text applies to all the text, not just the highlighted word(s).
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}You cannot reformat text once you have added it to a drawing.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Transparent objects (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 visible see through opaque invisible mask paste see-through
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When moving part of a sketch, or inserting a clipart sketch, you can "overlay" the picture on top of an existing area and control whether the existing sketch "shows through" or not.
+\par {\cs33\b To make the selected or inserted area transparent:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Choose the {\cs33\b Select area} drawing tool and tap the {\cs33\b 
+Transparency} button on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick {\cs33\b Make transparent} on the {\cs33\b Transform} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To make the selected or inserted area overlay the existing sketch:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Choose the {\cs33\b Select area} drawing tool and tap the {\cs33\b Opaque}
+ button on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Remove the tick from {\cs33\b Make transparent} on the {\cs33\b Transform} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Background: cropping a sketch
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 resize cut trim unused space
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can remove unused space around the edge of the picture. This is known as "cropping" the picture.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Cropping does not have any effect on page margins or printing.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To crop a picture select {\cs33\b Crop} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+If a picture is accidentally cropped, the full background size can be restored. To do this tap the {\cs33\b Undo} button on the Toolbar or select {\cs33\b Undo} on the {\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Combining sketches
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 place add inserting importing
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the Merge facility to combine pictures.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To merge in a sketch:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Open the sketch into which another sketch will be merged.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Merge in} from the {\cs33\b More }cascade on the {\cs33\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Select the file to merge in.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 The picture is highlighted, so that it can be moved or resized.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Sketch size
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 work space work page
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+When Sketch is first used the size of the drawing area is the visible area on the screen. The size can be increased as required - the maximum size is determined by the size of the page on which you intend to print the picture.
+\par {\cs33\b To resize the sketch:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 select {\cs33\b Resize sketch} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Specify the sketch size in either cm (or inches) or pixels - you cannot change the size in both.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To increase the visible drawing area, hide the Toolbar by removing the tick from {\cs33\b Show Toolbar} on the {\cs33\b View} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The maximum size of the sketch area depends on the current page size, which can be changed using {\cs33\b Page setup} from the {\cs33\b Printing }cascade on the {\cs33\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Reversing colour (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 grey shades gray transform colours colors invert negative reverse
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The colours used in the picture can be inverted, eg, inverting a selected area makes any black areas white, and vice versa.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To reverse the colour:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the area to reverse.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Reverse colour} on the {\cs33\b Transform} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Rotating (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 rotate tool turning twist spin
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To turn the selected picture around clockwise by 90 degrees.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select the area to rotate.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b Rotate} on the {\cs33\b Transform} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the selected area is too wide or too high to fit on the page when rotated, the size of the sketch needs to be changed before you rotate the picture, otherwise part of the drawing might be lost.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 To return to the original position select {\cs33\b Rotate} four times.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Selecting an area (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 area selection tool pick tool dashed border selection tool lasso cutouts
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+All or part of the sketch needs to be highlighted before you can move the area, reverse the colour, rotate or flip the area, cut or copy the area to the clipboard, make the area transparent, export the picture or send the area by Infrared.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To select an area:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the {\cs33\b Select area} button on the Toolbar, or choose the {\cs33\b 
+Select area} drawing tool on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Use the pen to highlight the required area, or use the arrow keys to draw a box starting from the cursor position.
+\par \pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Remove one of the next two help topics, according to the display on the device. Retain the first topic for a greyscale display, or the second topic for a colour display:
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Colours (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 palette fill colour picker color picker colour tool color tool colors
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Up to four colours (shades of grey) can be used when producing a sketch. To change the drawing colour:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select a drawing tool.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap a colour on the Toolbar, or select {\cs33\b Colour tool} from the {\cs33\b Palette tools }cascade on the {\cs33\b Tools} menu and select the colour from the dialog.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 When Sketch is first opened the drawing colour is black.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Colours (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 palette fill colour picker color picker colour tool color tool colors
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Up to 16 colours can be used when producing a sketch. To change the drawing colour:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select a drawing tool.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap one of the two pen colours on the Toolbar.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}To change the currently selected pen colour, tap the colour selector button, or select {\cs33\b Colour tool} from the {\cs33\b Palette tools }cascade on the {\cs33\b Tools}
+ menu. Then select the colour from the dialog.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Line widths (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 palette thickness
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The line width can be changed for the {\cs33\b Freehand}, {\cs33\b Line}, {\cs33\b Erase}, {\cs33\b Spray}, {\cs33\b Oval} and {\cs33\b Rectangle} drawing tools.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To change the width:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select a drawing tool.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap one of the widths on the Toolbar, or select {\cs33\b Width tool} from the {\cs33\b Palette tools }cascade on the {\cs33\b Tools} menu and select the line width from the dialog.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To set the width to an exact number of pixels use {\cs33\b Palette tools|Width tool}
+ on the {\cs33\b Tools} menu. The minimum width is one pixel (two pixels for the {\cs33\b Spray} tool), while the maximum line width for the {\cs33\b Line}, {\cs33\b Rectangle} and {\cs33\b Oval} drawing tools is 20, and for the {\cs33\b Erase} and {
+\cs33\b Spray} drawing tools it is 30.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Undoing/redoing actions (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 clear clearing cancelled canceled
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you draw on the page accidentally the mark can be removed without erasing any surrounding work using the {\cs33\b Undo} tool. To undo a mistake:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the {\cs33\b Undo} button on the Toolbar, or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Undo} on the {\cs33\b Tools }menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use {\cs33\b Redo} on the {\cs33\b Edit} menu to replace any work accidentally deleted, or to repeat something you accidentally undid.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Up to the last five actions can be undone or redone. When this number is reached a message is displayed informing you that there is nothing to undo.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Drawing lines, shapes and freehand sketches
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 coloured shaded cube boxes oblong ellipses round shape
+s pen tool pencil tool free form lines free-form lines free form tool free-form tool airbrush spray can graffiti keypresses ovals rectangles circles squares
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Draw lines, shapes and freehand sketches using the {\cs33\b Line}, {\cs33\b Spray}, {\cs33\b Oval}, {\cs33\b Filled} {\cs33\b Oval}, {\cs33\b Rectangle}, {\cs33\b Filled} {\cs33\b Rectangle} and {\cs33\b 
+Freehand} drawing tools.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To draw lines, shapes and freehand sketches:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap the drawing tool on the Toolbar, or select one of the commands from the {
+\cs33\b Drawing tools }cascade on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the drawing colour and line width.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Use the pen to draw, or hold down {\cs33\b Shift} and use the arrow keys to draw starting from the cursor position.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The picture is fixed to the page as soon as the pen is removed from the page, or the {
+\cs33\b Shift }key released.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 To draw a circle, square, vertical line, horizontal line, or 45 degree line hold down 
+{\cs33\b Ctrl} while drawing. When spray painting, move the spray tool over the same area more than once to intensify the colour.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cursor position (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 marker position marker
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When using the keyboard to draw, it is useful to view the position of the cursor because this is the start point for any drawings. The cursor position can be viewed as:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Two lines across the page, (known as "cross hairs"), the cursor point being where the lines cross, by selecting {\cs33\b Show cross hairs} on the {\cs33\b View} menu and/or
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}An information message, which gives the position by the number of pixels. The X co-ordinate refers to the number of pixels across the page, while the Y co-ordinate refers to the number 
+of pixels down the page. To display this message select {\cs33\b Show cursor position} on the {\cs33\b View} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exporting files (Sketch)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 merge importing file formats conversion convert mbm format epoc picture file wallpaper
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Select {\cs33\b More|Export} on the {\cs33\b File} menu to save a sketch as an EPOC picture file (in MBM format).
+\par To save a sketch as system wallpaper, use {\cs33\b More|Save as System wallpaper} on the {\cs33\b File} menu. Use the System screen preferences to select the sketch as system wallpaper.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 System wallpaper can't be edited, so you may want to save your Sketch file separately.
+
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}If you save an image larger than the screen (the screen is 640 pixels wide by 240 pixels high) only the central part of it will appear as system wallpaper.
+\par }
\ No newline at end of file
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/Clipart.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/EraseTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/FilledOvalTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/FilledRectangleTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/FreehandTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/LineTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/OvalTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/RectangleTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/SelectAreaTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/SprayTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/TextTool.mbm has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/clipart.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/erasetool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/filledovaltool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/filledrectangletool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/freehandtool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/linetool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/ovaltool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/rectangletool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/selectareatool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/spraytool.jpg has changed
Binary file symhelp/helpmodel/TestData/Source/ER5Help/Sketch/texttool.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Spel-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,131 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - <app name>"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy15\hr16\min3}{\revtim\yr2000\mo4\dy25\hr16\min41}{\version2}{\edmins1}{\nofpages4}{\nofwords1063}{\nofchars6061}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Spell{\revised\revauth1\revdttm1178913833 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913833 0x10000082}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Spell: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913833 spell.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 vocabulary lexicon glossary proof-reader proof reader dictionary spell checker
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use Spell to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Check the spelling of words.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Search for anagrams.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Find missing letters in words to help solve crossword clues.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Find synonyms, using the Thesaurus.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When Spell is opened, the cursor is in the {\cs33\b Word to look up:} box, ready for a word to be typed in.
+\par To check a word, type it in the box and tap the Toolbar button for the Spell action you require.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Use a ? (question mark) or a * (asterisk) in place of missing letters when typing in clues for solving crosswords.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Spell dictionary can also be used to check all or part of a document in the EPOC Word program.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Spell checking (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 editing proofing spelling errors alternatives misspelled replacements dictionary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To check the spelling of a word:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Type a word in the {\cs33\b Word to look up:} box.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b Spell} button on the Toolbar, or select {\cs33\b Spell check }on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}If the word is in the Spell dictionary a message is displayed to confirm that the word is correct.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the word is not found in the Spell dictionary, Spell searches for alternative words and lists them as they are found.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Words not recognised by Spell can be added to the personal dictionary by selecting {
+\cs33\b Add word} from the {\cs33\b Personal dictionary }cascade on the {\cs33\b File} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If Spell finds more suggestions than fit on the page view the rest of the suggestions by either using the scroll bar, or using the left and right arrow keys.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Finding anagrams (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 rearrange alternatives finder
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Type a word or a series of letters and use Spell to find words which include some or all of the letters, arranged in a different order; e.g.: suggested anagrams of 'scented' include 'descent' and 'tensed'.
+
+\par Spell starts by looking for words which use all the letters entered, and then lists words including as many as possible letters.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To search for anagrams:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Type a word or a series of letters in the {\cs33\b Word to look up:} box.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b Anag} button on the Toolbar, or select {\cs33\b Anagram} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Spell lists any anagrams as they are found, in alphabetical order, beginning with the longest ones found.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The list may be incomplete if a large number of letters has been entered.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Crossword solutions (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 wildcard wild card finder solver missing letters
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use Spell to find the missing letters in crossword solutions by entering the known letters of the word with either ? or * in place of the unknown letters.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To search for crossword solutions:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Type a word in the{\cs33\b  Word to look up:}
+ box inserting a ? in place of each unknown letter.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b Xword} button on the Toolbar, or select {\cs33\b Crossword} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Spell displays a list of suggested solutions.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+You can also use * to look for several replacement letters. For example, if 'perc?ed' is entered the suggestion is 'perched', but if 'perc*ed' is entered the suggestions are 'perceived', 'perched' and 'percolated'.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Re-using a word (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 check list history list
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The "history list" contains all the words which have been typed into Spell during the current "session". The list is cleared each time Spell is closed.
+\par To display the history list tap on the button beside the {\cs33\b Word to look up box:} or press the {\cs33\b Tab }key. Then, tap on a word, or press {\cs33\b Enter} to select the word and display it in the {\cs33\b Word to look up:} box.
+\par If the history list contains more words than can fit on the screen view the remainder of the words by scrolling up and down the list To do this tap the up and down arrows on the scroll bar, or use the up and down arrow keys.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+Use a word from the list of suggestions by highlighting the word, and tapping one of the Toolbar buttons, or selecting a command on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Clearing information (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 delete remove refresh
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The information currently being displayed in Spell can be cleared without exiting the program.
+\par {\cs33\b To clear the list of words which have previously been entered:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs33\b Clear history list} on the {\cs33\b View} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To clear the list of suggested solutions:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs33\b Clear display} on the {\cs33\b View} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Personal dictionary (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 custom dictionary customised dictionary internal dictionary global dictionary user dictionary base dictionary main dictionary private dictionary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Spell has two dictionaries which it uses to check the spelling of words:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The Spell dictionary, which contains the built-in words.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The Personal dictionary, to which words can be added and kept in Spell.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Spell dictionary is always used when checking a word. To use the Personal dictionary as well, tick {\cs33\b Use personal dictionary} on the {\cs33\b File} menu.
+\par If this option is selected the setting is saved when Spell is closed, and is used in both Spell and other EPOC programs.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding words to Spell
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 custom dictionary customised dictionary unfamiliar words user dictionary personal dictionary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Some specialist words, for example those used in a field of work, might not be in the Spell dictionary.
+\par {\cs33\b To add these to the Personal dictionary:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 type the word in the {\cs33\b Word to look up:} box and select {\cs33\b 
+Add word} from the {\cs33\b Personal dictionary }cascade on the {\cs33\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting words from Spell
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 user dictionary custom dictionary customised dictionary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If a word is no longer needed, or a word was entered by mistake, it can be deleted from the Personal dictionary.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To delete words from the Personal dictionary:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Display the Personal dictionary by selecting {\cs33\b Show contents} from the {
+\cs33\b Personal dictionary }cascade on the {\cs33\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Highlight the word and select {\cs33\b Delete word} from the {\cs33\b Personal dictionary }cascasde on the {\cs33\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Displaying the Personal dictionary (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 user dictionary custom dictionary customised dictionary
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The contents of the Personal dictionary can be viewed, making it easier to remove unwanted words, especially if the personal dictionary contains more words than can be remembered.
+\par {\cs33\b To display the contents of the Personal dictionary:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs33\b Show contents} from the {\cs33\b Personal dictionary }
+cascade on the {\cs33\b File} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 While viewing the contents of the Personal dictionary words can be added and deleted.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Finding synonyms (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 proofing, replacements, alternatives thesaurus
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use Spell to search the dictionary for words with the same, or a similar meaning as a word.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To search for synonyms:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Type a word in the{\cs33\b  Word to look up:} box.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b Thes} (for thesaurus) button on the Toolbar, or select {\cs33\b Thesaurus }on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Spell lists any suitable words, separated into categories. The words in bold indicate the start of a new category. Each category is a list of synonyms relating to a different meaning of the entered word.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 These are the default keypresses:
+\par When Spell finishes searching for solutions and displays a list of words, the first word is highlighted. Use the arrow keys to move the highlight around the list of words and select one to check again by using the arrow keys.
+\par To select the highlighted word and display it in the {\cs33\b Word to look up:} box, press Enter.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Copying & pasting (Spell)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 clipboard paste
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the Copy and Paste commands to move words between programs. For example, you can copy words into Spell to use and then copy any suggestions back into the other program.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs33\b Copy} on the {\cs33\b Edit}
+ menu to copy the selected word, which can then be inserted into another program.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Paste} on the {\cs33\b Edit} menu to insert the word which can then be copied into Spell.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Syst-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,158 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - GENERAL"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy17\hr11\min45}{\revtim\yr2000\mo4\dy25\hr16\min43}{\version2}{\edmins0}{\nofpages6}{\nofwords1482}{\nofchars8449}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16834\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 SYSTEM{\revised\revauth1\revdttm1178913834 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913834 0x}{\revised\revauth1\revdttm1178913835 10000076}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 System: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913835 system.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Desktop Directories files run applications programs Navigate Path c: drive disk file name home folder root directory system screen home screen
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The System screen is the EPOC machine's file and program manager, displaying the files on the EPOC machine, and the folders that are used to organise the files.
+\par Use the System screen to::
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Open and close files and programs.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Create new files and folders.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Change the way files and folders are displayed.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Move, copy, rename and delete files and folders.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Change the way the EPOC machine is set up by selecting {\cs33\b Control panel} on the {\cs33\b Toolbar} or {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A {\cs33\b file} or {\cs33\b folder} in the System screen is represented as an icon, with the filename next to it. When a file is open, its filename is displayed in {\cs33\b bold}.
+\par To open a {\cs33\b folder} and display the files within it, highlight it and then tap it or press Enter - the folder's name appears on the Title bar. Any files created from here are put into that folder.
+\par To close a folder, highlight the (Close) icon in the top left of the System screen, and then tap it or press Enter.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If no folder name is displayed on the Title bar (or if the name is in inverted commas), then the "root" of the currently selected disk drive is open. Any files created from here are not put into a folder, but straight into 'C' or 'D'.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Password & owner information for the EPOC machine
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 security password protection personal owner information safety lost stolen user name address
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To set a password to prevent unwanted access to the EPOC machine, go to the System screen, select {\cs33\b Control panel} on the {\cs33\b Toolbar} or {\cs33\b Tools} menu, and then select the {\cs33\b 
+Password} icon.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The password does not protect files stored on Memory disks or files copied to other machines.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Important: If the password is forgotten, the machine will have to be reset, and all the files stored on the internal disk will then be lost.
+\par To record personal details (such as your name and address) on the EPOC machine, in case it is lost, press {\cs33\b Owner info}.
+\par Set when the owner information should be shown on the {\cs33\b Display owner infromation} line.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Once per day is the first time the machine is switched on each day.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tick the {\cs33\b Ask for password} box to set the password.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To change a password, type in the current one first.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change your name and contact details select {\cs33\b Owner} on the {\cs33\b Information} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Browsing folders & files (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Desktop Path Root Directory c: drive disk explorer application program attributes file type browser scan
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To use the "browser" to display files and folders on the currently selected disk drive in a "tree" structure, tap the Title bar, press the Tab key, or select {\cs33\b Browse folders} on the {\cs33\b File}
+ menu.
+\par Folders are displayed on the left under the disk drive; files in the current folder are displayed on the right. To open a folder, tap it or highlight it and press Tab.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To display the files in a different order, tap the relevant 'Sort by' button (or press Ctrl+N, T, S or D to sort by Name, Type, Size or Date).
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To create a new folder, go to the disk drive and folder in which it is to be created, and press {\cs33\b New folder}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To select a file on the System screen from the browser, highlight it and press {\cs33\b OK}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 To open a file quickly from the browser highlight it and press Enter twice.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Bookmarks (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Desktop Path Directory Shortcut Tagging marking go to
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To "bookmark" the folder in which you keep frequently required files, move to the required folder and select {\cs33\b Set bookmark} on the {\cs33\b Edit} menu.
+\par To move to the bookmarked folder at any time, select {\cs33\b Go to bookmark} on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+New files are created in the "standard folder" (initially the "Documents" folder) if a program icon is tapped and the last used file cannot be found. The "standard folder" can be different to the "bookmarked folder".
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Standard folder (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 desktop files
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+The "standard folder" is where new files will be created, when a program icon from the Program icon bar is tapped, and the last file that was open cannot be found (e.g. if it has been renamed, moved or deleted).
+\par Initially the "Documents" folder is set as the Standard folder. To select a different folder, select {\cs33\b Preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Creating a new folder (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Desktop Root subdirectory tree subfolder create new folder create new directory create directory
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Grouping files together in appropriately named folders makes them easier to find, e.g. put correspondence in a folder called 'Letters'.
+\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To create a new folder:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Move to the disk drive and folder within which a new folder is going to be created. If all folders in the current disk drive are closed, the folder will be created in the "root" ('C' or 'D').
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select {\cs33\b New folder} on the {\cs33\b Toolbar} or {\cs33\b Folder} on the {\cs33\b Create new} cascade of the {\cs33\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Type in the folder name.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Folders can also be created from within the Browser.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You might want to create folders that mirror the folders on your PC.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Renaming files, folders & disks (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 rename disk label
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To rename a file or folder, highlight it on the System screen, and select {\cs33\b Rename} on the {\cs33\b File} menu.
+\par To rename a disk drive, select {\cs33\b Name disk} on the {\cs33\b Disk} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Backing up & restoring (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 SSD CompactFlash card diskcopy c drive memory disk backup back up back-up restore security
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To back up the internal disk drive to an external disk:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Copy disk} on the {\cs33\b Disk} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the {\cs33\b From disk} line to 'C' and set the {\cs33\b To disk} line to 'D'. Leave the {\cs33\b Into folder} line blank - this means the "root" of the 'D' disk drive.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Some programs will not work properly if you back them up to the D disk.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 To restore the items from the External disk:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Copy disk} on the {\cs33\b Disk} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the {\cs33\b From disk} line to 'D' and set the {\cs33\b To disk} line to 'C'. Leave the {\cs33\b Into folder} line blank - this means the "root" of the 'C' disk drive.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To just ba
+ck up a few files or folders, copy them to a Memory disk. You might want to create a special backup folder on the Memory disk, called e.g. 'Backup(July)'.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Alternatively, if you have EPOC CONNECT the files on the EPOC machine can be backed up to a PC rather than to an external disk.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 File properties (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 hidden file security Read-only preferences modification date file size modified last changed
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To view the modification date of a file and its size and to view or change its read-only, hidden and modified status, highlight it on the System screen and select {\cs33\b Properties} on the {\cs33\b File}
+ menu.
+\par To avoid accidentally changing a file which is needed, make it "read-only" by ticking the {\cs33\b Read-only} box. Remove the tick to be able to edit it again.
+\par Tick the {\cs33\b Hidden} box to make the file invisible on the System screen. A preference can be set in the System screen to make all hidden files visible.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Desktop View Show hidden files application formats sort by title bar columns lists sort files
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The current disk drive and folder are shown on the Title bar, which is initially on the left of the screen. To move it to the top of the screen, select {\cs33\b Top of columns} from the {\cs33\b 
+Title position }cascade on the {\cs33\b View} menu.
+\par Files and folders are displayed in columns. To change the width of the columns use {\cs33\b Column width} on the {\cs33\b View} menu. Use the left and right arrow keys, or the scroll bar at the bottom of the screen, to see more files and folders.
+\par File are initially sorted by program type. To sort them differently, select {\cs33\b Sort files} on the {\cs33\b View} menu, and then select:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b By name} to sort the files alphabetically.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b By size} to list them by size, with the largest first.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b By date} to list them by date when last edited, with the most recently edited first.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To display file size and/or date select {\cs33\b Show file details} on the {\cs33\b View} menu.
+\par To make hidden files visible, use {\cs33\b Preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Desktop Keyboard task list switch off turn off browser tasklist tab ctrl fn esc
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are:
+\par Tab or Ctrl+G - select the browser view (or tap on the name at the top of the Toolbar).
+\par Hold down the Ctrl key and tap the System icon to display the list of open files and programs.
+\par Fn+Esc - turn the EPOC machine off.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Searching for files (System)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 file finding file search wildcards wild cards recently used files
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To find a file you have recently used:
+\par }Tap on the {\cs33\b Recent files} button on the Toolbar to see a list of the last files you have used. Tap on a filename or highlight a file and press Enter to go to the file.
+\par {\cs33\b To find files with a specific name:
+\par }Use {\cs33\b Find files|Find files} on the {\cs33\b Edit} menu to search for files if you know part of the filename and/or the program.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Type in part of the filename on the {\cs33\b Name}
+ line to find files that match it, or leave the line blank to find all files.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+The search will find any filename containing the text you enter. You can also type ? for a unknown single letter or * for any number of unknown letters (known as "wildcards").
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the {\cs33\b Program}
+ line to find only files for a specific program, or select {\cs33\b Any} to find all files.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Press {\cs33\b OK} to start the search.
+\par Files are listed as they are found.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To go to a file in the System screen highlight the filename and press {
+\cs33\b Go to}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To sort the listed files by name, type, size or date, press {\cs33\b Sort} and choose the required sort type. Choose the same sort type again to reverse the sort order.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You can stop the search while files are still being listed by pressing {\cs33\b Stop}.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use {\cs33\b Find files|Find again} on the {\cs33\b Edit}
+ menu to show the results of the search again (if filenames have been changed since the initial search, a new search will be performed with the same search criteria).
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 System wallpaper
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 screen logo backdrop image desktop background
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can change the image shown in the System screen behind the icons, to an image of your choice.
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Create an image in Sketch and use {\cs33\b More|Save as System wallpaper} on the {
+\cs33\b File} menu to save it.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Avoid using too much dark shading, as this may obscure the icons.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If you save an image larger than the screen (the screen is 640 pixels wide by 240 pixels high) only the central part of it will appear as system wallpaper.
+\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab In the System screen select {\cs33\b Preferences} on the {\cs33\b Tools} menu and select the {\cs33\b Wallpaper} dialog page.
+\par 3.\tab Select the image you want to use and when you want it to be displayed.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use {\cs33\b More|Delete System wallpaper} on the {\cs33\b File} menu in Sketch to remove an image you no longer require.
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Time-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,162 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title \'93PROTEA HELP FILE - TIME\'94,}{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy17\hr16\min13}{\revtim\yr2000\mo4\dy25\hr16\min44}{\version2}{\edmins1}{\nofpages6}{\nofwords1438}{\nofchars8199}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16834\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709\endnhere {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 TIME{\revised\revauth1\revdttm1178913836 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913836 0x10000080}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Time: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913836 time.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world map alarms date home
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The EPOC Time program has two views:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+The Map view - a map of the world with cities, times, dialling codes and distances.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}The Alarms view - to set, display and manage alarms.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 For the information in EPOC Time to be accurate, the current time, date and Home city needs to be set using {\cs33\b Time & date} and {\cs33\b Home} commands on the {\cs33\b Tools} menu in either view.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 World map (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 telephone sunset sunrise zone
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To display the Map view, tap {\cs33\b Map} on the {\cs33\b Toolbar}, or select the command on the {\cs33\b View} menu.
+\par Next to the map are the current time, and the sunrise and sunset times, for the Home city and a selected city. A sun symbol next to the clock means that the city is in "summer time".
+\par Under the map is the telephone code to dial from the Home city to the selected city, the difference in times between the two cities and the distance between them.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Alarms view (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 alarms sounds ring silent
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To display the Alarms view, tap {\cs33\b Alarms} on the {\cs33\b Toolbar}, or select {\cs33\b Alarms }from the {\cs33\b Switch view }cascade on the {\cs33\b View} menu.
+\par The time until the next alarm, whether set in Time or Agenda, is given at the bottom of the screen.
+\par To view the last 8 alarms to have been cleared, select {\cs33\b View past alarms} on the {\cs33\b Edit} menu.
+\par To view alarms that are set to ring in the future, select {\cs33\b View next alarms} on the {\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting the time & date
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world clocks calendar set time set date
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To set the time and date:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 In the EPOC Time program, tap the clock in the Alarms view or select {
+\cs33\b Time & date }on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}On the System screen, select {\cs33\b Time & date} on the Control panel.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tap on the date line or press Tab to browse for a date in the built in calendar.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Home city (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world country town
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The "Home city" is the current location.
+\par To set the Home city, select {\cs33\b Home} on the {\cs33\b Tools} menu and start typing its name. If it's known to the EPOC machine, its name will be displayed with the country underneath. If not, you can add it using {\cs33\b Add city} on the {\cs33\b 
+Edit} menu when in the Map view.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Use the right and left arrow keys to select the correct city and country combination.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Selecting countries & cities (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world city cross-hair map places town map capital cross hair crosshair
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To select a different location on the map:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap the location on the map.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap the country or city line at the bottom of the Map view.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Start typing the name of the required country or city; or use the right and left arrow keys to scroll through the available countries/cities.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When a country is selected, its capital city is displayed.
+\par The cross hairs move to the selected city, and information about the city appears at the bottom of the screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Alarms (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 occurrences repeats sound reminder ringing changing alarms alarm clock daily weekly repeat weekdays set alarms workdays
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Up to 8 alar
+ms can be set to ring in the next 24 hours, in the next 7 days, or to repeat daily, weekly or only on workdays - e.g. a wake-up alarm for workdays, or once only alarms to provide a reminder of an appointment.
+\par To set a new alarm, go to a blank line in the Alarms view and press Enter or just start typing. Alternatively, in either view, select {\cs33\b New alarm} on the {\cs33\b Edit} menu or on the {\cs33\b Toolbar}.
+\par Set the {\cs33\b Occurrence} line to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Next 24 hours}
+ for the alarm to ring once at the specified time within the next 24 hours.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Once only}, followed by a day, for the alarm to ring once at the specified time, more than 24 hours from now.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Daily} for the alarm to ring every day of the week at the specified time.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Weekly}, on a particular day, for the alarm to ring at the specified time on that day every week.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Workdays} for the alarm to ring at the specified time on days defined as "Workdays".
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To change the workdays, select {\cs33\b Workdays} on the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Text for the alarm appears when the alarm rings, and remains on screen until the alarm has been responded to. (so don't enter text which others should not see).
+\par To edit the details of an alarm, move to the relevant line and press Enter or select {\cs33\b Change alarm details} on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the same alarm sound or time is frequently used, they can be set as new alarm preferences using {\cs33\b Preferences }on the {\cs33\b Tools} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Responding to alarms (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 snoozed stop alarm ringing buzzer alarm clock silence mute clear
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When an alarm rings, the associated text is also displayed on screen.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the EPOC Record program is in use, the alarm sound will be delayed until the recording has stopped.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To silence the alarm but leave the text displayed, press the {\cs33\b 
+Silence} button.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To "snooze" the alarm for 5 minutes, press the {\cs33\b Snooze}
+ button - each further press adds 5 minutes to the "snooze" time, up to a maximum of one hour. The EPOC machine can be used while the alarm is "snoozed".
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the EPOC machine is closed when an ala
+rm rings, it can be "snoozed" by pressing any of the voice note buttons on the outer casing.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To clear the alarm, press the {\cs33\b Clear}
+ button. If it is a once only alarm, it is removed. If it is a repeating alarm, it is automatically set to the next time it is due to ring.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+When the alarm rings, switch to any program (using the Program icon bar) to automatically start a 5-minute snooze - after this time, the alarm will ring again.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 GMT offset
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world daylight saving local time greenwich mean time BST time offset
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+GMT (Greenwich Mean Time) is a means of calculating standard time. Each city on the world map is associated with a "GMT offset" - the number of hours and minutes that the city is in front of (+) or behind (-) GMT.
+\par The time difference between the Home and selected cities shown under the map is the difference in "GMT offsets", adjusted by the "summer time" if appropriate.
+\par To view or change the GMT offset, use {\cs33\b Change city details} on the {\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Silencing alarms (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 snooze stop alarm ringing buzzer alarm clock silent mute cancelled canceled LED lamp light silent for
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To silence all scheduled alarms during a particular period, e.g. the duration of a meeting or journey, tap {\cs33\b Sound} on the {\cs33\b Toolbar}, or select {\cs33\b Sound }on the {\cs33\b Tools} menu.
+
+\par Set {\cs33\b Alarm sound} to 'Silent for' and set the length of time for which alarms are to be silent.
+\par If you want to silence alarms sounds indefinitely, set {\cs33\b Alarm sound} to 'Off'.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+When a 'silenced' alarm rings, the Voice notes recording light flashes and the alarm text appears on screen.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Disabling alarms (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 silence postpone disable alarms
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To stop an alarm from ringing without removing it from the Alarms view list, e.g. to suspend a wake-up alarm when on holiday, select the alarm and select {\cs33\b Disable alarm} on the {\cs33\b Edit} menu.
+
+\par The alarm will be crossed out to show that it is no longer active. To make the alarm active again, repeat the above procedure.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting alarms (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 cancel remove alarms delete alarms cancelled canceled
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To remove an alarm, select the alarm, and press Del or select {\cs33\b Delete alarm} on the {\cs33\b Edit} menu.
+\par To delete an alarm which was set in the EPOC Time program from the View next alarms dialog, highlight it and press the {\cs33\b Delete} button or key.
+\par To delete an alarm set in Agenda, go to the Agenda program.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+When you delete a repeating alarm, it is deleted for all days on which it is due to repeat.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Summer time settings (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world daylight saving time adjust time zones BST city
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Each city can be associated with a summer time zone.
+\par When summer time begins in one of the zones, select {\cs33\b Summer times} on the {\cs33\b Tools} menu and tick the zone.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+If the Home city is not in a zone, but is in summer time or if the Home city is in summer time and the zone it is in is not, tick {\cs33\b Home}.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 When "summer time" ends for the zone, remove the tick so that the times go back again.
+\par A sun symbol next to a clock in the Map view means that the city is in summer time.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Enter reminders in EPOC Agenda for when summer time begins and ends.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding cities & countries (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 World map add city add country add towns new towns capital new city new country
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To add a city:}
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Add city} in the {\cs33\b Edit}
+ menu and fill in the details. Enter the latitude and longitude if known (this is used to work out distances and sunrise and sunset times).
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Position the city on the map using the pen or arrow keys.
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To add a country:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Add country} on the {\cs33\b Edit}
+ menu and fill in the details. The 'National dial prefix' is the number that needs to be dialled immediately prior to each city area code when telephoning from one city to another within the country.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Enter the details for the country's capital city.
+\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Position the capital city on the map using the pen or arrow keys.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To subsequently change any of the city/capital city details, use {\cs33\b 
+Change city details} on the {\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting cities & countries (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 World map delete city remove city delete country remove country delete town remove town
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If a city added to the world map, needs to be removed, select it in the bottom left hand corner of the Map view, and then select {\cs33\b Delete city} on the {\cs33\b Edit} menu.
+\par The cities and countries that have been supplied with the EPOC machine cannot be deleted. A capital city that you have added cannot be deleted unless the entire country is deleted.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (Time)
+\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 world 12 24 am pm kilometres km kilometers view nautical miles analogue clock digital clock analogue clock 12/24 12-24 distance units distances
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To look at the cities in just one country, select the required country at the bottom of the Map view, and select {\cs33\b Cities in current country} on the {\cs33\b View}
+ menu. Then tap on the city at the bottom and use the left and right arrow keys to scroll through the cities. To display cities for all countries again, select {\cs33\b Cities in current country }again.
+\par To change between analog and digital clocks in the Map view and Toolbar, tap them.
+\par To change between 12 and 24 hour clocks, the date format, or the separator characters for times and dates, select {\cs33\b Formats} on the {\cs33\b Tools} menu.
+\par To change the units used to display the distance between the selected and Home cities, go to the Map view and select {\cs33\b Distance units} on the {\cs33\b View} menu.
+\par 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Word-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,269 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11
+\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext15 List Bullet;}{\s16\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext16 List Continue;}{\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10
+\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext17 List Number;}{\*\cs18 \additive\super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}
+\f5\fs20\lang2057 \sbasedon0\snext19 List Bullet 2;}{\s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 Hypertext Anchor;}{\*\cs21 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext22 
+Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon17\snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext24 List Number 2;}{
+\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon26\snext27 Definition Definition;}{
+\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+\sbasedon28\snext29 Note;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon29\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon24\snext31 
+List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 
+\f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 
+\sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb
+\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info
+{\title @@TTL:SERIES 5 HELP FILE - TEMPLATE}{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy11\hr10\min36}{\revtim\yr2000\mo4\dy25\hr16\min45}{\version2}{\edmins0}{\nofpages9}{\nofwords2578}{\nofchars14698}{\*\company Psion SW}{\vern57395}}
+\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: December 21{\super st} 1998
+\par Version: ER5  release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Word{\revised\revauth1\revdttm1178913837 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913837 0x10007F}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Word: Quick start
+\par \pard\plain \s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913837 word.quick-start
+\par }\pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 word processor cursor insertion point wrap text
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Word is the EPOC machine's word processor. The files created in it are compatible with PC word processing applications, and can be copied to any PC that has EPOC CONNECT installed and worked on there.
+\par Use Word to write letters, memos, faxes, or an entire novel.
+\par Use Word to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Format text quickly and easily by tapping buttons on the Top toolbar.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Insert pictures, graphs and sound in your files.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Check spelling.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Change page layout and preview how files will look when printed.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use built-in paragraph styles or add new styles.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Create a new file based on one of the built-in templates, and add templates of your own.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The "cursor" (small black flashing line) shows the current position. When the text typed in reaches the right-hand side of the screen, it automatically "word-wraps" to the next line on the screen.
+\par Text formatting is based around "paragraphs"; press the Enter key to start a new paragraph, or hold the Shift key and press Enter to start a new line without starting a new paragraph.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the {\cs33\b Zoom} commands on the {\cs33\b View}
+ menu to change the size of text on screen. A custom zoom level can be set anywhere between 1% and 200% using {\cs33\b Set zoom}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Zooming only alters the on-screen display and has no effect on printing.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The amount of text in a Word file is limited only by available memory, so long files can be created and worked on if necessary.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 Page up PgUp Page down Pgdn Home End ctrl fn keyboard
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 These are the default keypresses:
+\par Special keypresses can be used to jump to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Previous word: Ctrl+left arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Next word: Ctrl+right arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Start of line: Fn+left arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}End of line: Fn+right arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Start of paragraph: Ctrl+up arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}End of paragraph: Ctrl+down arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Up one screen: Fn+up arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Down one screen: Fn+down arrow.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Start of document: Ctrl+Fn+up arrow
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}End of document: Ctrl+Fn+down arrow.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To jump to the top of any page select {\cs33\b Go to} from the {\cs33\b Find }
+cascade on the {\cs33\b Edit} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting objects (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 insert picture embedding linking attaching sketch graph graphics chart drawing sound display as icon tables OLE
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Enhance documents by inserting (embedding) objects in a Word file. To do this:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Position the cursor in the text at the point at which the object is to appear.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}On the {\cs33\b Insert} menu, select:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Sketch} to add a picture.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Graph} to add a spreadsheet, table or graph created with EPOC Sheet.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Other object} to choose any of the other EPOC programs which support this feature.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To re-edit the object, select it and press Enter, or select {\cs33\b Edit object} from the {\cs33\b Object }cascade on the {\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Inserted objects can cause file sizes to increase greatly. To save screen space (but not disk space), and speed up navigating through and editing a file, select {\cs33\b Object preferences} on the {\cs33\b Tools}
+ menu and display all sketches and graphs as icons when they are first embedded. Override these settings for individual inserted objects by highlighting them and selecting {\cs33\b Format object }from the {\cs33\b Object }cascade on the {\cs33\b Edit}
+ menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting objects (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 format object resize scale
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To format an object (change the size, scaling and appearance of pictures, graphs etc.), select the object, then select {\cs33\b Format} {\cs33\b object} from the {\cs33\b Object }cascade on the {\cs33\b Edit}
+ menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting page breaks (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 manual break new pagebreak new line break linebreak
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Word automatically "paginates" files when they are printed (i.e. it's divided into pages).
+\par To manually control where a new page or paragraph will start, place the cursor at the required point and:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press Ctrl+Enter to insert a page break.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Shift+Enter to insert a line break.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Paragraphs (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 spacing alignment carriage return page layout printing centred centered page break pagebreak paragraph end
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Each time the Enter key is pressed, Word starts a new paragraph and inserts a "paragraph end" (or "carriage return") symbol.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The paragraph end symbol, \'b6, is normally invisible. To show paragraph ends, select 
+{\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+All text between two paragraph end symbols, whether it is just one or two characters, a whole line, or several lines, is treated as a single paragraph. Formatting can be applied (spacing, tabs, bullets, colours, alignment etc.) to whole paragraphs by plac
+ing the cursor within the paragraph(s) and selecting the desired commandfrom the {\cs33\b Paragraph} menu..
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To start a new line without starting a new paragraph, press Shift+Enter.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To define how text appears on the printed page, select {\cs33\b Line spacing} on the {\cs33\b Paragraph} menu:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tick {\cs33\b Keep together} to prevent a page break within a paragraph.
+
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick {\cs33\b Keep with next}
+ to ensure that a selected paragraph always appears on the same page as the following one. This is useful for keeping a heading with the text following it, or making sure that an entire address appears on the same page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick {\cs33\b Start new page} to ensure that a selected paragraph always appears at the top of a new page.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick {\cs33\b Allow as widow/orphan} to let a single line at the beginning or end of a paragraph appear on a separate page from the remainder.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the position of a whole paragraph on the page (e.g. to place an address at the top right hand side of a letter, or centre a title above a graph):
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Place the cursor anywhere in the paragraph to be realigned, or select a number of paragraphs.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Press the {\cs33\b Alignment} button on the Top toolbar and select from the drop-down list of options.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Text can also be realigned using {\cs33\b Alignment} on the {\cs33\b Paragraph} menu.
+
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Line spacing (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 paragraph spacing gap blank line point size
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Line spacing settings control the spacing between lines of text within a paragraph, and whether paragraphs are separated by extra space above or below.
+\par Word normally sets line spacing for a paragraph to 'At least' the current font size, and increases it, where necessary, to accommodate larger text and/or inserted objects.
+\par To change line spacing settings select {\cs33\b Line spacing} on the {\cs33\b Paragraph} menu, enter a point size in the Line spacing box, and set the line spacing control to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Exactly}
+ to keep the line spacing consistent, even if there is a picture or some larger text on the line. In some cases this might mean that a section of larger text might be obscured by the line above, so it might be advisable to set line spacing to the size of 
+the largest text within the paragraph.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b At least} to allow Word to automatically increase spacing when necessary in order to fully display graphics and any larger sizes of text within a paragraph.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To insert extra spacing between individual paragraphs, enter "point" sizes in the Space above and Space below boxes.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 There are 72 points in an inch, so one point is 1/72nd of an inch.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 
+To see the maximum number of lines of text on the screen (up to 50% more), remove the standard spacing between paragraphs by selecting {\cs33\b Style} gallery on the {\cs33\b Paragraphs} menu. Then highlight the 'Normal' line, press {\cs33\b Modify}
+ then press {\cs33\b Format}. Select {\cs33\b Line spacing} and set {\cs33\b Space above} to 0. Note that this also affects the way lines are spaced when printed.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Paragraph styles (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 template formatting normal heading style gallery outline level
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A style is a pre-defined set of formatting options (font, indents, tabs, spacing, borders, colours, bullets and alignments) which is applied to an entire paragraph.
+\par Word has some ready made styles (e.g. Heading 1 and Normal), which can be applied via the {\cs33\b Style} button on the Top toolbar or {\cs33\b Style gallery} on the {\cs33\b Paragraph} menu (or using Ctrl+Fn+N for Normal, Ctrl+Fn+1 for Heading 1 etc.).
+
+\par In addition, use the Style gallery to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Create a new style with an associated shortcut key combination - select {
+\cs33\b New}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Review or change settings for an existing style - select {\cs33\b Modify}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Assign a shortcut key combination to an existing style - select {\cs33\b Modify}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Define the outline levels used when navigating the document outline.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The style settings are saved as part of the current file, so each file can have different settings.
+\par \pard \sa100\sl200\slmult0\widctlpar If you copy a paragraph of text from one Word file to another, using copy & paste, the style of the paragraph will be copied too.
+\par \pard \sa120\widctlpar If you often use the same combination of style settings, you can save a file containing the settings as a "template". Then, you can create a new Word file using the template as the starting point.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Borders around text (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 lines width paragraph
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To draw a line around a selected paragraph, tap the {\cs33\b Borders} box on the Top toolbar and select a border style.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To change the style, width and colour of borders, select {\cs33\b Borders}
+ on the {\cs33\b Paragraph} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Colour & other effects (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 colors colours superscript subscript background shading shade grey gray coloured text colored text
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Printed documents can be made more eye-catching by using contrasting shades of grey for text and background.
+\par Select {\cs33\b Borders} on the {\cs33\b Paragraph} menu, select the {\cs33\b Colour} tab, and set a background colour.
+\par To change the text colour and apply advanced formatting options, select {\cs33\b Font} on the {\cs33\b Text} menu and choose the {\cs33\b Other} tab, then:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Select {\cs33\b Text colour}
+ to set a colour and preview it against the selected background.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the text is made the same colour as the background it will not be visible.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tick the {\cs33\b Strikethrough} box to make text appear crossed out.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Superscript} in the {\cs33\b Print position} box to make text appear slightly higher than the rest of the line.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Select {\cs33\b Subscript} in the {\cs33\b Print position} box to make text appear slightly lower than the rest of the line.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Indents (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 hanging indent margin
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To move some, or all, of the lines of a selected paragraph in from the page margins, select {\cs33\b Indents} on the {\cs33\b Paragraph} menu and set a distance in the Left and/or Right boxes.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To indent the first line of a paragraph a different amount from the remainder, enter a distance in the First line box.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}For a "hanging indent", set the Left indent to the same distance as a tab stop and set the First line indent to 0.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Tab positions (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 centred centered aligned right aligned left aligned tab stops columns tabs
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A tab stop is a position on the page that can be used to set up columns of text or numbers. Columns of text aligned to tab stops look neater when printed than text aligned with the Spacebar.
+\par Each press of the Tab key causes subsequent text to jump to the next tab stop.
+\par To change the distance between tabs select {\cs33\b Tab} {\cs33\b positions} on the {\cs33\b Paragraph} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b Standard} setting is 0.63 cm (\'bc
+ inch) between tabs, aligned down the left hand side.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the {\cs33\b Custom} dialog to set tabs at different places on the page or to set left, right or centre alignment for tab stops. When the distance and alignment has been set for a tab stop, press {\cs33\b 
+Set} to continue.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To remove a tab stop, press {\cs33\b Clear}.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To remove all tab stops in highlighted paragraphs, press {\cs33\b Clear all}.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tab settings can be amended in the Current tab dialog.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Plain text files (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 RTF ASCII unformatted text-only
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To save a file as unformatted text (ASCII) that can be read by many other programs, select {\cs33\b Export as text file} from the {\cs33\b More }cascade on the {\cs33\b File}
+ menu. This creates a new copy of the file in a text-only format and does not affect the original.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Any special formatting (styles, emphases, inserted objects etc.) is not retained in the resulting copy.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Plain text files created in other programs can be imported by selecting {\cs33\b Import text file} from the {\cs33\b More }cascade on the {\cs33\b File} menu.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Non-printing and special characters (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 hide nonprinting manual break non-printing non printing forced line break non-breaking space nonbreaking space hard hyphen nonbreaking hyphen view preferences paragraph end
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To control how Word prints, and displays text on screen, insert "non-printing" special characters as follows:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To start a new line without starting a new paragraph, insert a {\cs33\b 
+forced line break} with Shift+Enter.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To prevent a line break at a space (e.g. the space between the initial and surname in J.\~Smith), insert a {\cs33\b non-breaking space} with Shift+Space.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To prevent starting a new line at a hyphen (e.g. will\_o'\_the\_wisp), insert a {\cs33\b hard hyphen} with Shift+- (i.e. Shift+Fn+O).
+\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 To make non-printing characters, including tabs, spaces and paragraph ends, visible on the screen:
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b View preferences} on the {\cs33\b Tools} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tick the items to display on screen.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Similar preferences can also be set for the OPL editor.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Counting words & pages (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 word count paginate page count
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To count how many words there are in a file, select {\cs33\b Word count} on the {\cs33\b Tools} menu. To find out how many pages it will cover when printed select {\cs33\b Paginate} on the {\cs33\b Tools}
+ menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+Note that pagination is related to the current page size and margin settings.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Finding & replacing text (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 replace change locate find next find again replace all searching
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If required, search through an entire file to find any or all occurrences of a specific word or phrase and, if necessary, replace it with a different word/phrase. The {\cs33\b Find} commands are on the {
+\cs33\b Edit} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Find} finds the first occurrence of specified text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Find again} finds the next occurrence of the same text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Replace} finds specified text and replaces it with other text.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tick the {\cs33\b Case sensitive} box to replace only words which are capitalised the same way, i.e. to avoid changing 'sheer cliff face' to 'sheer Clifford face'.
+\par Tick the {\cs33\b Match whole word} box to replace only the exact word, i.e. to avoid changing 'Cliffhanger' to 'Cliffordhanger'.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b Replace all }
+command changes all occurrences of a particular word to a different word (e.g. a character's name in a story) - i.e. to find every time the word 'Cliff' is used and replace them all with 'Clifford' press the {\cs33\b Replace all }
+button when the first occurrence has been found in the Replace dialog,
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting text (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 attribute type style typeface format font size bold italics underlined align justify borders bulleted list undo cancelled canceled
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Top toolbar has buttons for applying the most commonly used formatting options to highlighted text or entire paragraphs. Use the buttons to:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Apply a paragraph style.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Change font.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set the size of text.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Make text bold, italic or underlined.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Change paragraph alignment.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Add borders to paragraphs.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Create a bulleted list.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A combination of formatting options can be applied, e.g. you can make text bold and italic, or larger and bulleted with borders, etc.
+\par The font (typeface), size, colour and print position of highlighted text can also be changed, by selecting {\cs33\b Font} on the {\cs33\b Text} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To undo all the text formatting changes for
+ the current paragraph(s), select {\cs33\b Remove formatting} on the {\cs33\b Paragraph} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To undo all the paragraph formatting changes for the current paragraph(s), select {\cs33\b Remove formatting} on the {\cs33\b Paragraph} menu.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+Text may not appear on-screen in the selected font. This is because Word displays text in whichever of its own fonts is the nearest match to the printer font.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Bullets & symbols (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 bulleted list foreign characters accents fractions half three quarters insert special characters
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Lists of items are often preceded by special characters called "bullets". To make selected text into a bulleted list, tap the Bullet button on the Top toolbar.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+To change the colour, size, and indent of bullets, or to use a different character or symbol as a bullet, select {\cs33\b Bullets} on the {\cs33\b Paragraph} menu.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To insert unusual, accented, or foreign characters in the file, select {\cs33\b Special character} on the {\cs33\b Insert} menu.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 
+The dialog displays a keyboard shortcut (Ctrl+nnn) for the selected character which can be used to insert it in other programs.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Templates in Word
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 stencil overlay pattern skeleton sample example
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+A "template" is a document design, comprising paragraph styles, page layout, header, footer etc. that you can use to base new Word files on. You can use one of the built-in templates or create new templates of your own.
+\par {\cs33\b To base a new file on a template
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Create new file} on the {\cs33\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Choose a name and location for the new file and select the template you want to base it on.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If you've created templates yourself, they're listed with a (C) or (D) after the name.
+
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To create a template
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 
+Create a Word file with the styles, page layout, headers, footers etc. that you want to include in the template.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 
+The cursor position, Toolbar and Top toolbar settings and the printer setting are also saved in the template.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Select {\cs33\b More|Save as template} on the {\cs33\b File} menu.
+\par 3.\tab You are asked for a filename and disk drive that you want to save the template under.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete a template, select {\cs33\b More|Delete template} on the {\cs33\b File} menu.
+\par {\cs33\b To edit an existing template
+\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Create a new file based on the template you wish to edit by selecting {\cs33\b 
+Create new file} on the {\cs33\b File} menu.
+\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Choose a name and location for the new file (e.g. "Temporary" in the Documents folder of disk drive C) and select the template you want to edit.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The new file is opened, and you can edit it as required.
+\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Save the file as a template by selecting {\cs33\b More|Save as template} on the {\cs33\b File} menu.
+\par 4.\tab Give the template the same name and location as the original one and press {\cs33\b OK}.
+\par 5.\tab A confirmation dialog asks if you want to replace the original template.
+\par 6.\tab You can now close and delete the file you created ("Temporary").
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You cannot replace or delete the built-in templates.
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Outline navigation (Word)
+\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 document outline level expand collapse
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 For easier navigation in large Word files, you can view the document in outline, where each paragraph is represented by a single line, and where you can choose which outline levels are displayed.
+\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 The outline level of a paragraph is related to its paragraph style.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Select {\cs33\b Outline} on the {\cs33\b View} menu to see the document structure in outline. When in the document outline:
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 to expand the selected outline level, press the right arrow key.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}to collapse the selected outline level, press the left arrow key.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}to expand all outline levels, press the {\cs33\b Open all} button.
+\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}to collapse all outline levels, press the {\cs33\b Close all} button.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Paragraph styles with outline level 0 are not displayed in the document outline.
+
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/Xtra-hlp.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,41 @@
+{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;}
+{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar 
+\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 
+\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 
+heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{
+\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11
+\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{
+\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super 
+\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 
+Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{
+\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar 
+\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}
+\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 
+\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{
+\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{
+\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 
+\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub 
+\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - <app name>"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo3\dy20\hr10\min29}{\revtim\yr2000\mo4\dy25\hr16\min47}{\version2}{\edmins0}{\nofpages1}{\nofwords167}{\nofchars955}
+{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd 
+\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear
+\par Date: May 13{\super th} 1998
+\par Version: ER4 release
+\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Extras{\revised\revauth1\revdttm1178913838 
+\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913838 0x}{\revised\revauth1\revdttm1178913839 100039a6}
+\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Extras: Quick start
+\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913839 extras.quick-start
+\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 program icon bar Flash Card extras bar
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Extras bar can contain up to xx rows of additional program icons and is an extension of the Program icon bar. Tap on the Extras icon to see the icons o
+n the bar. If an external disk with programs on it is inserted, they are displayed on the Extras bar
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If there are more programs than will fit on the rows, press the {\cs33\b More}
+ icon to display further rows (the {\cs33\b More} icon only appears when the rows on the screen are full).
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap on the relevant program icon to open a program.
+\par Hold down the Ctrl key while tapping one of the Program icons on the Program icon bar, to open the program immediately above it on the Extras bar.
+\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To change the position of program icons o
+n the Extras bar, display the Extras bar settings dialog by selecting the {\cs33\b Extras bar} icon from Control panel, or by pressing the Enter key when the Extras bar is displayed, or by tapping 'Extras' on the left of the bar. Remove the tick from the 
+{\cs33\b 'Slide' on} box if you want the Extras bar to appear instantly when you tap the Extras icon.
+\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 
+\par }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/epochlp.alp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,8 @@
+inputdirectory G:\aleppo\work\help\
+outputdirectory G:\epoc32\wins\c\documents\
+outputfile EPOCHlp
+sourcefile agen-hlp bomb-hlp calc-hlp comm-hlp cont-hlp data-hlp dial-hlp dict-hlp gen--hlp hard-hlp jott-hlp prog-hlp rec--hlp shet-hlp sket-hlp spel-hlp syst-hlp time-hlp word-hlp xtra-hlp
+orderfile EPOCHlp.order
+graphicsdirectory G:\aleppo\work\help\
+workingdirectory G:\aleppo\work\help\temp\
+customizationfile G:\aleppo\work\help\uk.alc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/epochlp.alp.tmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x10006000</helpfileUID>
+  <directories>
+    <input>\work\help\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\work\help\</graphics>
+    <working>\work\help\temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>agen-hlp.rtf</file>
+      <file>bomb-hlp.rtf</file>
+      <file>calc-hlp.rtf</file>
+      <file>comm-hlp.rtf</file>
+      <file>cont-hlp.rtf</file>
+      <file>data-hlp.rtf</file>
+      <file>dial-hlp.rtf</file>
+      <file>dict-hlp.rtf</file>
+      <file>gen--hlp.rtf</file>
+      <file>hard-hlp.rtf</file>
+      <file>jott-hlp.rtf</file>
+      <file>prog-hlp.rtf</file>
+      <file>rec--hlp.rtf</file>
+      <file>shet-hlp.rtf</file>
+      <file>sket-hlp.rtf</file>
+      <file>spel-hlp.rtf</file>
+      <file>syst-hlp.rtf</file>
+      <file>time-hlp.rtf</file>
+      <file>word-hlp.rtf</file>
+      <file>xtra-hlp.rtf</file>
+    </source>
+    <destination>EPOCHlp</destination>
+    <customization>\work\help\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/epochlp.alp.xml.bak	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x10006000</helpfileUID>
+  <directories>
+    <input>H:\aleppo\work\help\</input>
+    <output>H:\epoc32\wins\c\system\help\</output>
+    <graphics>H:\aleppo\work\help\</graphics>
+    <working>H:\aleppo\work\help\temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>sket-hlp.rtf</file>
+    </source>
+    <destination>EPOCHlp</destination>
+    <customization>H:\aleppo\work\help\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/epochlp.tmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,8 @@
+inputdirectory c:\aleppo\work\help\
+outputdirectory c:\epoc32\wins\c\documents\
+outputfile EPOCHlp
+sourcefile agen-hlp bomb-hlp calc-hlp comm-hlp cont-hlp data-hlp dial-hlp dict-hlp gen--hlp hard-hlp jott-hlp prog-hlp rec--hlp shet-hlp sket-hlp spel-hlp syst-hlp time-hlp word-hlp xtra-hlp
+orderfile EPOCHlp.order
+graphicsdirectory c:\aleppo\work\help\
+workingdirectory c:\aleppo\work\help\temp\
+customizationfile c:\aleppo\work\help\uk.alc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/part1.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x10006000</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\Source\ER5Help\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\Source\ER5Help\</graphics>
+    <working>\hlpmodel\TestData\Source\ER5Help\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>jott-hlp.rtf</file>
+      <file>prog-hlp.rtf</file>
+      <file>rec--hlp.rtf</file>
+      <file>shet-hlp.rtf</file>
+      <file>sket-hlp.rtf</file>
+      <file>spel-hlp.rtf</file>
+      <file>syst-hlp.rtf</file>
+      <file>time-hlp.rtf</file>
+      <file>word-hlp.rtf</file>
+      <file>xtra-hlp.rtf</file>
+
+    </source>
+    <destination>ER5Help_Part1.hlp</destination>
+    <customization>\hlpmodel\TestData\Source\ER5Help\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/part2.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x10006001</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\Source\ER5Help\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\Source\ER5Help\</graphics>
+    <working>\hlpmodel\TestData\Source\ER5Help\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>agen-hlp.rtf</file>
+      <file>bomb-hlp.rtf</file>
+      <file>calc-hlp.rtf</file>
+      <file>comm-hlp.rtf</file>
+      <file>cont-hlp.rtf</file>
+      <file>data-hlp.rtf</file>
+      <file>dial-hlp.rtf</file>
+      <file>dict-hlp.rtf</file>
+      <file>gen--hlp.rtf</file>
+      <file>hard-hlp.rtf</file>
+
+    </source>
+    <destination>ER5Help_Part2.hlp</destination>
+    <customization>\hlpmodel\TestData\Source\ER5Help\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/uk.alc	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,7 @@
+<bodystyle fontstyle=sansserif size=10>
+<titlestyle fontstyle=sansserif size=14>
+<listbullet1style bulletchar=149>
+<listbullet2style bulletchar=45>
+<tipeffects text="Tip:" bold=yes leftindent=36>
+<noteeffects text="Note:" bold=yes leftindent=36>
+<importanteffects text="Important:" bold=yes leftindent=60>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/uk.alc.tmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshcust PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHcush.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHcust.xsl" title="CS-Help customisation" type="text/xsl"?>
+<cshcust>
+<bodystyle fontstyle="sansserif" size="10"/>
+<titlestyle fontstyle="sansserif" size="14"/>
+<listbullet1style bulletchar="149"></listbullet1style>
+<listbullet2style bulletchar="45"></listbullet2style>
+<tipeffects leftindent="36"><b>Tip:</b></tipeffects>
+<noteeffects leftindent="36"><b>Note:</b></noteeffects>
+<importanteffects leftindent="60"><b>Important:</b></importanteffects>
+</cshcust>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/ER5Help/uk.alc.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshcust PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHcush.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHcust.xsl" title="CS-Help customisation" type="text/xsl"?>
+<cshcust>
+<bodystyle fontstyle="sansserif" size="10"/>
+<titlestyle fontstyle="sansserif" size="14"/>
+<listbullet1style bulletchar="149"/>
+<listbullet2style bulletchar="45"/>
+<tipeffects leftindent="36"><b>Tip:</b></tipeffects>
+<noteeffects leftindent="36"><b>Note:</b></noteeffects>
+<importanteffects leftindent="60"><b>Important:</b></importanteffects>
+</cshcust>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestA.cshlp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj SYSTEM "o:/epoc32/tools/cshlpcmp/dtd/CSHproj.dtd">
+<?xml:stylesheet href="o:/epoc32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+<helpfileUID>0x01007000
+</helpfileUID>
+<directories>
+<input>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</input>
+<output>O:\src\GT0215\common\app-services\hlpmodel\TestData</output>
+<graphics>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</graphics>
+<working>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\Temp</working>
+</directories>
+<files>
+<source>
+<file>PlatSecSearchTestA.rtf</file>
+</source>
+<destination>PlatSecSearchTestA.hlp</destination>
+<customization>o:\epoc32\cshlpcmp_template\test\ukcust.xml</customization>
+</files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestC.cshlp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj SYSTEM "o:/epoc32/tools/cshlpcmp/dtd/CSHproj.dtd">
+<?xml:stylesheet href="o:/epoc32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+<helpfileUID>0x01007000
+</helpfileUID>
+<directories>
+<input>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</input>
+<output>O:\src\GT0215\common\app-services\hlpmodel\TestData\</output>
+<graphics>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</graphics>
+<working>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\Temp</working>
+</directories>
+<files>
+<source>
+<file>PlatSecSearchTestC.rtf</file>
+</source>
+<destination>PlatSecSearchTestC.hlp</destination>
+<customization>o:\epoc32\cshlpcmp_template\test\ukcust.xml</customization>
+</files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestF.cshlp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj SYSTEM "o:/epoc32/tools/cshlpcmp/dtd/CSHproj.dtd">
+<?xml:stylesheet href="o:/epoc32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+<helpfileUID>0x01007000
+</helpfileUID>
+<directories>
+<input>o:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</input>
+<output>O:\src\GT0215\common\app-services\hlpmodel\TestData\</output>
+<graphics>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</graphics>
+<working>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\Temp</working>
+</directories>
+<files>
+<source>
+<file>PlatSecSearchTestF.rtf</file>
+</source>
+<destination>PlatSecSearchTestF.hlp</destination>
+<customization>o:\epoc32\cshlpcmp_template\test\ukcust.xml</customization>
+</files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/Source/PlatSecSearchTest/WkPlatSecSearchTestZ.cshlp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj SYSTEM "o:/epoc32/tools/cshlpcmp/dtd/CSHproj.dtd">
+<?xml:stylesheet href="o:/epoc32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+<helpfileUID>0x01007000
+</helpfileUID>
+<directories>
+<input>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</input>
+<output>O:\src\GT0215\common\app-services\hlpmodel\TestData</output>
+<graphics>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\</graphics>
+<working>O:\src\GT0215\common\app-services\hlpmodel\TestData\Source\PlatSecSearchTest\Temp</working>
+</directories>
+<files>
+<source>
+<file>PlatSecSearchTestZ.rtf</file>
+</source>
+<destination>PlatSecSearchTestZ.hlp</destination>
+<customization>o:\epoc32\cshlpcmp_template\test\ukcust.xml</customization>
+</files>
+</cshproj>
Binary file symhelp/helpmodel/TestData/TestLocale/locale.h01 has changed
Binary file symhelp/helpmodel/TestData/TestLocale/locale.h03 has changed
Binary file symhelp/helpmodel/TestData/TestLocale/locale.h12 has changed
Binary file symhelp/helpmodel/TestData/TestLocale/locale.hlp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/default.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,59 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f16\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f17\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f18\froman\fcharset238\fprq2 Times New Roman CE;}{\f19\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f21\froman\fcharset161\fprq2 Times New Roman Greek;}{\f22\froman\fcharset162\fprq2 Times New Roman Tur;}{\f23\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f24\fswiss\fcharset238\fprq2 Arial CE;}{\f25\fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f27\fswiss\fcharset161\fprq2 Arial Greek;}{\f28\fswiss\fcharset162\fprq2 Arial Tur;}{\f29\fswiss\fcharset186\fprq2 Arial Baltic;}{\f30\fmodern\fcharset238\fprq1 Courier New CE;}{\f31\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f33\fmodern\fcharset161\fprq1 Courier New Greek;}{\f34\fmodern\fcharset162\fprq1 Courier New Tur;}{\f35\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f114\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f115\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}
+{\f117\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f118\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f119\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{
+\s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 
+\tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{\s4\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{
+\s5\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\*
+\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd 
+List Bullet;}{\s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{\s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}
+\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang
+{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext20 Category UID;}{\*\cs21 \additive 
+\b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{
+\s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{
+\s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\cf9\lang2057 \sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 
+\sbasedon0 \snext28 Tip;}{\s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{
+\s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\nowidctlpar\widctlpar
+\tx284\adjustright \f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\nowidctlpar\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 
+\sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f16\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext36 Context;}{\s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \f1\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\*\listtable
+{\list\listtemplateid501545316\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid-156209844
+\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid-638255692\listsimple
+{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid2101922476\listsimple{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0
+\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers
+\'01;}\fi-283\li283 }{\listname ;}\listid132211329}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li567 }{\listname 
+;}\listid183057288}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid486366496}}
+{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119
+\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120
+\listoverridecount0\ls10}{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-119\listoverridecount0\ls13}{\listoverride\listid-120\listoverridecount0\ls14}{\listoverride\listid-125
+\listoverridecount0\ls15}{\listoverride\listid-129\listoverridecount0\ls16}{\listoverride\listid-119\listoverridecount0\ls17}{\listoverride\listid-120\listoverridecount0\ls18}{\listoverride\listid-125\listoverridecount0\ls19}{\listoverride\listid-129
+\listoverridecount0\ls20}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3934 ?;}{\levelnumbers;}\f17\fbias0 
+\fi-283\li283 }}\ls21}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 
+}}\ls22}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls23}
+{\listoverride\listid486366496\listoverridecount0\ls24}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls25}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls26}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'01\u-3970 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls27}{\listoverride\listid132211329\listoverridecount0\ls28}{\listoverride\listid183057288\listoverridecount0\ls29}}{\info{\title Author: }{\author Alex Wilbur}{\operator NicholaT}
+{\creatim\yr2001\mo7\dy3\hr14\min35}{\revtim\yr2001\mo7\dy3\hr15\min30}{\version3}{\edmins1}{\nofpages1}{\nofwords20}{\nofchars117}{\*\company Dell Computer Corporation}{\nofcharsws0}{\vern71}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 
+\widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale119\viewzk2 \fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain \qc\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 
+{\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {Author:Symbian Ltd.
+\par Date:January 1999
+\par Version:1.0
+\par }\pard\plain \s1\sb360\sa240\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Language<English etc>
+\par }\pard\plain \s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x101F3E7B
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Language Test: }{\i first topic}{
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {
+\par This is a DEFAULT ENGLISH help file.
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/default.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x101F3E7B</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\TestLocale\source\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\TestLocale\source\</graphics>
+    <working>\hlpmodel\TestData\TestLocale\source\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>default.rtf</file>
+    </source>
+    <destination>locale.hlp</destination>
+    <customization>\hlpmodel\TestData\TestLocale\source\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/english.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,57 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f16\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f17\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f18\froman\fcharset238\fprq2 Times New Roman CE;}{\f19\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f21\froman\fcharset161\fprq2 Times New Roman Greek;}{\f22\froman\fcharset162\fprq2 Times New Roman Tur;}{\f23\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f24\fswiss\fcharset238\fprq2 Arial CE;}{\f25\fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f27\fswiss\fcharset161\fprq2 Arial Greek;}{\f28\fswiss\fcharset162\fprq2 Arial Tur;}{\f29\fswiss\fcharset186\fprq2 Arial Baltic;}{\f30\fmodern\fcharset238\fprq1 Courier New CE;}{\f31\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f33\fmodern\fcharset161\fprq1 Courier New Greek;}{\f34\fmodern\fcharset162\fprq1 Courier New Tur;}{\f35\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f114\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f115\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}
+{\f117\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f118\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f119\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{
+\s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 
+\tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{\s4\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{
+\s5\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\*
+\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd 
+List Bullet;}{\s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{\s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}
+\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang
+{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext20 Category UID;}{\*\cs21 \additive 
+\b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{
+\s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{
+\s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\cf9\lang2057 \sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 
+\sbasedon0 \snext28 Tip;}{\s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{
+\s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\nowidctlpar\widctlpar
+\tx284\adjustright \f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\nowidctlpar\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 
+\sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f16\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext36 Context;}{\s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \f1\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\*\listtable
+{\list\listtemplateid605554912\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid513971666
+\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid-834660954\listsimple
+{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-163302790\listsimple{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0
+\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers
+\'01;}\fi-283\li283 }{\listname ;}\listid132211329}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li567 }{\listname 
+;}\listid183057288}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid486366496}}
+{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119
+\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120
+\listoverridecount0\ls10}{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
+\levelold\levelspace0\levelindent283{\leveltext\'01\u-3934 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls13}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold
+\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls14}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0
+\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls15}{\listoverride\listid486366496\listoverridecount0\ls16}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls17}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0
+\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls18}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
+\levelold\levelspace0\levelindent283{\leveltext\'01\u-3970 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls19}{\listoverride\listid132211329\listoverridecount0\ls20}{\listoverride\listid183057288\listoverridecount0\ls21}}{\info{\title Author: }
+{\author Alex Wilbur}{\operator NicholaT}{\creatim\yr2001\mo7\dy3\hr14\min18}{\revtim\yr2001\mo7\dy3\hr14\min33}{\version3}{\edmins1}{\nofpages1}{\nofwords20}{\nofchars117}{\*\company Dell Computer Corporation}{\nofcharsws0}{\vern71}}
+\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale119\viewzk2 \fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain 
+\qc\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {Author:Symbian Ltd.
+\par Date:January 1999
+\par Version:1.0
+\par }\pard\plain \s1\sb360\sa240\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Language <English etc>
+\par }\pard\plain \s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x}{101F3E78
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Language Test: }{\i first topic}{
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {
+\par This is an ENGLISH help file.
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/english.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x101F3E78</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\TestLocale\source\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\TestLocale\source\</graphics>
+    <working>\hlpmodel\TestData\TestLocale\source\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>english.rtf</file>
+    </source>
+    <destination>locale.h01</destination>
+    <customization>\hlpmodel\TestData\TestLocale\source\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/german.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,57 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f16\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f17\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f18\froman\fcharset238\fprq2 Times New Roman CE;}{\f19\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f21\froman\fcharset161\fprq2 Times New Roman Greek;}{\f22\froman\fcharset162\fprq2 Times New Roman Tur;}{\f23\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f24\fswiss\fcharset238\fprq2 Arial CE;}{\f25\fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f27\fswiss\fcharset161\fprq2 Arial Greek;}{\f28\fswiss\fcharset162\fprq2 Arial Tur;}{\f29\fswiss\fcharset186\fprq2 Arial Baltic;}{\f30\fmodern\fcharset238\fprq1 Courier New CE;}{\f31\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f33\fmodern\fcharset161\fprq1 Courier New Greek;}{\f34\fmodern\fcharset162\fprq1 Courier New Tur;}{\f35\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f114\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f115\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}
+{\f117\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f118\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f119\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{
+\s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 
+\tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{\s4\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{
+\s5\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\*
+\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd 
+List Bullet;}{\s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{\s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}
+\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang
+{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext20 Category UID;}{\*\cs21 \additive 
+\b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{
+\s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{
+\s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\cf9\lang2057 \sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 
+\sbasedon0 \snext28 Tip;}{\s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{
+\s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\nowidctlpar\widctlpar
+\tx284\adjustright \f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\nowidctlpar\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 
+\sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f16\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext36 Context;}{\s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \f1\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\*\listtable
+{\list\listtemplateid1162907402\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid521686562
+\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid-1028094928\listsimple
+{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-1744788550\listsimple{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0
+\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers
+\'01;}\fi-283\li283 }{\listname ;}\listid132211329}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li567 }{\listname 
+;}\listid183057288}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid486366496}}
+{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119
+\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120
+\listoverridecount0\ls10}{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
+\levelold\levelspace0\levelindent283{\leveltext\'01\u-3934 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls13}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold
+\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls14}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0
+\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls15}{\listoverride\listid486366496\listoverridecount0\ls16}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls17}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0
+\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls18}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
+\levelold\levelspace0\levelindent283{\leveltext\'01\u-3970 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls19}{\listoverride\listid132211329\listoverridecount0\ls20}{\listoverride\listid183057288\listoverridecount0\ls21}}{\info{\title Author: }
+{\author Alex Wilbur}{\operator NicholaT}{\creatim\yr2001\mo7\dy3\hr14\min33}{\revtim\yr2001\mo7\dy3\hr14\min33}{\version2}{\edmins0}{\nofpages1}{\nofwords20}{\nofchars117}{\*\company Dell Computer Corporation}{\nofcharsws0}{\vern71}}
+\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale119\viewzk2 \fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain 
+\qc\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {Author:Symbian Ltd.
+\par Date:January 1999
+\par Version:1.0
+\par }\pard\plain \s1\sb360\sa240\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Language <German etc>
+\par }\pard\plain \s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x101F3E79
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Language Test: }{\i first topic}{
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {
+\par This is a GERMAN help file.
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/german.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x101F3E79</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\TestLocale\source\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\TestLocale\source\</graphics>
+    <working>\hlpmodel\TestData\TestLocale\source\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>german.rtf</file>
+    </source>
+    <destination>locale.h03</destination>
+    <customization>\hlpmodel\TestData\TestLocale\source\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/swissgerman.rtf	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,58 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f16\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f17\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f18\froman\fcharset238\fprq2 Times New Roman CE;}{\f19\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f21\froman\fcharset161\fprq2 Times New Roman Greek;}{\f22\froman\fcharset162\fprq2 Times New Roman Tur;}{\f23\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f24\fswiss\fcharset238\fprq2 Arial CE;}{\f25\fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f27\fswiss\fcharset161\fprq2 Arial Greek;}{\f28\fswiss\fcharset162\fprq2 Arial Tur;}{\f29\fswiss\fcharset186\fprq2 Arial Baltic;}{\f30\fmodern\fcharset238\fprq1 Courier New CE;}{\f31\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f33\fmodern\fcharset161\fprq1 Courier New Greek;}{\f34\fmodern\fcharset162\fprq1 Courier New Tur;}{\f35\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f114\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f115\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}
+{\f117\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f118\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f119\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{
+\s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 
+\tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{\s4\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{
+\s5\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\*
+\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd 
+List Bullet;}{\s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{\s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}
+\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang
+{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext20 Category UID;}{\*\cs21 \additive 
+\b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{
+\s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{
+\s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\nowidctlpar\widctlpar\adjustright 
+\f1\fs20\cf9\lang2057 \sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 
+\sbasedon0 \snext28 Tip;}{\s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{
+\s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\nowidctlpar\widctlpar
+\tx284\adjustright \f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\nowidctlpar\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 
+\sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f16\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext36 Context;}{\s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 
+{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf17\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \f1\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\*\listtable
+{\list\listtemplateid-788739186\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-129}{\list\listtemplateid2023672130
+\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643 }{\listname ;}\listid-125}{\list\listtemplateid-221204010\listsimple
+{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-553371200\listsimple{\listlevel\levelnfc23\leveljc0
+\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0
+\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers
+\'01;}\fi-283\li283 }{\listname ;}\listid132211329}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li567 }{\listname 
+;}\listid183057288}{\list\listtemplateid-488621550\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid486366496}}
+{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119
+\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120
+\listoverridecount0\ls10}{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-119\listoverridecount0\ls13}{\listoverride\listid-120\listoverridecount0\ls14}{\listoverride\listid-125
+\listoverridecount0\ls15}{\listoverride\listid-129\listoverridecount0\ls16}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'01\u-3934 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls17}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'01\u-3991 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls18}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls19}{\listoverride\listid486366496\listoverridecount0\ls20}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1
+\levelold\levelspace0\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls21}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold
+\levelspace0\levelindent283{\leveltext\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls22}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0
+\levelindent283{\leveltext\'01\u-3970 ?;}{\levelnumbers;}\f17\fbias0 \fi-283\li283 }}\ls23}{\listoverride\listid132211329\listoverridecount0\ls24}{\listoverride\listid183057288\listoverridecount0\ls25}}{\info{\title Author: }{\author Alex Wilbur}
+{\operator NicholaT}{\creatim\yr2001\mo7\dy3\hr14\min34}{\revtim\yr2001\mo7\dy3\hr14\min34}{\version2}{\edmins0}{\nofpages1}{\nofwords20}{\nofchars117}{\*\company Dell Computer Corporation}{\nofcharsws0}{\vern71}}
+\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale119\viewzk2 \fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain 
+\qc\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{
+\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {Author:Symbian Ltd.
+\par Date:January 1999
+\par Version:1.0
+\par }\pard\plain \s1\sb360\sa240\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Language<SwissGerman etc>
+\par }\pard\plain \s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x101F3E7A
+\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Language Test: }{\i first topic}{
+\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {
+\par This is a SWISSGERMAN help file.
+\par }}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/swissgerman.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHproj.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+  <helpfileUID>0x101F3E7A</helpfileUID>
+  <directories>
+    <input>\hlpmodel\TestData\TestLocale\source\</input>
+    <output>\epoc32\wins\c\system\help\</output>
+    <graphics>\hlpmodel\TestData\TestLocale\source\</graphics>
+    <working>\hlpmodel\TestData\TestLocale\source\Temp\</working>
+  </directories>
+  <files>
+    <source>
+      <file>swissgerman.rtf</file>
+    </source>
+    <destination>locale.h12</destination>
+    <customization>\hlpmodel\TestData\TestLocale\source\uk.alc.xml</customization>
+  </files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestLocale/source/uk.alc.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshcust PUBLIC "/EPOC32/tools/cshlpcmp/dtd/CSHcush.dtd" "SYSTEM">
+<?xml:stylesheet href="/EPOC32/tools/cshlpcmp/xsl/CSHcust.xsl" title="CS-Help customisation" type="text/xsl"?>
+<cshcust>
+<bodystyle fontstyle="sansserif" size="10"/>
+<titlestyle fontstyle="sansserif" size="14"/>
+<listbullet1style bulletchar="149"/>
+<listbullet2style bulletchar="45"/>
+<tipeffects leftindent="36"><b>Tip:</b></tipeffects>
+<noteeffects leftindent="36"><b>Note:</b></noteeffects>
+<importanteffects leftindent="60"><b>Important:</b></importanteffects>
+</cshcust>
Binary file symhelp/helpmodel/TestData/TestZoomBitmaps/zoomBitmaps.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/TestData/TestZoomBitmaps/zoomBitmaps.txt	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,4 @@
+zoomBitmaps.mbm
+zoomSmall.bmp
+zoomMedium.bmp
+zoomLarge.bmp
Binary file symhelp/helpmodel/TestData/TestZoomBitmaps/zoomLarge.bmp has changed
Binary file symhelp/helpmodel/TestData/TestZoomBitmaps/zoomMedium.bmp has changed
Binary file symhelp/helpmodel/TestData/TestZoomBitmaps/zoomSmall.bmp has changed
Binary file symhelp/helpmodel/TestData/french.hlp has changed
Binary file symhelp/helpmodel/TestData/newfile.hlp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/bwins/DbWriterU.def	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,50 @@
+EXPORTS
+	??1CHlpDbWriter@@UAE@XZ @ 1 NONAME ; public: virtual __thiscall CHlpDbWriter::~CHlpDbWriter(void)
+	??1CHlpRowSet@@UAE@XZ @ 2 NONAME ; public: virtual __thiscall CHlpRowSet::~CHlpRowSet(void)
+	?AtBeginning@CHlpRowSet@@QAEHXZ @ 3 NONAME ; public: int __thiscall CHlpRowSet::AtBeginning(void)
+	?AtEnd@CHlpRowSet@@QAEHXZ @ 4 NONAME ; public: int __thiscall CHlpRowSet::AtEnd(void)
+	?AtRow@CHlpRowSet@@QAEHXZ @ 5 NONAME ; public: int __thiscall CHlpRowSet::AtRow(void)
+	?BeginTransaction@CHlpDbWriter@@QAEXXZ @ 6 NONAME ; public: void __thiscall CHlpDbWriter::BeginTransaction(void)
+	?CloseFileL@CHlpDbWriter@@QAEXXZ @ 7 NONAME ; public: void __thiscall CHlpDbWriter::CloseFileL(void)
+	?CommitTransaction@CHlpDbWriter@@QAEXXZ @ 8 NONAME ; public: void __thiscall CHlpDbWriter::CommitTransaction(void)
+	?CompressDatabaseL@CHlpDbWriter@@QAEXXZ @ 9 NONAME ; public: void __thiscall CHlpDbWriter::CompressDatabaseL(void)
+	?ContextTable@CHlpDbWriter@@QAEPAVCHlpTable@@XZ @ 10 NONAME ; public: class CHlpTable * __thiscall CHlpDbWriter::ContextTable(void)
+	?CountL@CHlpRowSet@@QAEHXZ @ 11 NONAME ; public: int __thiscall CHlpRowSet::CountL(void)
+	?CreateDatabaseL@CHlpDbWriter@@QAEXXZ @ 12 NONAME ; public: void __thiscall CHlpDbWriter::CreateDatabaseL(void)
+	?CreateFileL@CHlpDbWriter@@QAEXABVTDesC16@@@Z @ 13 NONAME ; public: void __thiscall CHlpDbWriter::CreateFileL(class TDesC16 const &)
+	?FirstL@CHlpRowSet@@QAEHXZ @ 14 NONAME ; public: int __thiscall CHlpRowSet::FirstL(void)
+	?GetL@CHlpView@@QAEXXZ @ 15 NONAME ; public: void __thiscall CHlpView::GetL(void)
+	?GetRichTextL@CHlpView@@QAEXHHAAVCRichText@@@Z @ 16 NONAME ; public: void __thiscall CHlpView::GetRichTextL(int,int,class CRichText &)
+	?GetTextL@CHlpView@@QAEXHAAVTDes16@@@Z @ 17 NONAME ; public: void __thiscall CHlpView::GetTextL(int,class TDes16 &)
+	?GetValL@CHlpView@@QAEXHAAK@Z @ 18 NONAME ; public: void __thiscall CHlpView::GetValL(int,unsigned long &)
+	?IndexTable@CHlpDbWriter@@QAEPAVCHlpTable@@XZ @ 19 NONAME ; public: class CHlpTable * __thiscall CHlpDbWriter::IndexTable(void)
+	?InsertL@CHlpTable@@QAEXXZ @ 20 NONAME ; public: void __thiscall CHlpTable::InsertL(void)
+	?LastL@CHlpRowSet@@QAEHXZ @ 21 NONAME ; public: int __thiscall CHlpRowSet::LastL(void)
+	?MapColNameToColNo@CHlpRowSet@@QAEHABVTDbCol@@@Z @ 22 NONAME ; public: int __thiscall CHlpRowSet::MapColNameToColNo(class TDbCol const &)
+	?MapColNameToColNo@CHlpRowSet@@QAEHABVTDesC16@@@Z @ 23 NONAME ; public: int __thiscall CHlpRowSet::MapColNameToColNo(class TDesC16 const &)
+	?NewL@CHlpDbWriter@@SAPAV1@AAVRFs@@@Z @ 24 NONAME ; public: static class CHlpDbWriter * __cdecl CHlpDbWriter::NewL(class RFs &)
+	?NewL@CHlpTable@@SAPAV1@PAVRDbView@@@Z @ 25 NONAME ; public: static class CHlpTable * __cdecl CHlpTable::NewL(class RDbView *)
+	?NewL@CHlpView@@SAPAV1@PAVRDbView@@@Z @ 26 NONAME ; public: static class CHlpView * __cdecl CHlpView::NewL(class RDbView *)
+	?NewLC@CHlpDbWriter@@SAPAV1@AAVRFs@@@Z @ 27 NONAME ; public: static class CHlpDbWriter * __cdecl CHlpDbWriter::NewLC(class RFs &)
+	?NewLC@CHlpTable@@SAPAV1@PAVRDbView@@@Z @ 28 NONAME ; public: static class CHlpTable * __cdecl CHlpTable::NewLC(class RDbView *)
+	?NewLC@CHlpView@@SAPAV1@PAVRDbView@@@Z @ 29 NONAME ; public: static class CHlpView * __cdecl CHlpView::NewLC(class RDbView *)
+	?NextL@CHlpRowSet@@QAEXXZ @ 30 NONAME ; public: void __thiscall CHlpRowSet::NextL(void)
+	?PreviousL@CHlpRowSet@@QAEXXZ @ 31 NONAME ; public: void __thiscall CHlpRowSet::PreviousL(void)
+	?PutL@CHlpTable@@QAEXXZ @ 32 NONAME ; public: void __thiscall CHlpTable::PutL(void)
+	?SetColL@CHlpTable@@QAEXHABVTDesC16@@@Z @ 33 NONAME ; public: void __thiscall CHlpTable::SetColL(int,class TDesC16 const &)
+	?SetColL@CHlpTable@@QAEXHHAAVCRichText@@@Z @ 34 NONAME ; public: void __thiscall CHlpTable::SetColL(int,int,class CRichText &)
+	?SetColL@CHlpTable@@QAEXHK@Z @ 35 NONAME ; public: void __thiscall CHlpTable::SetColL(int,unsigned long)
+	?SetUidL@CHlpDbWriter@@QAEXVTUid@@@Z @ 36 NONAME ; public: void __thiscall CHlpDbWriter::SetUidL(class TUid)
+	?TopicIndexTable@CHlpDbWriter@@QAEPAVCHlpTable@@XZ @ 37 NONAME ; public: class CHlpTable * __thiscall CHlpDbWriter::TopicIndexTable(void)
+	?TopicTable@CHlpDbWriter@@QAEPAVCHlpTable@@XZ @ 38 NONAME ; public: class CHlpTable * __thiscall CHlpDbWriter::TopicTable(void)
+	?View@CHlpRowSet@@QAEPAVRDbView@@XZ @ 39 NONAME ; public: class RDbView * __thiscall CHlpRowSet::View(void)
+	?SetDatabaseUidL@CHlpDbWriter@@QAEXAAVTUid@@@Z @ 40 NONAME ; public: void __thiscall CHlpDbWriter::SetDatabaseUidL(class TUid &)
+; NEW:
+	?SetColL@CHlpTable@@QAEXHAAVCRichText@@@Z @ 41 NONAME ; public: void __thiscall CHlpTable::SetColL(int,class CRichText &)
+	?AddBitmapL@CHlpDbWriter@@QAEXH@Z @ 42 NONAME ; public: void __thiscall CHlpDbWriter::AddBitmapL(int)
+	?ImageTable@CHlpDbWriter@@QAEPAVCHlpTable@@XZ @ 43 NONAME ; public: class CHlpTable * __thiscall CHlpDbWriter::ImageTable(void)
+	?IsBitmapStored@CHlpDbWriter@@QBEHH@Z @ 44 NONAME ; public: int __thiscall CHlpDbWriter::IsBitmapStored(int)const 
+	?SetColL@CHlpTable@@QAEXHABVCFbsBitmap@@@Z @ 45 NONAME ; public: void __thiscall CHlpTable::SetColL(int,class CFbsBitmap const &)
+	?BitmapCount@CHlpDbWriter@@QBEHXZ @ 46 NONAME ; public: int __thiscall CHlpDbWriter::BitmapCount(void)const 
+	?BitmapIdForIndex@CHlpDbWriter@@QBEHH@Z @ 47 NONAME ; public: int __thiscall CHlpDbWriter::BitmapIdForIndex(int)const 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/bwins/HlpModelU.def	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,46 @@
+EXPORTS
+	??1CHlpItem@@UAE@XZ @ 1 NONAME ; public: virtual __thiscall CHlpItem::~CHlpItem(void)
+	??1CHlpList@@UAE@XZ @ 2 NONAME ; public: virtual __thiscall CHlpList::~CHlpList(void)
+	??1CHlpModel@@UAE@XZ @ 3 NONAME ; public: virtual __thiscall CHlpModel::~CHlpModel(void)
+	??1CHlpTopic@@UAE@XZ @ 4 NONAME ; public: virtual __thiscall CHlpTopic::~CHlpTopic(void)
+	?AppendL@CHlpList@@QAEXPAVCHlpItem@@@Z @ 5 NONAME ; public: void __thiscall CHlpList::AppendL(class CHlpItem *)
+	?At@CHlpList@@UBEKH@Z @ 6 NONAME ; public: virtual unsigned long __thiscall CHlpList::At(int)const 
+	?Category@CHlpTopic@@QAEAAVTDesC16@@XZ @ 7 NONAME ; public: class TDesC16 & __thiscall CHlpTopic::Category(void)
+	?CategoryListL@CHlpModel@@QAEXPAVCDesC16Array@@@Z @ 8 NONAME ; public: void __thiscall CHlpModel::CategoryListL(class CDesC16Array *)
+	?CloseL@CHlpModel@@QAEXXZ @ 9 NONAME ; public: void __thiscall CHlpModel::CloseL(void)
+	?ContextSearchL@CHlpModel@@QAEXAAVTCoeHelpContext@@@Z @ 10 NONAME ; public: void __thiscall CHlpModel::ContextSearchL(class TCoeHelpContext &)
+	?Find@CHlpList@@QAEHK@Z @ 11 NONAME ; public: int __thiscall CHlpList::Find(unsigned long)
+	?Item@CHlpList@@QBEPAVCHlpItem@@H@Z @ 12 NONAME ; public: class CHlpItem * __thiscall CHlpList::Item(int)const 
+	?LoadListL@CHlpModel@@QAEXPAVCHlpList@@@Z @ 13 NONAME ; public: void __thiscall CHlpModel::LoadListL(class CHlpList *)
+	?LoadTopicL@CHlpModel@@QAEXAAVCRichText@@AAVTDes16@@@Z @ 14 NONAME ; public: void __thiscall CHlpModel::LoadTopicL(class CRichText &,class TDes16 &)
+	?LoadTopicL@CHlpModel@@QAEXPAVCHlpTopic@@@Z @ 15 NONAME ; public: void __thiscall CHlpModel::LoadTopicL(class CHlpTopic *)
+	?MatchUidL@CHlpModel@@QAEHVTUid@@@Z @ 16 NONAME ; public: int __thiscall CHlpModel::MatchUidL(class TUid)
+	?MdcaCount@CHlpList@@UBEHXZ @ 17 NONAME ; public: virtual int __thiscall CHlpList::MdcaCount(void)const 
+	?MdcaPoint@CHlpList@@UBE?AVTPtrC16@@H@Z @ 18 NONAME ; public: virtual class TPtrC16  __thiscall CHlpList::MdcaPoint(int)const 
+	?NewL@CHlpList@@SAPAV1@XZ @ 19 NONAME ; public: static class CHlpList * __cdecl CHlpList::NewL(void)
+	?NewL@CHlpModel@@SAPAV1@AAVRFs@@PAVMHlpModelObserver@@@Z @ 20 NONAME ; public: static class CHlpModel * __cdecl CHlpModel::NewL(class RFs &,class MHlpModelObserver *)
+	?NewL@CHlpTopic@@SAPAV1@XZ @ 21 NONAME ; public: static class CHlpTopic * __cdecl CHlpTopic::NewL(void)
+	?NewLC@CHlpList@@SAPAV1@XZ @ 22 NONAME ; public: static class CHlpList * __cdecl CHlpList::NewLC(void)
+	?NewLC@CHlpModel@@SAPAV1@AAVRFs@@PAVMHlpModelObserver@@@Z @ 23 NONAME ; public: static class CHlpModel * __cdecl CHlpModel::NewLC(class RFs &,class MHlpModelObserver *)
+	?NewLC@CHlpTopic@@SAPAV1@XZ @ 24 NONAME ; public: static class CHlpTopic * __cdecl CHlpTopic::NewLC(void)
+	?OpenL@CHlpModel@@QAEXXZ @ 25 NONAME ; public: void __thiscall CHlpModel::OpenL(void)
+	?Reset@CHlpList@@QAEXXZ @ 26 NONAME ; public: void __thiscall CHlpList::Reset(void)
+	?RestoreL@CHlpTopic@@QAEXPAVRDbView@@@Z @ 27 NONAME ; public: void __thiscall CHlpTopic::RestoreL(class RDbView *)
+	?SearchL@CHlpModel@@QAEXHK@Z @ 28 NONAME ; public: void __thiscall CHlpModel::SearchL(int,unsigned long)
+	?SearchL@CHlpModel@@QAEXHPAVHBufC16@@@Z @ 29 NONAME ; public: void __thiscall CHlpModel::SearchL(int,class HBufC16 *)
+	?StreamStoreL@CHlpModel@@UBEABVCStreamStore@@H@Z @ 30 NONAME ; public: virtual class CStreamStore const & __thiscall CHlpModel::StreamStoreL(int)const 
+	?TopicText@CHlpTopic@@QAEPAVCRichText@@XZ @ 31 NONAME ; public: class CRichText * __thiscall CHlpTopic::TopicText(void)
+	?TopicTitle@CHlpTopic@@QAEAAVTDesC16@@XZ @ 32 NONAME ; public: class TDesC16 & __thiscall CHlpTopic::TopicTitle(void)
+	?CloseFileL@CHlpModel@@QAEXABVTDesC16@@@Z @ 33 NONAME ; public: void __thiscall CHlpModel::CloseFileL(class TDesC16 const &)
+	?OpenFileL@CHlpModel@@QAEXABVTDesC16@@@Z @ 34 NONAME ; public: void __thiscall CHlpModel::OpenFileL(class TDesC16 const &)
+	?SearchL@CHlpModel@@QAEXHABVTDesC16@@@Z @ 35 NONAME ; public: void __thiscall CHlpModel::SearchL(int,class TDesC16 const &)
+	?CategoryUIDSearchL@CHlpModel@@QAEXVTUid@@@Z @ 36 NONAME ; public: void __thiscall CHlpModel::CategoryUIDSearchL(class TUid)
+	?SetObserver@CHlpModel@@QAEXPAVMHlpModelObserver@@@Z @ 37 NONAME ; public: void __thiscall CHlpModel::SetObserver(class MHlpModelObserver *)
+	?LoadTopicL@CHlpModel@@QAEXAAVCRichText@@@Z @ 38 NONAME ; public: void __thiscall CHlpModel::LoadTopicL(class CRichText &)
+	?TopicSearchL@CHlpModel@@QAEXABVCHlpItem@@@Z @ 39 NONAME ; public: void __thiscall CHlpModel::TopicSearchL(class CHlpItem const &)
+	?CancelSearch@CHlpModel@@QAEHXZ @ 40 NONAME ; public: int __thiscall CHlpModel::CancelSearch(void)
+	?IndexSearchL@CHlpModel@@QAEXABVCHlpItem@@@Z @ 41 NONAME ; public: void __thiscall CHlpModel::IndexSearchL(class CHlpItem const &)
+	?SetZoomSizeL@CHlpModel@@QAEXW4THlpZoomState@@@Z @ 42 NONAME ; public: void __thiscall CHlpModel::SetZoomSizeL(enum THlpZoomState)
+	?ZoomSize@CHlpModel@@QBE?AW4THlpZoomState@@XZ @ 43 NONAME ; public: enum THlpZoomState  __thiscall CHlpModel::ZoomSize(void)const 
+	?SetZoomFactors@CHlpModel@@QAEXW4THlpZoomState@@H@Z @ 44 NONAME ; public: void __thiscall CHlpModel::SetZoomFactors(enum THlpZoomState,int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/bwins/HlplchU.def	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,5 @@
+EXPORTS
+	?LaunchHelpApplicationL@HlpLauncher@@SAXAAVRWsSession@@PAV?$CArrayFix@VTCoeHelpContext@@@@@Z @ 1 NONAME ; public: static void __cdecl HlpLauncher::LaunchHelpApplicationL(class RWsSession &,class CArrayFix<class TCoeHelpContext> *)
+	?LaunchHelpApplicationL@HlpLauncher@@SAXAAVRWsSession@@@Z @ 2 NONAME ; public: static void __cdecl HlpLauncher::LaunchHelpApplicationL(class RWsSession &)
+	?LaunchHelpApplicationL@HlpLauncher@@SAXAAVRWsSession@@VTUid@@@Z @ 3 NONAME ; public: static void __cdecl HlpLauncher::LaunchHelpApplicationL(class RWsSession &,class TUid)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/dbwriter/DBWRITER.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,630 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "DBWRITER.H"
+#include <fbs.h>
+
+// User includes
+#include "HLPMODEL.H"
+#include "hlppanic.h"
+
+
+
+
+enum TDbWriterPanic
+	{
+	EDbWriterNoRowAtCursor,
+	EDbWriterInvalidColumnType,
+	EDbWriterStoreNotOpen
+	};
+
+
+GLDEF_C void Panic(TDbWriterPanic aReason)
+	{
+	_LIT(KHlpPanicText, "DbWriter");
+	User::Panic(KHlpPanicText, aReason);
+	}
+
+
+
+//
+// Create the database
+//
+
+CHlpRowSet::CHlpRowSet(RDbView* aView)
+		: iView(aView)
+	{
+	}
+
+EXPORT_C CHlpRowSet::~CHlpRowSet()
+	{
+	iView->Close();
+	delete iView;
+	}
+
+EXPORT_C TBool CHlpRowSet::AtRow()
+	{
+	return iView->AtRow();
+	}
+
+EXPORT_C TBool CHlpRowSet::AtBeginning()
+	{
+	return iView->AtBeginning();
+	}
+
+EXPORT_C TBool CHlpRowSet::AtEnd()
+	{
+	return iView->AtEnd();
+	}
+
+EXPORT_C TBool CHlpRowSet::FirstL()
+	{
+	return iView->FirstL();
+	}
+
+EXPORT_C TBool CHlpRowSet::LastL()
+	{
+	return iView->LastL();
+	}
+
+EXPORT_C TInt CHlpRowSet::CountL()
+	{
+	return iView->CountL();
+	}
+
+EXPORT_C void CHlpRowSet::NextL()
+	{
+	iView->NextL();
+	}
+
+EXPORT_C void CHlpRowSet::PreviousL()
+	{
+	// coverity [unchecked_value]
+	iView->PreviousL();
+	}
+
+EXPORT_C RDbView* CHlpRowSet::View()
+	{
+	return iView;
+	}
+
+
+// This method could leave while getting column set for the rowset.
+// @leave KErrNoMemory not enough memory to carry out the operation
+
+EXPORT_C TDbColNo CHlpRowSet::MapColNameToColNo(const TDesC& aName)
+	{
+	CDbColSet* columnSet = iView->ColSetL();
+	CleanupStack::PushL(columnSet);
+	TInt columnNumber = columnSet->ColNo(aName);
+	CleanupStack::PopAndDestroy(columnSet);
+	return columnNumber;
+	}
+
+
+// This method could leave while getting column set for the rowset.
+// @leave KErrNoMemory not enough memory to carry out the operation
+
+EXPORT_C TDbColNo CHlpRowSet::MapColNameToColNo(const TDbCol& aCol)
+	{
+	CDbColSet* columnSet = iView->ColSetL();
+	CleanupStack::PushL(columnSet);
+	TInt columnNumber = columnSet->ColNo(aCol.iName);
+	CleanupStack::PopAndDestroy(columnSet);
+	return columnNumber;
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//
+// CHlpView class - Read only access to database views
+//
+
+CHlpView::CHlpView(RDbView* aView)
+:	CHlpRowSet(aView)
+	{
+	}
+
+CHlpView::~CHlpView()
+	{
+	View()->Close();
+	}
+
+void CHlpView::ConstructL()
+	{
+	}
+
+EXPORT_C CHlpView* CHlpView::NewLC(RDbView* aView)
+	{
+	CHlpView* self = new(ELeave)CHlpView(aView);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C CHlpView* CHlpView::NewL(RDbView* aView)
+	{
+	CHlpView* self = CHlpView::NewLC(aView);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C void CHlpView::GetL()
+	{
+	View()->GetL();
+	}
+
+EXPORT_C void CHlpView::GetTextL(TDbColNo aCol, TDes& aText)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	aText = View()->ColDes(aCol);
+	}
+
+EXPORT_C void CHlpView::GetRichTextL(TDbColNo aTextCol, TDbColNo aMarkupCol, CRichText& aRichText)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	TPtrC ptr=View()->ColDes(aTextCol);
+	aRichText.InsertL(0, ptr);
+	GetMarkupL(aRichText, aMarkupCol);
+	}
+
+EXPORT_C void CHlpView::GetValL(TDbColNo aCol, TUint32& aValue)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	aValue=View()->ColUint16(aCol);
+	}
+
+void CHlpView::GetMarkupL(CRichText& aRichText, TDbColNo aMarkupCol)
+	{
+	__ASSERT_ALWAYS(View()->ColDef(aMarkupCol).iType == EDbColLongBinary, Panic(EDbWriterInvalidColumnType));
+
+	RDbColReadStream blob;
+	blob.OpenLC(*View(), aMarkupCol);
+
+	CEmbeddedStore* embeddedStore = CEmbeddedStore::FromLC(blob);
+	RStoreReadStream markupStream;
+	markupStream.OpenLC(*embeddedStore, embeddedStore->Root());
+	aRichText.InternalizeMarkupDataL(markupStream);
+	iStoreResolver.iStore = embeddedStore;
+
+	aRichText.SetPictureFactory(iPictureFactory, &iStoreResolver);
+	aRichText.DetachFromStoreL(CPicture::EDetachFull);
+	CleanupStack::PopAndDestroy(3);	// embeddedStore, markupStream, blob
+	}
+
+
+
+
+
+
+
+
+
+
+
+//
+// CHlpTable class - write access to database views
+//
+
+CHlpTable::CHlpTable(RDbView* aView)
+:	CHlpRowSet(aView)
+	{
+	}
+
+CHlpTable::~CHlpTable()
+	{
+//	View()->Close();
+	}
+
+void CHlpTable::ConstructL()
+	{
+	}
+
+EXPORT_C CHlpTable* CHlpTable::NewLC(RDbView* aView)
+	{
+	CHlpTable* self=new(ELeave)CHlpTable(aView);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C CHlpTable* CHlpTable::NewL(RDbView* aView)
+	{
+	CHlpTable* self=CHlpTable::NewLC(aView);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C void CHlpTable::InsertL()
+	{
+	View()->InsertL();
+	}
+
+EXPORT_C void CHlpTable::PutL()
+	{
+	View()->PutL();
+	}
+
+EXPORT_C void CHlpTable::SetColL(TDbColNo aCol, const TDesC& aText)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	View()->SetColL(aCol, aText);
+	}
+
+EXPORT_C void CHlpTable::SetColL(TDbColNo aCol, TUint32 aValue)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	View()->SetColL(aCol, aValue);
+	}
+
+EXPORT_C void CHlpTable::SetColL(TDbColNo aCol, const CFbsBitmap& aBitmap)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+
+	RDbColWriteStream blob;
+	blob.OpenLC(*View(), aCol);
+	blob << aBitmap;
+	blob.CommitL();
+	CleanupStack::PopAndDestroy(); // blob
+	}
+
+EXPORT_C void CHlpTable::SetColL(TDbColNo aTextCol, TDbColNo aMarkupCol, CRichText& aRichText)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	HBufC* buf = HBufC::NewLC(aRichText.DocumentLength());
+	TPtr ptr = buf->Des();
+	aRichText.Extract(ptr);
+	SetLongTextL(*buf, aTextCol);
+	CleanupStack::PopAndDestroy();	// buf
+
+	if (aRichText.HasMarkupData())
+		SetMarkupL(aRichText, aMarkupCol);
+	else
+		View()->SetColNullL(aMarkupCol);
+	}
+
+EXPORT_C void CHlpTable::SetColL(TDbColNo aTextCol, CRichText& aRichText)
+	{
+	__ASSERT_ALWAYS(View()->AtRow(), Panic(EDbWriterNoRowAtCursor));
+	HBufC* buf = HBufC::NewL(aRichText.DocumentLength());
+	CleanupStack::PushL(buf);
+	TPtr ptr = buf->Des();
+	aRichText.Extract(ptr);
+	View()->SetColL(aTextCol,ptr);
+	CleanupStack::PopAndDestroy();	// buf
+	}
+
+void CHlpTable::SetLongTextL(const TDesC& aText, TDbColNo aLongTextCol)
+	{
+	RDbColWriteStream stream;
+	stream.OpenLC(*View(), aLongTextCol);
+	stream.WriteL(aText);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy();	// stream
+	}
+
+void CHlpTable::SetMarkupL(CRichText& aRichText, TDbColNo aMarkupCol)
+	{
+	aRichText.DetachFromStoreL(CPicture::EDetachFull);
+	RDbColWriteStream blob;
+	blob.OpenL(*View(), aMarkupCol);
+	CEmbeddedStore* embeddedStore=CEmbeddedStore::NewLC(blob); // takes ownership of blob
+	CStoreMap* map=CStoreMap::NewLC(*embeddedStore);
+	aRichText.StoreMarkupComponentsL(*embeddedStore, *map);
+
+	RStoreWriteStream markup(*map);
+	embeddedStore->SetRootL(markup.CreateLC(*embeddedStore));
+	aRichText.ExternalizeMarkupDataL(markup);
+	markup.CommitL();
+	map->Reset();
+	CleanupStack::PopAndDestroy(2); // map, markup
+	embeddedStore->CommitL();
+	CleanupStack::PopAndDestroy(); // embeddedStore
+	}
+
+const CStreamStore& THlpStoreResolver::StreamStoreL(TInt /*aPos*/) const
+	{
+	return *iStore;
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//
+// CHlpDbWriter class
+//
+
+CHlpDbWriter::CHlpDbWriter(RFs& aFs)
+:	iFs(aFs)
+	{
+	}
+
+EXPORT_C CHlpDbWriter::~CHlpDbWriter()
+	{
+	iDatabase.Close();
+	delete iTables;
+	delete iDictionary;
+	delete iStore;
+	delete iUids;
+	delete iImagesAlreadyStored;
+}
+
+void CHlpDbWriter::ConstructL()
+	{
+	iDictionary				= CStreamDictionary::NewL();
+	iTables					= new(ELeave) CArrayPtrFlat<CHlpTable>(4);
+	iUids					= new(ELeave) CArrayFixFlat<TUid>(2);
+	iImagesAlreadyStored	= new(ELeave) CArrayFixFlat<TUid>(10);
+	}
+
+EXPORT_C CHlpDbWriter* CHlpDbWriter::NewL(RFs& aFs)
+	{
+	CHlpDbWriter* self = CHlpDbWriter::NewLC(aFs);
+	CleanupStack::Pop(); //self
+	return self;
+	}
+
+EXPORT_C CHlpDbWriter* CHlpDbWriter::NewLC(RFs& aFs)
+	{
+	CHlpDbWriter* self = new(ELeave) CHlpDbWriter(aFs);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C void CHlpDbWriter::SetDatabaseUidL(TUid& aUid)
+	{
+	__ASSERT_DEBUG(iStore, Panic(EDbWriterStoreNotOpen));
+
+	TUidType type(KPermanentFileStoreLayoutUid, KUidHlpApp, aUid);	
+	iStore->SetTypeL(type);
+	}
+
+EXPORT_C void CHlpDbWriter::CreateFileL(const TDesC& aFileName)
+	{
+	CPermanentFileStore* store = NULL;
+	
+	if	(!BaflUtils::FileExists(iFs, aFileName))
+		store = CPermanentFileStore::CreateL(iFs, aFileName, EFileRead|EFileWrite);
+	else // Change this so that the program panics if the file exists.
+		store = CPermanentFileStore::ReplaceL(iFs, aFileName, EFileRead|EFileWrite);
+
+	delete iStore;
+	iStore = store;
+	iFileName = aFileName;
+	}
+
+EXPORT_C void CHlpDbWriter::AddBitmapL(TInt aBitmapId)
+	{
+	TKeyArrayFix key(_FOFF(TUid, iUid), ECmpTUint);
+	iImagesAlreadyStored->InsertIsqL(TUid::Uid(aBitmapId), key);
+	}
+
+EXPORT_C TBool CHlpDbWriter::IsBitmapStored(TInt aBitmapId) const
+	{
+	TInt index = KErrNotFound;
+	TKeyArrayFix key(_FOFF(TUid, iUid), ECmpTUint);
+	return (!iImagesAlreadyStored->FindIsq(TUid::Uid(aBitmapId), key, index));
+	}
+
+EXPORT_C TInt CHlpDbWriter::BitmapCount() const
+	{
+	return iImagesAlreadyStored->Count();
+	}
+
+EXPORT_C TInt CHlpDbWriter::BitmapIdForIndex(TInt aIndex) const
+	{
+	return iImagesAlreadyStored->At(aIndex).iUid;
+	}
+
+EXPORT_C void CHlpDbWriter::CreateDatabaseL()
+	{
+	TStreamId dbStream=iDatabase.CreateL(iStore);
+	iDictionary->AssignL(KUidHlpDbStream, dbStream);
+	DoCreateDatabaseL();
+	DoOpenTablesL();
+	}
+
+void CHlpDbWriter::DoCreateDatabaseL()
+	{
+	// create the table schemas
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLTopicTable));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLIndexTable));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLTopicIndexTable));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLContextTable));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLImageTable));
+
+	// create the indices
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLTopicTableIdx));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLIndexTableIdx));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLTopicIndexTableIdx));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLContextTableIdx));
+	User::LeaveIfError(iDatabase.Execute(KHlpDMLImageTableIdx));
+	}
+
+EXPORT_C void CHlpDbWriter::CompressDatabaseL()
+	{
+	StoreUidsL();
+	StoreStreamDictionaryL();
+
+	iStore->CommitL();
+	iDatabase.CompressL(*iStore, iDictionary->At(KUidHlpDbStream));
+	iStore->CompactL();
+	iStore->CommitL();
+	}
+
+void CHlpDbWriter::DoOpenTablesL()
+	{
+	iTables->AppendL(DoOpenTableLC(ETopicTable));
+	CleanupStack::Pop(); // ret from DoOpenTableL
+	iTables->AppendL(DoOpenTableLC(EIndexTable));
+	CleanupStack::Pop(); // ret from DoOpenTableL
+	iTables->AppendL(DoOpenTableLC(ETopicIndexTable));
+	CleanupStack::Pop(); // ret from DoOpenTableL
+	iTables->AppendL(DoOpenTableLC(EContextTable));
+	CleanupStack::Pop(); // ret from DoOpenTableL
+	iTables->AppendL(DoOpenTableLC(EImageTable));
+	CleanupStack::Pop(); // ret from DoOpenTableL
+	}
+
+CHlpTable* CHlpDbWriter::DoOpenTableLC(TInt aTable)
+	{
+	TBuf<255> sql;
+
+	switch(aTable)
+		{
+	case ETopicTable:
+		sql=KHlpSQLTopicTable;
+		break;
+	case EIndexTable:
+		sql=KHlpSQLIndexTable;
+		break;
+	case ETopicIndexTable:
+		sql=KHlpSQLTopicIndexTable;
+		break;
+	case EContextTable:
+		sql=KHlpSQLContextTable;
+		break;
+	case EImageTable:
+		sql=KHlpSQLImageTable;
+		break;
+	default:
+		User::Leave(KErrNotSupported);
+		}
+
+	RDbView* view = new(ELeave) RDbView;
+	CleanupStack::PushL(view);
+	User::LeaveIfError(view->Prepare(iDatabase, sql, RDbView::EUpdatable));
+	User::LeaveIfError(view->EvaluateAll());
+	CHlpTable* table = CHlpTable::NewL(view);
+	CleanupStack::Pop(); // view
+	CleanupStack::PushL(table);
+
+	return table;
+	}
+
+
+
+void CHlpDbWriter::StoreUidsL()
+	{
+	RStoreWriteStream out;
+	TStreamId uidStream = out.CreateLC(*iStore);
+	iDictionary->AssignL(KUidHlpUidStream, uidStream);
+	out.WriteInt32L(iUids->Count());
+	if (iUids->Count() > 0)
+		{
+		for(TInt i=0; i < iUids->Count(); i++)
+			{
+			out.WriteInt32L((*iUids)[i].iUid);
+			}
+		}
+	out.CommitL();
+	out.Close();
+	CleanupStack::PopAndDestroy(); // out
+	}
+
+void CHlpDbWriter::StoreStreamDictionaryL()
+	{
+	// Store the stream dictionary in the root
+	RStoreWriteStream out;
+	TStreamId root = out.CreateLC(*iStore);
+	iStore->SetRootL(root);
+	out << *iDictionary;
+	out.CommitL();
+	out.Close();
+	CleanupStack::PopAndDestroy(); // out
+	}
+
+EXPORT_C void CHlpDbWriter::CloseFileL() // should this be make private and put in the destructor?
+	{
+	iDatabase.Close();
+	iStore->CompactL();
+	iStore->CommitL();
+	delete iStore;
+	iStore=NULL;
+	iUids->Reset();
+	iTables->ResetAndDestroy();
+	iTables->Reset();
+	
+	// Have to do this because there is no reset procedure for a stream dictionary
+	CStreamDictionary* newDictionary = CStreamDictionary::NewL();
+	delete iDictionary;
+	iDictionary = newDictionary;
+	}
+
+EXPORT_C void CHlpDbWriter::SetUidL(TUid aUid)
+	{
+	TKeyArrayFix key(_FOFF(TUid,iUid),ECmpTUint32);
+	TInt indexNotReferenced = KErrNotFound;
+	if	(iUids->Find(aUid,key, indexNotReferenced) != KErrNone)
+		iUids->AppendL(aUid);
+	}	
+
+EXPORT_C void CHlpDbWriter::BeginTransaction()
+	{
+	iDatabase.Begin();
+	}
+
+EXPORT_C void CHlpDbWriter::CommitTransaction()
+	{
+	iDatabase.Commit();
+	}
+
+EXPORT_C CHlpTable* CHlpDbWriter::TopicTable()
+	{
+	return iTables->At(ETopicTable);
+	}
+
+EXPORT_C CHlpTable* CHlpDbWriter::IndexTable()
+	{
+	return iTables->At(EIndexTable);
+	}
+
+EXPORT_C CHlpTable* CHlpDbWriter::TopicIndexTable()
+	{
+	return iTables->At(ETopicIndexTable);
+	}
+
+EXPORT_C CHlpTable* CHlpDbWriter::ContextTable()
+	{
+	return iTables->At(EContextTable);
+	}
+
+EXPORT_C CHlpTable* CHlpDbWriter::ImageTable()
+	{
+	return iTables->At(EImageTable);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/dbwriter/DBWRITER.H	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,250 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __DBWRITER_H__
+#define __DBWRITER_H__
+
+#include <d32dbms.h>
+#include <e32std.h>
+#include <s32file.h>
+#include <bautils.h>
+#include <txtrich.h>
+#include <txtfmlyr.h>
+#include <txtmrtsr.h>
+#include <gdi.h>
+
+// User includes
+#include "hlpconstants.h"
+
+// Db writer constants
+const TInt KTopicTblTopicTitle = 1;
+const TInt KTopicTblCategoryTitle = 2;
+const TInt KTopicTblTopicText = 3;
+const TInt KTopicTblTopicMarkup = 4;
+const TInt KTopicTblSynonym = 5;
+const TInt KTopicTblTopicId = 6;
+const TInt KTopicTblCategoryUID = 7;
+
+const TInt KIndexTblIndex = 1;
+const TInt KIndexTblIndexId = 2;
+
+const TInt KTopicIndexTblTopicId = 1;
+const TInt KTopicIndexTblIndexId = 2;
+const TInt KTopicIndexTblCategoryUID = 3;
+const TInt KTopicIndexTblTopicTitle = 4;
+
+const TInt KContextTblContext = 1;
+const TInt KContextTblTopicId = 2;
+
+const TInt KImageTblImageId = 1;
+const TInt KImageTblImageCount = 2;
+const TInt KImageTblImage0 = 3;
+const TInt KImageTblImage1 = 4;
+const TInt KImageTblImage2 = 5;
+
+
+
+// DML statements used in creating the database tables and indices
+_LIT(KHlpDMLTopicTable,			"CREATE TABLE Topic (TopicTitle CHAR(120), Category CHAR(120), TopicText LONG VARCHAR, TopicMarkup LONG VARBINARY, Synonym CHAR(200), TopicId UNSIGNED INTEGER, CategoryUID UNSIGNED INTEGER)");
+
+// IndexeId's are unique on a per-helpfile basis, ie. all indexId's in one help file are unique.
+_LIT(KHlpDMLIndexTable,			"CREATE TABLE Index (Index CHAR(120), IndexId UNSIGNED INTEGER)");
+
+// TopicId's are unique within a helpfile but not across a help file
+_LIT(KHlpDMLTopicIndexTable,	"CREATE TABLE TopicIndex (TopicId UNSIGNED INTEGER, IndexId UNSIGNED INTEGER, CategoryUID UNSIGNED INTEGER, TopicTitle CHAR(120))");
+
+_LIT(KHlpDMLContextTable,		"CREATE TABLE Context (Context CHAR(30), TopicId UNSIGNED INTEGER)");
+
+_LIT(KHlpDMLImageTable,			"CREATE TABLE Image (ImageId UNSIGNED INTEGER, ImageCount UNSIGNED INTEGER, Image0 LONG VARBINARY, Image1 LONG VARBINARY, Image2 LONG VARBINARY)");
+
+
+_LIT(KHlpDMLTopicTableIdx,		"CREATE UNIQUE INDEX TopicIdx ON Topic (TopicId)");
+_LIT(KHlpDMLIndexTableIdx,		"CREATE UNIQUE INDEX IndexIdx ON Index (IndexId)");
+_LIT(KHlpDMLTopicIndexTableIdx, "CREATE UNIQUE INDEX TopicIndexIdx ON TopicIndex (IndexId, TopicId)");
+_LIT(KHlpDMLContextTableIdx,	"CREATE UNIQUE INDEX ContextIdx ON Context (Context)");
+_LIT(KHlpDMLImageTableIdx,		"CREATE UNIQUE INDEX ImageIdx ON Image (ImageId)");
+
+// DDL statements used in opening tables for writing
+_LIT(KHlpSQLTopicTable,			"SELECT * FROM Topic");
+_LIT(KHlpSQLIndexTable,			"SELECT * FROM Index");
+_LIT(KHlpSQLTopicIndexTable,	"SELECT * FROM TopicIndex");
+_LIT(KHlpSQLContextTable,		"SELECT * FROM Context");
+_LIT(KHlpSQLImageTable,			"SELECT * FROM Image");
+
+// enum for selecting a table for writing to
+enum
+	{
+	ETopicTable,
+	EIndexTable,
+	ETopicIndexTable,
+	EContextTable,
+	EImageTable
+	};
+
+
+class CHlpTable;
+
+// CHlpDbWriter class: creates the store and the database, and provides the interface to write to the file
+class CHlpDbWriter : public CBase
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	IMPORT_C	~CHlpDbWriter();
+	IMPORT_C	static CHlpDbWriter* NewL(RFs& aFs);
+	IMPORT_C	static CHlpDbWriter* NewLC(RFs& aFs);
+public:
+	IMPORT_C	void CreateFileL(const TDesC& aFileName);
+	IMPORT_C	void CreateDatabaseL();
+	IMPORT_C	void CompressDatabaseL();
+	IMPORT_C	void SetDatabaseUidL(TUid& aUid);
+	IMPORT_C	void CloseFileL();
+public:
+	IMPORT_C	void AddBitmapL(TInt aBitmapId);
+	IMPORT_C	TBool IsBitmapStored(TInt aBitmapId) const;
+	IMPORT_C	TInt BitmapCount() const;
+	IMPORT_C	TInt BitmapIdForIndex(TInt aIndex) const;
+public:
+	IMPORT_C	void BeginTransaction();
+	IMPORT_C	void CommitTransaction();
+public:
+	IMPORT_C	CHlpTable* TopicTable();
+	IMPORT_C	CHlpTable* IndexTable();
+	IMPORT_C	CHlpTable* TopicIndexTable();
+	IMPORT_C	CHlpTable* ContextTable();
+	IMPORT_C	CHlpTable* ImageTable();
+	IMPORT_C	void SetUidL(TUid aUid);
+private:
+	void DoCreateDatabaseL();
+	CHlpTable* DoOpenTableLC(TInt aTable);
+	void DoOpenTablesL();
+	void StoreUidsL();
+	void StoreStreamDictionaryL();
+private:
+	CHlpDbWriter(RFs& aFs);
+	void ConstructL();
+private:
+	RFs& iFs;
+	TFileName iFileName;
+
+	RDbStoreDatabase iDatabase;
+	CArrayFixFlat<TUid>* iUids;
+	CArrayPtrFlat<CHlpTable>* iTables;
+	CArrayFixFlat<TUid>* iImagesAlreadyStored;
+
+	CPermanentFileStore* iStore;
+	CStreamDictionary* iDictionary;
+	};
+
+class THlpStoreResolver : public MRichTextStoreResolver
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	virtual const CStreamStore& StreamStoreL(TInt aPos) const;
+	CStreamStore* iStore;
+	};
+
+// CHlpRowSet class: abstract class for accessing database tables
+class CHlpRowSet : public CBase
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	CHlpRowSet(RDbView* aView);
+	IMPORT_C	virtual ~CHlpRowSet();
+	IMPORT_C	TBool AtRow();
+	IMPORT_C	TBool AtBeginning();	
+	IMPORT_C	TBool AtEnd();
+	IMPORT_C	TBool FirstL();
+	IMPORT_C	TBool LastL();
+	IMPORT_C	TInt  CountL();
+public:
+	IMPORT_C	void NextL();
+	IMPORT_C	void PreviousL();
+public:
+	IMPORT_C	TDbColNo MapColNameToColNo(const TDbCol& aCol);
+	IMPORT_C	TDbColNo MapColNameToColNo(const TDesC& aName);
+	IMPORT_C	CDbColSet* ColSet();
+
+	IMPORT_C	RDbView* View();
+private:
+	RDbView* iView;
+	};
+
+// CHlpView class: concrete class used for accessing database tables (for test code)
+class CHlpView : public CHlpRowSet
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	IMPORT_C	static CHlpView* NewL(RDbView* aView);
+	IMPORT_C	static CHlpView* NewLC(RDbView* aView);
+	~CHlpView();
+public:
+	inline void SetPictureFactory(MPictureFactory* aPictureFactory) {iPictureFactory=aPictureFactory;};
+public:
+	IMPORT_C	void GetTextL(TDbColNo aCol, TDes& aText);
+	IMPORT_C	void GetRichTextL(TDbColNo aTextCol, TDbColNo aMarkupCol, CRichText& aRichText);
+	IMPORT_C	void GetValL(TDbColNo aCol, TUint32& aValue);
+	IMPORT_C	void GetL();
+private:
+	void GetMarkupL(CRichText& aRichText, TDbColNo aMarkupCol);
+private:
+	CHlpView(RDbView* aView);
+	void ConstructL();
+private:
+	THlpStoreResolver iStoreResolver;
+	MPictureFactory *iPictureFactory;
+	TBool iHasRows;
+	};
+
+// CHlpTable class: concrete class used for writing to database tables
+class CHlpTable : public CHlpRowSet
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	IMPORT_C	static CHlpTable* NewL(RDbView* aView);
+	IMPORT_C	static CHlpTable* NewLC(RDbView* aView);
+	~CHlpTable();
+public:
+	IMPORT_C	void InsertL();
+	IMPORT_C	void PutL();
+public:
+	IMPORT_C	void SetColL(TDbColNo aCol, const TDesC& aText);
+	IMPORT_C	void SetColL(TDbColNo aTextCol, TDbColNo aMarkupCol, CRichText& aRichText);
+	IMPORT_C	void SetColL(TDbColNo aTextCol, CRichText& aRichText);
+	IMPORT_C	void SetColL(TDbColNo aCol, TUint32 aValue);
+	IMPORT_C	void SetColL(TDbColNo aCol, const CFbsBitmap& aBitmap);
+private:
+	void SetMarkupL(CRichText& aRichText, TDbColNo aMarkupCol);
+	void SetLongTextL(const TDesC& aText, TDbColNo aLongTextCol);
+private:
+	CHlpTable(RDbView* aView); 
+	void ConstructL();
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/dbwriter/DBWRITER.MMP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,39 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// dbwriter.dll WINC component used to build help files
+// 
+//
+
+TARGET			dbwriter.dll
+TARGETTYPE		DLL
+CAPABILITY   All -TCB
+UID				0x1000008D 0x10004D0D
+VENDORID 0x70000001
+
+SOURCEPATH		../dbwriter
+
+USERINCLUDE		../dbwriter
+USERINCLUDE		../inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+SOURCE			DBWRITER.CPP
+
+LIBRARY			euser.lib
+LIBRARY			estor.lib
+LIBRARY			edbms.lib
+LIBRARY			etext.lib
+LIBRARY			bafl.lib
+LIBRARY			fbscli.lib
+
+SMPSAFE
Binary file symhelp/helpmodel/documentation/HLPMODEL test code.rtf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/eabi/DBWRITERU.DEF	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,63 @@
+EXPORTS
+	_ZN10CHlpRowSet11AtBeginningEv @ 1 NONAME
+	_ZN10CHlpRowSet17MapColNameToColNoERK6TDbCol @ 2 NONAME
+	_ZN10CHlpRowSet17MapColNameToColNoERK7TDesC16 @ 3 NONAME
+	_ZN10CHlpRowSet4ViewEv @ 4 NONAME
+	_ZN10CHlpRowSet5AtEndEv @ 5 NONAME
+	_ZN10CHlpRowSet5AtRowEv @ 6 NONAME
+	_ZN10CHlpRowSet5LastLEv @ 7 NONAME
+	_ZN10CHlpRowSet5NextLEv @ 8 NONAME
+	_ZN10CHlpRowSet6CountLEv @ 9 NONAME
+	_ZN10CHlpRowSet6FirstLEv @ 10 NONAME
+	_ZN10CHlpRowSet9PreviousLEv @ 11 NONAME
+	_ZN10CHlpRowSetD0Ev @ 12 NONAME
+	_ZN10CHlpRowSetD1Ev @ 13 NONAME
+	_ZN10CHlpRowSetD2Ev @ 14 NONAME
+	_ZN12CHlpDbWriter10AddBitmapLEi @ 15 NONAME
+	_ZN12CHlpDbWriter10CloseFileLEv @ 16 NONAME
+	_ZN12CHlpDbWriter10ImageTableEv @ 17 NONAME
+	_ZN12CHlpDbWriter10IndexTableEv @ 18 NONAME
+	_ZN12CHlpDbWriter10TopicTableEv @ 19 NONAME
+	_ZN12CHlpDbWriter11CreateFileLERK7TDesC16 @ 20 NONAME
+	_ZN12CHlpDbWriter12ContextTableEv @ 21 NONAME
+	_ZN12CHlpDbWriter15CreateDatabaseLEv @ 22 NONAME
+	_ZN12CHlpDbWriter15SetDatabaseUidLER4TUid @ 23 NONAME
+	_ZN12CHlpDbWriter15TopicIndexTableEv @ 24 NONAME
+	_ZN12CHlpDbWriter16BeginTransactionEv @ 25 NONAME
+	_ZN12CHlpDbWriter17CommitTransactionEv @ 26 NONAME
+	_ZN12CHlpDbWriter17CompressDatabaseLEv @ 27 NONAME
+	_ZN12CHlpDbWriter4NewLER3RFs @ 28 NONAME
+	_ZN12CHlpDbWriter5NewLCER3RFs @ 29 NONAME
+	_ZN12CHlpDbWriter7SetUidLE4TUid @ 30 NONAME
+	_ZN12CHlpDbWriterD0Ev @ 31 NONAME
+	_ZN12CHlpDbWriterD1Ev @ 32 NONAME
+	_ZN12CHlpDbWriterD2Ev @ 33 NONAME
+	_ZN8CHlpView12GetRichTextLEiiR9CRichText @ 34 NONAME
+	_ZN8CHlpView4GetLEv @ 35 NONAME
+	_ZN8CHlpView4NewLEP7RDbView @ 36 NONAME
+	_ZN8CHlpView5NewLCEP7RDbView @ 37 NONAME
+	_ZN8CHlpView7GetValLEiRm @ 38 NONAME
+	_ZN8CHlpView8GetTextLEiR6TDes16 @ 39 NONAME
+	_ZN9CHlpTable4NewLEP7RDbView @ 40 NONAME
+	_ZN9CHlpTable4PutLEv @ 41 NONAME
+	_ZN9CHlpTable5NewLCEP7RDbView @ 42 NONAME
+	_ZN9CHlpTable7InsertLEv @ 43 NONAME
+	_ZN9CHlpTable7SetColLEiR9CRichText @ 44 NONAME
+	_ZN9CHlpTable7SetColLEiRK10CFbsBitmap @ 45 NONAME
+	_ZN9CHlpTable7SetColLEiRK7TDesC16 @ 46 NONAME
+	_ZN9CHlpTable7SetColLEiiR9CRichText @ 47 NONAME
+	_ZN9CHlpTable7SetColLEim @ 48 NONAME
+	_ZNK12CHlpDbWriter11BitmapCountEv @ 49 NONAME
+	_ZNK12CHlpDbWriter14IsBitmapStoredEi @ 50 NONAME
+	_ZNK12CHlpDbWriter16BitmapIdForIndexEi @ 51 NONAME
+	_ZTI10CHlpRowSet @ 52 NONAME ; #<TI>#
+	_ZTV10CHlpRowSet @ 53 NONAME ; #<VT>#
+	_ZTI12CHlpDbWriter @ 54 NONAME ; #<TI>#
+	_ZTI17THlpStoreResolver @ 55 NONAME ; #<TI>#
+	_ZTI8CHlpView @ 56 NONAME ; #<TI>#
+	_ZTI9CHlpTable @ 57 NONAME ; #<TI>#
+	_ZTV12CHlpDbWriter @ 58 NONAME ; #<VT>#
+	_ZTV17THlpStoreResolver @ 59 NONAME ; #<VT>#
+	_ZTV8CHlpView @ 60 NONAME ; #<VT>#
+	_ZTV9CHlpTable @ 61 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/eabi/HLPLCHU.DEF	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN11HlpLauncher22LaunchHelpApplicationLER10RWsSession @ 1 NONAME
+	_ZN11HlpLauncher22LaunchHelpApplicationLER10RWsSession4TUid @ 2 NONAME
+	_ZN11HlpLauncher22LaunchHelpApplicationLER10RWsSessionP9CArrayFixI15TCoeHelpContextE @ 3 NONAME
+	_ZTI11CHlpCmdLine @ 4 NONAME ; #<TI>#
+	_ZTV11CHlpCmdLine @ 5 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/eabi/HLPMODELU.DEF	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,78 @@
+EXPORTS
+	_ZN8CHlpItemD0Ev @ 1 NONAME
+	_ZN8CHlpItemD1Ev @ 2 NONAME
+	_ZN8CHlpItemD2Ev @ 3 NONAME
+	_ZN8CHlpList4FindEm @ 4 NONAME
+	_ZN8CHlpList4NewLEv @ 5 NONAME
+	_ZN8CHlpList5NewLCEv @ 6 NONAME
+	_ZN8CHlpList5ResetEv @ 7 NONAME
+	_ZN8CHlpList7AppendLEP8CHlpItem @ 8 NONAME
+	_ZN8CHlpListD0Ev @ 9 NONAME
+	_ZN8CHlpListD1Ev @ 10 NONAME
+	_ZN8CHlpListD2Ev @ 11 NONAME
+	_ZN9CHlpModel10CloseFileLERK7TDesC16 @ 12 NONAME
+	_ZN9CHlpModel10LoadTopicLEP9CHlpTopic @ 13 NONAME
+	_ZN9CHlpModel10LoadTopicLER9CRichText @ 14 NONAME
+	_ZN9CHlpModel10LoadTopicLER9CRichTextR6TDes16 @ 15 NONAME
+	_ZN9CHlpModel11SetObserverEP17MHlpModelObserver @ 16 NONAME
+	_ZN9CHlpModel12CancelSearchEv @ 17 NONAME
+	_ZN9CHlpModel12IndexSearchLERK8CHlpItem @ 18 NONAME
+	_ZN9CHlpModel12SetZoomSizeLE13THlpZoomState @ 19 NONAME
+	_ZN9CHlpModel12TopicSearchLERK8CHlpItem @ 20 NONAME
+	_ZN9CHlpModel13CategoryListLEP12CDesC16Array @ 21 NONAME
+	_ZN9CHlpModel14ContextSearchLER15TCoeHelpContext @ 22 NONAME
+	_ZN9CHlpModel14SetZoomFactorsE13THlpZoomStatei @ 23 NONAME
+	_ZN9CHlpModel18CategoryUIDSearchLE4TUid @ 24 NONAME
+	_ZN9CHlpModel4NewLER3RFsP17MHlpModelObserver @ 25 NONAME
+	_ZN9CHlpModel5NewLCER3RFsP17MHlpModelObserver @ 26 NONAME
+	_ZN9CHlpModel5OpenLEv @ 27 NONAME
+	_ZN9CHlpModel6CloseLEv @ 28 NONAME
+	_ZN9CHlpModel7SearchLEiP7HBufC16 @ 29 NONAME
+	_ZN9CHlpModel7SearchLEiRK7TDesC16 @ 30 NONAME
+	_ZN9CHlpModel7SearchLEim @ 31 NONAME
+	_ZN9CHlpModel9LoadListLEP8CHlpList @ 32 NONAME
+	_ZN9CHlpModel9MatchUidLE4TUid @ 33 NONAME
+	_ZN9CHlpModel9OpenFileLERK7TDesC16 @ 34 NONAME
+	_ZN9CHlpModelD0Ev @ 35 NONAME
+	_ZN9CHlpModelD1Ev @ 36 NONAME
+	_ZN9CHlpModelD2Ev @ 37 NONAME
+	_ZN9CHlpTopic10TopicTitleEv @ 38 NONAME
+	_ZN9CHlpTopic4NewLEv @ 39 NONAME
+	_ZN9CHlpTopic5NewLCEv @ 40 NONAME
+	_ZN9CHlpTopic8CategoryEv @ 41 NONAME
+	_ZN9CHlpTopic8RestoreLEP7RDbView @ 42 NONAME
+	_ZN9CHlpTopic9TopicTextEv @ 43 NONAME
+	_ZN9CHlpTopicD0Ev @ 44 NONAME
+	_ZN9CHlpTopicD1Ev @ 45 NONAME
+	_ZN9CHlpTopicD2Ev @ 46 NONAME
+	_ZNK8CHlpList2AtEi @ 47 NONAME
+	_ZNK8CHlpList4ItemEi @ 48 NONAME
+	_ZNK8CHlpList9MdcaCountEv @ 49 NONAME
+	_ZNK8CHlpList9MdcaPointEi @ 50 NONAME
+	_ZNK9CHlpModel12StreamStoreLEi @ 51 NONAME
+	_ZNK9CHlpModel8ZoomSizeEv @ 52 NONAME
+	_ZThn12_NK9CHlpModel12StreamStoreLEi @ 53 NONAME ; #<thunk>#
+	_ZThn4_N8CHlpListD0Ev @ 54 NONAME ; #<thunk>#
+	_ZThn4_N8CHlpListD1Ev @ 55 NONAME ; #<thunk>#
+	_ZThn4_NK8CHlpList2AtEi @ 56 NONAME ; #<thunk>#
+	_ZThn4_NK8CHlpList9MdcaCountEv @ 57 NONAME ; #<thunk>#
+	_ZThn4_NK8CHlpList9MdcaPointEi @ 58 NONAME ; #<thunk>#
+	_ZTI11CHlpPicture @ 59 NONAME ; #<TI>#
+	_ZTI12CHlpDatabase @ 60 NONAME ; #<TI>#
+	_ZTI13CHlpSQLBuffer @ 61 NONAME ; #<TI>#
+	_ZTI13CHlpSQLSearch @ 62 NONAME ; #<TI>#
+	_ZTI16CHlpSQLEvaluator @ 63 NONAME ; #<TI>#
+	_ZTI8CHlpItem @ 64 NONAME ; #<TI>#
+	_ZTI8CHlpList @ 65 NONAME ; #<TI>#
+	_ZTI9CHlpModel @ 66 NONAME ; #<TI>#
+	_ZTI9CHlpTopic @ 67 NONAME ; #<TI>#
+	_ZTV11CHlpPicture @ 68 NONAME ; #<VT>#
+	_ZTV12CHlpDatabase @ 69 NONAME ; #<VT>#
+	_ZTV13CHlpSQLBuffer @ 70 NONAME ; #<VT>#
+	_ZTV13CHlpSQLSearch @ 71 NONAME ; #<VT>#
+	_ZTV16CHlpSQLEvaluator @ 72 NONAME ; #<VT>#
+	_ZTV8CHlpItem @ 73 NONAME ; #<VT>#
+	_ZTV8CHlpList @ 74 NONAME ; #<VT>#
+	_ZTV9CHlpModel @ 75 NONAME ; #<VT>#
+	_ZTV9CHlpTopic @ 76 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/BLD.INF	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,63 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Help application engine
+// 
+//
+
+PRJ_PLATFORMS
+DEFAULT WINC
+
+
+PRJ_EXPORTS
+// specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in \epoc32\include
+../dbwriter/DBWRITER.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(dbwriter.h)
+//
+../inc/HLPMODEL.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(hlpmodel.h)
+../inc/HLPLCH.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(hlplch.h)
+../inc/hlpconstants.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(hlpconstants.h)
+../inc/HlpZoom.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(hlpzoom.h)
+
+../group/hlpmodel.iby		/epoc32/rom/include/hlpmodel.iby
+
+
+PRJ_MMPFILES
+../dbwriter/DBWRITER.MMP
+#ifndef WINC
+../group/HLPMODEL.MMP
+../lch/HLPLCH.MMP
+#endif
+
+PRJ_TESTMMPFILES
+../tsrc/tlch.mmp manual
+../tsrc/TSearch.mmp
+../tsrc/tstore.mmp
+../tsrc/THelpView.mmp manual
+../tsrc/tdumper.mmp manual
+../tsrc/TLoader.mmp
+
+PRJ_TESTEXPORTS
+../group/hlpmodelTest.iby				/epoc32/rom/include/hlpmodeltest.iby
+
+../TestData/Boss-1.hlp					/epoc32/winscw/c/resource/help/boss-1.hlp
+../TestData/Boss-2.hlp					/epoc32/winscw/c/resource/help/boss-2.hlp
+../TestData/ER5Help_Part1.hlp				/epoc32/winscw/c/resource/help/er5help_part1.hlp
+../TestData/newfile.hlp					/epoc32/winscw/c/resource/help/newfile.hlp
+../TestData/french.hlp					/epoc32/winscw/c/resource/help/french.hlp
+../TestData/PlatSecSearchTestZ.hlp			z:/resource/help/platsecsearchtest.hlp
+../TestData/PlatSecSearchTestC.hlp			z:/system/data/thlpmodel/platsecsearchtestc.hlp
+../TestData/PlatSecSearchTestF.hlp			z:/system/data/thlpmodel/platsecsearchtestf.hlp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/HLPMODEL.MMP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,55 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// hlpmodel.dll The help engine
+// 
+//
+
+TARGET			hlpmodel.dll
+TARGETTYPE		DLL
+CAPABILITY   All -TCB
+UID				0x1000008D 0x10004D0C
+VENDORID 0x70000001
+
+SOURCEPATH		../group
+SOURCEPATH		../src
+
+USERINCLUDE		../src
+USERINCLUDE		../inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+RESOURCE	../lch/lch.rss
+
+START RESOURCE	../lch/lch.rss
+TARGETPATH		/resource/apps
+END
+
+SOURCE			HLPMODEL.CPP
+SOURCE			HLPSRCH.CPP
+SOURCE			HLPMAIN.CPP
+SOURCE			HLPDB.CPP
+SOURCE			Hlppanic.cpp
+SOURCE			hlppict.cpp
+
+LIBRARY			cone.lib
+LIBRARY			euser.lib
+LIBRARY			estor.lib
+LIBRARY			edbms.lib
+LIBRARY			efsrv.lib
+LIBRARY			etext.lib	
+LIBRARY			bafl.lib
+LIBRARY			gdi.lib
+LIBRARY			fbscli.lib
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/RELEASE.TXT	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,396 @@
+HELP MODEL RELEASE NOTES
+========================
+Release:044
+Release by: Waiman Tang
+Date:23/12/2009
+------------------
+* fix for defect : PDEF134629: ONB : Fix for some leavescan errors in defect_misc build
+------------------
+Release:043
+Release by: Shazia Murtaza
+Date:23/12/2008
+------------------
+* fix for defect : DEF131491: hlpmodel - manual test TDUMPER fails.
+------------------
+Release:042
+Release by: James Aley
+Date:25/09/2008
+------------------
+* fix for defect : DEF126532: [Coverity] - SYMBIAN.CLEANUP - app-services/hlpmodel/
+------------------
+Release:041
+Release by: Prabodh Depala
+Date:06/11/2007
+------------------
+* fix for defect : PDEF113759: It appears HlpLauncher does not work properly
+------------------
+Release:040
+Release by: Waiman Tang
+Date:27/02/2007
+------------------
+* fix for defect : PDEF100094: HlpLauncher class description inaccurate
+------------------
+Release:039
+Release by: Konstantin Zheludev
+Date:29/09/2006
+------------------
+* fix for defect : DEF093327: Tag Scan Error Report for Pim component
+------------------
+Release:038
+Release by: Shazia Murtaza
+Date:09/05/2006
+------------------
+* fix for defect : DEF085630: Help application does not switch to the correct language for helpfiles. 
+------------------
+Release:037
+Release by: Peter Chan
+Date:10/03/2006
+------------------
+* fix for defect :  DEF082340: STAB-Agenda (Calendar) help can crash
+- prevent a new search starting when one is currently being conducted.
+------------------
+Release:036
+Release by: Kelly Hon
+Date:15/12/2005
+-------------------
+* fix for defect :  DEF075741: STAB-Agenda (Calendar) help can crash.
+
+Release:035
+Release by: Daniel Yuen
+Date:23/11/2005
+------------------
+* fix for defect :DEF074050: Helpmodel has never been updated for multi-digit locale codes
+
+KHlpFileSpec now uses *.h* instead of *.h?? for multi-digit locale search.
+------------------
+Release:034
+Release by: Krishna Vasudevan
+Date:27/05/2005
+-------------------
+* fix for defect : DEF061683  CHlpDatabase::FileName doesn't work 
+-------------------
+Release:033
+Release by: Krishna Vasudevan
+Date:17/05/2005
+-------------------
+* fix for defect : INC057477 - HlpLaunch hard-codes application path
+
+The resource file is included into the hlpmodel's IBY File.
+The hlplaunch MMP file contains the resource file information.
+There is a error check on return value of RFs::Connect().
+The Resource File literal name is made unique.
+-------------------
+Release:032
+Release by: Robert Williamson
+Date:18/03/2005
+-------------------
+* fix for defect : INC057477 - HlpLaunch hard-codes application path
+
+Path is now stored in lch.rss. The path set in lch.rss in this change
+is "z:\\sys\\bin\\cshelp.exe".
+-------------------
+Release:031
+Release by: Prabodh Depala
+Date:15/02/2005
+-------------------
+* fix for defect : INC051624 - NTT App-services\hlpmodel\ test case tsearch fails.
+-------------------
+Release:030
+Release by: Loughlin Spollen
+Date:03/02/2005
+-------------------
+* fix for defect : DEF049948 - Core Apps Test Server improvement
+-------------------
+Release:029
+Release by: Steve Childerley
+Date:11/11/2004
+-------------------
+Minor Change TSearch  - modified to handle different drives encountered in Lubbock & H2
+The major changes made within SearchOrderTest.CPP & H
+
+Release:028
+Release by: Steve Childerley
+Date:07/10/2004
+-------------------
+Modified TSearch to include test for PlatSec drive search order.
+The added test is only run when __SECURE_DATA__ is defined.
+
+Release: 027
+Release by: Johan Nareskog
+Date: 11/10/2004
+-------------------
+DEF050046 - THelpView and TLCH don't start
+-------------------
+
+Release: 026
+Release by: Nikolay Budantsev
+Date: 11/09/2004
+-------------------
+MS3.1.1  GT0215   PREQ277 PS6.4 Replacement APIs (Also PS8.1)
+MS3.6    GT0215   PREQ728 Base API Improvements
+-------------------
+
+Release: 025
+Release by: Nichola Turner
+Date: 26/11/2003
+-------------------
+* fix for defect : DEF040449 - Missing copyright statements in files
+-------------------
+Release: 024
+Release by: Dominic Pinkman
+Date: 17/11/2003
+-------------------
+* fix for defect : DEF039936 - Mistakes in Doxygen tagging
+-------------------
+Release: 023
+Release by: Andy Newman
+Date: 08/10/2003
+-------------------
+* fix for defect : DEF038750 - build file errors
+-------------------
+Release: 022
+Release by: Andy Newman
+Date: 17/09/2003
+-------------------
+* fix for defect : DEF037970 - TSearch looks for files on C, not Z, on lubbock and assabet
+-------------------
+Release: 021
+Release by: Johan Nareskog 
+Date: 09/15/2003
+-------------------
+* fix for defect : DEF037971  hlpmodel/tloader - missed from hlpmodelTest.iby file
+-------------------
+Release: 020
+Release by: Bob Rosenberg
+Date: 06/20/2002
+-------------------
+* fix for defect : INC035325 - TSTORE fails in Lubbock (urel)
+
+-------------------
+Release: 019
+Release by: Sindhu Melkote
+Date: 05/12/2002
+-------------------
+* fix for defect : INC002647 - Help:Results of a search are still displayed after search is cancelled
+
+-------------------
+Release: 018
+Release by: NicholaT
+Date: 28/02/2002
+-------------------
+* fix for defect "Cannot add 3'rd party help files"
+  (PEN-55HDL6)
+
+-------------------
+Release: 017
+Release by: NicholaT
+Date: 30/01/2002
+-------------------
+* fix for defect "Exported headers #include "" non-exported headers"
+  (BAD-56VLDN)
+
+-------------------
+Release: 016
+Release by: NicholaT
+Date: 28/01/2002
+-------------------
+* fix for defect "Cannot add 3'rd party help files"
+  (PEN-55HDL6)
+
+-------------------
+Release: 015
+Release by: NicholaT
+Date: 06/09/2001
+-------------------
+* Fix for defect "duplicate UIDs"
+  (TUR-4ZWFHV)
+
+-------------------
+Release: 014
+Release by: GeraldoT
+Date: 06/08/2001
+-------------------
+* Fix for defect "HlpModel: Javadoc Symbian OS release version number are incorrect"
+  (WIR-4YYN4E)
+
+-------------------
+Release: 013
+Release by: AlexW
+Date: 13/07/2001
+-------------------
+* Fix for defect "HlpModel: zooming rounding errors producing strange 
+  zoomed bitmaps" (WIR-4YLK77)
+
+-------------------
+Release: 012
+Release by: NicholaT
+Date: 04/07/2001
+-------------------
+* Added support for localisable language downgrade path of help files
+
+  - all drives are scanned for any help files.
+  - for each file found, it's nearest language file is loaded by using
+    BaflUtils::NearestLanguageFile.
+
+* New test help files added
+
+  - test help files for various locales added
+
+-------------------
+Release: 011
+Release by: AlexW
+Date: 08/06/2001
+-------------------
+* Added multiple bitmap zooming support. 
+
+  - If an MBM file contains 1 bitmap, then only regular zooming is available.
+  - If an MBM file contains 2 bitmaps, then again, only regular bitmap zooming
+    is available (i.e. GDI stretches the bitmap as its drawn at different zoom
+    sizes).
+  - If an MBM file contains 3 bitmaps, then depending on the zoom size the
+    help model is in, the corresponding bitmap is drawn to the screen without
+    any streching.
+  - If an MBM file contains more than 3 bitmaps then only the first 3 are utilized.
+
+* New API's
+  - See GT109 API documentation.
+
+-------------------
+Release: 010
+Release by: AlexW
+Date: 21/07/2000
+-------------------
+* Removed extra notification that a CategoryUidSearch is complete. This is 
+  not required and results in *EXACTLY* two Search complete messages being 
+  reported to the model observer (in the case where a match is found, or 
+  *EXACTLY* one notification in the case where no match is found). Updated 
+  TSearch to verify that only one notification is ever sent regardless of
+  how many help files are present, or how many help files are searched.
+
+-------------------
+Release: 009
+Release by: AlexW
+Date: 14/07/2000
+-------------------
+* Implemented fix for defect "hlpmodel allows 3rd party app writer to override internal help file"
+  (EDNAMIE-4LXJJ2)
+* Implemented fix for defect "HlpModel will ignore foreign locale help files" (EDNAWIR-4LZG56)
+* In both cases, these fixes were merged in from TLoader
+* Updated TLoader to support optional logging
+
+-------------------
+Release: 008
+Release by: AlexW
+Date: 10/07/2000
+-------------------
+* NOTE: HELP FILES WILL NEED REBUILDING AS THIS IS NOT A DATA-COMPATIBLE RELEASE. 
+  Data compatibility had to be broken to fix defect "Getting topics from an 
+  index won't work" (EDNGHAS-4LVEJV)
+* Fix for defect "CHlpModel should produce only one ETopicListAvailable event
+  for each call to CHlpModel::CategoryUIDSearchL?" (EDNMPEN-4LNDJ8)
+* Fix for defect "Getting topics from an index won't work" (EDNGHAS-4LVEJV)
+* Fix for defect "Missing CleanupStack interaction in DbWriter" (EDNAWIR-4LVEXY)
+* TSearch has been updated to include better checking of help model search results.
+* Removed image files from Test source data as these are generated by the compiler.
+
+-------------------
+Release: 007
+Release by: AlexW
+Date: 07/07/2000
+-------------------
+* Another attempt at fixing defect "CHlpModel should produce only one ETopicListAvailable event 
+  for each call to CHlpModel::CategoryUIDSearchL?" (EDNMPEN-4LNDJ8)
+  This time, added extra ReportEventL(ESearchComplete)
+* Improved TSearch full text searching to panic when in the case where the help model
+  returns incorrect results for the test help files.
+
+-------------------
+Release: 006
+Release by: AlexW
+Date: 04/07/2000
+-------------------
+* Updated fix for defect "Epoc currently assumes one help file language" (EDNJHET-4HGNYZ)
+  The previous fix was not tested for the use case where D: contains a file which is
+  subsequently overridden by a better file on C:
+  
+  E.g. D:\System\Help\SomeHelp.hlp
+       C:\System\Help\SomeHelp.h01 (this is better than the D: counterpart)
+
+  This required the insertion of a missing 'break' statement in the loading code. This has
+  been tested by running TLoader using this use-case setup.
+* Changed CHlpModel::CategoryUIDSearchL(TUid aCategoryUID) to use DoSearchL(...) directly
+  because previous release called SearchL() which was over-writing the transient category
+  uid value
+
+-------------------
+Release: 005
+Release by: AlexW
+Date: 29/06/2000
+-------------------
+* Fix for defect "CHlpModel should produce only one ETopicListAvailable event 
+  for each call to CHlpModel::CategoryUIDSearchL?" (EDNMPEN-4LNDJ8)
+* Fix for defect "Loading an index list fails in HlpModel" (EDNAWIR-4LPE8Q)
+* Fix for defect "Link warnings from hlpmodel" (EDNSCHM-4L2P7H)
+* Fix for defect "Epoc currently assumes one help file language" (EDNJHET-4HGNYZ)
+* The last defect requires that all help files are named *.h?? where ?? can be hlp or 
+  a locale specific two digit code (e.g. 01 for UK English). 
+
+
+-------------------
+Release: 004
+Release by: AlexW
+Date: 02/06/2000
+-------------------
+* Fix for defect "hlpmodel returns the same help topic for the same 
+  TopicId in different help databases" (EDNJHET-4HLH8N)
+* 2nd and 3rd Uids switched, so all help files will need to be rebuilt.	
+* Added export to allow an asynchronous search to be cancelled.
+* Fixed full text searching so that asynchronous searching is now enabled.
+* Help application authors should take note of the new exports to CHlpItem
+  and the new topic location export in CHlpModel as this is the *ONLY* means of
+  restoring a help entry.
+* Source & BC
+
+
+-------------------
+Release: 003
+Release by: AlexW
+Date: 16/05/2000
+-------------------
+* Fix for defect "HlpModel panics if help requested when no helpfiles installed"
+  (EDNJHET-4KDEP4)
+
+
+-------------------
+Release: 002
+Release by: AlexW
+Date: 04/05/2000
+-------------------
+  Major update to support pictures in rich text. Most recent changes first:-
+
+* Updated DBWriter to provide more robust long text column writing (without leading length bytes).* Updated HlpModel to read using corresponding new schema.* Updated TDumper to extract further content from the help file.* Updated THelpView to reset the contents of the search window after a search has been completed.
+* Changed the DB writer to allow longer synonynms (now have a max length of 200 chars).* Updated the KHlpMaxTextColLength constant to 200 just in case (was 120).
+* Slight optimisation in the help file loading code which checks to see that  the model is not attempting to load a directory(!).* Added zooming support to reference help viewer
+* Remove bad code from CHlpModel::LoadTopicL() which was not using the correct  column name* In THelpView, added extra call to ensure that the rich text edwin's scrollbars  are resized after loading a new topic.* Removed commented out code from CHlpPict.cpp
+* Updated mmp file to link against CONE - this is required in order to retrieve the  current screen device without changing source compatibility. This might have to  be updated to something a little more sensible in the near future.* Fix for defect "HlpModel poor performance when obtaining lists   of topics from the help databases" (EDNJHET-4HGMPF)* Added an __ASSERT_DEBUG that meta data uid's read from the help  file must not duplicate each other (context Id's must be unique).
+* The version breaks file compatibilty in order to add improved picture and  rich text restoration. All help files will need to be regenerated.* Added new picture restoration code to help model so that a glass door   viewing application is no longer required.* Added new code to the context sensitive help backend to write picture Id's  to the CHelpPicture header. Pictures are now externalised as rows in a help  files image table. This reduces the size of help files by preventing multiple  copies of the same image from appearing multiple times in a help file. Images  are now looked up in the Image table.* Extended TContext to perform more testing* Cleaned-up HlpModel and THelpView
+* Fix for defect "Context search in hlpmodel does not seem to work" (EDNAFRD-4HQE7H)* Added completed test for context sensitive searching (TContext)
+* Updated DBWriter to provide more robust long text column writing (without leading length bytes).* Updated HlpModel to read using corresponding new schema.* Updated TDumper to extract further content from the help file.* Updated THelpView to reset the contents of the search window after a search has been completed.
+* Changed the DB writer to allow longer synonynms (now have a max length of 200 chars).* Updated the KHlpMaxTextColLength constant to 200 just in case (was 120).
+* Slight optimisation in the help file loading code which checks to see that  the model is not attempting to load a directory(!).* Added zooming support to reference help viewer
+* Remove bad code from CHlpModel::LoadTopicL() which was not using the correct  column name* In THelpView, added extra call to ensure that the rich text edwin's scrollbars  are resized after loading a new topic.* Removed commented out code from CHlpPict.cpp
+* Updated mmp file to link against CONE - this is required in order to retrieve the  current screen device without changing source compatibility. This might have to  be updated to something a little more sensible in the near future.* Fix for defect "HlpModel poor performance when obtaining lists   of topics from the help databases" (EDNJHET-4HGMPF)* Added an __ASSERT_DEBUG that meta data uid's read from the help  file must not duplicate each other (context Id's must be unique).
+* The version breaks file compatibilty in order to add improved picture and  rich text restoration. All help files will need to be regenerated.* Added new picture restoration code to help model so that a glass door   viewing application is no longer required.* Added new code to the context sensitive help backend to write picture Id's  to the CHelpPicture header. Pictures are now externalised as rows in a help  files image table. This reduces the size of help files by preventing multiple  copies of the same image from appearing multiple times in a help file. Images  are now looked up in the Image table.* Extended TContext to perform more testing* Cleaned-up HlpModel and THelpView
+* Fix for defect "Context search in hlpmodel does not seem to work" (EDNAFRD-4HQE7H)* Added completed test for context sensitive searching (TContext)
+
+
+-------------------
+Release: 001
+Release by: AlexW
+Date: 03/04/2000
+-------------------
+* Fixed the incorrect implementation of defect "hlpmodel recognises   help databases by filename" (EDNJHET-4HGNDS)* Finished TDumper project to dump contents of a help database to a text file for  inspection* Minor update to THelpView to adjust comments* Updated bld.inf to export TContext.dat (help database file used in test code)
+* Fix CHlpTopic::RestoreL(...) so that it can also read the rich text stored   in the db.* Now retrieves rich text from the model (excluding pictures)
+* New test project THelpView, a minimal EIKON help file viewer* Updated CHlpDatabase to no longer maintain an in memory handle   to the database stream dictionary* Fixed some memory leaks in DbWriter* Added new function SetObserver to CHlpModel* Appended new export to def files
+* Improved test code for topic listing and category listing.* Implementation for one of the missing functions (CHlpModel::OpenFileL(...))* Added new panic code (EHlpNoCriterion)* Fixed "Non-standard extension used" warning in CHlpTopic::RestoreL(RDbView* aView)  - this is actually part of defect "Various code defects in hlpmodel"  (EDNJHET-4HGP3S)* Added assert always to check for null category list * Fixed another part of defect "Various code defects in hlpmodel" (EDNJHET-4HGP3S)  - CHlpModel::MatchUidL(TUid aUid)* Made some internal functions inline and converted to references.* Optimised CHlpDatabase to used an array key on the iUids array.* Removed trailing L off of non leaving functions* Fixed a potential resource leak in CHlpDatabase whereby internal 'R'  classes were't closed.
+* Changed panic code THlpPanic::ENoRowAtCursor to EHlpNoRowAtCursor* Boiler plated header* Removed dodgy tabbing* Made CHlpDatabase::ViewHasRecordsL() inline (it was anyway, it just didn't  explicitly say inline).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/app-services_hlpmodel.history.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<relnotes name="Help">
+  <purpose>
+    Centralised, read-only interface to all help files on a Symbian OS device providing context sensitive help. Help files are essentially heavily compressed databases, each containing a series of help topics relating to different applications or subjects.
+  </purpose>
+</relnotes>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/app-services_hlpmodel.mrp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+component	app-services_hlpmodel
+source	\sf\app\helps\symhelp\helpmodel
+binary	\sf\app\helps\symhelp\helpmodel\group	all
+exports	\sf\app\helps\symhelp\helpmodel\group
+notes_source	\component_defs\release.src
+
+
+ipr E 
+ipr T \sf\app\helps\symhelp\helpmodel\TestData
+ipr T \sf\app\helps\symhelp\helpmodel\tsrc
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/hlpmodel.iby	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __HLPMODEL_IBY__
+#define __HLPMODEL_IBY__
+
+REM GT Help Model
+
+file=ABI_DIR\BUILD_DIR\HlpModel.dll                   System\Libs\HlpModel.dll
+file=ABI_DIR\BUILD_DIR\hlplch.dll                     System\Libs\hlplch.dll
+data=ZRESOURCE\Apps\lch.rsc			      Resource\Apps\lch.rsc
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/group/hlpmodelTest.iby	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __HLPMODELTEST_IBY__
+#define __HLPMODELTEST_IBY__
+
+#include <hlpmodel.iby>
+
+#include <CoreAppsTest.iby>
+
+REM help model test
+
+file=ABI_DIR\BUILD_DIR\DBWRITER.dll	System\Libs\DBWRITER.dll
+
+file=ABI_DIR\BUILD_DIR\TSTORE.exe	System\Programs\THlpmodel\TSTORE.exe
+file=ABI_DIR\BUILD_DIR\TDUMPER.exe	System\Programs\THlpmodel\TDUMPER.exe
+file=ABI_DIR\BUILD_DIR\TSEARCH.exe	System\Programs\THlpmodel\TSEARCH.exe
+file=ABI_DIR\BUILD_DIR\TLOADER.exe	System\Programs\THlpmodel\TLOADER.exe
+
+
+file=ABI_DIR\BUILD_DIR\THelpView.EXE	sys\bin\THelpView.EXE
+
+data=MULTI_LINGUIFY(RSC EPOCROOT##epoc32\data\Z\resource\Apps\THelpView  resource\Apps\THelpView)
+data=MULTI_LINGUIFY(RSC EPOCROOT##epoc32\data\Z\private\10003a3f\apps\THelpView_reg  private\10003a3f\apps\THelpView_reg)
+
+
+define HELP_PATH Resource\help
+
+data=EPOCROOT##epoc32\winscw\c\##HELP_PATH##\Boss-1.hlp		HELP_PATH##\Boss-1.hlp
+data=EPOCROOT##epoc32\winscw\c\##HELP_PATH##\Boss-2.hlp		HELP_PATH##\Boss-2.hlp
+data=EPOCROOT##epoc32\winscw\c\##HELP_PATH##\ER5Help_Part1.hlp	HELP_PATH##\ER5Help_Part1.hlp
+
+data=ZRESOURCE\Help\PlatSecSearchTest.hlp			Resource\Help\PlatSecSearchTest.hlp
+data=ZSYSTEM\Data\THlpmodel\PlatSecSearchTestC.hlp		System\Data\THlpmodel\PlatSecSearchTestC.hlp	
+data=ZSYSTEM\Data\THlpmodel\PlatSecSearchTestF.hlp		System\Data\THlpmodel\PlatSecSearchTestF.hlp
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/HLPDB.H	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,133 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPDB_H__
+#define __HLPDB_H__
+
+// System includes
+#include <e32std.h>
+#include <d32dbms.h>
+#include <s32file.h>
+#include <badesca.h>
+
+// User includes
+#include "hlpconstants.h"
+#include "HLPMODEL.H"
+
+// Classes referenced
+class CFbsBitmap;
+
+
+//
+// ----> CHlpDatabase  (container class for the help database)
+//
+class CHlpDatabase : public CBase
+	{
+public:
+	static CHlpDatabase* NewLC(RFs& aFs);
+	static CHlpDatabase* NewLC(RFs& aFs, const TDesC& aFileName);
+	~CHlpDatabase();
+
+public:
+	void OpenL(const TDesC& aFileName);
+	void Close();
+
+public: // new
+	void AppendCategoryListL(CDesCArray& aList);
+	TInt TopicIdSearchL(const TUid aCategoryUid, const TUint aTopicId);
+	TInt ContextSearchL(const TDesC& aContext);
+	CFbsBitmap* ImageForIdLC(TInt aImageId, THlpZoomState aZoomState);
+	TInt ImageCountForIdL(TInt iImageId);
+
+private:
+	inline void CloseView();
+
+public:
+	TBool MatchUidL(TUid aUid);
+	inline TInt ViewHasRecordsL() const;
+	inline RDbStoreDatabase& Database() const;
+	inline RDbView& View() const;
+	inline CStreamStore& StreamStore() const;
+	inline const TDesC& FileName() const;
+	inline void SetViewReady(TBool aReady);
+	inline TBool ViewReady() const;
+	inline TUid HelpFileUid() const;
+
+private:
+	CHlpDatabase(RFs& aFs);
+	void ConstructL();
+
+private:
+	TUid iHelpFileUid;
+	TFileName iFileName;
+	TBool iViewReady;
+
+	/**
+	* Identifies whether the help file being accessed
+	* is of the old format or not.
+	*/
+	TBool iOldHelpFileFormat;
+
+	RFs& iFs;
+	RDbView* iView;
+	RDbStoreDatabase*  iDatabase;
+	CArrayFixFlat<TUid>* iUids;
+	RDbTable iImageTable;
+
+	CPermanentFileStore* iStore;
+	};
+
+
+//
+// ----> CHlpDatabase (inlines)
+//
+inline TInt CHlpDatabase::ViewHasRecordsL() const
+	{
+	return iView->CountL();
+	}
+inline RDbStoreDatabase& CHlpDatabase::Database() const
+	{
+	return *iDatabase;
+	}
+inline RDbView& CHlpDatabase::View() const
+	{
+	return *iView;
+	}
+inline CStreamStore& CHlpDatabase::StreamStore() const
+	{
+	return *iStore;
+	}
+inline const TDesC& CHlpDatabase::FileName() const
+	{
+	return iFileName;
+	}
+inline void CHlpDatabase::SetViewReady(TBool aReady)
+	{
+	iViewReady = aReady;
+	}
+inline TBool CHlpDatabase::ViewReady() const
+	{
+	return iViewReady;
+	}
+inline void CHlpDatabase::CloseView()
+	{
+	View().Close();
+	}
+inline TUid CHlpDatabase::HelpFileUid() const
+	{
+	return iHelpFileUid;
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/HLPLCH.H	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,102 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Help Launcher module
+// 
+//
+
+#ifndef __HLPLCH_H__
+#define __HLPLCH_H__
+
+#if !defined(__APGTASK_H__)
+#include <apgtask.h>
+#endif
+
+#if !defined(__EIKDLL_H__)
+#include <eikdll.h>
+#endif
+
+#if !defined(__WSERV_H__)
+#include <w32std.h>
+#endif
+
+#if !defined(__COEHELP_H__)
+#include <coehelp.h>
+#endif
+
+/** Help application UID. 
+@internalComponent
+@released
+*/
+const TUid KHlpAppUid={ 0x10005234 };
+
+/** UID of window message to send to application. 
+@internalComponent
+@released
+*/
+const TUid KHlpAppWsMsg={ 0x100055c7 };
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+
+/** Maximum length of command line to launch application. 
+@internalComponent
+@released
+*/
+const TInt KMaxCmdLineLength = 512;
+
+// resource file name
+_LIT(KHelpLauncherResource, "z:\\resource\\apps\\lch.rsc");
+
+class CHlpCmdLine : public CBase
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	static CHlpCmdLine* NewL(CArrayFix<TCoeHelpContext>* aContextList);
+	static CHlpCmdLine* NewLC(CArrayFix<TCoeHelpContext>* aContextList);
+	~CHlpCmdLine();
+public:
+	TPtr8 CmdLineL();
+private:
+	void BuildCmdLineL();
+	void AddContextL(TCoeHelpContext& aContext);
+private:
+	void ConstructL();
+	CHlpCmdLine(CArrayFix<TCoeHelpContext>* aContextList);
+private:
+	CArrayFix<TCoeHelpContext>* iContextList;
+	CBufFlat* iCmdLine;
+	};
+	
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+class HlpLauncher
+/** Launches the help application.
+
+It assumes that such an application is at z:\\Sys\\Bin\\CsHelp.exe
+
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C	static void LaunchHelpApplicationL(RWsSession& aWsSession, CArrayFix<TCoeHelpContext>* aContextList);
+	IMPORT_C	static void LaunchHelpApplicationL(RWsSession& aWsSession, TUid aUid);
+	IMPORT_C	static void LaunchHelpApplicationL(RWsSession& aWsSession);
+private:
+	static void DoLaunchHelpApplicationL(RWsSession& aWsSession, const TDesC8& aCmdLine);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/HLPMODEL.H	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,594 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPMODEL_H
+#define __HLPMODEL_H
+
+// System includes
+#include <e32std.h>
+#include <badesca.h>	// For MDesCArray
+#include <txtmrtsr.h>	// For MRichTextStoreResolver
+#include <gdi.h>		// For MPictureFactory
+#include <d32dbms.h>
+// Help model includes
+#include "hlpconstants.h"
+
+// Classes referenced
+class CRichText;
+class CHlpDatabase;
+class CHlpFileEntry;
+class CHlpSQLSearch;
+class TCoeHelpContext;
+class CParaFormatLayer;
+class CCharFormatLayer;
+class CHlpPicture;
+
+// Typedefs
+/**
+@publishedAll
+@released
+*/
+typedef CArrayPtrFlat<CHlpDatabase> CHlpDatabases;
+
+/**
+@publishedAll
+@released
+*/
+typedef CArrayPtrFlat<CHlpFileEntry> CHlpFileList;
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+/** Maximum Title column. 
+@publishedAll
+@released
+*/
+const TInt KMaxTitleColumn = 120;
+#endif
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+/**
+@internalComponent
+@released
+*/
+const TInt KHlpModelDefaultNumberOfImagesForV6Point2Files = 1;
+/**
+@internalComponent
+@released
+*/
+const TInt KHlpModelMaximumNumberOfImagesForV6Point2Files = 3;
+//
+/** Default zoom factor for small zoom size. 
+@internalComponent
+@released
+*/
+const TInt KHlpModelZoomFactorSmall = 750;
+/** Default zoom factor for medium zoom size. 
+@internalComponent
+@released
+*/
+const TInt KHlpModelZoomFactorMedium = 1000;
+/** Default zoom factor for large zoom size. 
+@internalComponent
+@released
+*/
+const TInt KHlpModelZoomFactorLarge = 1250;
+
+/** Default zoom factor for medium zoom size as real number. 
+@internalComponent
+@released
+*/
+const TReal KHlpModelDefaultZoomFactorAsRealNumber = 1000.0;
+
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+class MHlpModelObserver
+/** Client callback inteface to receive events from the help model. 
+@publishedAll
+@released
+*/
+	{
+public:
+	/** Receives a help model event.
+	
+	@param aEvent Help model event. Events are listed in the enums that begin 
+	ECategoryListAvailable, and ENoRecordsFound. */
+	virtual void HandleModelEventL(TInt aEvent) = 0;
+	};
+
+
+class MHlpDbObserver
+/** Internal API to handle events reported by the search engine
+@publishedAll
+@released
+*/
+	{
+public: // TInt aEvent should be a named enum
+	virtual void HandleDbEventL(TInt aEvent) = 0;
+	};
+
+//
+// Search types (these should be named, but SC cannot be broken until v7.0
+//
+/** Defines the search types for use with CHlpModel::SearchL(). 
+@publishedAll
+@released
+*/
+enum
+	{
+	/** Gets a list of index entries for all help files.
+
+	Success is indicated by an EIndexListAvailable event; failure by EIndexListNoneFound. 
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	EIndexList,
+	/** Gets a list of categories for all help files.
+
+	Success is indicated by an ECategoryListAvailable event; failure by ECategoryListNoneFound. 
+	The list can be retrieved using CHlpModel::CategoryListL(). */
+	ECategoryList,
+	/** Gets a list of topics for a specified category.
+
+	Success is indicated by an ETopicListAvailable event; failure by ETopicListNoneFound. 
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	ETopicListForCategory,
+	/** Gets a list of topics for a specified category UID.
+
+	Success is indicated by an ETopicListAvailable event; failure by ETopicListNoneFound. 
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	ETopicListForCategoryUID,
+	/** Searches for a topic with the specified help context.
+
+	A successful search generates an ETopicAvailable event. The topic can then be retrieved 
+	using CHlpModel::LoadTopicL(). An unsuccessful search generates an ETopicNotFound event. */
+	EContextSearch,
+	/** Searches for index entries for the specified help item.
+
+	A successful search generates an ETopicListAvailable event. The list can then be retrieved 
+	using CHlpModel::LoadListL(). An unsuccessful search generates an ETopicListNoneFound event. */
+	EIndexSearch,
+	/** Searches the topic titles for the specified text.
+
+	A successful search generates an ESearchListAvailable event. The list can then be 
+	retrieved using CHlpModel::LoadListL(). An unsuccessful search generates an 
+	ESearchListNoneFound event. */
+	EQuickSearch,
+	/** Searches the full text of topics for the specified text.
+
+	A successful search generates an ESearchListAvailable event. The list can then be 
+	retrieved using CHlpModel::LoadListL(). An unsuccessful search generates an 
+	ESearchListNoneFound event. */
+	EFullTextSearch,
+	/** Searches for a topic with the specified ID.
+
+	A successful search generates an ETopicAvailable event. The topic can then be 
+	retrieved using CHlpModel::LoadTopicL(). An unsuccessful search generates an 
+	ETopicNotFound event. */
+	ETopicIdSearch
+	};
+
+//
+// Search progress responses (this should be scoped as members of MHlpModelObserver
+// and should also be named, but SC cannot be broken until v7.0
+//
+/** Search progress responses
+@publishedAll
+@released
+*/
+enum
+	{
+	ENoRecordsFound,
+	ESearchInProgress,
+	ESearchComplete
+	};
+
+//
+// Search progress responses (ditto for naming and scoping)
+//
+/** Help model search result events
+@publishedAll
+@released
+*/
+enum
+	{
+	/** The search returned a category list.
+
+	The list can be retrieved using CHlpModel::CategoryListL(). */
+	ECategoryListAvailable,	
+	/** The search did not return a category list. */
+	ECategoryListNoneFound,
+	/** The search returned a results list.
+
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	ESearchListAvailable,
+	/** The search did not return a results list. */
+	ESearchListNoneFound,
+	/** The search returned a topic list.
+
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	ETopicListAvailable,		// Category expansion
+	/** The search did not return a topic list. */
+	ETopicListNoneFound,
+	/** The search returned an index item list.
+
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	EIndexListAvailable,
+	/** The search did not return an index item list. */
+	EIndexListNoneFound,
+	/** The search returned a topic list from an index phrase search.
+
+	The list can be retrieved using CHlpModel::LoadListL(). */
+	EIndexSearchListAvailable,
+	/** The search did not return a topic list from an index phrase search. */
+	EIndexSearchListNoneFound,
+	/** The search returned a topic.
+
+	The topic can be retrieved using CHlpModel::LoadTopicL(). */
+	ETopicAvailable,
+	/** The search did not return a topic. */
+	ETopicNotFound,
+	/** The search is in progress. */
+	EModelSearchInProgress,
+	/** The search has been cancelled. */
+	EHlpSearchCancelled
+	};
+	
+	// Constants
+
+/** Defines help model zoom sizes. 
+@publishedAll
+@released
+*/
+enum THlpZoomState
+	{
+	/** Small zoom. */
+	EHlpZoomStateSmall = 0,
+	/** Medium zoom. */
+	EHlpZoomStateMedium = 1,
+	/** Large zoom. */
+	EHlpZoomStateLarge = 2
+	};
+
+
+class CHlpItem : public CBase
+/** Encapsulates an individual item in a help file.
+
+Note that item IDs are assigned in increasing numerical order by the help 
+compiler and are not unique. Categories and help files are however specified 
+by UID, and so are unique. 
+@publishedAll
+@released
+*/
+	{
+public:
+	static CHlpItem* NewL(const TDesC& aTitle, TUint32 aId, TUid aCategoryId, TUid aHelpFileUid);
+	static CHlpItem* NewLC(const TDesC& aTitle, TUint32 aId, TUid aCategoryId, TUid aHelpFileUid);
+	static CHlpItem* NewLC(const TDesC& aTitle, TUint32 aId, TUid aHelpFileUid);
+	IMPORT_C ~CHlpItem();
+
+public: // Access
+	inline TUid CategoryUid() const 
+	/** Gets the item's category ID.
+	
+	@return Category ID */
+		{ return iCategoryUid; }
+	inline TUid HelpFileUid() const 
+	/** Gets the item's help file UID.
+	
+	@return Help file UID */
+		{ return iHelpFileUid; }
+	inline TUint32 Id() const 
+	/** Gets the item's ID.
+	
+	@return Item's ID */
+		{ return iId; }
+	inline const TDesC& Title() const 
+	/** Gets the item's title.
+	
+	@return Item's title */
+		{ return *iTitle; }
+
+public: // These should not be public, but I can't break SC (these were inherited from
+		// the previous author.
+	/** Item's title */
+	HBufC* iTitle;
+	/** Item's ID */
+	TUint32 iId;
+
+private:
+	friend class CHlpList; // Needed for searching
+	CHlpItem(TUint32 aId);
+	CHlpItem(TUint32 aId, TUid aHelpFileUid);
+	CHlpItem(TUint32 aId, TUid aCategoryId, TUid aHelpFileUid);
+	void ConstructL(const TDesC& aTitle);
+
+private: // Meta data required for correct restoration of topics
+	TUid iCategoryUid;
+	TUid iHelpFileUid;
+	};
+
+
+
+//
+// ----> MHlpTitleArray 
+//
+class MHlpTitleArray : public MDesCArray
+/** Interface to get a topic ID from an array index. 
+@publishedAll
+@released
+*/
+	{
+public:
+	/** Gets a topic ID for the specified index.
+	
+	@param aIndex Index of item to get
+	@return Topic ID */
+	virtual TUint32 At(TInt aIndex) const = 0;
+	};
+
+
+
+//
+// ----> CHlpList 
+//
+class CHlpList : public CBase, public MHlpTitleArray
+/** A list of help items (CHlpItem objects). 
+@publishedAll
+@released
+*/
+	{
+public: // Static construct / destruct
+	IMPORT_C static CHlpList* NewL();
+	IMPORT_C static CHlpList* NewLC();
+	IMPORT_C ~CHlpList();
+
+public: // From MDesCArray
+	IMPORT_C TInt MdcaCount() const;
+	IMPORT_C TPtrC MdcaPoint(TInt aIndex) const;
+
+public:
+	// 'At' returns topic Id, but this function is next to useless because you can't
+	// uniquely identify a help topic by topic id alone. You need to know 3 things:-
+	// a) topic id, 2) category id, 3) help file uid. This information is all
+	// encapsulated in CHlpItem so help app authors should use 'Item' instead.
+	IMPORT_C TUint32 At(TInt aIndex) const;
+	IMPORT_C CHlpItem* Item(TInt aIndex) const;
+	IMPORT_C TInt Find(TUint32 aId);
+	IMPORT_C void Reset();
+	IMPORT_C void AppendL(CHlpItem* aItem);
+
+private: // 2nd phase constructor
+	void ConstructL();
+
+private:
+	// This is the array of help items that were located as a result of
+	// performing a search.
+	CArrayPtr<CHlpItem>* iList;
+	};
+
+
+
+//
+// ----> CHlpTopic 
+//
+class CHlpTopic : public CBase
+/** Encapsulates a help topic.
+
+A help topic has text, a title, a category, and paragraph and character formatting. 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C static CHlpTopic* NewL();
+	IMPORT_C static CHlpTopic* NewLC();
+	IMPORT_C ~CHlpTopic();
+
+public: 
+	// This function will not behave as expected in the case where it is used to 
+	// restore rich text that includes pictures. Instead, only the text and markup
+	// will be restored. Help App authors should use 'CHlpModel::LoadTopic' instead.
+	// I can't remove this as it would break S&BC.
+	IMPORT_C void RestoreL(RDbView* aView);
+	
+	IMPORT_C CRichText* TopicText();
+	IMPORT_C TDesC& TopicTitle();
+	IMPORT_C TDesC& Category();
+
+	inline CParaFormatLayer* ParaFormatLayer() const 
+	/** Gets the topic paragraph formatting.
+	
+	@return Topic paragraph formatting */
+		{ return iGlobalParaFormatLayer; }
+	inline CCharFormatLayer* CharFormatLayer() const 
+	/** Gets the topic character formatting.
+	
+	@return Topic character formatting */
+		{ return iGlobalCharFormatLayer; }
+
+private:
+	void ConstructL();
+
+private:
+	friend class CHlpModel;
+
+	TUint32 iTopicId;
+	TBuf<KMaxTitleColumn> iTopicTitle;
+	TBuf<KMaxTitleColumn> iCategory;
+
+	CRichText* iTopicText;
+	CParaFormatLayer* iGlobalParaFormatLayer;  
+	CCharFormatLayer* iGlobalCharFormatLayer; 
+	};
+
+
+
+
+//
+// ----> CHlpModel 
+//
+class CHlpModel : public CBase, public MHlpDbObserver, public MPictureFactory, public MRichTextStoreResolver
+/** Help model interface.
+
+It provides functions to search help files in various ways.
+
+The interface implements MHlpDbObserver for help database events, and MRichTextStoreResolver 
+and MPictureFactory to obtain pictures from rich text stores. 
+@publishedAll
+@released
+*/
+	{
+public: // Construct / destruct
+	IMPORT_C static CHlpModel* NewL(RFs& aFs, MHlpModelObserver* aObserver);
+	IMPORT_C static CHlpModel* NewLC(RFs& aFs, MHlpModelObserver* aObserver);
+	IMPORT_C ~CHlpModel();
+
+public:	// Opens all the help files in \System\Help
+	IMPORT_C void OpenL();
+	IMPORT_C void CloseL();
+
+public: // Opens specific help files
+	IMPORT_C void OpenFileL(const TDesC& aFileName);
+	IMPORT_C void CloseFileL(const TDesC& aFileName);
+
+public: // Specialized searching
+	IMPORT_C void ContextSearchL(TCoeHelpContext& aContext);
+	IMPORT_C void CategoryUIDSearchL(TUid aCategoryUID);
+	IMPORT_C void TopicSearchL(const CHlpItem& aHelpItem);
+	IMPORT_C void IndexSearchL(const CHlpItem& aHelpItem);
+
+		// Generic searching
+	IMPORT_C void SearchL(TInt aType, TUint32 aId);
+	IMPORT_C void SearchL(TInt aType, HBufC* aCriterion=NULL);
+	IMPORT_C void SearchL(TInt aType, const TDesC& aCriterion);
+
+public: // Cancel EFullTextSearch types - will return KErrArgument if not the correct type
+	IMPORT_C TInt CancelSearch();
+
+public: // Assumes that the search has already been performed and that the view is valid
+	IMPORT_C void LoadTopicL(CRichText& aRichText, TDes& aTitle);
+	IMPORT_C void LoadTopicL(CRichText& aRichText);
+	IMPORT_C void LoadTopicL(CHlpTopic* aTopic);
+	IMPORT_C void LoadListL(CHlpList* aList);
+	IMPORT_C void CategoryListL(CDesCArray* aList);
+
+public:	
+	IMPORT_C void SetZoomSizeL(THlpZoomState aState = EHlpZoomStateMedium);
+	IMPORT_C THlpZoomState ZoomSize() const;
+	IMPORT_C void SetZoomFactors(THlpZoomState aZoomState, TInt aFactor);
+	TInt CurrentZoomFactor() const;
+	void RemoveHelpPicture(CHlpPicture* aHelpPicture);
+
+public: // FROM MPictureFactory
+	void NewPictureL(TPictureHeader& aHdr, const CStreamStore& aDeferredPictureStore) const;
+
+public: // FROM MRichTextStoreResolver
+	IMPORT_C const CStreamStore& StreamStoreL(TInt aPos) const;
+
+public:
+	// Check to see if any of the databases have matching meta data
+	IMPORT_C TInt MatchUidL(TUid aUid);
+
+	// Replace the current observer with another
+	IMPORT_C void SetObserver(MHlpModelObserver* aObserver);
+
+public:
+	void NotifyHelpModelDestructionToPictures();
+
+private: // Internal search API
+	void DoSearchL(TInt aType, const TDesC& aCriterion);
+	void DoNextSearchL();
+	void ResetReadyForSearch();
+	void ResetViews();
+	void SetCriterionL(const TDesC& aCriterion);
+
+private: // Event management
+	void HandleDbEventL(TInt aEvent);
+	void ReportEventToObserverL(TInt aEvent);
+
+private: // Misc internal functions
+	inline CHlpDatabase* CurrentDatabase() const;
+	inline TInt DatabaseCount() const;
+	inline void SetSearchType(TInt aSearchType);
+	inline TInt CurrentSearchType() const;
+	RDbView* CurrentView() const;
+	TBool DiskPresent(TInt aDrive) const;
+	CHlpFileList* BuildListForDriveLC(TDriveUnit aDrive, RFs& aFsSession) const;
+	static void ResetAndDestroyArrayOfCHlpFileEntry(TAny* aObject);
+
+private:
+	CHlpModel(RFs& aFs, MHlpModelObserver& aObserver);
+	void ConstructL();
+
+private: // Member data
+	RFs& iFsSession;
+	
+	// This is required in order to restore rich text pictures from the database
+	CStreamStore* iCurrentRichTextStore;
+	
+	// Creates our SQL string based upon the search type and criteria
+	CHlpSQLSearch* iSearch;
+
+	// An array of all the help files currently available
+	CHlpDatabases* iDatabases;
+
+	// Receives help model notifications as various actions are performed
+	MHlpModelObserver* iObserver;
+
+	// Were any matching results found for this search
+	TBool iFound;
+
+	// What was being searched for
+	HBufC* iCriterion;
+
+	// What type of search was being performed
+	TInt iSearchType;
+
+	// Which database are we currently searching
+	TInt iCurrentDb;
+
+	// Transient category Uid used when creating category lists
+	TUid iTransientCategoryUid;
+
+	// What zoom size is used
+	THlpZoomState iZoomSize;
+
+	// Array to hold the bitmaps that are currently used in the help rich text
+	CArrayPtr<CHlpPicture>* iPictures;
+
+	// Array to hold the zoom factors that correspond to each zoom size
+	CArrayFix<TInt>* iZoomFactors;
+	};
+
+//
+// ----> CHlpModel (inlines)
+//
+inline TInt CHlpModel::DatabaseCount() const
+	{
+	return iDatabases->Count();
+	}
+inline void CHlpModel::SetSearchType(TInt aSearchType)
+	{
+	iSearchType = aSearchType;
+	}
+inline CHlpDatabase* CHlpModel::CurrentDatabase() const
+	{
+	return iDatabases->At(iCurrentDb);
+	}
+inline TInt CHlpModel::CurrentSearchType() const
+	{
+	return iSearchType;
+	}
+
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/HLPSRCH.H	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,155 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPSRCH_H__
+#define __HLPSRCH_H__
+
+#include <e32std.h>
+#include <d32dbms.h>
+#include <s32file.h>
+#include "HLPDB.H"
+#include "HLPMODEL.H"
+
+class CHlpDatabase;
+class MHlpDbObserver;
+
+
+
+//
+// ----> MHlpPrivObserver 
+//
+class MHlpPrivObserver
+	{
+public:
+	virtual void HandleSearchEventL(TInt aEvent)=0;
+	};
+
+
+
+//
+// ----> CHlpSQLBuffer 
+//
+class CHlpSQLBuffer : public CBase
+	{
+public:
+	void ConstructL(TInt aBufferSize);
+	CHlpSQLBuffer();
+	~CHlpSQLBuffer();
+	void AppendL(const TDesC& aDes);
+	void AppendL(TInt aNum);
+	void AppendSQLL(const TDesC& aDes);
+	const TDesC& SearchStatement() const;
+	void Reset();
+
+private:
+	void AppendTextL(const TDesC& aDes);
+	
+private:
+	HBufC* iSQLStatement;
+	};
+
+
+//
+// ----> CHlpSQLEvaluator 
+//
+class CHlpSQLEvaluator : public CActive
+	{
+public:
+	static CHlpSQLEvaluator* NewL(TInt aPriority);
+	static CHlpSQLEvaluator* NewLC(TInt aPriority);
+	~CHlpSQLEvaluator();
+
+	void Initialize(RDbView& aView, MHlpPrivObserver& aObserver);
+
+protected:
+	virtual void RunL();
+	virtual void DoCancel();
+
+private:
+	void Start();
+	CHlpSQLEvaluator(TInt aPriority);
+
+private:
+	MHlpPrivObserver* iObserver;
+	RDbView* iView;
+	};
+
+
+
+//
+// ----> CHlpSQLSearch 
+//
+class CHlpSQLSearch : public CBase, public MHlpPrivObserver
+	{
+public:
+	static CHlpSQLSearch* NewL(MHlpDbObserver& aObserver);
+	~CHlpSQLSearch();
+
+public:
+	void SetDatabase(CHlpDatabase& aDatabase);
+	void SearchL(TInt aType, const TDesC& aCriterion);
+	void CancelEvaluator();
+
+	inline RDbView& View() const;
+
+private:
+	void ContextSearchL(const TDesC& aCriterion);
+	void IndexIdSearchL(const TDesC& aCriterion);
+	void TopicIdSearchL(const TDesC& aCriterion);
+	void TextSearchL(const TDesC& aCriterion, TBool aFullText=EFalse);
+
+private:
+	void IndexListL();
+	void CategoryListL();
+	void TopicListForCategoryL(const TDesC& aCriterion);
+	void TopicListForCategoryUIDL(const TDesC& aCriterion);
+	void TopicIdSearchL();
+	void BuildViewL();
+	void Reset();
+
+private: // observer stuff
+	void HandleSearchEventL(TInt aEvent);
+	inline void ReportEventToObserverL(TInt aEvent)		{ iObserver->HandleDbEventL(aEvent); }
+
+private:
+	CHlpSQLSearch(MHlpDbObserver& aObserver);
+	void ConstructL();
+
+private:
+	enum TFlags
+		{
+		EFlagsNull					= 0x0000,
+		EFlagsPerformSearch			= 0x0001,
+		EFlagsAsynchronousSearch	= 0x0002,
+		EFlagsHaveValidDatabase		= 0x0004
+		};
+
+private:
+	TUint iFlags;
+	CHlpSQLBuffer* iSQLStatement;
+	CHlpSQLEvaluator* iSQLEvaluator;
+	CHlpDatabase* iDatabase;
+	RDbView* iView;
+	MHlpDbObserver* iObserver;
+	};
+
+
+
+inline RDbView& CHlpSQLSearch::View() const
+	{
+	return *iView;
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/HlpImageProvider.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,39 @@
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPIMAGEPROVIDER_H__
+#define __HLPIMAGEPROVIDER_H__
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "hlpzoom.h"
+
+// Classes referenced
+class CFbsBitmap;
+
+
+//
+// ----> MHlpImageProvider (header)
+//
+class MHlpImageProvider
+	{
+public: // From MHlpImageProvider
+	virtual CFbsBitmap* ImageForIdLC(TInt aImageId, MHlpZoomStateManager::THlpZoomState aZoomState) = 0;
+	};
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/HlpZoom.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,83 @@
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPZOOM_H__
+#define __HLPZOOM_H__
+
+// System includes
+#include <e32std.h>
+
+// Classes referenced
+class MGraphicsDeviceMap;
+
+
+//
+// ----> MHlpZoomStateManager (header)
+//
+class MHlpZoomStateManager
+/**
+@internalComponent
+@released
+*/
+	{
+public: // Zoom state
+	enum THlpZoomState
+		{
+		EHlpZoomStateSmall = -1,
+		EHlpZoomStateNormal = 0,
+		EHlpZoomStateLarge = 1
+		};
+
+public: // From MHlpZoomStateManager
+	virtual void SetZoomState(THlpZoomState aState) = 0;
+	virtual THlpZoomState ZoomState() const = 0;
+
+public: // From MHlpZoomStateManager
+	virtual MGraphicsDeviceMap& ZoomDeviceMap() const = 0;
+	virtual TInt ZoomFactorValueForZoomState(THlpZoomState aState) const = 0;
+	};
+
+
+
+//
+// ----> MHlpZoomStateObserver (header)
+//
+class MHlpZoomStateObserver
+/**
+@internalComponent
+@released
+*/
+	{
+public: // From MHlpZoomStateObserver
+	virtual void HandleZoomStateChangedL(MHlpZoomStateManager::THlpZoomState aZoomState) = 0;
+	};
+
+
+
+//
+// ----> MHlpZoomStateChangeNotifier (header)
+//
+class MHlpZoomStateChangeNotifier : public MHlpZoomStateManager
+/**
+@internalComponent
+@released
+*/
+	{
+public: // From MHlpZoomStateChangeNotifier
+	virtual void RegisterForZoomStateChangeNotificationsL(MHlpZoomStateObserver& aObserver) = 0;
+	virtual void RegisterForZoomStateChangeNotificationsCancel(MHlpZoomStateObserver& aObserver) = 0;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/Hlpsqlconsts.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,69 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPSQLCONSTS_H__
+#define __HLPSQLCONSTS_H__
+
+#include <e32std.h>
+
+
+_LIT(KSQLTopicIdColumn,					"TopicId");
+_LIT(KSQLIndexIdColumn,					"IndexId");
+_LIT(KSQLTopicTitleColumn,				"TopicTitle");
+_LIT(KSQLTopicTextColumn,				"TopicText");
+_LIT(KSQLTopicMarkupColumn,				"TopicMarkup");
+_LIT(KSQLCategoryColumn,				"Category");
+_LIT(KSQLSynonymColumn,					"Synonym");
+_LIT(KSQLIndexColumn,					"Index");
+_LIT(KSQLContextColumn,					"Context");
+_LIT(KSQLCategoryUidColumn,				"CategoryUID");
+_LIT(KSQLImageCountColumn,				"ImageCount");
+_LIT(KSQLImage0Column,					"Image0");
+_LIT(KSQLImage1Column,					"Image1");
+_LIT(KSQLImage2Column,					"Image2");
+/**
+* This next literal, corresponds to the name of the 
+* image column in an old-format help file (2 columns). 
+*/
+_LIT(KSQLImageColumn,					"Image");
+
+_LIT(KSQLTopicByCategoryUIDProlog,		"SELECT TOPICTITLE, TOPICID, CATEGORYUID FROM TOPIC WHERE CATEGORYUID=");
+_LIT(KSQLTopicByCategoryProlog,			"SELECT TOPICTITLE, TOPICID, CATEGORYUID FROM TOPIC WHERE CATEGORY=");
+_LIT(KSQLCategoryList,					"SELECT TOPICTITLE, TOPICID, CATEGORYUID FROM TOPIC");
+_LIT(KSQLTopicSearchProlog,				"SELECT TOPICTITLE, TOPICID, CATEGORY, TOPICTEXT, TOPICMARKUP FROM TOPIC WHERE ");
+_LIT(KSQLTopicIdSearchProlog,			"SELECT TOPICTITLE, TOPICID, CATEGORYUID FROM TOPIC WHERE ");
+_LIT(KSQLIndexSearch,					"SELECT INDEXID FROM INDEX WHERE INDEX ='");
+_LIT(KSQLIndexIdSearch,					"SELECT TOPICID, CATEGORYUID, TOPICTITLE FROM TOPICINDEX WHERE INDEXID=");
+_LIT(KSQLContextSearch,					"SELECT CONTEXT, TOPICID, CATEGORYUID FROM CONTEXT WHERE CONTEXT='");
+_LIT(KSQLIndexList,						"SELECT INDEX, INDEXID FROM INDEX");
+
+_LIT(KSQLTopicOrderBy,					" ORDER BY TOPICTITLE ASC");
+
+_LIT(KSQLTxtSrchCat,					"*' OR Category LIKE '*");
+_LIT(KSQLTxtSrchTopicText,				"*' OR TopicText LIKE '*");
+_LIT(KSQLTxtSrchTopicTitle,				"TopicTitle LIKE '*");
+_LIT(KSQLTxtSrchSynonym,				"*' OR Synonym LIKE '*");
+
+_LIT(KSQLSingleInvComma,				"'");
+_LIT(KSQLLikeOpeningInvComma,			"'*");
+_LIT(KSQLLikeClosingInvComma,			"*'");
+
+_LIT(KSQLOrOperator,					" OR ");
+_LIT(KSQLEqualOperator,					" = ");
+_LIT(KSQLLikeOperator,					" LIKE ");
+_LIT(KSQLAndOperator,					" AND ");
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/hlpconstants.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,46 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @internalComponent
+ @released 
+*/
+
+#ifndef __HLPCONSTANTS_H__
+#define __HLPCONSTANTS_H__
+
+// System includes
+#include <e32std.h>
+
+// Constants
+const TUid KUidHlpApp		=	{ 0x0100052b3 };	// UID 3
+const TUid KUidHlpFile		=	{ 0x0100052b4 };	// UID 2
+const TUid KUidHlpDbStream	=	{ 0x0100052b5 };	// Database stream in the help file
+const TUid KUidHlpUidStream	=	{ 0x0100052b6 };	// UID stream in the help file
+//
+const TInt KTitleColumn	= 1;
+const TInt KIdColumn = 2;
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+const TInt KMaxTitleColumn = 120;
+#endif
+const TInt KHlpSQLMaxLength = 512;
+const TInt KHlpMaxTextColLength = 200;
+const TInt KHlpMaxContextColLength = 32;
+
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/hlplch_internal.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __HLPLCH_INTERNAL_H
+#define __HLPLCH_INTERNAL_H
+
+/** Maximum length of command line to launch application. 
+@internalComponent
+@released
+*/
+const TInt KMaxCmdLineLength = 512;
+
+/** resource file name
+@internalComponent
+@released
+*/
+_LIT(KHelpLauncherResource, "z:\\resource\\apps\\lch.rsc");
+
+class CHlpCmdLine : public CBase
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	static CHlpCmdLine* NewL(CArrayFix<TCoeHelpContext>* aContextList);
+	static CHlpCmdLine* NewLC(CArrayFix<TCoeHelpContext>* aContextList);
+	~CHlpCmdLine();
+public:
+	TPtr8 CmdLineL();
+private:
+	void BuildCmdLineL();
+	void AddContextL(TCoeHelpContext& aContext);
+private:
+	void ConstructL();
+	CHlpCmdLine(CArrayFix<TCoeHelpContext>* aContextList);
+private:
+	CArrayFix<TCoeHelpContext>* iContextList;
+	CBufFlat* iCmdLine;
+	};
+	
+#endif //__HLPLCH_INTERNAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/hlpmodel_internal.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef __HLPMODEL_INTERNAL_H
+#define __HLPMODEL_INTERNAL_H
+
+/**
+@internalComponent
+@released
+*/
+const TInt KHlpModelDefaultNumberOfImagesForV6Point2Files = 1;
+/**
+@internalComponent
+@released
+*/
+const TInt KHlpModelMaximumNumberOfImagesForV6Point2Files = 3;
+//
+/** Default zoom factor for small zoom size. 
+@internalComponent
+@released
+*/
+const TInt KHlpModelZoomFactorSmall = 750;
+/** Default zoom factor for medium zoom size. 
+@internalComponent
+@released
+*/
+const TInt KHlpModelZoomFactorMedium = 1000;
+/** Default zoom factor for large zoom size. 
+@internalComponent
+@released
+*/
+const TInt KHlpModelZoomFactorLarge = 1250;
+
+/** Default zoom factor for medium zoom size as real number. 
+@internalComponent
+@released
+*/
+const TReal KHlpModelDefaultZoomFactorAsRealNumber = 1000.0;
+
+
+
+#endif //__HLPMODEL_INTERNAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/hlppanic.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,55 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPPANIC_H__
+#define __HLPPANIC_H__
+
+#include <e32std.h>
+
+
+// Enums
+enum THlpPanic
+	{
+	EHlpNoRowAtCursor,
+	EHlpInvalidView,
+	EHlpInvalidTDbCol,
+	EHlpInvalidTDbKeyCol,
+	EHlpInvalidColName,
+	EHlpInvalidTableName,
+	EHlpInvalidComparison,
+	EHlpInvalidQuery,
+	EHlpDatabaseInTransaction,
+	EHlpDatabaseNotInTransaction,
+	EHlpNoCriterion,
+	EHlpNoCategoryList,
+	EHlpNoPictureFactory,
+	EHlpNoPictureStore,
+	EHlpNoHelpList,
+	EHlpNoItem,
+	EHlpNoTopic,
+	EHlpNoView,
+	EHlpAsynchSearchError,
+	EHlpTopicNoRowsInView,
+	EHlpFault,
+	EHlpUnlocatedHelpPicture,
+	EHlpNotEnoughZoomRatios,
+	EHlpNoHelpModelPointer,
+	//
+	EHlpLast
+	};
+
+GLDEF_C	void Panic(THlpPanic aReason);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/inc/hlppict.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,108 @@
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __HLPPICT_H__
+#define __HLPPICT_H__
+
+// System includes
+#include <e32std.h>
+#include <d32dbms.h>
+#include <s32file.h>
+#include <badesca.h>
+#include <gdi.h> // for CPicture
+
+// User includes
+#include "HLPMODEL.H"
+
+// Classes Referenced
+class CHlpDatabase;
+
+// Constants
+const TUid KUidHelpImage = { 0x100068D4 };
+
+
+
+//
+// ----> CHlpPicture (header)
+//
+class CHlpPicture : public CPicture
+	/**
+	This class provides the means for restoring bitmaps from a multiple
+	bitmap file, scaling them and drawing them on the screen.
+	@publishedAll
+	@class CHlpPicture
+	@since 7.0
+	@see CPicture, CStreamStore, TStreamId, CHlpModel,
+				  CGraphicsContext, RWriteStream, CHlpDatabase
+	*/
+	{
+//
+public: // CONSTRUCT / DESTRUCT
+//
+	static CHlpPicture* NewLC(const CStreamStore& aStore, TStreamId aStreamId, CHlpDatabase& aDatabase, CHlpModel& aHlpModel);
+	~CHlpPicture();
+	void HandleHelpModelDestruction();
+
+//
+public: // FROM CPicture
+//
+	void Draw(CGraphicsContext& aGc, const TPoint& aTopLeft, const TRect& aClipRect, MGraphicsDeviceMap* aMap) const;
+	void ExternalizeL(RWriteStream& aStream) const;
+	void GetCropInTwips(TMargins& aMargins) const;
+	void GetOriginalSizeInTwips(TSize& aSize) const;
+	void SetScaleFactor(TInt aScaleFactorWidth, TInt aScaleFactorHeight);
+	void SetCropInTwips(const TMargins& aMargins);
+	TInt ScaleFactorWidth() const;
+	TInt ScaleFactorHeight() const;
+
+//
+public: // Handles changes in zoom size
+//
+	void HandleZoomChangedL(THlpZoomState aNewZoom);
+
+//
+private: // INTERNAL CONSTRUCT
+//
+	CHlpPicture(CHlpDatabase& aDatabase, CHlpModel& aHlpModel);
+	void ConstructL(const CStreamStore& aStore, TStreamId aStreamId);
+
+//
+private: // INTERNAL METHODS
+//
+	void RestoreL(const CStreamStore& aStore, TStreamId aStreamId, CHlpDatabase& aDatabase, THlpZoomState aZoomState);
+
+//
+private: // MEMBER DATA
+//
+
+	// Variable to represent the bitmap to be restored from the image table
+	CFbsBitmap* iImage;
+
+	// Reference to a 'CHlpDatabase' object
+	CHlpDatabase& iDatabase;
+
+	// Stores the ID of every image that is accessed
+	TInt iImageId;
+
+	// Pointer to a 'hlpmodel' object
+	CHlpModel* iHlpModel;
+
+	// Stores the number of bitmaps per picture
+	TInt iImageCountForPicture;
+	};
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/lch/HLPLCH.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,170 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Help Launcher module
+// 
+//
+
+#include "HLPLCH.H"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "hlplch_internal.h"
+#endif
+#include <apgcli.h>
+#include <barsc.h>
+#include <bautils.h>
+#include <lch.rsg>
+
+EXPORT_C void HlpLauncher::LaunchHelpApplicationL(RWsSession& aWsSession, TUid aUid)
+/** Launches the help application, passing a help file UID.
+
+@param aWsSession Application's window server session
+@param aUid Help file UID */
+	{
+	__UHEAP_MARK;
+	TBuf<32> cmdLine;
+	cmdLine.AppendNum((TInt)aUid.iUid);
+	TPtr8 ptr((TText8*)cmdLine.Ptr(), cmdLine.Length(),cmdLine.Length());
+	DoLaunchHelpApplicationL(aWsSession, ptr);
+	__UHEAP_MARKEND;
+	}
+
+EXPORT_C void HlpLauncher::LaunchHelpApplicationL(RWsSession& aWsSession)
+/** Launches the help application.
+
+@param aWsSession Application's window server session */
+	{
+	__UHEAP_MARK;
+	TBuf8<1> blank = _L8("");
+	DoLaunchHelpApplicationL(aWsSession, blank);
+	__UHEAP_MARKEND;
+	}
+
+EXPORT_C void HlpLauncher::LaunchHelpApplicationL(RWsSession& aWsSession, CArrayFix<TCoeHelpContext>* aContextList)
+/** Launches the help application, passing an array of help contexts.
+
+@param aWsSession Application's window server session
+@param aContextList Array of help contexts */
+	{
+	__UHEAP_MARK;
+
+	CHlpCmdLine* cmdLine=CHlpCmdLine::NewLC(aContextList);
+	DoLaunchHelpApplicationL(aWsSession, cmdLine->CmdLineL());
+	CleanupStack::PopAndDestroy();
+
+	__UHEAP_MARKEND;
+	}
+
+void HlpLauncher::DoLaunchHelpApplicationL(RWsSession& aWsSession, const TDesC8& aCmdLine)
+	{
+	TApaTaskList taskList(aWsSession);
+	TApaTask task = taskList.FindApp(KHlpAppUid);
+	if (task.Exists())
+		{
+		task.SendMessage (KHlpAppWsMsg, aCmdLine); 
+		task.BringToForeground();
+		}
+	else
+		{
+		CApaCommandLine* cmdLine=CApaCommandLine::NewLC();
+
+		// INC057477 fix
+		// Get and open the resource file
+		RFs f;
+		CleanupClosePushL(f);
+
+		User::LeaveIfError(f.Connect());
+		RResourceFile r;
+
+		r.OpenL(f, KHelpLauncherResource);
+		CleanupClosePushL(r);
+		
+		// Read the path of the help application from the resource file
+		r.ConfirmSignatureL();
+		TResourceReader resReader;
+		resReader.SetBuffer(r.AllocReadLC(R_HELP_PATH));
+		TPtrC16 helpPath = resReader.ReadTPtrC16();
+		cmdLine->SetExecutableNameL(helpPath);
+		CleanupStack::PopAndDestroy(); // AllocReadLC
+		CleanupStack::PopAndDestroy(); // close r
+		CleanupStack::PopAndDestroy(); // close f
+		
+		cmdLine->SetCommandL(EApaCommandOpen);
+		cmdLine->SetTailEndL(aCmdLine);
+		//EikDll::StartAppL(*cmdLine);
+		RApaLsSession lsSession;
+  		User::LeaveIfError(lsSession.Connect());
+  		CleanupClosePushL(lsSession);
+  		User::LeaveIfError(lsSession.StartApp(*cmdLine));
+  		CleanupStack::PopAndDestroy(&lsSession);
+		CleanupStack::PopAndDestroy(); //cmdLine
+		}
+	}
+
+CHlpCmdLine* CHlpCmdLine::NewL(CArrayFix<TCoeHelpContext>* aContextList)
+	{
+	CHlpCmdLine* self=CHlpCmdLine::NewLC(aContextList);
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+CHlpCmdLine* CHlpCmdLine::NewLC(CArrayFix<TCoeHelpContext>* aContextList)
+	{
+	CHlpCmdLine* self=new(ELeave)CHlpCmdLine(aContextList);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CHlpCmdLine::CHlpCmdLine(CArrayFix<TCoeHelpContext>* aContextList)
+		:iContextList(aContextList)
+	{
+	}
+
+CHlpCmdLine::~CHlpCmdLine()
+	{
+	delete iContextList;
+	delete iCmdLine;
+	}
+
+void CHlpCmdLine::ConstructL()
+	{
+	iCmdLine=CBufFlat::NewL(KMaxCmdLineLength);
+	}
+
+TPtr8 CHlpCmdLine::CmdLineL()
+	{
+	BuildCmdLineL();
+	TInt len = iCmdLine->Ptr(0).Size()/sizeof(TText8);
+	TPtr8 ptr((TText8*)iCmdLine->Ptr(0).Ptr(),len,len);
+
+	return ptr;
+	}
+
+void CHlpCmdLine::BuildCmdLineL()
+	{
+	TInt count=iContextList->Count();
+	iCmdLine->InsertL(iCmdLine->Size(), &count, sizeof(TInt));
+	for (TInt i=0; i < count; i++)
+		{
+		AddContextL(iContextList->At(i));
+		}
+	}
+
+void CHlpCmdLine::AddContextL(TCoeHelpContext& aContext)
+	{
+	TInt length=aContext.iContext.Size();
+	iCmdLine->InsertL(iCmdLine->Size(), &length, sizeof(TInt));
+	iCmdLine->InsertL(iCmdLine->Size(), aContext.iContext.Ptr(), aContext.iContext.Size());
+	iCmdLine->InsertL(iCmdLine->Size(), &aContext.iMajor, sizeof(TUid));
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/lch/HLPLCH.MMP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,38 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// hlplch.dll Launches a device's help application
+// 
+//
+
+TARGET			hlplch.dll
+TARGETTYPE		DLL
+CAPABILITY   All -TCB
+UID		0x1000008D 0x101F423B
+VENDORID 0x70000001
+
+SOURCEPATH	../lch
+
+USERINCLUDE		../src
+USERINCLUDE		../inc
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+START RESOURCE	../lch/lch.rss
+TARGETPATH		resource/apps
+END
+
+SOURCE			HLPLCH.CPP
+
+LIBRARY			euser.lib	apgrfx.lib	eikcore.lib	apparc.lib bafl.lib efsrv.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/lch/lch.rh	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,33 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef LCH_RH
+#define LCH_RH
+
+//
+// FROM EIKDEF.RH - avoids HlpModel requiring Eikon
+//
+STRUCT RSS_SIGNATURE
+    {
+    LONG signature=4;
+    SRLINK self;
+    }
+
+STRUCT TXT
+	{
+	LTEXT buf;
+	}
+
+#endif // LCH_RH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/lch/lch.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,25 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME LCH1
+
+#include"lch.rh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TXT r_help_path
+	{
+	buf = "z:\\sys\\bin\\cshelp.exe";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/src/HLPDB.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,393 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "HLPDB.H"
+
+// System includes
+#include <fbs.h>
+
+// User includes
+#include "HLPMODEL.H"
+#include "hlppanic.h"
+#include "Hlpsqlconsts.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "hlpmodel_internal.h"
+#endif
+
+// Constants
+const TInt KHlpModelNumberOfImageTableColumnsForV6Point0HelpFile = 2;
+const TInt KHlpModelNumberOfImagesInV6Point0HelpFile = 1;
+
+
+//
+// ----> CHlpDatabase  
+//
+
+CHlpDatabase::CHlpDatabase(RFs& aFs)
+:	iFs(aFs)
+	{
+	}
+
+CHlpDatabase::~CHlpDatabase()
+	{
+	Close();
+	iImageTable.Close();
+
+	delete iView;
+	delete iDatabase;
+	delete iStore;
+	delete iUids;
+	}
+
+void CHlpDatabase::ConstructL()
+	{
+	iView = new(ELeave) RDbView;
+	iUids = new(ELeave) CArrayFixFlat<TUid>(2);
+	iDatabase = new(ELeave) RDbStoreDatabase;
+	}
+
+CHlpDatabase* CHlpDatabase::NewLC(RFs& aFs)
+	{
+	CHlpDatabase* self = new(ELeave) CHlpDatabase(aFs);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CHlpDatabase* CHlpDatabase::NewLC(RFs& aFs, const TDesC& aFileName)
+	{
+	CHlpDatabase* self = CHlpDatabase::NewLC(aFs);
+	self->OpenL(aFileName);
+	return self;
+	}
+
+//
+//
+//
+
+void CHlpDatabase::OpenL(const TDesC& aFileName)
+	{
+	iFileName = aFileName;
+	iStore = CPermanentFileStore::OpenL(iFs, aFileName, EFileRead);
+
+	// Restore the dictionary
+	CStreamDictionary* dictionary = CStreamDictionary::NewLC();
+	RStoreReadStream in;
+	in.OpenLC(*iStore, iStore->Root());
+	dictionary->InternalizeL(in);
+	CleanupStack::PopAndDestroy(); // in
+
+	// Restore the database
+	iDatabase->OpenL(iStore, dictionary->At(KUidHlpDbStream));
+
+	// Open image table
+	_LIT(KImageTable, "IMAGE");
+	_LIT(KImageIndex, "IMAGEIDX");
+	User::LeaveIfError(iImageTable.Open(*iDatabase, KImageTable, RDbRowSet::EReadOnly));
+	User::LeaveIfError(iImageTable.SetIndex(KImageIndex));
+
+	// Fetch the image row
+	CDbColSet* columnSet = iImageTable.ColSetL();
+
+	// We can identify v6 help files by the number of columns in the image table.
+	// Since v6 help files only have one image for all zoom sizes, then we 
+	// can identify this via the number of columns being 2.
+	iOldHelpFileFormat = (columnSet->Count() == KHlpModelNumberOfImageTableColumnsForV6Point0HelpFile);
+	delete columnSet;
+
+	// Restore the Uid list
+	TStreamId uidStream = dictionary->At(KUidHlpUidStream);
+	in.OpenLC(*iStore, uidStream);
+
+	TUid uid;
+	TKeyArrayFix key(_FOFF(TUid, iUid), ECmpTUint32);
+	const TInt count = in.ReadInt32L();
+	for (TInt i=0; i < count; i++)
+		{
+		uid.iUid = in.ReadInt32L();
+#ifdef _DEBUG
+		iUids->InsertIsqL(uid, key);
+#else
+		iUids->InsertIsqAllowDuplicatesL(uid, key);
+#endif
+		}
+	CleanupStack::PopAndDestroy(2); // in, dictionary
+
+	TEntry entry;
+	User::LeaveIfError(iFs.Entry(aFileName, entry));
+	iHelpFileUid = entry.MostDerivedUid();
+	}
+
+void CHlpDatabase::Close()
+	{
+	if	(iView)
+		iView->Close();
+	if	(iDatabase)
+		iDatabase->Close();
+	}
+
+//
+//
+//
+
+void CHlpDatabase::AppendCategoryListL(CDesCArray& aList)
+	{
+	_LIT(KCategoryTable, "TOPIC");
+
+	// Open the topic table so that we can use it to build the category list
+	RDbTable table;
+	User::LeaveIfError(table.Open(*iDatabase, KCategoryTable, RDbRowSet::EReadOnly));
+	CleanupClosePushL(table);
+
+	// Now build the list
+	if (table.FirstL())
+		{
+		// Get the column of the category
+		CDbColSet* columnSet = table.ColSetL();
+		TDbColNo categoryColumn = columnSet->ColNo(KSQLCategoryColumn);
+		delete columnSet;
+
+		TInt posNotReferenced = KErrNotFound;
+		TBuf<KMaxTitleColumn> title;
+		do
+			{
+			// Add the stuff
+			table.GetL();
+			title = table.ColDes(categoryColumn);
+			if	(aList.Find(title, posNotReferenced)) // Returns something other than 0 if not found
+				aList.AppendL(title); // Not found, so append
+			}
+		while (table.NextL());
+		}
+
+	// Finally, close the table
+	CleanupStack::PopAndDestroy(&table);
+	}
+
+TInt CHlpDatabase::TopicIdSearchL(const TUid aCategoryUid, const TUint aTopicId)
+	{
+	const TInt KNumLength = 20;
+	const TInt KMaxParamLength = (2*KNumLength) + 20; // 20 for numbers, + 20 for ' = ' and ' AND ' etc.
+	TBuf<KNumLength> num;
+
+	HBufC* sqlStatement = HBufC::NewLC(KSQLTopicSearchProlog().Length() + KMaxParamLength);
+	TPtr pSql(sqlStatement->Des());
+	pSql.Append(KSQLTopicSearchProlog);
+
+	pSql.Append(KSQLTopicIdColumn);
+	pSql.Append(KSQLEqualOperator);
+	num.Num(aTopicId);
+	pSql.Append(num);
+
+	pSql.Append(KSQLAndOperator);
+	pSql.Append(KSQLCategoryUidColumn);
+	pSql.Append(KSQLEqualOperator);
+	num.Num(STATIC_CAST(TUint, aCategoryUid.iUid));
+	pSql.Append(num);
+
+	iView->Close();
+	User::LeaveIfError(iView->Prepare(Database(), TDbQuery(pSql, EDbCompareFolded), TDbWindow::EUnlimited, RDbRowSet::EReadOnly));
+	User::LeaveIfError(iView->EvaluateAll());
+	CleanupStack::PopAndDestroy(); // sqlStatement
+	if	(iView->CountL())
+		{
+		iView->FirstL();
+		iView->GetL();
+		return ETopicAvailable; // View is prepared
+		}
+
+	return ETopicNotFound;
+	}
+
+TInt CHlpDatabase::ContextSearchL(const TDesC& aContext)
+	{
+	_LIT(KContextSearch,	"SELECT CONTEXT, TOPICID FROM CONTEXT");
+	_LIT(KSpecificContext,	" WHERE CONTEXT='%S'");
+
+	TInt specificContextLength = aContext.Length();
+	HBufC* sqlStatement = HBufC::NewLC(KContextSearch().Length() + KSpecificContext().Length() + specificContextLength);
+	TPtr pStatement = sqlStatement->Des();
+	pStatement.Append(KContextSearch);
+	if	(specificContextLength)
+		{
+		HBufC* specificContext = HBufC::NewLC(KSpecificContext().Length() + specificContextLength);
+		TPtr pContext = specificContext->Des();
+		pContext.Format(KSpecificContext, &aContext);
+		pStatement.Append(pContext);
+		CleanupStack::PopAndDestroy(specificContext);
+		}
+
+	iView->Close();
+	User::LeaveIfError(iView->Prepare(Database(), TDbQuery(pStatement, EDbCompareFolded), TDbWindow::EUnlimited, RDbRowSet::EReadOnly));
+	User::LeaveIfError(iView->EvaluateAll());
+	CleanupStack::PopAndDestroy(sqlStatement);
+
+	if	(iView->CountL())
+		{
+		// Get the topic id from the context table
+		CDbColSet* columnSet = iView->ColSetL();
+		TDbColNo topicIdCol = columnSet->ColNo(KSQLTopicIdColumn);
+		delete columnSet;
+
+		// Get the topic id as a descriptor
+		iView->FirstL();
+		iView->GetL();
+		TUint topicId = iView->ColUint(topicIdCol);
+		
+		_LIT(KTopicSearch, "SELECT TOPICTITLE, TOPICID, CATEGORY, TOPICTEXT, TOPICMARKUP FROM TOPIC WHERE TOPICID=%d");
+		sqlStatement = HBufC::NewLC(KTopicSearch().Length() + 16); // 16 for the topic id
+		pStatement.Set(sqlStatement->Des());
+		pStatement.Format(KTopicSearch, topicId);
+
+		// Prepare the topic table with the correct record...
+		iView->Close(); // Finished with this view now
+		User::LeaveIfError(iView->Prepare(Database(), TDbQuery(pStatement, EDbCompareFolded), TDbWindow::EUnlimited, RDbRowSet::EReadOnly));
+		User::LeaveIfError(iView->EvaluateAll());
+		CleanupStack::PopAndDestroy(); // sqlStatement
+
+		return ETopicAvailable;
+		}
+
+	return ETopicNotFound;
+	}
+
+/** This method is called within the CHlpPicture::RestoreL() method and 
+is responsible for finding the right bitmap to be retrieved and for reading 
+in a pointer to that bitmap.
+
+@param aImageId The ID of the bitmap to be retrieved.
+@param aZoomState The current zoom state.
+@return A pointer to a CFbsBitmap object.
+@pre A valid zoom state is passed to the function.
+@post A pointer to the referenced bitmap is returned. */
+CFbsBitmap* CHlpDatabase::ImageForIdLC(TInt aImageId, THlpZoomState aZoomState)
+{
+	if	(!iImageTable.FirstL())
+		User::Leave(KErrNotFound);
+
+	if	(!iImageTable.SeekL(aImageId))
+		User::Leave(KErrNotFound);
+
+	// Fetch the image row
+	iImageTable.GetL();
+
+	// Work out which column the image is in
+	CDbColSet* columnSet = iImageTable.ColSetL();
+	CleanupStack::PushL(columnSet);
+
+	TDbColNo imageColumn = KDbNullColNo;
+	if	(iOldHelpFileFormat)
+		{
+		// OLD HELP FILE FORMAT
+		// Retrieve bitmap from bitmap column in image table
+		// and store it in the 'imageColumn variable'
+		imageColumn = columnSet->ColNo(KSQLImageColumn);
+		}
+	else
+		{
+		// NEW HELP FILE FORMAT
+		// Depending on whether the number of bitmaps is 1 or 3,
+		// the bitmap from the appropriate column is retrieved 
+		// and stored in the 'imageColumn' variable
+
+		// Stores the number of bitmaps per image table row.
+		const TInt bitmapCount = ImageCountForIdL(aImageId);
+		__ASSERT_DEBUG(bitmapCount <= KHlpModelMaximumNumberOfImagesForV6Point2Files, User::Invariant());
+
+		if	(bitmapCount == KHlpModelDefaultNumberOfImagesForV6Point2Files)
+			imageColumn = columnSet->ColNo(KSQLImage0Column);
+		else if (bitmapCount == KHlpModelMaximumNumberOfImagesForV6Point2Files)
+			{
+			switch(aZoomState) 
+				{
+				case EHlpZoomStateSmall:
+					imageColumn = columnSet->ColNo(KSQLImage0Column);
+					break;
+				default:
+				case EHlpZoomStateMedium:
+					imageColumn = columnSet->ColNo(KSQLImage1Column);
+					break;
+				case EHlpZoomStateLarge:
+					imageColumn = columnSet->ColNo(KSQLImage2Column);
+					break;
+				}
+			}
+		}
+	CleanupStack::PopAndDestroy(columnSet);
+
+	// Load the image from the blob
+	CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+	CleanupStack::PushL(bitmap);
+
+	// Read the column from the blob
+	RDbColReadStream blob;
+	blob.OpenLC(iImageTable, imageColumn);
+	blob >> *bitmap;
+	CleanupStack::PopAndDestroy(); // blob
+	return bitmap;
+	}
+
+/** This method is called within the CHlpDatabase::ImageForIdLC() 
+method and is responsible for returning the number of bitmaps stored 
+in the image-table row, as referenced by the aImageId argument.
+
+@param aImageId The ID of the bitmap, used for retrieving image-table 
+column information.
+@return An integer value that reflects the number of bitmaps within a 
+particular image-table row.
+@pre None.
+@post The integer number at the image-table row referenced by 
+aImageId is returned.
+@see RDbTable::GetL()
+@see RDbTable::ColSetL() */
+TInt CHlpDatabase::ImageCountForIdL(TInt aImageId)
+	{
+	if	(!iImageTable.FirstL())
+		User::Leave(KErrNotFound);
+
+	if	(!iImageTable.SeekL(aImageId))
+		User::Leave(KErrNotFound);
+
+	// Fetch the image row
+	iImageTable.GetL();
+
+	TInt count = KErrNotFound;
+	if	(iOldHelpFileFormat)
+		count = KHlpModelNumberOfImagesInV6Point0HelpFile;
+	else
+		{
+		// Work out which column the image count is in, 
+		// and assign it to 'imageCountColumn'.
+		CDbColSet* columnSet = iImageTable.ColSetL();
+		TDbColNo imageCountColumn = columnSet->ColNo(KSQLImageCountColumn);
+		delete columnSet;
+		//
+		count = iImageTable.ColUint(imageCountColumn);
+		}
+	return count;
+	}
+
+//
+//
+//
+
+TBool CHlpDatabase::MatchUidL(TUid aUid)
+	{
+	__ASSERT_ALWAYS(iUids, Panic(EHlpFault));
+	TInt index = KErrNotFound;
+	TKeyArrayFix key(_FOFF(TUid, iUid), ECmpTUint32);
+	// For some bizare reason, findisq returns 0 when the item was found.
+	return (iUids->FindIsq(aUid, key, index) == KErrNone);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/src/HLPMAIN.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,17 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "HLPMODEL.H"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/src/HLPMODEL.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,1714 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "HLPMODEL.H"
+
+// System includes
+#include <coehelp.h>
+#include <txtrich.h>
+#include <bautils.h>
+
+// User includes
+#include "hlppict.h"
+#include "HLPSRCH.H"
+#include "hlppanic.h"
+#include "Hlpsqlconsts.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "hlpmodel_internal.h"
+#endif
+// For searching for help files
+_LIT(KHlpFileSpec,			"*.h*");
+_LIT(KDefaultHelpExtension, ".hlp");
+
+_LIT(KHlpFileSearchPath,	"\\Resource\\Help\\");
+
+#ifdef __SHOW_LOADING_INFO__
+_LIT(KFormat1, "\n%S %d: %c:%S%S");
+_LIT(KFormat2, "\n%S %d: %c:%S%S");
+_LIT(KCompareNewListWithMasterList, "compare master list");
+_LIT(KDeleteEntry, "deleting");
+_LIT(KGetNearestLanguageFile, "getting nearest languuage file for");
+_LIT(KAddNewEntryToMasterList, "adding to master list");
+_LIT(KLoadMasterList, "Loading");
+_LIT(KFoundEntry, "Found entry during dir scan");
+_LIT(KDuplicateEntry, "entry discarded as duplicate");
+_LIT(KAddNewEntry, "entry added to list");
+#endif
+
+
+// Typedefs
+typedef CArrayPtrFlat<CHlpFileEntry> CHlpFileList;
+
+// Constants
+const TInt KHlpModelNumericValueSize = 32;
+
+// Average number of pictures per Help Topic
+const TInt KAverageNumberOfPicturesInHelpTopic = 3;
+
+#define UNUSED_VAR(a) a = a
+//
+// ----> CHlpFileEntry (header)
+//
+
+class CHlpFileEntry : public CBase
+	{
+
+public:
+	static CHlpFileEntry* NewLC(TDriveUnit aDrive, const TDesC& aFile);
+
+	inline TDriveUnit Drive() const { return iDrive; }
+	inline const TDesC& FileName() const { return iFile; }
+	inline const TDesC& Name() const { return iName; }
+	void GetFullNameAndPath(TDes& aName) const;
+
+private:
+	CHlpFileEntry(TDriveUnit aDrive, const TDesC& aFile);
+
+private:
+	TName iName;
+	TName iFile;
+	TDriveUnit iDrive;
+	};
+
+
+
+//
+// ----> Static utility function (source)
+//
+
+//#define __SHOW_LOADING_INFO__
+
+#ifdef __SHOW_LOADING_INFO__
+static void PrintEntryL(const TDesC& aPrompt, const CHlpFileEntry& aEntry, TInt aNumber = -1)
+	{
+	TFileName pFileName(aEntry.FileName());
+	TChar driveLetter = '?';
+	RFs::DriveToChar(aEntry.Drive(), driveLetter);
+
+	HBufC* buf = HBufC::NewLC(aPrompt.Length() + pFileName.Length() + KHlpFileSearchPath().Length() + 40);
+	TDes pBuf(buf->Des());
+
+
+	if	(aNumber >= KErrNone)
+		pBuf.Format(KFormat1, &aPrompt, aNumber, driveLetter, &KHlpFileSearchPath(), &pFileName);
+	else
+		pBuf.Format(KFormat2, &aPrompt, driveLetter, &KHlpFileSearchPath(), &pFileName);
+
+	RDebug::Print(pBuf);
+
+	CleanupStack::PopAndDestroy();
+	}
+#define __PRINT_FILE(aPrompt, aEntry)				(PrintEntryL(aPrompt, aEntry))
+#define __PRINT_FILE_NO(aPrompt, aEntry, aNumber)	(PrintEntryL(aPrompt, aEntry, aNumber))
+#else
+#define __PRINT_FILE(aPrompt, aEntry)
+#define __PRINT_FILE_NO(aPrompt, aEntry, aNumber)
+#endif
+
+
+
+
+//
+// ----> CHlpFileEntry (source)
+//
+CHlpFileEntry::CHlpFileEntry(TDriveUnit aDrive, const TDesC& aFile)
+:iFile(aFile)
+,iDrive(aDrive)
+	{
+	TParsePtrC parser(iFile);
+	iName.Copy(parser.Name());
+	}
+
+CHlpFileEntry* CHlpFileEntry::NewLC(TDriveUnit aDrive, const TDesC& aFile)
+	{
+	CHlpFileEntry* self = new(ELeave) CHlpFileEntry(aDrive, aFile);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+
+//
+//
+//
+void CHlpFileEntry::GetFullNameAndPath(TDes& aName) const
+	{
+	TChar driveLetter = '?';
+	RFs::DriveToChar(Drive(), driveLetter);
+	aName.Zero();
+	aName.Append(driveLetter);
+	aName.Append(':');
+	aName.Append(KHlpFileSearchPath);
+	aName.Append(FileName());
+	}
+
+
+//
+// ----> CHlpModel
+//
+
+CHlpModel::CHlpModel(RFs& aFs, MHlpModelObserver& aObserver)
+:	iFsSession(aFs), iObserver(&aObserver)
+	{
+	}
+
+EXPORT_C CHlpModel::~CHlpModel()
+/** Destructor. */
+	{
+	if	(iDatabases)
+		iDatabases->ResetAndDestroy();
+
+	NotifyHelpModelDestructionToPictures();
+	if	(iPictures)
+		iPictures->Reset();
+
+	delete iDatabases;
+	delete iPictures;
+	delete iSearch;
+	delete iCriterion;
+	delete iZoomFactors;
+	}
+
+void CHlpModel::NotifyHelpModelDestructionToPictures()
+	{
+	if	(!iPictures)
+		return;
+	const TInt count = iPictures->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CHlpPicture& picture = *iPictures->At(i);
+		picture.HandleHelpModelDestruction();
+		}
+	}
+
+
+void CHlpModel::ConstructL()
+	{
+	iDatabases = new(ELeave) CHlpDatabases(2);
+	iPictures = new(ELeave) CArrayPtrFlat<CHlpPicture>(KAverageNumberOfPicturesInHelpTopic);
+	iSearch = CHlpSQLSearch::NewL(*this);
+
+	// There must always be 3 default zoom ratios present in the array...
+	iZoomFactors = new(ELeave) CArrayFixFlat<TInt>(3);
+	iZoomFactors->AppendL(KHlpModelZoomFactorSmall);
+	iZoomFactors->AppendL(KHlpModelZoomFactorMedium);
+	iZoomFactors->AppendL(KHlpModelZoomFactorLarge);
+	}
+
+EXPORT_C CHlpModel* CHlpModel::NewL(RFs& aFs, MHlpModelObserver* aObserver)
+/** Allocates and creates a help model object.
+
+@param aFs Open file server handle
+@param aObserver Client callback interface to handle messages from the help
+model
+@return New help model object */
+	{
+	CHlpModel* self = CHlpModel::NewLC(aFs, aObserver);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C CHlpModel* CHlpModel::NewLC(RFs& aFs, MHlpModelObserver* aObserver)
+/** Allocates and creates a help model object, leaving the object on the cleanup
+stack.
+
+@param aFs Open file server handle
+@param aObserver Client callback interface to handle messages from the help
+model
+@return New help model object */
+	{
+	CHlpModel* self = new(ELeave) CHlpModel(aFs, *aObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+//
+//
+//
+
+EXPORT_C void CHlpModel::OpenL()
+/** Opens all the help files in \\Resource\\Help. */
+	{
+	CHlpFileList* masterList = new(ELeave) CHlpFileList(5);
+	CleanupStack::PushL(TCleanupItem(ResetAndDestroyArrayOfCHlpFileEntry,masterList));
+
+	TInt i = EDriveY;
+	FOREVER
+		{
+		// Make sure we go from Y -> A, then do Z last
+		if	(i < EDriveA)
+			i = EDriveZ;
+
+		if	(DiskPresent(i))
+			{
+			// This generates a list for a specific directory on the specified drive.
+			CHlpFileList* list = BuildListForDriveLC(TDriveUnit(i), iFsSession);
+
+			TInt newListCount = list->Count();
+			if(newListCount)
+				{
+				// compare the new list with our master list to check for duplicates
+				TInt masterCount = masterList->Count();
+				for(TInt j=masterCount-1; j>=0; j--)
+					{
+					CHlpFileEntry* entry = masterList->At(j);
+					__PRINT_FILE_NO(KCompareNewListWithMasterList, *entry, j);
+
+					newListCount = list->Count();
+					for(TInt k=newListCount-1; k>=0; k--)
+						{
+						CHlpFileEntry* newEntry = list->At(k);
+
+						if	(entry->FileName().CompareF(newEntry->FileName()) == 0)
+							{
+							// Names same, so nearest language file already in master list
+							__PRINT_FILE_NO(KDeleteEntry, *newEntry, k);
+							delete newEntry;
+							list->Delete(k);
+							}
+						}
+					}
+				}
+
+			// At this point, anything that is left in the new list should
+			// have it's nearest language file added to the master list...
+			newListCount = list->Count();
+			for(TInt k=newListCount-1; k>=0; k--)
+				{
+				//get nearest language file
+				__PRINT_FILE_NO(KGetNearestLanguageFile, *list->At(k), k);
+
+				TChar driveLetter = '?';
+				RFs::DriveToChar(list->At(k)->Drive(), driveLetter);
+
+				TFileName fileName;
+				fileName.Append(driveLetter);
+				fileName.Append(':');
+				fileName.Append(KHlpFileSearchPath);
+				fileName.Append(list->At(k)->Name());
+				fileName.Append(KDefaultHelpExtension);
+
+				BaflUtils::NearestLanguageFile(iFsSession, fileName);
+
+				//get drive and filename+extension of nearest language file
+				TParsePtrC parser(fileName);
+				if	(!parser.ExtPresent())
+					User::Leave(KErrCorrupt);
+				TPtrC drive=parser.Drive();
+				TPtrC name=parser.NameAndExt();
+
+				//create new CHlpFileEntry
+				CHlpFileEntry* entry = CHlpFileEntry::NewLC(drive, name);
+				__PRINT_FILE(KAddNewEntryToMasterList, *entry);
+
+				//add to master list
+				masterList->AppendL(entry);
+				CleanupStack::Pop(entry);
+				}
+
+			list->ResetAndDestroy();
+			CleanupStack::PopAndDestroy(list);
+			}
+
+		if	(i-- == EDriveZ)
+			break;
+		}
+	// The code below validates the masterList of help files and filters out unnecessary files based on the criteria specified below -
+	// i)   In case of two files - abc.hlp and abc.h01 - present in the master list,since abc.h01 is the latest version, it
+	//      will be picked. In other words abc.hlp will be removed from the list.
+	// ii)  if two files for different language code exist, both should remain in masterList
+	// iii) if the system language is changed, the file as per the new language should be retained and
+	//      default file with .hlp extension should be removed from the masterList
+	TLanguage language;
+	language = User::Language(); //gets the default language
+	TInt languageCode;
+	languageCode = language; // integer equivalent of the language code. For example, ELangEnglish is 01
+	for(TInt i=masterList->Count()-1; i >= 0; i--)
+		{
+		CHlpFileEntry* newEntry = masterList->At(i);
+		TPtrC ptrFile (newEntry->FileName());
+		TBufC<8> fileExtension(ptrFile.Right(2));
+		TLex lex(fileExtension);
+		TInt lexIntValue;
+		lex.Val(lexIntValue);
+		TParse parser;
+		TBool hlpFlag = ETrue;
+		User::LeaveIfError(parser.Set(ptrFile, NULL, NULL));
+
+		if(lexIntValue != language)
+			{
+			// Get the filename with language code in file extension
+			TBuf<256> fileName(newEntry->Name());
+			TBuf<10> name;
+			name.Format(_L(".h%02d"),languageCode);
+			fileName.Append(name);
+
+			// Get the filename with the .hlp extension
+			TBuf<256> defaultFileName(newEntry->Name());
+			TBuf<10> defaultName;
+			defaultName.Format(_L(".hlp"));
+			defaultFileName.Append(defaultName);
+
+			//Check the file against all the files in the list
+			for(TInt j = masterList->Count()-1; j >=0 ; j--)
+				{
+				CHlpFileEntry* entry = masterList->At(j);
+				// If two files with same name exist, delete one from the masterList
+				// and reset hlpFlag to EFalse
+				if(entry->FileName().CompareF(fileName)==0)
+					{
+					masterList->Delete(i);
+					hlpFlag = EFalse;
+					break;
+					}
+				}
+				if( (hlpFlag) && (parser.Ext().CompareF(KDefaultHelpExtension)!=0))
+					{
+					for(TInt k = masterList->Count()-1; k >=0 ; k--)
+						{
+						CHlpFileEntry* entry = masterList->At(k);
+						if(entry->FileName().CompareF(defaultFileName)==0)
+							{
+							masterList->Delete(i);
+							break;
+							}
+						}
+					}
+				}
+			}
+
+	// Load the master list
+	TFileName file;
+	TInt count = masterList->Count();
+
+	for (i=0; i<count; i++)
+		{
+		masterList->At(i)->GetFullNameAndPath(file);
+		__PRINT_FILE_NO(KLoadMasterList, *masterList->At(i), i);
+
+		// This will leave with KErrArgument if it's a bad file
+		TRAPD(error, OpenFileL(file));
+		UNUSED_VAR(error); // used to suppress build warnings
+		}
+
+	CleanupStack::PopAndDestroy(masterList);
+	}
+
+TBool CHlpModel::DiskPresent(TInt aDrive) const
+	{
+	TDriveList list;
+	if	(iFsSession.DriveList(list) < KErrNone)
+		return EFalse;
+
+	TDriveInfo info;
+	TInt error = iFsSession.Drive(info, aDrive);
+	if	(error < KErrNone)
+		return EFalse;
+
+	return (list[aDrive] && info.iType != EMediaNotPresent);
+	}
+
+void CHlpModel::ResetAndDestroyArrayOfCHlpFileEntry(TAny* aObject)
+	{
+	CArrayPtr<CHlpFileEntry>* array=REINTERPRET_CAST(CArrayPtr<CHlpFileEntry>*,aObject);
+	if (array)
+		array->ResetAndDestroy();
+	delete array;
+	}
+
+CHlpFileList* CHlpModel::BuildListForDriveLC(TDriveUnit aDrive, RFs& aFsSession) const
+//
+//	Generate a list of help files for the specified drive
+//
+	{
+	CHlpFileList* list = new(ELeave) CHlpFileList(5);
+	CleanupStack::PushL(TCleanupItem(ResetAndDestroyArrayOfCHlpFileEntry,list));
+
+	// Generate the folder spec to search in
+	TFileName searchSpec;
+	TChar driveLetter;
+	User::LeaveIfError(RFs::DriveToChar(aDrive, driveLetter));
+	searchSpec.Append(driveLetter);
+	searchSpec.Append(':');
+	searchSpec.Append(KHlpFileSearchPath);
+	searchSpec.Append(KHlpFileSpec);
+
+	CDir* dirList;
+
+	TFindFile finder(aFsSession);
+	TInt ret = finder.FindWildByPath(searchSpec, NULL, dirList);
+	if	(ret < KErrNone)
+		{
+		if	(ret == KErrNotFound)
+			return list;
+		else
+			User::Leave(ret);
+		}
+	CleanupStack::PushL(dirList);
+
+	// Add files to help file list
+	TInt dirCount = dirList->Count();
+	for(TInt i=0; i<dirCount; i++)
+		{
+		CHlpFileEntry* newEntry = CHlpFileEntry::NewLC(aDrive, (*dirList)[i].iName);
+		__PRINT_FILE_NO(KFoundEntry, *newEntry, i);
+
+		//check if new file already in the list
+		TBool foundMatch=EFalse;
+		TInt existingEntryCount=list->Count();
+		for(TInt j=existingEntryCount-1; j>=0; j--)
+			{
+			if(list->At(j)->Name().CompareF(newEntry->Name())==0)
+				{
+				__PRINT_FILE_NO(KDuplicateEntry, *newEntry, i);
+				foundMatch=ETrue;
+				}
+			}
+
+		if(!foundMatch)
+			{
+			__PRINT_FILE_NO(KAddNewEntry, *newEntry, i);
+			list->AppendL(newEntry);
+			CleanupStack::Pop(newEntry);
+			}
+		else
+			CleanupStack::PopAndDestroy(newEntry);
+		}
+	CleanupStack::PopAndDestroy(dirList);
+
+	return list;
+	}
+
+EXPORT_C void CHlpModel::CloseL()
+/** Closes all open help files. */
+	{
+	const TInt KDatabaseCount = DatabaseCount();
+	for (TInt i=0; i<KDatabaseCount; i++)
+		iDatabases->At(i)->Close();
+	iDatabases->ResetAndDestroy();
+	}
+
+
+//
+//
+//
+
+/**
+Opens a specified help file.
+
+@param aFileName Help file to open
+*/
+EXPORT_C void CHlpModel::OpenFileL(const TDesC& aFileName)
+	{
+	TEntry entry;
+	User::LeaveIfError(iFsSession.Entry(aFileName, entry));
+	if	(entry.IsDir())
+		{
+		return; // don't try and open directories as help files ;)
+		}
+
+	TParsePtrC parser(aFileName);
+	if (parser.Path() != KHlpFileSearchPath)
+		{ // given file is outside \\Resource\\Help\\ directory.
+		User::Leave(KErrArgument);
+		}
+
+	if	(!(entry[0] == KPermanentFileStoreLayoutUid && entry[1] == KUidHlpApp))
+		{
+		User::Leave(KErrArgument);
+		}
+
+	CHlpDatabase* newDatabase = CHlpDatabase::NewLC(iFsSession, aFileName);
+ 	iDatabases->AppendL(newDatabase);
+	CleanupStack::Pop(newDatabase);
+	}
+
+EXPORT_C void CHlpModel::CloseFileL(const TDesC& aFileName)
+/** Closes a specified help file.
+
+@param aFileName Help file to close */
+	{
+	const TInt KDatabaseCount = DatabaseCount();
+	for (TInt i=0; i<KDatabaseCount; i++)
+		{
+		CHlpDatabase* database = iDatabases->At(i);
+		if	(database->FileName() == aFileName)
+			{
+			delete database;
+			iDatabases->Delete(i);
+			return;
+			}
+		}
+	User::Leave(KErrNotFound);
+	}
+
+//
+//
+//
+
+EXPORT_C void CHlpModel::ContextSearchL(TCoeHelpContext& aContext)
+/** Searches for a topic with the specified help context.
+
+A successful search generates an ETopicAvailable event. The topic can then
+be retrieved using LoadTopicL().
+
+An unsuccessful search generates an ETopicNotFound event.
+
+@param aContext Help context to search for */
+	{
+	// Set up ready for search
+	ResetReadyForSearch();
+	SetSearchType(EContextSearch);
+
+	// See if we can find the specified context in any of the meta
+	// data that each database contains. This reduces the time taken to
+	// perform a search, as only the database which actually contains the
+	// correct information actually has the SQL executed on it (major time saver).
+	TInt db = MatchUidL(aContext.iMajor);
+	if	(db >= KErrNone)
+		{
+		// Search the specified database for the context. If this context is
+		// found then the view will be prepared ready for the caller to extract
+		// the topic.
+		iCurrentDb = db;
+		TInt searchResult = CurrentDatabase()->ContextSearchL(aContext.iContext);
+		ReportEventToObserverL(searchResult);
+		}
+	else
+		{
+		ReportEventToObserverL(ETopicNotFound);
+		}
+	}
+
+EXPORT_C void CHlpModel::CategoryUIDSearchL(TUid aCategoryUID)
+/** Searches for topics with the specified help category UID.
+
+A successful search generates an ETopicListAvailable event. The list can then
+be retrieved using LoadListL().
+
+An unsuccessful search generates an ETopicListNoneFound event.
+
+@param aCategoryUID Category UID to search for */
+	{
+	// Set up ready for search
+	ResetReadyForSearch();
+	SetSearchType(ETopicListForCategoryUID);
+
+	// See if we can find the specified category Uid in any of the meta
+	// data that each database contains. This reduces the time taken to
+	// perform a search, as only the database which actually contains the
+	// correct information actually has the SQL executed on it (major time saver).
+	TInt db=MatchUidL(aCategoryUID);
+	if	(db >= KErrNone)
+		{
+		iTransientCategoryUid = aCategoryUID;
+		iCurrentDb=db;
+
+		TBuf<32> buf;
+		buf.Num(STATIC_CAST(TUint, aCategoryUID.iUid));
+		DoSearchL(ETopicListForCategoryUID, buf);
+
+		// Reset the category uid after we've done the search (used in
+		// debug invariant state check)
+		iTransientCategoryUid = KNullUid;
+		}
+	else
+		{
+		ReportEventToObserverL(ETopicNotFound);
+		}
+	}
+
+EXPORT_C void CHlpModel::TopicSearchL(const CHlpItem& aHelpItem)
+/** Searches for a topic for the specified help item.
+
+A successful search generates an ETopicAvailable event. The topic can then
+be retrieved using LoadTopicL().
+
+An unsuccessful search generates an ETopicNotFound event.
+
+@param aHelpItem Help item to search for */
+	{
+	// aHelpItem contains the information required for a speedy retrieval
+	// of the specified topic from the help model. Using it's topic Id (iId)
+	// category uid (CategoryUid()) and help file uid (HelpFileUid()) we
+	// can run the search SQL on exactly the right database file, for exactly
+	// the right category, and exactly the right topic.
+
+	// if already searching, dont start another search
+	if(iFound && CurrentSearchType()==ETopicIdSearch)
+		return;
+
+	// Set up ready for search
+	ResetReadyForSearch();
+	SetSearchType(ETopicIdSearch);
+
+	TInt count = DatabaseCount();
+	for(TInt i=0; i<count; i++)
+		{
+		CHlpDatabase* database = iDatabases->At(i);
+		if	(database->HelpFileUid() == aHelpItem.HelpFileUid())
+			{
+			// Run the SQL on this database.
+			iCurrentDb = i;
+			TInt result = database->TopicIdSearchL(aHelpItem.CategoryUid(), STATIC_CAST(TUint, aHelpItem.iId));
+			iFound = (result == ETopicAvailable);
+			ReportEventToObserverL(result);
+			return;
+			}
+		}
+	ReportEventToObserverL(ETopicNotFound);
+	}
+
+EXPORT_C void CHlpModel::IndexSearchL(const CHlpItem& aHelpItem)
+/** Searches for index entries for the specified help item.
+
+A successful search generates an ETopicListAvailable event. The list can then
+be retrieved using LoadListL().
+
+An unsuccessful search generates an ETopicListNoneFound event.
+
+@param aHelpItem Help item to search for */
+	{
+	// Set up ready for search
+	ResetReadyForSearch();
+	SetSearchType(ETopicIdSearch);
+
+	TInt count = DatabaseCount();
+	for(TInt i=0; i<count; i++)
+		{
+		CHlpDatabase* database = iDatabases->At(i);
+		if	(database->HelpFileUid() == aHelpItem.HelpFileUid())
+			{
+			// Run the SQL on this database.
+			iCurrentDb = i;
+
+			TBuf<KHlpModelNumericValueSize> buf;
+			buf.Num(STATIC_CAST(TUint, aHelpItem.iId));
+			DoSearchL(EIndexSearch, buf);
+
+			return;
+			}
+		}
+	ReportEventToObserverL(EIndexSearchListNoneFound);
+	}
+
+//
+//
+//
+
+EXPORT_C void CHlpModel::SearchL(TInt aType, TUint32 aId)
+/** Searches using a specified type of search with a numeric criterion.
+
+@param aType Type of search. This is a search type (EIndexList etc.) enum
+value.
+@param aId Numeric search criterion */
+	{
+	if	(aType == ETopicListForCategoryUID)
+		iTransientCategoryUid = TUid::Uid(aId);
+
+	TBuf<KHlpModelNumericValueSize> buf;
+	buf.Num(STATIC_CAST(TUint, aId));
+	SearchL(aType, buf);
+	}
+
+EXPORT_C void CHlpModel::SearchL(TInt aType, HBufC* aCriterion)
+/** Searches using a specified type of search, allowing a NULL seach criterion.
+
+@param aType Type of search. This is a search type (EIndexList etc.) enum
+value.
+@param aCriterion String search criterion. This can be NULL if the search type
+requires no search criterion. */
+	{
+	// Kludge to remain source compatible in App Engines 5.2
+	// This function should be removed.
+	if	(aCriterion)
+		SearchL(aType, *aCriterion);
+	else
+		SearchL(aType, KNullDesC);
+	}
+
+EXPORT_C void CHlpModel::SearchL(TInt aType, const TDesC& aCriterion)
+//
+//	This function is the base of all the SearchL(...) methods, i.e. it is callled
+//	by SearchL(TInt, HBufC*) and also SearchL(TInt, TUint32)
+//
+/** Searches using a specified type of search with a string search criterion.
+
+Note that the full text search, EFullTextSearch, is asynchronous.
+
+@param aType Type of search. This is a search type (EIndexList etc.) enum
+value.
+@param aCriterion String search criterion */
+	{
+	// Set up ready for search
+	ResetReadyForSearch();
+
+	// Do the actual search itself.
+	DoSearchL(aType, aCriterion);
+	}
+
+EXPORT_C TInt CHlpModel::CancelSearch()
+/** Cancels a full text search.
+
+@return KErrNone if successful, KErrArgument if a search is not in progress */
+	{
+	iSearch->CancelEvaluator();
+
+	if	(CurrentSearchType() != EFullTextSearch)
+		return KErrArgument;
+
+	return KErrNone;
+	}
+
+//
+//
+//
+
+EXPORT_C void CHlpModel::LoadTopicL(CRichText& aRichText, TDes& aTitle)
+/** Gets the current help topic text and title.
+
+The function assumes that a successful search has already been performed.
+
+@param aRichText On return, the help topic text
+@param aTitle On return, the help topic title */
+	{
+	// Fetch the rich text
+	LoadTopicL(aRichText);
+
+	// Next get the title
+	RDbView& view		= CurrentDatabase()->View();
+	__ASSERT_ALWAYS(view.AtRow(), Panic(EHlpNoRowAtCursor));
+	CDbColSet* colset	= view.ColSetL();
+	TDbColNo topicTitle	= colset->ColNo(KSQLTopicTitleColumn);
+	delete colset;
+
+	view.FirstL();
+	view.GetL();
+	aTitle = view.ColDes(topicTitle);
+	}
+
+EXPORT_C void CHlpModel::LoadTopicL(CRichText& aRichText)
+/** Gets the current help topic text.
+
+The function assumes that a successful search has already been performed.
+
+@param aRichText On return, the help topic text */
+	{
+	RDbView& view		= CurrentDatabase()->View();
+	__ASSERT_ALWAYS(view.CountL(), Panic(EHlpTopicNoRowsInView));
+
+	CDbColSet* colset	= view.ColSetL();
+	TDbColNo topicCol	= colset->ColNo(KSQLTopicTextColumn);
+	TDbColNo markupCol	= colset->ColNo(KSQLTopicMarkupColumn);
+	delete colset;
+	view.FirstL();
+	view.GetL();
+
+	aRichText.Reset();
+	TInt len = view.ColLength(topicCol);
+	HBufC* buf = HBufC::NewLC(len);
+	TPtr pBuf(buf->Des());
+
+	RDbColReadStream stream;
+	stream.OpenLC(view, topicCol);
+	stream.ReadL(pBuf, len);
+	aRichText.InsertL(0, pBuf);
+	CleanupStack::PopAndDestroy(2); // stream & buf
+
+	if (!view.IsColNull(markupCol))
+		{
+		RDbColReadStream blob;
+		blob.OpenL(view, markupCol);
+
+		aRichText.SetPictureFactory(this, this);
+		CEmbeddedStore* embeddedStore = CEmbeddedStore::FromLC(blob);
+		iCurrentRichTextStore = embeddedStore;
+
+		RStoreReadStream readStream;
+		readStream.OpenLC(*embeddedStore, embeddedStore->Root());
+		aRichText.InternalizeMarkupDataL(readStream);
+		aRichText.DetachFromStoreL(CPicture::EDetachFull);
+		CleanupStack::PopAndDestroy(2); // embeddedStore, readStream
+		aRichText.SetPictureFactory(NULL, NULL);
+		iCurrentRichTextStore = NULL;
+		}
+	}
+
+EXPORT_C void CHlpModel::LoadTopicL(CHlpTopic* aTopic)
+/** Gets the current help topic.
+
+The function assumes that a successful search has already been performed.
+
+@param aTopic On return, the help topic. This is caller allocated. */
+	{
+	__ASSERT_ALWAYS(aTopic, Panic(EHlpNoTopic));
+
+	LoadTopicL(*(aTopic->TopicText()));
+
+	RDbView& view		= CurrentDatabase()->View();
+	CDbColSet* colset	= view.ColSetL();
+	TDbColNo topicTitle	= colset->ColNo(KSQLTopicTitleColumn);
+	TDbColNo topicId	= colset->ColNo(KSQLTopicIdColumn);
+	TDbColNo category	= colset->ColNo(KSQLCategoryColumn);
+	delete colset;
+
+	// Populate the topic's
+	aTopic->iTopicTitle = view.ColDes(topicTitle);
+	aTopic->iTopicId	= view.ColUint32(topicId);
+	aTopic->iCategory	= view.ColDes(category);
+	}
+
+EXPORT_C void CHlpModel::LoadListL(CHlpList* aList)
+/** Gets the current help list.
+
+The function assumes that a successful search has already been performed.
+
+@param aList On return, the help list. This is caller allocated. */
+	{
+	__ASSERT_ALWAYS(aList, Panic(EHlpNoHelpList));
+
+	// Clear all entries in the list
+	aList->Reset();
+
+	// This loop provides the mechanism by which we iterate through every database
+	// in the help model. We query each database in turn to find out a) if it has
+	// been searched in the first place (not every search results in *every* help
+	// file's database view being initialised) and b) if it actually contains any
+	// results.
+	const TInt KDatabaseCount = DatabaseCount();
+	for (TInt i=0; i < KDatabaseCount; i++)
+		{
+		// Get a help database pointer and it's view.
+		CHlpDatabase* currentDatabase = iDatabases->At(i);
+		RDbView& view = currentDatabase->View();
+
+		// Does this database meet the criteria described above (points a & b)?
+		if	(!currentDatabase->ViewReady() || !view.CountL())
+			continue; // Doesn't meet criteria, so skip this database
+
+		// Criteria satisifed, so look up the column id's we're interested in.
+		CDbColSet* colset		= view.ColSetL();
+		TDbColNo colTitle		= colset->ColNo(KSQLTopicTitleColumn);
+		TDbColNo colTopicId		= colset->ColNo(KSQLTopicIdColumn);
+		TDbColNo colCategoryId	= colset->ColNo(KSQLCategoryUidColumn);
+		TDbColNo colIndex		= colset->ColNo(KSQLIndexColumn);
+		TDbColNo colIndexId		= colset->ColNo(KSQLIndexIdColumn);
+		delete colset;
+
+		// Each topic is associated with a particular category. This information
+		// is cached with the help item so that we can ensure we restore the
+		// topic relating to the category searched (topic id's are not unique, they
+		// are assigned in increasing numerical order by the help compiler, on a
+		// category basis. Category ids, however, are unique, hence we need to store
+		// both in order to be able to restore the correct topic text).
+		view.FirstL();
+		view.GetL();
+
+		// Iterate through each row in this database's view, and store each entry
+		// as a help item in the list passed as a parameter to this function.
+		FOREVER
+			{
+			CHlpItem* item = NULL;
+
+			// This bit loads different content into the help item depending on the last performed
+			// search type.
+			switch (iSearchType)
+				{
+			case ECategoryList:
+			case ETopicListForCategory:
+			case ETopicListForCategoryUID:
+				item = CHlpItem::NewLC(view.ColDes(colTitle), view.ColUint32(colTopicId), TUid::Uid(view.ColUint(colCategoryId)), currentDatabase->HelpFileUid());
+				break;
+			case EIndexList:
+				item = CHlpItem::NewLC(view.ColDes(colIndex), view.ColUint32(colIndexId), currentDatabase->HelpFileUid());
+				break;
+			case EQuickSearch:
+			case EFullTextSearch:
+			case EIndexSearch:
+				item = CHlpItem::NewLC(view.ColDes(colTitle), view.ColUint32(colTopicId), TUid::Uid(view.ColUint(colCategoryId)), currentDatabase->HelpFileUid());
+				break;
+			default:
+				User::Leave(KErrNotSupported);
+				}
+
+			aList->AppendL(item);
+			CleanupStack::Pop(item);
+			view.NextL();
+			if	(view.AtEnd())
+				break;
+			view.GetL();
+			}
+		}
+	}
+
+EXPORT_C void CHlpModel::CategoryListL(CDesCArray* aList)
+/** Populates a list of available help categories.
+
+This can be called without needing to perform a prior search.
+
+@param aList On return, the list of available help categories. This is caller
+allocated. */
+	{
+	__ASSERT_ALWAYS(aList, Panic(EHlpNoCategoryList));
+
+	const TInt count = DatabaseCount();
+	for(TInt i=0; i<count; i++)
+		iDatabases->At(i)->AppendCategoryListL(*aList);
+	aList->Sort();
+	}
+
+//
+//
+//
+
+EXPORT_C void CHlpModel::SetZoomSizeL(THlpZoomState aState)
+/** Sets the zoom size to use for help text and pictures.
+
+@param aState Zoom size */
+	{
+	iZoomSize = aState;
+	const TInt count = iPictures->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		// Fetch a picture from the array
+		CHlpPicture* picture = iPictures->At(i);
+		picture->HandleZoomChangedL(iZoomSize);
+		}
+	}
+
+EXPORT_C THlpZoomState CHlpModel::ZoomSize() const
+/** Gets the zoom size used for help text and pictures.
+
+@return Zoom size */
+	{
+	return iZoomSize;
+	}
+
+/* Sets the iZoomFactors array to the appropriate
+zoom factor value, depending on the current zoom state
+as dictated by the aZoomState argument variable.
+
+The hlpmodel's THlpZoomState enumerated type is related to
+the AppUI's TZoomStates enumerated type. This relation is required
+so that the correct pixels to twips ratio can be used in the
+CHlpPicture::GetOriginalSizeInTwips() method.
+
+Error Condition	: None.
+@param aZoomState A zoom size.
+@param aFactor The zoom factor that corresponds to the current zoom size.
+@pre None.
+@post The iZoomFactors data member has been populated with the appropriate
+zoom factor values. */
+EXPORT_C void CHlpModel::SetZoomFactors(THlpZoomState aZoomState, TInt aFactor)
+/** Sets a zoom factor for a logical zoom size.
+
+@param aZoomState Logical zoom size for which to set the factor.
+@param aFactor Zoom factor. For example, 2 specifies double size. */
+	{
+	__ASSERT_ALWAYS(iZoomFactors->Count() == 3, Panic(EHlpNotEnoughZoomRatios));
+	//
+	switch(aZoomState)
+		{
+	/*
+	 * If zoom state is large, assign zoom factor 750
+	 * to index 0 of 'iZoomFactors'
+	 */
+	case EHlpZoomStateSmall:
+		iZoomFactors->At(EHlpZoomStateSmall) = aFactor;
+		break;
+
+	default:
+	/*
+	 * If zoom state is large, assign zoom factor 1000
+	 * to index 1 of 'iZoomFactors'
+	 */
+	case EHlpZoomStateMedium:
+		iZoomFactors->At(EHlpZoomStateMedium) = aFactor;
+		break;
+	/*
+	 * If zoom state is large, assign zoom factor 1250
+	 * to index 2 of 'iZoomFactors'
+	 */
+	case EHlpZoomStateLarge:
+		iZoomFactors->At(EHlpZoomStateLarge) = aFactor;
+		break;
+		}
+	}
+
+/*
+Accesses the iZoomFactors data member, and returns
+the current zoom factor, depending on the value of
+the current zoom state, which is to be used for the
+pixel scaling of a picture in CHlpPicture::GetOriginalSizeInTwips().
+Error Condition	: None
+
+@return The zoom factor, corresponding to the current zoom size.
+@pre None.
+@post Current zoom factor is returned. */
+TInt CHlpModel::CurrentZoomFactor() const
+	{
+	__ASSERT_ALWAYS(iZoomFactors->Count() == 3, Panic(EHlpNotEnoughZoomRatios));
+	//
+	switch (iZoomSize)
+		{
+	case EHlpZoomStateSmall:
+		return iZoomFactors->At(EHlpZoomStateSmall);
+	default:
+	case EHlpZoomStateMedium:
+		return iZoomFactors->At(EHlpZoomStateMedium);
+	case EHlpZoomStateLarge:
+		return iZoomFactors->At(EHlpZoomStateLarge);
+		}
+	}
+
+/* Removes a CHlpPicture from the iPictures array.
+
+Error Condition	: None
+
+@param aHelpPicture A pointer to a CHlpPicture object.
+@pre A valid CHlpPicture is passed to the function.
+@post CHlpPicture's that are no longer displayed have been removed
+from the iPictures data member. */
+void CHlpModel::RemoveHelpPicture(CHlpPicture* aHelpPicture)
+	{
+	if (iPictures != 0)
+	{
+	const TInt count = iPictures->Count();
+	__ASSERT_DEBUG(count > 0, User::Invariant());
+	//
+	for(TInt i=0; i<count; i++)
+		{
+		if	(aHelpPicture == iPictures->At(i))
+			{
+			iPictures->Delete(i);
+			return;
+			}
+		}
+	__ASSERT_DEBUG(EFalse, Panic(EHlpUnlocatedHelpPicture));
+	}
+	}
+
+
+//
+//
+//
+
+/* This is a mixin callback required to restore pictures
+from the help model database into the topic rich text.
+Because pictures are stored in their own picture table within the
+help database (this means that the same picture may be used many
+times within the rich text, but will only actually appear once
+in the database - a major space saver) the restoration function
+must have a primed view so that it knows which database to use
+as the source picture table.
+
+@param aHdr A reference to a picture header.
+@param aDeferredPictureStore A stream store where the pictures are kept.
+@pre A valid picture database must exist, so that the stream store can relate to.
+@post A TInt pointer (index) to the picture table is inserted
+in the rich text to indicate which picture needs restoring.
+The CHlpPicture looks up this index in the picture table. */
+void CHlpModel::NewPictureL(TPictureHeader& aHeader, const CStreamStore& aDeferredPictureStore) const
+	{
+	if	(aHeader.iPictureType != KUidHelpImage)
+		User::Leave(KErrNotSupported);
+	if	(!aHeader.iPicture.IsId())
+		User::Leave(KErrBadHandle);
+
+	TStreamId id = aHeader.iPicture.AsId();
+	CHlpPicture* picture = CHlpPicture::NewLC(aDeferredPictureStore, id, *CurrentDatabase(), *const_cast<CHlpModel*>(this));
+	aHeader.iPicture = picture;
+
+	// Add picture to the picture array. We need to do this so that we can update the picture
+	// when the zoom size is changed by the UI.
+	iPictures->AppendL(picture);
+
+	CleanupStack::Pop(picture);
+	}
+
+EXPORT_C const CStreamStore& CHlpModel::StreamStoreL(TInt /*aPos*/) const
+/** Gets the current rich text store.
+
+@param aPos Unused
+@return Current rich text store */
+	{
+	__ASSERT_ALWAYS(iCurrentRichTextStore, Panic(EHlpNoPictureStore));
+	return *iCurrentRichTextStore;
+	}
+
+//
+//
+//
+
+EXPORT_C TInt CHlpModel::MatchUidL(TUid aUid)
+/** Searches the open help databases for the specified topic UID.
+
+@param aUid Topic UID to search for
+@return Index of the database if the item was found, or KErrNotFound if not */
+	{
+	const TInt KDatabaseCount = DatabaseCount();
+	for (TInt i=0; i<KDatabaseCount; i++)
+		{
+		if (iDatabases->At(i)->MatchUidL(aUid))
+			return i;
+		}
+	return KErrNotFound;
+	}
+
+EXPORT_C void CHlpModel::SetObserver(MHlpModelObserver* aObserver)
+/** Sets the client callback interface.
+
+@param aObserver Client callback interface */
+	{
+	iObserver = aObserver;
+	}
+
+//
+//
+//
+
+void CHlpModel::DoSearchL(TInt aType, const TDesC& aCriterion)
+	{
+	// Initialise the member data with the type of search we are about to perform,
+	// and also setup the search criteria which is needed to peform multiple searches
+	// across databases.
+	SetSearchType(aType);
+	SetCriterionL(aCriterion);
+
+	if	(!DatabaseCount())
+		{
+		ReportEventToObserverL(ETopicNotFound);
+		return;
+		}
+
+	// Prepare the searcher with the database to search
+	iSearch->SetDatabase(*CurrentDatabase());
+
+	// Indicate that this database is being searched, and therefore it is guaranteed not
+	// to have a null view
+	CurrentDatabase()->SetViewReady(ETrue);
+
+	// Get the searcher to actually do the search, which includes
+	// building the necessary SQL statement and then running the SQL on the
+	// correct table.
+	iSearch->SearchL(aType, *iCriterion);
+	}
+
+void CHlpModel::DoNextSearchL()
+//
+//	This function is used to perform an incremental search (mirroring an inner join which
+//	EPOC DBMS doesn't support) across multiple databases.
+//
+	{
+	if	(iCurrentDb < DatabaseCount()-1)
+		{
+		// If we're peforming a category Uid-based search, then
+		// we only run the sql seach on the databases that actually
+		// hold meta data on the specified category.
+		iCurrentDb++;
+		if	(CurrentSearchType() == ETopicListForCategoryUID)
+			{
+			__ASSERT_DEBUG(iTransientCategoryUid != KNullUid, Panic(EHlpFault));
+			TInt numberOfMatches = 0;
+			do
+				{
+				if	(CurrentDatabase()->MatchUidL(iTransientCategoryUid))
+					{
+					// This database does have meta data on the specified category,
+					// so it's worth running the check
+					DoSearchL(CurrentSearchType(), *iCriterion);
+					++numberOfMatches;
+					}
+				}
+			while (++iCurrentDb < DatabaseCount());
+			if	(numberOfMatches == 0)
+				ReportEventToObserverL(ESearchComplete);
+			}
+		else
+			{
+			// Doesn't matter what type of search it is, we still
+			// run the SQL :(
+			DoSearchL(CurrentSearchType(), *iCriterion);
+			}
+		}
+	else
+		{
+		ReportEventToObserverL(ESearchComplete);
+		}
+	}
+
+void CHlpModel::ResetReadyForSearch()
+//
+//	This function is called regardless of search type - it prepares all the necessary
+//	variables ready for a search.
+//
+	{
+	// Set to the first database
+	iCurrentDb=0;
+
+	// Indicate that we've currently not found any results
+	iFound=EFalse;
+
+	// Reset the database views to 'not yet ready'
+	ResetViews();
+	}
+
+void CHlpModel::ResetViews()
+//
+//	Go through each database and reset the "view ready" flag to EFalse
+//	to indicate that this particular database's view has not yet been primed.
+//
+	{
+	const TInt count = DatabaseCount();
+	for(TInt i=0; i<count; i++)
+		iDatabases->At(i)->SetViewReady(EFalse); // not ready
+	}
+
+void CHlpModel::SetCriterionL(const TDesC& aCriterion)
+//
+//	Updates the internal iCriterion pointer to contain the new
+//	criteria for searching.
+//
+	{
+	HBufC* newCriteria = aCriterion.AllocL();
+	delete iCriterion;
+	iCriterion = newCriteria;
+	}
+
+RDbView* CHlpModel::CurrentView() const
+	{
+	return &(CurrentDatabase()->View());
+	}
+
+//
+//
+//
+
+void CHlpModel::HandleDbEventL(TInt aEvent)
+//
+//	Called by the SQL searcher. This function routes responses from the searcher
+//	to the model observer, and performs and recursive searching that is required.
+//
+	{
+	switch(aEvent)
+		{
+	case ENoRecordsFound:
+		// No records were found for this search. If a context search was requested,
+		// we indicate that nothing was found and let the observer of the database
+		// perform any action. Otherwise, we search the next database in turn.
+		if	(CurrentSearchType() != ETopicIdSearch &&
+			 CurrentSearchType() != EContextSearch &&
+			 CurrentSearchType() != EIndexSearch
+			)
+			DoNextSearchL();
+		else
+			ReportEventToObserverL(ENoRecordsFound);
+		break;
+	case ESearchComplete:
+		// Indicate that at least some matching critera was found and then
+		// either end the search, or search the next database.
+		iFound=ETrue;
+		if	(CurrentSearchType() != ETopicIdSearch &&
+			 CurrentSearchType() != EContextSearch &&
+			 CurrentSearchType() != EIndexSearch
+			)
+			DoNextSearchL();
+		else
+			ReportEventToObserverL(ESearchComplete);
+		break;
+	case ESearchInProgress:
+		// Indicate to the observer that a search is in progress
+		ReportEventToObserverL(ESearchInProgress);
+		break;
+	case EHlpSearchCancelled:
+		// Indicate to the observer that a search was cancelled
+		ReportEventToObserverL(EHlpSearchCancelled);
+		break;
+	default:
+		__ASSERT_DEBUG(EFalse, Panic(EHlpFault));
+		break;
+		}
+	}
+
+void CHlpModel::ReportEventToObserverL(TInt aEvent)
+	{
+	if	(!iObserver)
+		return; // can't do anything without an observer
+
+	switch(aEvent)
+		{
+	case ESearchInProgress:
+		iObserver->HandleModelEventL(EModelSearchInProgress);
+		return;
+	case EHlpSearchCancelled:
+		iObserver->HandleModelEventL(EHlpSearchCancelled);
+		return;
+	default: // Keep GCC happy
+		break;
+		}
+
+	switch(CurrentSearchType())
+		{
+	case EIndexList:
+		iObserver->HandleModelEventL((iFound?EIndexListAvailable:EIndexListNoneFound));
+		break;
+	case ECategoryList:
+		iObserver->HandleModelEventL((iFound?ECategoryListAvailable:ECategoryListNoneFound));
+		break;
+	case ETopicListForCategory:
+	case ETopicListForCategoryUID:
+		iObserver->HandleModelEventL((iFound?ETopicListAvailable:ETopicListNoneFound));
+		break;
+	case EContextSearch:
+		iObserver->HandleModelEventL(aEvent);
+		break;
+	case EIndexSearch:
+		iObserver->HandleModelEventL((iFound?EIndexSearchListAvailable:EIndexSearchListNoneFound));
+		break;
+	case EQuickSearch:
+	case EFullTextSearch:
+		iObserver->HandleModelEventL((iFound?ESearchListAvailable:ESearchListNoneFound));
+		break;
+	case ETopicIdSearch:
+		iObserver->HandleModelEventL((iFound?ETopicAvailable:ETopicNotFound));
+		// event has been reported, reset now.
+		iFound=EFalse;
+		break;
+	default:
+		__ASSERT_DEBUG(EFalse, Panic(EHlpFault));
+		break;
+		}
+	}
+
+
+
+
+
+
+
+
+//
+// ----> CHlpList
+//
+
+EXPORT_C CHlpList::~CHlpList()
+/** Destructor. */
+	{
+	if(iList)
+		iList->ResetAndDestroy();
+	delete iList;
+	}
+
+void CHlpList::ConstructL()
+	{
+	iList = new(ELeave) CArrayPtrFlat<CHlpItem>(2);
+	}
+
+EXPORT_C CHlpList* CHlpList::NewL()
+/** Allocates and creates a new help list object.
+
+@return New help list object */
+	{
+	CHlpList* self = CHlpList::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CHlpList* CHlpList::NewLC()
+/** Allocates and creates a new help list object, leaving the object on the cleanup
+stack.
+
+@return New help list object */
+	{
+	CHlpList* self = new(ELeave) CHlpList;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C TInt CHlpList::MdcaCount() const
+/** Gets the number of items in the list.
+
+@return Number of items in the list */
+	{
+	return iList->Count();
+	}
+
+EXPORT_C TPtrC CHlpList::MdcaPoint(TInt aIndex) const
+/** Gets the title of the item at the specified index.
+
+@param aIndex Item index
+@return Title of the item */
+	{
+	return TPtrC(iList->At(aIndex)->iTitle->Des());
+	}
+
+EXPORT_C TUint32 CHlpList::At(TInt aIndex) const
+/** Gets the topic ID of the item at the specified index.
+
+@param aIndex Item index
+@return Topic ID */
+	{
+	return iList->At(aIndex)->iId;
+	}
+
+EXPORT_C void CHlpList::Reset()
+/** Resets the list. */
+	{
+	iList->ResetAndDestroy();
+	}
+
+EXPORT_C CHlpItem* CHlpList::Item(TInt aIndex) const
+/** Gets the item at the specified index.
+
+@param aIndex Item index
+@return Item */
+	{
+	return iList->At(aIndex);
+	}
+
+EXPORT_C TInt CHlpList::Find(TUint32 aId)
+/** Searches the list for a specified item ID.
+
+@param aId Item ID
+@return Item index, or KErrNotFound if not found */
+	{
+	CHlpItem* item = new CHlpItem(aId);
+	if	(!item)
+		return KErrNoMemory;
+
+	TKeyArrayFix key(_FOFF(CHlpItem, iId), ECmpTUint32);
+	TInt pos;
+	TInt result = iList->Find(item, key, pos);
+	delete item;
+
+	if (!result)
+		return pos;
+	else
+		return KErrNotFound;
+	}
+
+EXPORT_C void CHlpList::AppendL(CHlpItem* aItem)
+/** Appends an item to the list.
+
+@param aItem Item to add */
+	{
+	__ASSERT_ALWAYS(aItem, Panic(EHlpNoItem));
+	iList->AppendL(aItem);
+	}
+
+
+
+
+
+//
+// ----> CHlpItem - representing an individual item in the help file
+//
+
+CHlpItem::CHlpItem(TUint32 aId)
+:	iId(aId), iCategoryUid(KNullUid), iHelpFileUid(KNullUid)
+	{
+	}
+
+CHlpItem::CHlpItem(TUint32 aId, TUid aHelpFileUid)
+:	iId(aId), iCategoryUid(KNullUid), iHelpFileUid(aHelpFileUid)
+	{
+	}
+
+CHlpItem::CHlpItem(TUint32 aId, TUid aCategoryId, TUid aHelpFileUid)
+:	iId(aId), iCategoryUid(aCategoryId), iHelpFileUid(aHelpFileUid)
+	{
+	}
+
+EXPORT_C CHlpItem::~CHlpItem()
+/** Destructor. */
+	{
+	delete iTitle;
+	}
+
+void CHlpItem::ConstructL(const TDesC& aTitle)
+	{
+	iTitle = aTitle.AllocL();
+	}
+
+CHlpItem* CHlpItem::NewL(const TDesC& aTitle, TUint32 aId, TUid aCategoryId, TUid aHelpFileUid)
+/** Allocates and creates a new help item object.
+
+@param aTitle Item title
+@param aId Item ID
+@param aCategoryId Category ID
+@param aHelpFileUid Help file UID
+@return New help item object */
+	{
+	CHlpItem* self = NewLC(aTitle, aId, aCategoryId, aHelpFileUid);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CHlpItem* CHlpItem::NewLC(const TDesC& aTitle, TUint32 aId, TUid aCategoryId, TUid aHelpFileUid)
+/** Allocates and creates a new help item object, leaving the object on the cleanup
+stack.
+
+@param aTitle Item title
+@param aId Item ID
+@param aCategoryId Category ID
+@param aHelpFileUid Help file UID
+@return New help item object */
+	{
+	CHlpItem* self = new(ELeave) CHlpItem(aId, aCategoryId, aHelpFileUid);
+	CleanupStack::PushL(self);
+	self->ConstructL(aTitle);
+	return self;
+	}
+
+CHlpItem* CHlpItem::NewLC(const TDesC& aTitle, TUint32 aId, TUid aHelpFileUid)
+/** Allocates and creates a new help item object, leaving the object on the cleanup
+stack.
+
+This overload does not specify a category UID.
+
+@param aTitle Item title
+@param aId Item ID
+@param aHelpFileUid Help file UID
+@return New help item object */
+	{
+	CHlpItem* self = new(ELeave) CHlpItem(aId, aHelpFileUid);
+	CleanupStack::PushL(self);
+	self->ConstructL(aTitle);
+	return self;
+	}
+
+
+
+
+
+
+//
+// ----> CHlpTopic
+//
+
+EXPORT_C CHlpTopic::~CHlpTopic()
+	{
+	delete iTopicText;
+	delete iGlobalCharFormatLayer;
+	delete iGlobalParaFormatLayer;
+	}
+
+void CHlpTopic::ConstructL()
+	{
+	// Create the necessary formatting layers for the rich text object.
+	iGlobalParaFormatLayer	= CParaFormatLayer::NewL();
+	iGlobalCharFormatLayer	= CCharFormatLayer::NewL();
+	iTopicText				= CRichText::NewL(iGlobalParaFormatLayer, iGlobalCharFormatLayer);
+	}
+
+EXPORT_C CHlpTopic* CHlpTopic::NewL()
+/** Allocates and creates a new help topic object.
+
+@return New help topic object */
+	{
+	CHlpTopic* self = CHlpTopic::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CHlpTopic* CHlpTopic::NewLC()
+/** Allocates and creates a new help topic object, leaving the object on the cleanup
+stack.
+
+@return New help topic object */
+	{
+	CHlpTopic* self = new(ELeave) CHlpTopic();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C void CHlpTopic::RestoreL(RDbView* aView)
+/** Restores the object from a database view.
+
+This only restores text and markup, not pictures. Help application authors
+should use CHlpModel::LoadTopicL() instead.
+
+@param aView Database view */
+	{
+	// NOTE: This function does not restore pictures because it does not know
+	// which help model database to use as the source for the picture table.
+	// Use CHlpModel::LoadTopicL(...) instead
+	__ASSERT_ALWAYS(aView, Panic(EHlpNoView));
+	__ASSERT_ALWAYS(aView->AtRow(), Panic(EHlpNoRowAtCursor));
+
+	aView->FirstL();
+	CDbColSet* colset	= aView->ColSetL();
+	TDbColNo topicCol	= colset->ColNo(KSQLTopicTextColumn);
+	TDbColNo markupCol	= colset->ColNo(KSQLTopicMarkupColumn);
+	TDbColNo titleCol	= colset->ColNo(KSQLTopicTitleColumn);
+	TDbColNo catCol		= colset->ColNo(KSQLCategoryColumn);
+	TDbColNo idCol		= colset->ColNo(KSQLTopicIdColumn);
+	delete colset;
+
+	aView->GetL();
+
+	TInt len = aView->ColLength(topicCol);
+	HBufC* buf=HBufC::NewLC(len);
+	TPtr pBuf(buf->Des());
+
+	RDbColReadStream stream;
+	stream.OpenLC(*aView, topicCol);
+	stream.ReadL(pBuf, len);
+	iTopicText->Reset();
+	iTopicText->InsertL(0, *buf);
+	CleanupStack::PopAndDestroy(2); // stream, buf
+
+	if	(!aView->IsColNull(markupCol))
+		{
+		RDbColReadStream blob;
+		blob.OpenL(*aView, markupCol);
+		CEmbeddedStore* embeddedStore = CEmbeddedStore::FromLC(blob);
+		RStoreReadStream readStream;
+		readStream.OpenLC(*embeddedStore, embeddedStore->Root());
+		iTopicText->InternalizeMarkupDataL(readStream);
+		CleanupStack::PopAndDestroy(2); // embeddedStore, readStream
+		}
+
+	iCategory.Append(aView->ColDes(catCol));
+	iTopicTitle.Append(aView->ColDes(titleCol));
+	iTopicId=aView->ColUint32(idCol);
+	}
+
+EXPORT_C CRichText* CHlpTopic::TopicText()
+/** Gets the topic text.
+
+@return Topic text */
+	{
+	return iTopicText;
+	}
+
+EXPORT_C TDesC& CHlpTopic::TopicTitle()
+/** Gets the topic title.
+
+@return Topic title */
+	{
+	return iTopicTitle;
+	}
+
+EXPORT_C TDesC& CHlpTopic::Category()
+/** Gets the topic category.
+
+@return Topic category */
+	{
+	return iCategory;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/src/HLPSRCH.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,427 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "HLPSRCH.H"
+
+#include <d32dbms.h>
+
+#include "Hlpsqlconsts.h"
+#include "hlppanic.h"
+
+
+//
+// CHlpSQLSearch class
+//
+CHlpSQLSearch::CHlpSQLSearch(MHlpDbObserver& aObserver)
+:	iObserver(&aObserver)
+	{
+	}
+
+CHlpSQLSearch::~CHlpSQLSearch()
+	{
+	delete iSQLStatement;
+	delete iSQLEvaluator;
+	}
+
+void CHlpSQLSearch::ConstructL()
+	{
+	iSQLStatement = new (ELeave) CHlpSQLBuffer();
+	iSQLStatement->ConstructL(256);
+	iSQLEvaluator = CHlpSQLEvaluator::NewL(CActive::EPriorityLow);
+	}
+
+CHlpSQLSearch* CHlpSQLSearch::NewL(MHlpDbObserver& aObserver)
+	{
+	CHlpSQLSearch* self = new(ELeave) CHlpSQLSearch(aObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+void CHlpSQLSearch::SetDatabase(CHlpDatabase& aDatabase)
+	{
+	iDatabase = &aDatabase;
+	iView = &aDatabase.View();
+	}
+
+void CHlpSQLSearch::CancelEvaluator()
+	{
+	Reset();
+	}
+
+void CHlpSQLSearch::Reset()
+	{
+	iSQLEvaluator->Cancel();
+	iSQLStatement->Reset();
+	iFlags &= (~EFlagsAsynchronousSearch|EFlagsPerformSearch);
+	}
+
+void CHlpSQLSearch::SearchL(TInt aType, const TDesC& aCriterion)
+	{
+	__ASSERT_ALWAYS(iDatabase, Panic(EHlpDatabaseNotInTransaction));
+
+	Reset();
+	switch(aType)
+		{
+	case EIndexList:
+		IndexListL();
+		break;
+	case ECategoryList:
+		CategoryListL();
+		break;
+	case ETopicListForCategory:
+		TopicListForCategoryL(aCriterion);	
+		break;
+	case ETopicListForCategoryUID:
+		TopicListForCategoryUIDL(aCriterion);	
+		break;
+	case EContextSearch:
+		ContextSearchL(aCriterion);
+		break;
+	case EIndexSearch:
+		IndexIdSearchL(aCriterion);
+		break;
+	case EQuickSearch:
+		TextSearchL(aCriterion, EFalse);
+		break;
+	case EFullTextSearch:
+		TextSearchL(aCriterion, ETrue);
+		break;
+	case ETopicIdSearch:
+		TopicIdSearchL(aCriterion);
+		break;
+	default:
+		Panic(EHlpInvalidQuery);
+		break;
+		}	
+
+	BuildViewL();
+	}
+
+void CHlpSQLSearch::ContextSearchL(const TDesC& aCriterion)
+	{
+	iFlags |= EFlagsPerformSearch;
+	iSQLStatement->AppendSQLL(KSQLContextSearch());
+	iSQLStatement->AppendL(aCriterion);
+	iSQLStatement->AppendSQLL(KSQLSingleInvComma());
+	}
+
+			
+void CHlpSQLSearch::IndexIdSearchL(const TDesC& aCriterion)
+	{
+	iFlags |= EFlagsPerformSearch;
+	iSQLStatement->AppendSQLL(KSQLIndexIdSearch());
+	iSQLStatement->AppendL(aCriterion);
+	}
+
+void CHlpSQLSearch::TopicIdSearchL(const TDesC& aCriterion)
+	{
+	iSQLStatement->AppendSQLL(KSQLTopicSearchProlog());
+	iSQLStatement->AppendSQLL(KSQLTopicIdColumn());
+	iSQLStatement->AppendSQLL(KSQLEqualOperator());
+	iSQLStatement->AppendL(aCriterion);
+	}
+
+void CHlpSQLSearch::TextSearchL(const TDesC& aCriterion, TBool aFullText)
+	{
+	// Text searching is asynchronous
+	iFlags |= EFlagsAsynchronousSearch;
+	iSQLStatement->AppendSQLL(KSQLTopicIdSearchProlog());
+	iSQLStatement->AppendSQLL(KSQLTxtSrchTopicTitle());
+	iSQLStatement->AppendL(aCriterion);
+	if	(aFullText)
+		{
+		iSQLStatement->AppendSQLL(KSQLTxtSrchTopicText());
+		iSQLStatement->AppendL(aCriterion);
+		}
+	iSQLStatement->AppendSQLL(KSQLTxtSrchCat());
+	iSQLStatement->AppendL(aCriterion);
+	iSQLStatement->AppendSQLL(KSQLTxtSrchSynonym());
+	iSQLStatement->AppendL(aCriterion);
+	iSQLStatement->AppendSQLL(KSQLLikeClosingInvComma());
+	}
+
+
+
+
+
+void CHlpSQLSearch::TopicIdSearchL()
+	{
+	iFlags &= (~EFlagsPerformSearch);
+	if	(iView->CountL())
+		{
+		iSQLStatement->AppendSQLL(KSQLTopicIdSearchProlog());
+		iView->FirstL();
+		CDbColSet* colset = iView->ColSetL();
+		TDbColNo topicCol = colset->ColNo(KSQLTopicIdColumn);
+		delete colset;
+		while(!iView->AtEnd())
+			{
+			iSQLStatement->AppendSQLL(KSQLTopicIdColumn());
+			iSQLStatement->AppendSQLL(KSQLEqualOperator());
+			iView->GetL();
+			iSQLStatement->AppendL(iView->ColUint32(topicCol));
+			iView->NextL();
+			if	(!iView->AtEnd())
+				iSQLStatement->AppendSQLL(KSQLOrOperator());
+			}
+		}
+	}
+
+void CHlpSQLSearch::CategoryListL()
+	{
+	iSQLStatement->AppendSQLL(KSQLCategoryList());
+	iFlags &= (~EFlagsAsynchronousSearch);
+	}
+
+void CHlpSQLSearch::IndexListL()
+	{
+	iSQLStatement->AppendSQLL(KSQLIndexList());
+	iFlags &= (~EFlagsAsynchronousSearch);
+	}
+
+void CHlpSQLSearch::TopicListForCategoryL(const TDesC& aCriterion)
+	{
+	iSQLStatement->AppendSQLL(KSQLTopicByCategoryProlog());
+	iSQLStatement->AppendSQLL(KSQLSingleInvComma());
+	iSQLStatement->AppendL(aCriterion);
+	iSQLStatement->AppendSQLL(KSQLSingleInvComma());
+	iFlags &= (~EFlagsAsynchronousSearch);
+	}
+
+void CHlpSQLSearch::TopicListForCategoryUIDL(const TDesC& aCriterion)
+	{
+	iSQLStatement->AppendSQLL(KSQLTopicByCategoryUIDProlog());
+	iSQLStatement->AppendL(aCriterion);
+	iFlags &= (~EFlagsAsynchronousSearch);
+	}
+
+
+void CHlpSQLSearch::HandleSearchEventL(TInt aEvent)
+	{
+	switch(aEvent)
+		{
+	case ESearchComplete:
+		if	(iFlags & EFlagsPerformSearch)
+			{
+			ReportEventToObserverL(ESearchInProgress);
+			Reset();
+			TopicIdSearchL();
+			BuildViewL();
+			}
+		else
+			ReportEventToObserverL(ESearchComplete);
+		break;
+	default:
+		ReportEventToObserverL(aEvent);
+		break;
+		}
+	}
+
+
+void CHlpSQLSearch::BuildViewL()
+	{
+	iView->Close();	
+	TDbQuery query(iSQLStatement->SearchStatement(), EDbCompareFolded);
+	User::LeaveIfError(iView->Prepare(iDatabase->Database(), query, TDbWindow::EUnlimited, RDbRowSet::EReadOnly));
+
+	if	(iFlags & EFlagsAsynchronousSearch)
+		iSQLEvaluator->Initialize(*iView, *this);
+	else
+		{
+		User::LeaveIfError(iView->EvaluateAll());
+		if	(iView->CountL())
+			ReportEventToObserverL(ESearchComplete);
+		else
+			ReportEventToObserverL(ENoRecordsFound);
+		}
+	}
+
+
+//
+// CHlpSQLEvaluator class
+//
+
+CHlpSQLEvaluator::CHlpSQLEvaluator(TInt aPriority)
+:	CActive(aPriority)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CHlpSQLEvaluator::~CHlpSQLEvaluator()
+	{
+	Cancel();
+	}
+
+CHlpSQLEvaluator* CHlpSQLEvaluator::NewLC(TInt aPriority)
+	{
+	CHlpSQLEvaluator* self = new (ELeave) CHlpSQLEvaluator(aPriority);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+CHlpSQLEvaluator* CHlpSQLEvaluator::NewL(TInt aPriority)
+	{
+	CHlpSQLEvaluator* self = CHlpSQLEvaluator::NewLC(aPriority);
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CHlpSQLEvaluator::Initialize(RDbView& aView, MHlpPrivObserver& aObserver)
+	{
+	Cancel();
+	iView = &aView;
+	iObserver = &aObserver;
+	Start();
+	}
+
+
+void CHlpSQLEvaluator::Start()
+	{
+	// Kludge an asynch request
+	iStatus = KRequestPending;
+	SetActive();
+	TRequestStatus* pS = &iStatus;
+	User::RequestComplete(pS, KErrNone);
+	}
+
+void CHlpSQLEvaluator::RunL()
+	{
+	if	(iStatus != KErrNone)
+		{
+		// Panic in debug mode
+		__ASSERT_DEBUG(0, Panic(EHlpAsynchSearchError));
+
+		// In release mode return nothing found
+		iObserver->HandleSearchEventL(ENoRecordsFound);
+		}
+	else
+		{
+		TInt more = iView->Evaluate();
+		TInt count = (more >= 0)? iView->CountL() : 0;
+		if	(more > 0)
+			{
+			Start();
+			iObserver->HandleSearchEventL(ESearchInProgress);
+			}
+		else 
+			iObserver->HandleSearchEventL((count)? ESearchComplete : ENoRecordsFound);
+		}
+	}
+
+void CHlpSQLEvaluator::DoCancel()
+	{
+	TRAP_IGNORE(iObserver->HandleSearchEventL(EHlpSearchCancelled)); // API is part of framework, could leave 
+	}
+
+
+
+
+//
+// CHlpSQLBuffer class
+//
+
+
+void CHlpSQLBuffer::ConstructL(TInt aBufferSize)
+	{
+	iSQLStatement = HBufC::NewL(aBufferSize);
+	}
+
+CHlpSQLBuffer::CHlpSQLBuffer()
+	{
+	}
+
+CHlpSQLBuffer::~CHlpSQLBuffer()
+	{
+	delete iSQLStatement;
+	}
+
+void CHlpSQLBuffer::AppendL(TInt aNum)
+	{
+	TBuf<32> buf;
+	buf.AppendNum(aNum);
+	AppendTextL(buf);
+	}
+
+void CHlpSQLBuffer::AppendL(const TDesC& aDes)
+	{
+	_LIT(KHlpModelInvertedComma, "'");
+
+	// If the text contains inverted commas, then these must be escaped before
+	// passing down to DBMS.
+	TInt pos = aDes.Find(KHlpModelInvertedComma);
+	if	(pos != KErrNotFound)
+		{
+		// Worst case scenario is that every character needs escaping...
+		const TInt length = aDes.Length();
+		HBufC* escapedText = HBufC::NewLC(length * 2);
+		TPtr pText(escapedText->Des());
+		pText.Copy(aDes);
+		// Run through the text inserting extra apostrophes:
+		for(TInt i=0; i<length; i++)
+			{
+			const TPtrC pChar(pText.Mid(i, 1));
+			if	(pChar == KHlpModelInvertedComma)
+				{
+				pText.Insert(i, KHlpModelInvertedComma);
+
+				// Skip over the newly inserted character
+				++i;
+				}
+			}
+		// Perform a normal append of the resulting escaped text:
+		AppendTextL(*escapedText);
+		CleanupStack::PopAndDestroy(escapedText);
+		}
+	else
+		{
+		// No apostrophes so no escaping needed:
+		AppendTextL(aDes);
+		}
+	}
+
+void CHlpSQLBuffer::AppendSQLL(const TDesC& aDes)
+	{
+	AppendTextL(aDes);
+	}
+
+void CHlpSQLBuffer::AppendTextL(const TDesC& aDes)
+	{
+	TPtr tempPtr(iSQLStatement->Des());
+	const TInt KExtraBufferSize = 100;
+	if ( (tempPtr.Length() + aDes.Length()) <= tempPtr.MaxLength() )
+		{
+		tempPtr.Append(aDes);
+		}
+	else
+		{
+		const TInt newSize = Max(KExtraBufferSize, aDes.Length()+iSQLStatement->Length());
+		iSQLStatement = iSQLStatement->ReAllocL(newSize);
+		iSQLStatement->Des().Append(aDes);
+		}
+	}
+
+const TDesC& CHlpSQLBuffer::SearchStatement() const
+	{
+	return *iSQLStatement;
+	}
+
+void CHlpSQLBuffer::Reset()
+	{
+	iSQLStatement->Des().Zero();
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/src/Hlppanic.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "hlppanic.h"
+
+
+GLDEF_C void Panic(THlpPanic aReason)
+	{
+	_LIT(KHlpPanicText, "HlpModel");
+	User::Panic(KHlpPanicText, aReason);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/src/hlppict.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,238 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Help Picture module
+// 
+//
+
+#include "hlppict.h"
+
+// User includes
+#include "hlppanic.h"
+#include "HLPDB.H"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "hlpmodel_internal.h"
+#endif
+
+// System includes
+#include <fbs.h>
+#include <coemain.h>
+
+
+//
+// ----> CHlpPicture (source)
+//
+
+CHlpPicture::CHlpPicture(CHlpDatabase& aDatabase, CHlpModel& aHlpModel)
+	:iDatabase(aDatabase), iHlpModel(&aHlpModel)
+	{
+	}
+
+CHlpPicture::~CHlpPicture()
+	{
+	delete iImage;
+
+	if (iHlpModel)
+	iHlpModel->RemoveHelpPicture(this);
+	}
+
+void CHlpPicture::ConstructL(const CStreamStore& aStore, TStreamId aStreamId)
+	{
+	// Just restore for now
+	__ASSERT_ALWAYS(iHlpModel, Panic(EHlpNoHelpModelPointer));
+	const THlpZoomState aZoomState = iHlpModel->ZoomSize();
+	RestoreL(aStore, aStreamId, iDatabase, aZoomState);
+	}
+
+/** Constructs a new CHlpPicture object and returns a pointer to it, 
+pushing it onto the cleanup stack.
+
+@param aStore A reference to a stream store.
+@param aStreamId The ID of the stream to be used.
+@param aDatabase A reference to a CHlpDatabase object.
+@param aHlpModel A reference to a CHlpModel object.
+@return A pointer to a CHlpPicture object.
+@pre Valid stream store, stream ID, database and Hlpmodel 
+objects are passed to the function.
+@post A CHlpPicture object has been created and has been pushed 
+onto the cleanup stack. */
+CHlpPicture* CHlpPicture::NewLC(const CStreamStore& aStore, TStreamId aStreamId, CHlpDatabase& aDatabase, CHlpModel& aHlpModel)
+	{
+	CHlpPicture* picture = new(ELeave) CHlpPicture(aDatabase, aHlpModel);
+	CleanupStack::PushL(picture);
+	picture->ConstructL(aStore, aStreamId);
+	return picture;
+	}
+
+//
+//
+//
+
+void CHlpPicture::Draw(CGraphicsContext& aGc, const TPoint& aTopLeft, const TRect& aClipRect, MGraphicsDeviceMap* aMap) const
+	{
+	if	(iImageCountForPicture != KHlpModelMaximumNumberOfImagesForV6Point2Files)
+		{
+		// If there is only one image to represent this image, then we revert to using
+		// the scaling code, as per v6.0 and 6.1
+		TSize size;
+		GetSizeInPixels(aMap, size);
+		TRect destRect(aTopLeft, size);
+
+		TMargins cropMargins;
+		GetCropInTwips(cropMargins);
+		TSize originalSize;
+		GetOriginalSizeInTwips(originalSize);
+
+		TRect sourceRect(TPoint(cropMargins.iLeft,cropMargins.iTop), TPoint(originalSize.iWidth-cropMargins.iRight,originalSize.iHeight-cropMargins.iBottom));
+		sourceRect = CCoeEnv::Static()->ScreenDevice()->TwipsToPixels(sourceRect);
+		aGc.SetClippingRect(aClipRect);
+		aGc.DrawBitmap(destRect, iImage, sourceRect);
+		}
+	else
+		{
+		// There are (by default anyway) 3 images available for use at various zoom states,
+		// hence we must ensure that we don't scale the bitmap.
+		TMargins cropMargins;
+		GetCropInTwips(cropMargins);
+
+		TRect sourceRect;
+		TRect destRect;
+
+		TSize size(iImage->SizeInPixels());
+		destRect = TRect(aTopLeft, size);
+		sourceRect = TRect(TPoint(cropMargins.iLeft, cropMargins.iTop), TPoint(size.iWidth - cropMargins.iRight, size.iHeight - cropMargins.iBottom));
+
+		aGc.SetClippingRect(aClipRect);
+		aGc.DrawBitmap(destRect, iImage, sourceRect);
+		}
+	}
+
+void CHlpPicture::ExternalizeL(RWriteStream& aStream) const
+ 	{
+	aStream.WriteUint32L(iImageId);
+ 	}
+ 
+void CHlpPicture::GetCropInTwips(TMargins& aMargins) const
+	{
+	aMargins.iLeft = aMargins.iRight = aMargins.iTop = aMargins.iBottom = 0;
+	}
+
+/** Converts a bitmap size to twips before any scaling is applied.
+
+@param aSize The size of the bitmap rectangle in pixels.
+@pre None.
+@post The bitmap rectangle size is expressed in twips. */
+void CHlpPicture::GetOriginalSizeInTwips(TSize& aSize) const
+	{
+	__ASSERT_ALWAYS(iHlpModel, Panic(EHlpNoHelpModelPointer));
+	aSize = iImage->SizeInPixels();
+
+	if	(iImageCountForPicture != KHlpModelMaximumNumberOfImagesForV6Point2Files)
+		{
+		// ER6 and 6.1 scale-based code
+		TRect rect(aSize);
+		rect = CCoeEnv::Static()->ScreenDevice()->PixelsToTwips(rect);
+		aSize = rect.Size();
+		}
+	else
+		{
+		// Fetch the zoom 
+		const TReal zoomValue = static_cast<TReal>(iHlpModel->CurrentZoomFactor());
+		const TReal scaleFactor = static_cast<TReal>(KHlpModelDefaultZoomFactorAsRealNumber / zoomValue);
+
+		// Scale up or down (in pixels) accordingly
+		aSize.iWidth = static_cast<TInt>(aSize.iWidth * scaleFactor);
+		aSize.iHeight = static_cast<TInt>(aSize.iHeight * scaleFactor);
+
+		// Now scale into twips
+		aSize = CCoeEnv::Static()->ScreenDevice()->PixelsToTwips(TRect(TPoint(0,0), aSize)).Size();
+		}
+	}
+
+void CHlpPicture::HandleHelpModelDestruction()
+	{
+	iHlpModel = NULL;
+	}
+
+void CHlpPicture::SetScaleFactor(TInt /*aScaleFactorWidth*/, TInt /*aScaleFactorHeight*/)
+	{
+	}
+
+void CHlpPicture::SetCropInTwips(const TMargins& /*aMargins*/)
+	{
+	}
+
+TInt CHlpPicture::ScaleFactorWidth() const
+	{
+	return KHlpModelZoomFactorMedium;
+	}
+
+TInt CHlpPicture::ScaleFactorHeight() const
+	{
+	return KHlpModelZoomFactorMedium;
+	}
+
+//
+//
+//
+
+/** Replaces any currently used bitmap with the bitmap that 
+corresponds to the new zoom size.
+
+@param aNewZoom The new zoom size.
+@pre A valid zoom size is passed to the function.
+@post All currently used bitmaps are replaced with bitmaps 
+that correspond to the new zoom size. */
+void CHlpPicture::HandleZoomChangedL(THlpZoomState aNewZoom)
+	{
+	CFbsBitmap* bitmap = iDatabase.ImageForIdLC(iImageId, aNewZoom);
+	delete iImage;
+	iImage = bitmap;
+	CleanupStack::Pop();
+	}
+
+//
+//
+//
+
+/** Replaces any currently used bitmap with the bitmap 
+that corresponds to the new zoom size.
+
+@param aNewZoom The new zoom size.
+@pre A valid zoom size is passed to the function.
+@post All currently used bitmaps are replaced with bitmaps 
+that correspond to the new zoom size.
+
+@see CHlpDatabase::ImageForIdLC()
+@see CHlpDatabase::ImageCountForIdL()
+@see RStoreReadStream::OpenLC() */
+void CHlpPicture::RestoreL(const CStreamStore& aStore, TStreamId aStreamId, CHlpDatabase& aDatabase, THlpZoomState aZoomState)
+	{
+	RStoreReadStream stream;
+	stream.OpenLC(aStore, aStreamId);
+	iImageId = stream.ReadUint32L();
+	CleanupStack::PopAndDestroy(); // stream
+	iImageCountForPicture = aDatabase.ImageCountForIdL(iImageId);
+
+	// Fetch the specified bitmap from the help files image table.
+	// This method will leave if the image isn't in the table.
+	CFbsBitmap* bitmap = aDatabase.ImageForIdLC(iImageId, aZoomState);
+	delete iImage;
+	iImage = bitmap;
+	CleanupStack::Pop(); // bitmap
+	}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/SearchOrderTest.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,269 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Test Help Model module to check the PlatSec search order.
+// Note: Use could be made of drive A: on the emulator and not on the hardware
+// by using the Macro __WINS__
+// 
+//
+
+// System includes
+#include <e32std.h>
+#include <e32def.h>
+ 
+#include <e32test.h>
+#include <f32file.h>
+
+// User includes
+#include <bautils.h>
+#include "HLPMODEL.H"
+#include <coreappstest/testserver.h>
+
+
+#include "SearchOrderTest.h"
+
+
+// These defines and the Local method DrivesOfMediaTypeL should be moved to the 
+// Agenda Test Library (agntestlibrary)
+_LIT(KMediaNotPresent,	"MediaNotPresent");
+_LIT(KMediaUnknown,		"MediaUnknown");
+_LIT(KMediaFloppy,		"MediaFloppy");
+_LIT(KMediaHardDisk,	"MediaHardDisk");
+_LIT(KMediaCdRom,		"MediaCdRom");
+_LIT(KMediaRam,			"MediaRam");
+_LIT(KMediaFlash,		"MediaFlash");
+_LIT(KMediaRom,			"MediaRom");
+_LIT(KMediaRemote,		"MediaRemote");
+_LIT(KMediaNANDFlash,	"MediaNANDFlash");
+TPtrC MediaTypes[] = 
+			{ KMediaNotPresent(),KMediaUnknown(),KMediaFloppy(),KMediaHardDisk(),KMediaCdRom(),
+			KMediaRam(),KMediaFlash(),KMediaRom(),KMediaRemote(),KMediaNANDFlash()};
+
+CSearchOrderTest::CSearchOrderTest(RTest& aTest):iTest(aTest)
+{}
+
+
+CSearchOrderTest::~CSearchOrderTest()
+	{
+	iFsSession.Close();
+	}
+	
+CSearchOrderTest* CSearchOrderTest::NewL( RTest& aTest)
+	{
+	CSearchOrderTest* self = new (ELeave) CSearchOrderTest(aTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CArrayFix<TInt>* CSearchOrderTest::DrivesOfMediaTypeL( TMediaType aMedia, RFs& aFs, TBool aStopAtFirst )
+	{
+	TDriveInfo info;
+	TInt error = KErrNone;
+	TDriveList driveList;
+	CArrayFix<TInt>* array = new (ELeave) CArrayFixFlat<TInt>(10);
+	CleanupStack::PushL( array );
+	User::LeaveIfError(aFs.DriveList(driveList));
+	for(TInt drive=EDriveA;drive<=EDriveZ;drive++)
+		{
+		if( driveList[drive] )
+			{
+			error = aFs.Drive(info, drive);
+			if	(error != KErrNone)
+				{
+				continue;					
+				}
+			if	( info.iType == aMedia )
+				{
+				array->AppendL( drive );
+				if( aStopAtFirst )
+					{ // return if only the first drive of the required type.
+					break;									
+					}
+				}
+			}
+		}
+	CleanupStack::Pop( array );
+	return array;
+	}
+
+/**
+	MMCDriveL
+	
+	Determines a list of drives of type EMediaHardDisk.
+	The first drive in this list is returned and used
+	by the rest of the test.
+*/
+TDriveUnit CSearchOrderTest::MMCDriveL()
+	{
+	CArrayFix<TInt>* drives = DrivesOfMediaTypeL(EMediaHardDisk,iFsSession,EFalse);
+	CleanupStack::PushL(drives);
+	TInt drivesTInt = drives->Count();
+	if( drivesTInt )
+		{
+		iTest.Printf(_L("Found the following drives of type %S\n"),&MediaTypes[EMediaHardDisk]);
+		for(TInt i=0;i<drivesTInt;i++)
+			{
+			TDriveUnit drv(drives->At(i));
+			TPtrC drvPtr(drv.Name());
+			iTest.Printf(_L("%S\n"),&drvPtr);				
+			}
+		}
+	else
+		{
+		iTest.Printf( _L("No drives found of type %S\n"),&MediaTypes[EMediaHardDisk]);
+		User::LeaveIfError(KErrHardwareNotAvailable);		
+		}
+	TDriveUnit mmcDrive(drives->At(0));
+	CleanupStack::PopAndDestroy(drives);
+	// Use the first drive in the list for the rest of the test.
+	return mmcDrive;
+	}
+
+void CSearchOrderTest::ConstructL()
+	{
+	User::LeaveIfError(iFsSession.Connect());
+	iMMCDrive = MMCDriveL().Name();
+	iTest.Printf(_L("%S Chosen for the test.\n"), &iMMCDrive);
+	iHelpPathFileMMC.Copy(iMMCDrive);
+	iHelpPathFileMMC.Append(KHelpPathFileMMC);
+	}
+	
+
+/**
+	MoveHelpFileL
+	Deletes and Moves the help files from the anticipated destination drive,
+	dependent upon the Operation defined.
+*/
+void CSearchOrderTest::MoveHelpFileL( TInt aOperation )
+	{
+	switch( aOperation )
+		{
+		case EInitial_DeleteAll:
+			iTest.Printf(_L("Removing file PlatSecSearchTest.hlp from drives\n"));
+			DeleteAllHelpFilesL();
+			break;
+/*	Commented out because not supported on the hardware.		
+		case EMoveToA:
+			iTest.Printf(_L("Copying SearchTest.hlp to drives A:"));
+			CopyHlpFile( KHelpPathFileAOnZ, KHelpPathFileA );
+			break;
+*/
+		case EMoveToC:
+			iTest.Printf(_L("Copying PlatSecSearchTest.hlp to drives C:\n"));
+			CopyHlpFileL( KHelpPathFileCOnZ, KHelpPathFileC );
+			break;
+			
+		case EMoveToMMC:
+			iTest.Printf(_L("Copying PlatSecSearchTest.hlp to MMC drive\n"));
+			CopyHlpFileL( KHelpPathFileFOnZ, iHelpPathFileMMC );
+			break;
+			
+		case EFinal_DeleteAll:
+			iTest.Printf(_L("Removing file PlatSecSearchTest.hlp from drives\n"));
+			DeleteAllHelpFilesL();
+			break;
+			
+		default:
+			// Error condition so leave
+			User::Leave(KErrNotFound);
+		}
+
+	return;	
+	}
+
+/**
+	DeleteAllHelpFiles
+	Removes help files from A, C & MMC, Z help file will be exported in the
+	build process.
+*/
+void CSearchOrderTest::DeleteAllHelpFilesL()
+	{
+	// The help file for Z should be exported in the build process.
+		
+	RPIMTestServer serv;
+	User::LeaveIfError(serv.Connect());
+//	TRAPD( err, serv.DeleteFileL( KHelpPathFileA ));
+	TRAPD( err, serv.DeleteFileL( KHelpPathFileC ));
+	TRAP( err, serv.DeleteFileL( iHelpPathFileMMC ));
+	serv.Close();
+	}
+	
+void CSearchOrderTest::CopyHlpFileL(const TDesC& aFileName, const TDesC& aToFileName)
+	{
+	RPIMTestServer serv;
+	User::LeaveIfError(serv.Connect());
+	serv.CopyFileL(aFileName, aToFileName);
+	serv.Close();
+	}	
+
+TBool CSearchOrderTest::CheckCategoryListL(TInt aOperation, CDesCArray* aCatList ) const
+	{
+	TInt mxCount = aCatList->Count();
+	iTest.Printf(_L("Category List: \n"));
+	for(TInt index=0;index<mxCount;index++)
+		{
+		TPtrC cat(aCatList->MdcaPoint(index));
+		iTest.Printf(_L("%S\n"),&cat);	
+		}
+	
+	TInt pntr = 0;
+	switch(aOperation)
+		{
+		case EInitial_DeleteAll:
+			
+			iTest.Next(_L("Looking for category 'Drive Z:' in search order.\n"));
+			// Check that we Find Drive Z: last in search order.
+			return ((aCatList->Find( KDriveZ,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveC,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveF, 	pntr  ) == 0));
+/* 	Commented out because not supported on the hardware.
+		case EMoveToA:
+			
+			iTest.Next(_L("Looking for Drive A: in search order.\n"));
+			// Check that we Find Drive A: last in search order.
+			return (aCatList->Find( KDriveA, pntr  ) == 0);
+*/		
+		case EMoveToC:
+			
+			iTest.Next(_L("Looking for category 'Drive C:' in search order.\n"));
+			// Check that we Find Drive C: last in search order.
+			return ((aCatList->Find( KDriveC,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveZ,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveF, 	pntr  ) == 0));
+			
+		case EMoveToMMC:
+			
+			iTest.Next(_L("Looking for category 'Drive F:' in search order.\n"));
+			// Check that we Find Drive F: last in search order.
+			return ((aCatList->Find( KDriveF, 	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveC,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveZ,	pntr  ) == 0));
+			
+		case EFinal_DeleteAll:
+			
+			iTest.Next(_L("Looking for category 'Drive Z:' in search order.\n"));
+			// Check that we Find Drive Z: last in search order.
+			return ((aCatList->Find( KDriveZ,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveC,	pntr  ) == 0) &&
+				   !(aCatList->Find( KDriveF, 	pntr  ) == 0));
+			
+		default:
+			// Error condition so leave
+			User::Leave(KErrNotFound);
+		}
+		
+	return EFalse;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/SearchOrderTest.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,73 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __CSEARCHORDERTEST__
+#define __CSEARCHORDERTEST__
+
+// Source
+//_LIT(KHelpPathFileAOnZ, "Z:\\System\\Help\\SearchTestA.hlp");
+_LIT(KHelpPathFileCOnZ, "z:\\System\\Data\\THlpmodel\\PlatSecSearchTestC.hlp");
+_LIT(KHelpPathFileFOnZ, "z:\\System\\Data\\THlpmodel\\PlatSecSearchTestF.hlp");
+//_LIT(KHelpPathFileZOnZ, "Z:\\Resource\\Help\\SearchTestZ.hlp");
+
+// Destination
+//_LIT(KHelpPathFileA, "A:\\Resource\\Help\\PlatSecSearchTest.hlp");
+_LIT(KHelpPathFileC, "C:\\Resource\\Help\\PlatSecSearchTest.hlp");
+_LIT(KHelpPathFileMMC, "\\Resource\\Help\\PlatSecSearchTest.hlp");
+//_LIT(KHelpPathFileZ, "Z:\\Resource\\Help\\SearchTest.hlp");
+
+// Catagorise Define for Catagory UID 0x01007000
+_LIT(KDriveZ,"Drive Z:");
+//_LIT(KDriveA,"Drive A:");
+_LIT(KDriveC,"Drive C:");
+_LIT(KDriveF,"Drive F:");
+
+
+class CSearchOrderTest : public CBase
+{
+public:
+	enum TOperation
+		{
+		EInitial_DeleteAll,
+//		EMoveToA,	This operation is ignored as A: is not supported on the hardware.
+		EMoveToC,
+		EMoveToMMC,
+		EFinal_DeleteAll,
+		};	
+		
+	static CSearchOrderTest* NewL( RTest& aTest );
+	void ConstructL();
+	~CSearchOrderTest();
+
+	void MoveHelpFileL( TInt aOperation );
+	TBool CheckCategoryListL(TInt aEvent, CDesCArray* aCatList ) const;
+	
+private:
+	CSearchOrderTest( RTest& aTest );
+
+	void DeleteAllHelpFilesL();
+	void CopyHlpFileL(const TDesC& aFileName, const TDesC& aToFileName);
+
+	TDriveUnit MMCDriveL();
+	CArrayFix<TInt>* DrivesOfMediaTypeL( TMediaType aMedia, RFs& aFs, TBool aStopAtFirst );
+// Some data
+	RFs 			iFsSession;
+	RTest&			iTest;
+	// First drive encountered mapped to MMC card.
+	TDriveName		iMMCDrive;
+	// Destination path for Help file on the MMC card.
+	TFileName		iHelpPathFileMMC;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/THelpView.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,692 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#pragma message(__FILE__ "(5) : This test code memory leaks on exit due to a bug in the code...fix when have time")
+
+#include "THelpView.h"
+
+// System includes
+#include <coemain.h>
+#include <eikenv.h>
+#include <techview/eikrted.h>
+#include <techview/eikmenup.h>
+#include <techview/eikchlst.h>
+#include <techview/eikon.hrh>
+#include <techview/eiksbfrm.h>
+#include <eikstart.h>
+#include <txtrich.h>
+#include "hlpmodel.h"
+#include <thelpview.rsg>
+
+// User includes
+#include "thelpviewctrls.h"
+#include "THelpView.hrh"
+
+// Constants
+const TInt KSizeSearchPromptIndent = 5;
+const TInt KSizeSearchPromptHeight = 25;
+const TInt KResultsViewWidth = 150;
+
+// Panic enum
+enum THlpViewerPanic
+	{
+	EHlpViewPanicNoSearchSpec
+	};
+
+
+//
+// ----> Global functions / Entry points (source)
+//
+
+LOCAL_C CApaApplication* NewApplication()
+// Ordinal 1 export for App Dll's
+	{
+	return new CHlpApplication();
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
+
+void Panic(THlpViewerPanic aPanic)
+	{
+	_LIT(KHlpViewPanicCategory, "HlpView");
+	User::Panic(KHlpViewPanicCategory, aPanic);
+	}
+
+
+
+//
+// ----> CHlpApplication (source)
+//
+TUid CHlpApplication::AppDllUid() const
+	{
+	return KUidHelpViewApp;
+	}
+
+CApaDocument* CHlpApplication::CreateDocumentL()
+	{
+	CHlpDocument* document = new(ELeave) CHlpDocument(*this);
+	CleanupStack::PushL(document);
+	document->NewDocumentL();
+	CleanupStack::Pop();
+	return document;
+	}
+
+
+
+
+
+//
+// ----> CHlpAppUi (source)
+//
+CHlpDocument::CHlpDocument(CEikApplication& aApp)
+:	CEikDocument(aApp)
+	{
+	}
+
+CHlpDocument::~CHlpDocument()
+	{
+	delete iModel;
+	}
+
+CEikAppUi* CHlpDocument::CreateAppUiL()
+	{
+    return(new(ELeave) CHlpAppUi());
+	}
+
+void CHlpDocument::NewDocumentL()
+	{
+	CHlpModel* model = CHlpModel::NewL(Process()->FsSession(), NULL);
+	CleanupStack::PushL(model);
+	model->OpenL();
+	delete iModel;
+	iModel = model;
+	CleanupStack::Pop(); // model
+	}
+
+
+
+
+
+//
+// ----> CHlpAppUi (source)
+//
+CHlpAppUi::~CHlpAppUi()
+	{
+	CCoeAppUi::RemoveFromStack(iView);
+	delete iView;
+	}
+
+void CHlpAppUi::ConstructL()
+	{
+    BaseConstructL();
+
+	iView = new(ELeave) CHlpMainView(*this, Document().Model());
+	iView->ConstructL();
+	iView->SetRect(ClientRect());
+
+	AddToStackL(iView);
+	}
+
+//
+// FROM CEikAppUi
+//
+
+void CHlpAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+	case EEikCmdExit: 
+		Exit();
+		break;
+
+	case EHlpCmdSearch:
+		iView->ShowSearchPrompt(ETrue);
+		break;
+
+	case EHlpCmdSearchDone:
+		iView->MakeResultsVisible(EFalse);
+		break;
+
+	case EEikCmdZoomIn:
+	case EEikCmdZoomOut:
+		HandleZoomL(aCommand);	
+		break;
+
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	}
+
+void CHlpAppUi::DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane)
+	{
+	switch (aMenuId)
+		{
+	case R_HELPVIEW_TOOLS_MENU:
+		aMenuPane->SetItemDimmed(EHlpCmdSearchDone, !iView->IsSearchResultVisible());
+		break;
+		}
+	}
+
+//
+// NEW
+//
+
+void CHlpAppUi::HandleZoomL(TInt aZoomEvent)
+	{
+	if	(!iZoomHandler)
+		return;
+	iZoomHandler->HandleZoomEventL(STATIC_CAST(MZoomableControl::TZoomEvent, aZoomEvent));
+	}
+
+
+
+
+
+
+//
+// ----> CHlpView (source)
+//
+CHlpView::CHlpView(CHlpAppUi& aAppUi, CHlpModel& aModel)
+:	iAppUi(aAppUi), iHelpModel(aModel), iCurrentZoom(EZoomStateTwo)
+	{
+	}
+
+CHlpView::~CHlpView()
+	{
+	delete iHelpCategories;
+	delete iHelpTopicsForCategory;
+	delete iRichTextEditor;
+	delete iCurrentTopics;
+	delete iLastTopic;
+
+	// Remove this when the memory leak is finished...
+	iCoeEnv->DisableExitChecks(ETrue);
+	}
+
+void CHlpView::ConstructL()
+	{
+	iLastTopic = CHlpTopic::NewL();
+	iZoom.SetGraphicsDeviceMap(iCoeEnv->ScreenDevice());
+
+	iHelpModel.SetObserver(this);
+
+	iHelpCategories = new(ELeave) CEikChoiceList();
+	iHelpCategories->SetContainerWindowL(*this);
+	iHelpCategories->SetFocus(ETrue);
+	iHelpCategories->SetObserver(this);
+
+	iHelpTopicsForCategory = new(ELeave) CEikChoiceList();
+	iHelpTopicsForCategory->SetContainerWindowL(*this);
+	iHelpTopicsForCategory->SetObserver(this);
+
+	iRichTextEditor = new(ELeave) CEikRichTextEditor();
+	iRichTextEditor->SetContainerWindowL(*this);
+	iRichTextEditor->ConstructL(this, 6, 100000, CEikEdwin::EWidthInPixels | CEikEdwin::EReadOnly | CEikEdwin::ENoAutoSelection | CEikEdwin::EKeepDocument);
+	iRichTextEditor->SetZoomFactorL(&iZoom);
+	iRichTextEditor->CreateTextViewL();
+	iRichTextEditor->CreateScrollBarFrameL()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+	iRichTextEditor->SetObserver(this);
+
+	HandleZoomEventL(EEventZoomDefault);
+	PopulateCategoryListL();
+
+	iHelpModel.SetZoomFactors(EHlpZoomStateSmall, 750);
+	iHelpModel.SetZoomFactors(EHlpZoomStateMedium, 1000);
+	iHelpModel.SetZoomFactors(EHlpZoomStateLarge, 1250);
+	}
+
+
+//
+// NEW
+//
+void CHlpView::PopulateCategoryListL()
+	{
+	// First get a category listing, then get the list of topics
+	// for each specified category.
+	// Get and print the category listing
+	CDesCArrayFlat* array = new(ELeave) CDesCArrayFlat(5);
+	CleanupStack::PushL(array);
+	iHelpModel.CategoryListL(array);
+
+	if	(!array->Count())
+		User::Leave(KErrArgument); // ??
+
+	iHelpCategories->SetArrayExternalOwnership(EFalse);
+	iHelpCategories->SetArrayL(array);
+	iHelpCategories->SetArrayExternalOwnership(EFalse);
+	iHelpCategories->SetCurrentItem(0);
+
+	PopulateTopicListL(iHelpCategories->Array()->MdcaPoint(iHelpCategories->CurrentItem()));
+
+	CleanupStack::Pop();
+	}
+
+void CHlpView::PopulateTopicListL(const TDesC& aTopic)
+	{
+	iHelpModel.SearchL(ETopicListForCategory, aTopic);
+
+	CHlpList* list = CHlpList::NewLC();
+	iHelpModel.LoadListL(list);
+	iHelpTopicsForCategory->SetArrayL(list); // Derrives from MDesCArray so we can do this
+	delete iCurrentTopics;
+	iCurrentTopics = list;
+	iHelpTopicsForCategory->SetArrayExternalOwnership(ETrue); // owned by this class
+	CleanupStack::Pop(); // list
+
+	if	(list->MdcaCount())
+		{
+		UpdateEdwinL(*list->Item(0));
+		iHelpTopicsForCategory->SetCurrentItem(0);
+		iHelpTopicsForCategory->DrawNow();
+		}
+	}
+
+
+void CHlpView::UpdateEdwinL(const CHlpItem& aItem)
+//
+//	Extract the rich text from the help file and display it in the
+//	read only edit window.
+//
+	{
+	// Search for a specific topic.
+	iHelpModel.TopicSearchL(aItem);
+	if	(iLastResponseFromHelpModel == ETopicAvailable)
+		{
+		CHlpTopic* topic = CHlpTopic::NewLC();
+		iHelpModel.LoadTopicL(topic);
+		iRichTextEditor->SetDocumentContentL(*topic->TopicText(), CEikEdwin::EUseText);
+		iRichTextEditor->NotifyNewFormatL();
+		iRichTextEditor->TextView()->SetViewLineAtTopL(1);
+		iRichTextEditor->UpdateScrollBarsL();
+		delete iLastTopic;
+		iLastTopic = topic;
+		CleanupStack::Pop(); // topic
+		}
+	else
+		iEikonEnv->InfoMsg(R_HELPVIEW_TEXT_NO_TOPIC_FOR_ID);
+	}
+
+//
+// FROM MZoomableControl
+//
+
+void CHlpView::HandleZoomEventL(TZoomEvent aEvent)
+	{
+	switch(aEvent)
+		{
+	case EEventZoomIn:
+		if	(++iCurrentZoom>=KNumberOfZoomStates)
+			iCurrentZoom = 0;
+		break;
+	case EEventZoomOut:
+		if	(--iCurrentZoom < 0)
+			iCurrentZoom = KNumberOfZoomStates-1;
+		break;
+	case EEventZoomDefault:
+		iCurrentZoom = 1;
+		break;
+	default:
+		User::Leave(KErrNotSupported);
+		}
+
+	// Select bitmap zoom size in the 'hlpmodel', according to the value of 'iCurrentZoom'
+	switch (iCurrentZoom)
+		{
+	case 0:
+		iHelpModel.SetZoomSizeL(EHlpZoomStateSmall);
+		break;
+	default:
+	case 1:
+		iHelpModel.SetZoomSizeL(EHlpZoomStateMedium);
+		break;
+	case 2:
+		iHelpModel.SetZoomSizeL(EHlpZoomStateLarge);
+		break;
+		}
+
+
+	iZoom.SetZoomFactor(ZoomForIndex(iCurrentZoom));
+	iRichTextEditor->NotifyNewFormatL();
+	iRichTextEditor->UpdateScrollBarsL();
+	iRichTextEditor->DrawNow();
+	}
+
+TInt CHlpView::ZoomForIndex(TInt aIndex)
+	{
+	switch(aIndex)
+		{
+	case 0:
+		return EZoomStateOne;
+	default:
+	case 1:
+		return EZoomStateTwo;
+	case 2:
+		return EZoomStateThree;
+		}
+	}
+
+//
+// FROM CCoeControl
+//
+
+void CHlpView::SizeChanged()
+	{
+	const TInt KKludgeFactor = 4;
+
+	TRect rect(Position(), Rect().Size());
+	TSize choiceListSize = iHelpCategories->MinimumSize() + TSize(0, KKludgeFactor);
+
+	TPoint topLeft(rect.iTl);
+
+	iHelpCategories->SetExtent(topLeft, TSize(rect.Width()/2, choiceListSize.iHeight));
+	iHelpTopicsForCategory->SetExtent(TPoint(rect.Size().iWidth/2,topLeft.iY), TSize(rect.Size().iWidth/2, choiceListSize.iHeight));
+	iRichTextEditor->SetRect(TRect(TPoint(topLeft.iX, choiceListSize.iHeight), rect.iBr));
+	}
+
+TInt CHlpView::CountComponentControls() const
+	{
+	return 3;
+	}
+
+CCoeControl* CHlpView::ComponentControl(TInt aIndex) const
+	{
+	switch (aIndex)
+		{
+	default:
+	case 0:
+		return iHelpCategories;
+	case 1:
+		return iHelpTopicsForCategory;
+	case 2:
+		return iRichTextEditor;
+		}
+	}
+
+TKeyResponse CHlpView::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	return iRichTextEditor->OfferKeyEventL(aKeyEvent, aType);
+	}
+
+//
+// FROM MCoeControlObserver
+//
+void CHlpView::HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType)
+	{
+	if	(aEventType == EEventRequestFocus)
+		{
+		if	(iFocusedControl)
+			{
+			iFocusedControl->PrepareForFocusLossL();
+			iFocusedControl->SetFocus(EFalse);
+			}
+		iFocusedControl = aControl;
+		iFocusedControl->SetFocus(ETrue);
+		}
+	else if	(aControl == iHelpCategories && aEventType == EEventStateChanged)
+		{
+		// Update the list of topics available for this category
+		PopulateTopicListL(iHelpCategories->Array()->MdcaPoint(iHelpCategories->CurrentItem()));
+		}
+	else if	(aControl == iHelpTopicsForCategory && aEventType == EEventStateChanged)
+		{
+		// Update the edwin contents
+		UpdateEdwinL(*iCurrentTopics->Item(iHelpTopicsForCategory->CurrentItem()));
+		}
+	}
+
+//
+// FROM MHlpModelObserver
+//
+void CHlpView::HandleModelEventL(TInt aEvent)
+	{
+	iLastResponseFromHelpModel = aEvent;
+	}
+
+
+
+
+
+
+
+//
+// ----> CHlpMainView (source)
+//
+
+CHlpMainView::CHlpMainView(CHlpAppUi& aAppUi, CHlpModel& aModel)
+:	iAppUi(aAppUi), iModel(aModel)
+	{
+	}
+
+CHlpMainView::~CHlpMainView()
+	{
+	delete iSearchResults;
+	delete iSearchPrompt;
+	delete iView;
+	}
+
+void CHlpMainView::ConstructL()
+	{
+	CreateWindowL();
+
+	iView = new(ELeave) CHlpView(iAppUi, iModel);
+	iView->SetContainerWindowL(*this);
+	iView->ConstructL();
+	iAppUi.SetZoomHandler(iView);
+
+	iSearchPrompt = new(ELeave) CHlpSearchPrompt();
+	iSearchPrompt->ConstructL(*this);
+	iSearchPrompt->SetObserver(this);
+	iSearchPrompt->MakeVisible(EFalse);
+
+	iSearchResults = new(ELeave) CHlpListBox();
+	iSearchResults->ConstructL(*this);
+	iSearchResults->SetObserver(this);
+	iSearchResults->MakeVisible(EFalse);
+
+	iView->SetFocus(ETrue);
+
+	ActivateL();
+	}
+
+//
+// ACCESS
+//
+
+TBool CHlpMainView::IsSearchPromptVisible() const
+	{
+	return iSearchPrompt->IsVisible();
+	}
+
+TBool CHlpMainView::IsSearchResultVisible() const
+	{
+	return iSearchResults->IsVisible();
+	}
+
+void CHlpMainView::ShowSearchPrompt(TBool aShow)
+	{
+	iSearchPrompt->MakeVisible(aShow);
+	}
+
+void CHlpMainView::MakeResultsVisible(TBool aVisible)
+	{
+	TRect rect(Rect());
+	TSize resultsSize = iSearchResults->Size();
+
+	if	(!aVisible)
+		{
+		// Make the main view rect 'full size' again
+		iView->SetRect(rect);
+		iSearchResults->ListBox()->SetFocus(EFalse);
+		iView->SetFocus(ETrue);
+		}
+	else
+		{
+		rect.iBr.iX -= resultsSize.iWidth;
+		iView->SetRect(rect);
+		iView->SetFocus(EFalse);
+		iSearchResults->ListBox()->SetFocus(ETrue);
+		}
+	iSearchResults->MakeVisible(aVisible);
+	DrawNow();
+	}
+
+//
+// FROM CCoeControl
+//
+
+void CHlpMainView::SizeChanged()
+	{
+	iView->SetRect(Rect());
+
+	TRect rect(Rect());
+	TSize KScreenSize(iCoeEnv->ScreenDevice()->SizeInPixels());
+
+	// Work out the size of the search prompt minus the inset for the left and right
+	// hand size. Kludge this a bit to make sure we allow for the size of any scrollbar
+	// (hence the *6 rather than the expected *2)
+	TSize searchPromptSize(KScreenSize.iWidth - (4*KSizeSearchPromptIndent), KSizeSearchPromptHeight);
+	iSearchPrompt->SetExtent(TPoint(KSizeSearchPromptIndent, rect.iBr.iY - KSizeSearchPromptHeight - KSizeSearchPromptIndent), searchPromptSize);
+
+	TRect resultsRect(rect);
+	resultsRect.iTl.iX = resultsRect.iBr.iX - KResultsViewWidth;
+	iSearchResults->SetRect(resultsRect);
+	}
+
+TInt CHlpMainView::CountComponentControls() const
+	{
+	return 3;
+	}
+
+CCoeControl* CHlpMainView::ComponentControl(TInt aIndex) const
+	{
+	switch (aIndex)
+		{
+	default:
+	case 0:
+		return iView;
+	case 1:
+		return iSearchPrompt;
+	case 2:
+		return iSearchResults;
+		}
+	}
+
+TKeyResponse CHlpMainView::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	// Send cursors to the rich text edwin (kludgy)
+	if	(aKeyEvent.iCode >= EKeyPageUp && aKeyEvent.iCode <= EKeyDownArrow)
+		{
+		if	(iView->IsFocused())
+			return iView->OfferKeyEventL(aKeyEvent, aType);
+		else
+			return iSearchResults->OfferKeyEventL(aKeyEvent, aType);
+		}
+	else
+		{
+		if	(!iSearchPrompt->IsVisible() && aType == EEventKey)
+			{
+			iSearchPrompt->MakeVisible(ETrue);
+			iSearchPrompt->SetFocus(ETrue);
+			}
+		return iSearchPrompt->OfferKeyEventL(aKeyEvent, aType);
+		}
+	}
+
+//
+// FROM MCoeControlObserver
+//
+
+void CHlpMainView::HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType)
+	{
+	if	(aControl == iSearchPrompt && aEventType == EEventStateChanged)
+		{
+		// Action the search
+		DoSearchL();
+
+		// Update the list of topics available for this category
+		iSearchPrompt->MakeVisible(EFalse);
+
+		// Reset the search prompt
+		iSearchPrompt->ResetSearchL();
+		}
+	else if (aControl == iSearchResults && aEventType == EEventRequestExit)
+		{
+		// Finished with results
+		MakeResultsVisible(EFalse);
+		}
+	else if (aControl == iSearchResults && aEventType == EEventStateChanged)
+		{
+		// Display the selected topic that the user searched for
+		iView->UpdateEdwinL(iSearchResults->HelpItemL());
+		}
+	}
+
+//
+// FROM MHlpModelObserver
+//
+
+void CHlpMainView::HandleModelEventL(TInt aEvent)
+	{
+	iLastHelpModelResponse = aEvent;
+
+	if (aEvent == ESearchListAvailable || aEvent == ESearchListNoneFound)
+		{
+		iEikonEnv->BusyMsgCancel();
+
+		// This is a special case which is initiated by full text searching...
+		iModel.SetObserver(iView);
+
+		// Now populate the search results listbox.
+		if	(iLastHelpModelResponse == ESearchListNoneFound)
+			{
+			iEikonEnv->InfoMsg(R_HELPVIEW_TEXT_NO_SEARCH_RESULTS);
+			return;
+			}
+
+		// Get a topic list (because some were found)
+		CHlpList* list = CHlpList::NewL();
+		iModel.LoadListL(list);
+		iSearchResults->PopulateListBoxL(list); // takes ownership
+		MakeResultsVisible(ETrue); // show results
+		}
+	}
+
+//
+// INTERNAL
+//
+
+void CHlpMainView::DoSearchL()
+	{
+	HBufC* searchSpec = iSearchPrompt->SearchTextLC();
+	__ASSERT_DEBUG(searchSpec, Panic(EHlpViewPanicNoSearchSpec));
+
+	// Set this class as the observer (kludge)
+	iModel.SetObserver(this);
+
+	// Request a search
+	iModel.SearchL(EFullTextSearch, searchSpec); // Asynch...
+	iEikonEnv->BusyMsgL(R_HELPVIEW_TEXT_SEARCHING, 0);
+
+	CleanupStack::PopAndDestroy(); // searchSpec
+	}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/THelpView.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,325 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __THELPVIEW_H__
+#define __THELPVIEW_H__
+
+// System includes
+#include <coecntrl.h>
+#include <coecobs.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include "hlpmodel.h"
+#include <techview/eikon.hrh>
+
+// Constants
+const TUid KUidHelpViewApp		= { 0x100068D3 };
+const TInt KNumberOfZoomStates	= 3;
+
+// Classes referenced
+class CHlpModel;
+class CEikRichTextEditor;
+class CEikChoiceList;
+class CHlpAppUi;
+// 
+class CHlpListBox;
+class CHlpSearchPrompt;
+
+
+//
+// ----> MZoomableControl (header)
+//
+class MZoomableControl
+	{
+//
+public: // ZOOM ENUM
+//
+	enum TZoomEvent
+		{
+		EEventZoomIn = EEikCmdZoomIn,
+		EEventZoomOut = EEikCmdZoomOut,
+		EEventZoomDefault
+		};
+
+//
+public:
+//
+	virtual void HandleZoomEventL(TZoomEvent aEvent) = 0;
+	};
+
+
+
+
+
+
+//
+// ----> CHlpView (header)
+//
+class CHlpView : public CCoeControl, public MCoeControlObserver, public MHlpModelObserver, public MZoomableControl
+    {
+//
+public: // ZOOM ENUMERATION
+//
+	enum TZoomStates
+		{
+		EZoomStateOne		= 750,
+		EZoomStateTwo		= TZoomFactor::EZoomOneToOne,
+		EZoomStateThree		= 1250
+		};
+
+//
+public: // CONSTRUCT / DESTRUCT
+//
+	CHlpView(CHlpAppUi& aAppUi, CHlpModel& aModel);
+	~CHlpView();
+	void ConstructL();
+
+//
+public:	// NEW
+//
+	void PopulateCategoryListL();
+	void PopulateTopicListL(const TDesC& aTopic);
+	void UpdateEdwinL(const CHlpItem& aItem);
+
+//
+public: // FROM MZoomableControl
+//
+	void HandleZoomEventL(TZoomEvent aEvent);
+
+//
+public:	// FROM CCoeControl
+//
+	void SizeChanged();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+//
+private: // FROM MCoeControlObserver
+//
+	void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+
+//
+private: // FROM MHlpModelObserver
+//
+	void HandleModelEventL(TInt aEvent);
+
+//
+private: // FROM MPictureFactory
+//
+	void NewPictureL(TPictureHeader& aHdr,const CStreamStore& aDeferredPictureStore) const;
+
+//
+private: // FROM MRichTextStoreResolver
+//
+	const CStreamStore& StreamStoreL(TInt aPos) const;
+
+//
+private: // NEW INTERNAL
+//
+	static TInt ZoomForIndex(TInt aIndex);
+
+//
+private: // MEMBER DATA
+//
+	CCoeControl* iFocusedControl;
+
+	// Referenced
+	CHlpAppUi& iAppUi;
+	CHlpModel& iHelpModel;
+	
+	// Owned
+	TInt iLastResponseFromHelpModel;
+	TInt iCurrentZoom;
+	TZoomFactor iZoom;
+	CEikChoiceList* iHelpCategories;
+	CEikChoiceList* iHelpTopicsForCategory;
+	CEikRichTextEditor* iRichTextEditor;
+
+	CHlpList* iCurrentTopics;
+	CHlpTopic* iLastTopic;
+    };
+
+
+
+
+
+
+
+
+
+//
+// ----> CHlpMainView (header)
+//
+class CHlpMainView : public CCoeControl, public MCoeControlObserver, public MHlpModelObserver
+    {
+//
+public: // CONSTRUCT / DESTRUCT
+//
+	CHlpMainView(CHlpAppUi& aAppUi, CHlpModel& aModel);
+	~CHlpMainView();
+	void ConstructL();
+
+//
+public: // ACCESS
+//
+	TBool IsSearchPromptVisible() const;
+	TBool IsSearchResultVisible() const;
+
+	void ShowSearchPrompt(TBool aShow);
+	void MakeResultsVisible(TBool aVisible);
+
+//
+public:	// FROM CCoeControl
+//
+	void SizeChanged();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+//
+public:	// FROM MCoeControlObserver
+//
+	void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+
+//
+public:	// FROM MHlpModelObserver
+//
+	void HandleModelEventL(TInt aEvent);
+
+//
+public: // INTERNAL
+//
+	void DoSearchL();
+	
+//
+private: // MEMBER DATA
+//
+	// Referenced
+	CHlpAppUi& iAppUi;
+	CHlpModel& iModel;
+
+	// Owned
+	TInt iLastHelpModelResponse;
+	CHlpView* iView;
+	CHlpListBox* iSearchResults;
+	CHlpSearchPrompt* iSearchPrompt;
+	};
+
+
+
+
+
+
+
+
+
+//
+// ----> CHlpAppUi (header)
+//
+class CHlpDocument : public CEikDocument
+	{
+//
+public:
+//
+	CHlpDocument(CEikApplication& aApp);
+	~CHlpDocument();
+
+	void NewDocumentL();
+	inline CHlpModel& Model() const { return *iModel; }
+	inline CHlpAppUi& AppUi() const;
+
+//
+private: // FROM CEikDocument
+//
+	CEikAppUi* CreateAppUiL();
+
+//
+private: // MEMBER DATA
+//
+	CHlpModel* iModel;
+	};
+
+
+
+
+
+
+
+
+//
+// ----> CHlpApplication (header)
+//
+class CHlpApplication : public CEikApplication
+	{
+//
+private: // FROM CEikApplication - pure virutal
+//
+	CApaDocument* CreateDocumentL();
+	// FROM CApaApplication - pure virutal	
+	TUid AppDllUid() const;
+	};
+
+
+
+
+
+
+
+
+//
+// ----> CHlpAppUi (header)
+//
+class CHlpAppUi : public CEikAppUi
+    {
+//
+public:
+//
+	~CHlpAppUi();
+    void ConstructL();
+
+	inline CHlpDocument& Document() const	{ return *STATIC_CAST(CHlpDocument*, iDocument); }
+	inline CHlpMainView& View() const		{ return *iView; }
+	inline void SetZoomHandler(MZoomableControl* aZoomableControl) { iZoomHandler = aZoomableControl; }
+
+//
+private: // FROM CEikAppUi
+//
+	void HandleCommandL(TInt aCommand);
+	void DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane);
+
+//
+private: // NEW
+//
+	void HandleZoomL(TInt aZoomEvent);
+
+//
+private: // MEMBER DATA
+//
+	CHlpMainView* iView;
+	MZoomableControl* iZoomHandler;
+	};
+
+
+
+
+inline CHlpAppUi& CHlpDocument::AppUi() const
+	{
+	return *STATIC_CAST(CHlpAppUi*, iAppUi); 
+	}
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/THelpView.hrh	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,21 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+enum
+	{
+	EHlpCmdFirst = 0x10000,
+	EHlpCmdSearch,
+	EHlpCmdSearchDone
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/THelpView.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,63 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+  TARGET        thelpview.exe
+  TARGETTYPE    exe
+
+TARGETPATH	/sys/bin
+epocstacksize 0x5000
+
+
+
+CAPABILITY		None
+UID			0x100039CE	0x100068D3
+VENDORID		0x70000001
+
+SOURCEPATH		../tsrc
+
+SOURCE			THelpView.cpp
+SOURCE			thelpviewctrls.cpp
+
+start resource	THelpView.rss
+header
+targetpath	/resource/apps
+lang            SC
+end
+
+start resource	THelpView_reg.rss
+targetpath	/private/10003a3f/apps
+lang		sc
+end
+
+
+
+USERINCLUDE		.
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib	
+LIBRARY			cone.lib
+LIBRARY			apparc.lib
+LIBRARY			hlpmodel.lib
+LIBRARY			gdi.lib
+LIBRARY			bafl.lib
+LIBRARY			form.lib
+
+
+LIBRARY			eikcore.lib		// - Concrete app framework classes
+LIBRARY			eikcoctl.lib	// - Core controls that will be present in every DFRD
+LIBRARY			eikctl.lib		// - Other common controls
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/THelpView.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,87 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME THVW
+
+#include <techview/eikon.rh>
+#include "THelpView.hrh"
+
+//
+// STANDARD APP RESOURCES
+//
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	menubar	= r_helpview_menubar;
+	hotkeys = r_helpview_hotkeys;
+	}
+
+RESOURCE HOTKEYS r_helpview_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit;			key='e'; },
+        HOTKEY { command=EHlpCmdSearchDone;		key='d'; } 
+        };
+    }
+
+RESOURCE MENU_BAR r_helpview_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane = r_helpview_file_menu;	txt="File"; },
+        MENU_TITLE { menu_pane = r_helpview_view_menu;	txt="View"; },
+        MENU_TITLE { menu_pane = r_helpview_tools_menu;	txt="Tools"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_helpview_file_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EEikCmdExit; txt="Close"; }
+        };
+    }
+
+RESOURCE MENU_PANE r_helpview_view_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EEikCmdZoomIn;	txt="Zoom in"; },
+		MENU_ITEM { command=EEikCmdZoomOut; txt="Zoom out"; }
+		};
+	}
+
+RESOURCE MENU_PANE r_helpview_tools_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EHlpCmdSearch;		txt="Search"<KEllipsis>; },
+ 		MENU_ITEM { command=EHlpCmdSearchDone;	txt="Hide results"; }
+		};
+    }
+
+
+
+//
+// TEXT RESOURCEs
+//
+RESOURCE TBUF r_helpview_text_no_search_results { buf = "No search results found"; }
+RESOURCE TBUF r_helpview_text_no_topic_for_id	{ buf = "Topic not found"; }
+RESOURCE TBUF r_helpview_text_searching			{ buf = "Searching"<KEllipsis>; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/THelpView_reg.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,25 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x100068D3 // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = THelpView;
+	localisable_resource_file="\\resource\\apps\\THelpView";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/TLoader.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,546 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+// System includes
+#include <e32test.h>
+#include <f32file.h>
+#include <bautils.h>
+
+// Globals
+static RFs								TheFs;
+static RTest							TheTest(_L("TLOADER - Test help file loading schema"));
+static CTrapCleanup*					TheTrapCleanup;
+
+// Constants
+
+// Literal constants
+_LIT(KHlpFileSpec,			"*.h*");
+
+_LIT(KHlpFileSearchPath,	"\\Resource\\Help\\");
+
+// Classes referenced
+class CHlpFileEntry;
+
+// Typedefs
+typedef CArrayPtrFlat<CHlpFileEntry> CHlpFileList;
+
+
+//
+// ----> CHlpFileEntry (header)
+//
+
+class CHlpFileEntry : public CBase
+	{
+public:
+	enum THelpFileType
+		{
+		EPrimary,
+		ESecondary,
+		EGeneral,			
+		EInpropperLocale,
+		EDiscarded
+		};
+
+public:
+	static CHlpFileEntry* NewLC(TDriveUnit aDrive, const TDesC& aFile, TLanguage aLanguage);
+
+	inline TDriveUnit Drive() const { return iDrive; }
+	inline const TDesC& FileName() const { return iFile; }
+	inline const TDesC& Name() const { return iName; }
+	inline THelpFileType Type() const { return iType; }
+	inline void SetType(THelpFileType aType) { iType = aType; }
+	inline TLanguage HelpFileLocale() const { return iHelpFileLocale; }
+	void GetFullNameAndPath(TDes& aName) const;
+
+private:
+	CHlpFileEntry(TDriveUnit aDrive, const TDesC& aFile) : iHelpFileLocale(ELangOther), iFile(aFile), iDrive(aDrive) {}
+	void ConstructL(TLanguage aLanguage);
+	void MakeLocaleSpecificExtension(TDes& aNameToAppendTo, TLanguage aLanguage) const;
+	TLanguage NextLanguage(TLanguage aLanguage) const;
+
+private:
+	TLanguage iHelpFileLocale; // Only valid when the type is not EGeneral
+	TName iName;
+	TName iFile;
+	TDriveUnit iDrive;
+	THelpFileType iType;
+	};
+
+
+
+
+//
+// ----> CHlpFileEntry (source)
+//
+
+
+void CHlpFileEntry::ConstructL(TLanguage aLanguage)
+	{
+	_LIT(KDefaultHelpFileExtension, ".hlp");
+
+	// Decide what type of file this is....
+	TFileName file;
+
+	TChar driveLetter;
+	User::LeaveIfError(RFs::DriveToChar(iDrive, driveLetter));
+	file.Append(driveLetter);
+	file.Append(':');
+	file.Append(KHlpFileSearchPath);
+	file.Append(iFile);
+
+	TParsePtrC parser(file);
+	if	(!parser.ExtPresent())
+		User::Leave(KErrCorrupt);
+
+	iName.Copy(parser.Name());
+
+	TPtrC extension(parser.Ext());
+	if	(extension.CompareF(KDefaultHelpFileExtension) == 0)
+		iType = EGeneral;
+	else
+		{
+		TFileName idealHelpFileName(parser.DriveAndPath());
+		idealHelpFileName.Append(parser.Name());
+
+		MakeLocaleSpecificExtension(idealHelpFileName, aLanguage);
+
+		if	(idealHelpFileName.CompareF(file) == 0)
+			{
+			// This is a primary match
+			iType = EPrimary;
+			iHelpFileLocale = aLanguage;
+			}
+		else
+			{
+			// Is it a secondary match? If it isn't then it should be discarded....
+			idealHelpFileName = parser.DriveAndPath();
+			idealHelpFileName.Append(parser.Name());
+	
+			// Get the nearest secondary language
+			aLanguage = NextLanguage(aLanguage);
+			MakeLocaleSpecificExtension(idealHelpFileName, aLanguage);
+
+			if	(idealHelpFileName.CompareF(file) == 0)
+				{
+				iHelpFileLocale = aLanguage;
+				iType = ESecondary;
+				}
+			else
+				{
+				TLex lexer(extension);
+
+				// Skip the leading .H
+				lexer.Inc(2);
+				
+				// Lex the value, but silently ignore errors
+				TUint localeAsUnsignedInt = ELangOther;
+				lexer.Val(localeAsUnsignedInt);
+				iHelpFileLocale = STATIC_CAST(TLanguage, localeAsUnsignedInt);
+				iType = EInpropperLocale;
+				}
+			}
+		}
+	}
+
+
+TLanguage CHlpFileEntry::NextLanguage(TLanguage aLanguage) const
+	{
+	switch(aLanguage)
+		{
+	case ELangSwissFrench:
+		return ELangFrench;
+	case ELangSwissGerman:
+		return ELangGerman;
+	case ELangBelgianFlemish:
+		return ELangDutch;
+	case ELangBelgianFrench:
+		return ELangFrench;
+	default:
+		return ELangEnglish;
+		}
+	}
+
+
+CHlpFileEntry* CHlpFileEntry::NewLC(TDriveUnit aDrive, const TDesC& aFile, TLanguage aLanguage)
+	{
+	CHlpFileEntry* self = new(ELeave) CHlpFileEntry(aDrive, aFile);
+	CleanupStack::PushL(self);
+	self->ConstructL(aLanguage);
+	return self;
+	}
+
+
+//
+//
+//
+
+void CHlpFileEntry::GetFullNameAndPath(TDes& aName) const
+	{
+	TChar driveLetter = '?';
+	RFs::DriveToChar(Drive(), driveLetter);
+	aName.Zero();
+	aName.Append(driveLetter);
+	aName.Append(':');
+	aName.Append(KHlpFileSearchPath);
+	aName.Append(FileName());
+	}
+
+
+void CHlpFileEntry::MakeLocaleSpecificExtension(TDes& aNameToAppendTo, TLanguage aLanguage) const
+	{
+	_LIT(KLocaleExtensionFormat, ".H%02d");
+	aNameToAppendTo.AppendFormat(KLocaleExtensionFormat, aLanguage);
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static void PrintEntryL(const TDesC& aPrompt, const CHlpFileEntry& aEntry, TInt aNumber = -1)
+	{
+	TFileName pFileName(aEntry.FileName());
+	TChar driveLetter = '?';
+	RFs::DriveToChar(aEntry.Drive(), driveLetter);
+
+	//HBufC* buf = HBufC::NewLC(aPrompt.Length() + pFileName.Length() + KHlpFileSearchPath().Length() + 40);
+	//TDes pBuf(buf->Des());
+	TBuf<256> pBuf;		//Tempory fix to allow this to work in Code Warrior builds.
+
+	
+	if	(aNumber >= KErrNone)
+		pBuf.Format(_L("\n%S %d: %c:%S%S\n"), &aPrompt, aNumber, static_cast<TUint>(driveLetter), &KHlpFileSearchPath(), &pFileName);
+	else
+		pBuf.Format(_L("\n%S: %c:%S%S\n"), &aPrompt, static_cast<TUint>(driveLetter), &KHlpFileSearchPath(), &pFileName);
+
+	TheTest.Printf(pBuf);
+
+	//CleanupStack::PopAndDestroy();
+	}
+
+
+// Defines
+#define __PRINT_FILE(aPrompt, aEntry)				(PrintEntryL(aPrompt, aEntry))
+#define __PRINT_FILE_NO(aPrompt, aEntry, aNumber)	(PrintEntryL(aPrompt, aEntry, aNumber))
+
+
+static CHlpFileList* BuildListForDriveLC(TDriveUnit aDrive, RFs& aFsSession)
+//
+//	Generate a list of help files for the specified drive
+//
+	{
+	CHlpFileList* list = new(ELeave) CHlpFileList(5);
+	CleanupStack::PushL(list);
+
+	// Generate the folder spec to search in
+	TFileName searchSpec;
+	TChar driveLetter;
+	User::LeaveIfError(RFs::DriveToChar(aDrive, driveLetter));
+	searchSpec.Append(driveLetter);
+	searchSpec.Append(':');
+	searchSpec.Append(KHlpFileSearchPath);
+	searchSpec.Append(KHlpFileSpec);
+
+	CDir* dirList;
+
+	TLanguage language(User::Language());
+	TFindFile finder(aFsSession);
+	TInt ret = finder.FindWildByPath(searchSpec, NULL, dirList);
+	if	(ret < KErrNone)
+		{
+		if	(ret == KErrNotFound)
+			return list;
+		else
+			User::Leave(ret);
+		}
+	CleanupStack::PushL(dirList);
+
+	// Add files to help file list
+	TInt count = dirList->Count();
+	for(TInt i=0; i<count; i++)
+		{
+		CHlpFileEntry* entry = CHlpFileEntry::NewLC(aDrive, (*dirList)[i].iName, language);
+		__PRINT_FILE_NO(_L("Found entry during dir scan"), *entry, i);
+
+		// At this point we now check to see if there is already a file with the same name
+		// but a different extension already present in the array. If there is already an
+		// entry with a lower 'rating' (e.g. ESecondary) than 'entry' we remove the old one
+		// and add the new, otherwise, we just ignore the new entry as it's not of sufficient
+		// 'quality.'
+		TBool foundMatch = EFalse;
+		
+		TInt existingEntryCount = list->Count();
+		for(TInt j=existingEntryCount-1; j>=0; j--)
+			{
+			CHlpFileEntry* existingEntry = list->At(j);
+			
+			// Is the file already present in the array?
+			if	(existingEntry->Name().CompareF(entry->Name()) == 0)
+				{
+				foundMatch = ETrue;
+				__PRINT_FILE(_L("Entry name duplicate"), *entry);
+
+				// Names are the same but extensions differ in some way...
+				if	(entry->Type() < existingEntry->Type())
+					{
+					__PRINT_FILE(_L("New entry is better than the existing entry with the same name.\n Replacing existing entry with:"), *entry);
+					// The new entry is better than the existing one, so delete the
+					// existing entry and append the new one
+					list->Delete(j);
+					delete existingEntry;
+					list->AppendL(entry);
+					break;
+					}
+				else
+					{
+					// The entry is of lower 'quality' than the existing entries
+					// so we destroy it
+					__PRINT_FILE(_L("Discarding low quality entry"), *entry);
+					CleanupStack::PopAndDestroy(); // entry
+					break;
+					}
+				}
+			}
+
+		// If the file was not present in the existing array then we're free to
+		// add it to the array. Otherwise, we assume that it's been deleted or added
+		// as appropriate by the looping code above.
+		if	(!foundMatch)
+			{
+			list->AppendL(entry);
+			CleanupStack::Pop(); // entry
+			}
+		}
+	CleanupStack::PopAndDestroy(); // dirList
+
+	return list;
+	}
+
+
+static TBool DiskPresent(TInt aDrive)
+	{
+	TDriveList list;
+	if	(TheFs.DriveList(list) < KErrNone)
+		return EFalse;
+
+	TDriveInfo info;
+	TInt error = TheFs.Drive(info, aDrive);
+	if	(error < KErrNone)
+		return EFalse;
+
+	return (list[aDrive] && info.iType != EMediaNotPresent);
+	}
+
+
+static void TestL()
+	{
+	CHlpFileList* masterList = new(ELeave) CHlpFileList(5);
+	CleanupStack::PushL(masterList);
+
+	TInt i = EDriveY;
+	FOREVER
+		{
+		// Make sure we go from Y -> C, then do Z last
+		if	(i < EDriveC)
+			i = EDriveZ;
+		
+		if	(DiskPresent(i))
+			{
+
+			{
+			TChar driveLetter = '?';
+			RFs::DriveToChar(i, driveLetter);
+			TheTest.Printf(_L("\n\nDisk %c: is installed..."), static_cast<TUint>(driveLetter));
+			}
+
+			// This generates a list for a specific directory on the specified drive.
+			CHlpFileList* list = BuildListForDriveLC(TDriveUnit(i), TheFs);
+
+			// We now compare this list with our 'master' list to check for duplicates,
+			// better matches, etc.
+			TInt masterCount = masterList->Count();
+			for(TInt j=masterCount-1; j>=0; j--)
+				{
+				CHlpFileEntry* entry = masterList->At(j);
+
+				// This bit checks to see if an entry in the master list 
+				// collides with an entry in the list we have just generated...
+				//TBool foundCollision = EFalse;
+				TInt newListCount = list->Count();
+				for(TInt k=newListCount-1; k>=0; k--)
+					{
+					CHlpFileEntry* newEntry = list->At(k);
+					__PRINT_FILE_NO(_L("Performing drive resolution on entry"), *newEntry, k);
+
+					if	(entry->Name().CompareF(newEntry->Name()) == 0)
+						{
+						// Names are the same, so compare priorities...
+						if	(newEntry->Type() == entry->Type())
+							{
+							// A file with the same name AND extension is already present in the array,
+							// but are the UID's the same? If they are NOT, then the file
+							// should be treated as a different help file to that of the 
+							// existing array entry.
+							TFileName file;
+
+							TEntry existingTEntry;
+							entry->GetFullNameAndPath(file);
+							User::LeaveIfError(TheFs.Entry(file, existingTEntry));
+
+							TEntry newTEntry;
+							newEntry->GetFullNameAndPath(file);
+							User::LeaveIfError(TheFs.Entry(file, newTEntry));
+
+							if	(existingTEntry.MostDerivedUid() == newTEntry.MostDerivedUid())
+								{
+								// The uids and names of the files are the same. If the extensions are also the same
+								// then we load the file on the drive tending to C:. However, if the extensions differ
+								// we load the file with the extension tending to 01, i.e. UK English.
+								if	(entry->FileName().CompareF(newEntry->FileName()) == 0)
+									{
+									// Name, uid and extensions are the same, therefore load the file on the drive
+									// nearest C:. We do this by setting the priority of the existing entry to
+									// EDsicarded so that it will force the next 'if' statement to fire, and hence
+									// the existing entry will be replaced by the new one.
+									entry->SetType(CHlpFileEntry::EDiscarded);
+									__PRINT_FILE(_L("Uid, name, extension match. Saving entry tending to C: which is"), *newEntry);
+									}
+								else
+									{
+									// Name and uid the same, extensions different therefore load the file with
+									// extension nearest to 01. If the new entry is nearer 01, then we set the
+									// existing entry to discarded and therefore it will be removed at the next
+									// 'if' statement.
+									if	(entry->HelpFileLocale() > newEntry->HelpFileLocale())
+										{
+										entry->SetType(CHlpFileEntry::EDiscarded);
+										__PRINT_FILE(_L("Uid & name match, extensions differ.\n Saving entry tending to H01 which is"), *newEntry);
+										}
+									else
+										{
+										__PRINT_FILE(_L("Uid & name match, extensions differ.\n Discarding new entry because it tends to H99"), *newEntry);
+										}
+									}
+								}
+							else
+								{
+								// This entry should be treated as a separate entity from the current
+								// existing entry because it has different uid's. Therefore, we just
+								// move on to check against the next existing entry in the list
+								__PRINT_FILE(_L("Duplicate name and extension, but different uids detected. New entry == "), *newEntry);
+								continue;
+								}
+							}
+
+						// Is the new entry a better match than the existing one?
+						if	(newEntry->Type() < entry->Type())
+							{
+							// The new entry is of a better 'quality' than the existing
+							// entry, so remove the old and add the new...
+							__PRINT_FILE(_L("Removing stored (new better match found)"), *entry);
+
+							//foundCollision = ETrue;
+							masterList->Delete(j);
+							delete entry;
+							masterList->AppendL(newEntry);
+
+							// Remove it from the new list as the master list now takes
+							// ownership...
+							list->Delete(k);
+							break;
+							}
+						else
+							{
+							// This entry is of lower quality than an existing
+							// entry in the master list, so we can safely discard it.
+							delete newEntry;
+							list->Delete(k);
+							}
+						continue;
+						}
+					}
+				}
+
+			// At this point, anything that is left int the new list should
+			// be valid to add to the master list...
+			TInt newListCount = list->Count();
+			for(TInt k=newListCount-1; k>=0; k--)
+				{
+				__PRINT_FILE_NO(_L("Saving entry"), *list->At(k), k);
+				masterList->AppendL(list->At(k));
+				}
+
+			// We only destroy the list, rather than list+contents because each element
+			// in the new list is now guaranteed to be present in the master list.
+			CleanupStack::PopAndDestroy(); // list
+			}
+
+		if	(i-- == EDriveZ)
+			break;
+		}
+
+
+	// Print out the master list
+	TheTest.Printf(_L("\n\nThe help files that would be loaded are:-"));
+	TheTest.Printf(_L("\n========================================="));
+	TInt masterCount = masterList->Count();
+	for(i=0; i<masterCount; i++)
+		__PRINT_FILE_NO(_L("Entry"), *masterList->At(i), i);
+
+	masterList->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(); // masterList
+	}
+
+/**
+@SYMTestCaseID PIM-TLOADER-0001 
+*/
+
+GLDEF_C TInt E32Main()
+//
+// Test Help file loading
+//
+    {
+	__UHEAP_MARK;
+
+	TheTest.Title();
+	TheTest.Start(_L("@SYMTestCaseID PIM-TLOADER-0001"));
+	TheTest(TheFs.Connect() == KErrNone);
+
+
+	TheTrapCleanup = CTrapCleanup::New();
+	if	(!TheTrapCleanup)
+		return KErrNoMemory;
+
+	TRAPD(r, TestL());
+	TheTest(r == KErrNone);
+
+	delete TheTrapCleanup;
+	TheFs.Close();
+	TheTest.End();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/TLoader.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// TLOADER.MMP
+//
+
+TARGET			tloader.exe
+TARGETTYPE		EXE
+CAPABILITY   None
+SOURCEPATH		../tsrc
+SOURCE			TLoader.cpp
+
+USERINCLUDE		../tsrc
+
+SYSTEMINCLUDE	/epoc32/include
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+
+
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/TMODEL.CPP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,132 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Test Help Model module
+// 
+//
+
+// System includes
+#include <e32test.h>
+#include <f32file.h>
+
+// User includes
+#include "hlpmodel.h"
+
+// Globals
+static RFs					TheFs;
+static RTest				TheTest(_L("TMODEL - Test Help Model API"));
+static CTrapCleanup*		TheTrapCleanup;
+static CActiveScheduler*	TheScheduler;
+
+// Constants
+const TInt KTestCleanupStack=0x20;
+
+
+/**
+@SYMTestCaseID PIM-TMODEL-0001 
+*/
+
+static void Test1L()
+	{
+	__UHEAP_MARK;
+	TheTest.Next(_L("@SYMTestCaseID PIM-TMODEL-0001 Test 1: Test memory leaks in help model"));
+	CHlpModel::NewLC(TheFs, NULL);
+	CleanupStack::PopAndDestroy(); // model
+	__UHEAP_MARKEND;
+
+	__UHEAP_MARK;
+	CHlpModel* model = CHlpModel::NewLC(TheFs, NULL);
+	model->OpenL();
+	CleanupStack::PopAndDestroy(); // model
+	__UHEAP_MARKEND;
+	}
+
+/**
+@SYMTestCaseID PIM-TMODEL-0002
+*/
+	
+static void Test2L()
+	{
+	__UHEAP_MARK;
+	TheTest.Next(_L("@SYMTestCaseID PIM-TMODEL-0002 Test 2: Test category listing"));
+	CHlpModel* model = CHlpModel::NewLC(TheFs, NULL);
+	model->OpenL();
+
+	TBuf<KHlpMaxTextColLength> entry;
+	CDesCArray* catList = new(ELeave) CDesCArrayFlat(2);
+	CleanupStack::PushL(catList);
+
+	model->CategoryListL(catList);
+	for (TInt i=0; i<catList->Count(); i++)
+		{
+		entry.Append(catList->MdcaPoint(i));
+		TheTest.Printf(_L("\n%S\n"), &entry);
+		}
+	//TheTest.Console()->Getch();
+	model->CloseL();
+	CleanupStack::PopAndDestroy(2); // catList, model
+	__UHEAP_MARKEND;
+	}
+
+static void setupFileServerAndSchedulerL()
+//
+// Initialise the cleanup stack.
+//
+	{
+	TheTest(TheFs.Connect() == KErrNone);
+	TheScheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(TheScheduler);
+	}
+
+
+static void setupCleanup()
+//
+// Initialise the cleanup stack.
+//
+    {
+	TheTrapCleanup = CTrapCleanup::New();
+	TheTest(TheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	TheTest(r==KErrNone);
+	}
+
+GLDEF_C TInt E32Main()
+//
+// Test Help Model API
+//
+    {
+	__UHEAP_MARK;
+
+	TheTest.Title();
+	setupCleanup();
+	
+	TRAPD(r,
+		setupFileServerAndSchedulerL();
+		Test1L();
+		Test2L();
+		)
+	TheTest(r==KErrNone);
+
+	delete TheScheduler;
+	delete TheTrapCleanup;
+	TheFs.Close();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/TMODEL.MMP	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// TMODEL.MMP
+//
+
+TARGET			TMODEL.EXE
+TARGETTYPE		EXE
+CAPABILITY   None
+SOURCEPATH		..\TSRC
+SOURCE			TMODEL.CPP
+
+USERINCLUDE		..\TSRC
+USERINCLUDE		..\INC
+USERINCLUDE		..\DBWRITER
+
+SYSTEMINCLUDE	..\INC
+SYSTEMINCLUDE	..\DBWRITER
+SYSTEMINCLUDE	\EPOC32\INCLUDE
+
+LIBRARY			EUSER.LIB	EFSRV.LIB	BAFL.LIB	HLPMODEL.LIB
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/TSearch.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,717 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Test Help Model module to check the PlatSec search order.
+// This test uses and additional drive typically F: It should be mapped in the epoc.ini file.
+// Mapping is achieved for example thus: _EPOC_DRIVE_F c:\temp
+// 
+//
+
+// System includes
+#include <e32std.h>
+#include <e32def.h>
+
+
+#include <e32test.h>
+#include <e32math.h>
+#include <f32file.h>
+#include <coehelp.h>
+
+// User includes
+#include <bautils.h>
+#include "HLPMODEL.H"
+#include <coreappstest/testserver.h>
+#include "SearchOrderTest.h"
+
+// Globals
+static TInt64				TheSeed;
+static RFs					TheFs;
+static RTest				TheTest(_L("TSearch - Test Help Model Searching"));
+static CTrapCleanup*		TheTrapCleanup;
+static CActiveScheduler*	TheScheduler;
+
+// Constants
+const TInt KTestCleanupStack=0x20;
+
+
+// Panic enum
+enum THlpPanic
+	{
+	EHlpPanicNoBossFile,
+	EHlpPanicLast
+	};
+
+
+//
+// ---------> Global functions
+//
+
+static void Panic(THlpPanic aPanic)
+	{
+	_LIT(KHlpPanicCategory, "TSearch");
+	User::Panic(KHlpPanicCategory, aPanic);
+	}
+
+
+static TInt Rand(const TInt aLow, const TInt aHigh)
+//
+//	Generate a random number based upon a seed and a range
+//
+	{
+	TReal initialRand = (Math::FRand(TheSeed) * (aHigh - aLow));
+	TInt32 rand;
+
+	// Round to 0 decimal places, ie. the nearest whole numer
+	Math::Round(initialRand, initialRand, 0);
+	Math::Int(rand, initialRand);
+
+	//aSeed = seed;
+	return (aLow + rand);
+	}
+
+
+
+//
+// ---------> CHlpSearchTest (header)
+//
+class CHlpSearchTest: public CBase, public MHlpModelObserver
+	{
+public: // CONSTRUCT / DESTRUCT
+	static void TestHelpModelLD(TBool aOomTesting = EFalse);
+	~CHlpSearchTest();
+
+private:
+	CHlpSearchTest();	
+
+public: // NEW
+	void TestL(TBool aOomTesting = EFalse);
+
+public: // FROM MHlpModelObserver
+	void HandleModelEventL(TInt aEvent);
+
+private: // TESTING METHODS
+	void BasicCreateAndCloseL();
+	void IndexListL(TBool aOomTesting = EFalse);
+	void CategoryListL(TBool aOomTesting = EFalse);
+	void TopicListForCategoryL();
+	void ContextSearchL(TBool aOomTesting = EFalse);
+	void IndexSearchL();
+	void TextSearchL(TBool aOomTesting = EFalse);
+	void CategoryUidSearchL(TBool aOomTesting = EFalse);
+
+private:
+	void Reset();
+	TBool FileExists(const TDesC& aFileName);
+	CDesCArray* CategoryListLC();
+	
+private: // MEMBER DATA
+	TInt iResponseCount;
+	TInt iLastHelpModelResponse;
+	TInt iSearchProgressCount;
+	TInt iSearchCancelValue;
+	TBool iIsAsynchronous;
+	TBool iSchedulerStarted;
+	CHlpModel* iModel;
+	};
+
+
+
+
+
+
+//
+// ---------> CHlpSearchTest (source)
+//
+
+CHlpSearchTest::CHlpSearchTest()
+	{
+	}
+
+
+CHlpSearchTest::~CHlpSearchTest()
+	{
+	delete iModel;
+	}
+
+
+void CHlpSearchTest::TestHelpModelLD(TBool aOomTesting)
+	{
+	CHlpSearchTest* self = new(ELeave) CHlpSearchTest();
+	CleanupStack::PushL(self);
+	self->TestL(aOomTesting);
+	CleanupStack::PopAndDestroy();
+	}
+
+
+//
+//
+//
+
+
+void CHlpSearchTest::TestL(TBool aOomTesting)
+	{
+	iModel = CHlpModel::NewL(TheFs, this);
+	iModel->OpenL();
+
+
+	BasicCreateAndCloseL();
+	IndexListL(aOomTesting);
+	CategoryListL(aOomTesting);
+	TopicListForCategoryL();
+	ContextSearchL(aOomTesting);
+	TextSearchL(aOomTesting);
+	CategoryUidSearchL(aOomTesting);
+	}
+
+
+//
+//
+//
+
+void CHlpSearchTest::BasicCreateAndCloseL()
+	{
+	TheTest.Console()->ClearScreen();
+	TheTest.Printf(_L("Testing basic open, close and destruction\n"));
+
+	__UHEAP_MARK;
+	CHlpModel::NewLC(TheFs, NULL);
+	CleanupStack::PopAndDestroy(); // model
+	__UHEAP_MARKEND;
+
+	__UHEAP_MARK;
+	CHlpModel* model = CHlpModel::NewLC(TheFs, NULL);
+	model->OpenL();
+	CleanupStack::PopAndDestroy(); // model
+	__UHEAP_MARKEND;
+	}
+
+void CHlpSearchTest::IndexListL(TBool aOomTesting)
+	{
+	TheTest.Console()->ClearScreen();
+	TheTest.Printf(_L("Testing index listing\n"));
+	Reset();
+	
+	iModel->SearchL(EIndexList);
+
+	if(!aOomTesting)
+		{
+		TheTest(iLastHelpModelResponse == EIndexListAvailable);
+		}
+	TheTest(iResponseCount == 1);
+
+	// Load the complete list of entries for all help files
+	CHlpList* list = CHlpList::NewLC();
+	iModel->LoadListL(list);
+	TheTest.Printf(_L("\tComplete index listing for all help files..."));
+	TInt i=0;
+	for(i=0; i<list->MdcaCount(); i++)
+		{
+		CHlpItem* item = list->Item(i);
+		TPtrC pItem(item->Title());
+		TheTest.Printf(_L("\nIndex list [0x%08x][indexId=%d]: %S "), item->HelpFileUid(), item->Id(), &pItem);
+		}
+	TheTest.Printf(_L("\n"));
+
+	// Next select an item from the complete list (at random)
+
+	if(list->MdcaCount()!=0)
+		{
+		CHlpItem* item = list->Item(Rand(0, list->MdcaCount()-1));
+		
+		// Save these for later...
+		TUint helpFileUid = item->HelpFileUid().iUid;
+		TUint indexId = item->Id();
+
+		// Next perform a topic search based on this item
+		iModel->IndexSearchL(*item);
+		TheTest(iLastHelpModelResponse == EIndexSearchListAvailable);
+		CleanupStack::PopAndDestroy(); // list
+
+		// Next load the list of topics which match the index id
+		list = CHlpList::NewLC();
+		iModel->LoadListL(list);
+		TheTest.Printf(_L("\tTopic listing in help file 0x%08x, whose index id = %d"), helpFileUid, indexId);
+		for(i=0; i<list->MdcaCount(); i++)
+			{
+			CHlpItem* item = list->Item(i);
+			TPtrC pItem(item->Title());
+			TheTest.Printf(_L("\nTopic [Uid: 0x%08x]: %S "), item->HelpFileUid(), &pItem);
+			}
+	}
+	TheTest.Printf(_L("\n"));
+
+	CleanupStack::PopAndDestroy(); // list
+	}
+
+
+void CHlpSearchTest::CategoryListL(TBool aOomTesting)
+	{
+	TheTest.Console()->ClearScreen();
+	TheTest.Printf(_L("Testing category listing\n"));
+
+	Reset();
+	iModel->SearchL(ECategoryList);
+	if(!aOomTesting)
+		{
+		TheTest(iLastHelpModelResponse == ECategoryListAvailable);
+		}
+
+	// Display the index listing...
+	CHlpList* list = CHlpList::NewLC();
+	iModel->LoadListL(list);
+
+	for(TInt i=0; i<list->MdcaCount(); i++)
+		{
+		TPtrC pItem(list->MdcaPoint(i));
+		TheTest.Printf(_L("\nCategory item %d: %S"), i, &pItem);
+		}
+	TheTest.Printf(_L("\n"));
+	CleanupStack::PopAndDestroy(); // list
+	}
+
+
+void CHlpSearchTest::TopicListForCategoryL()
+	{
+	TheTest.Printf(_L("Testing topic listing\n"));
+	Reset();
+
+	// First get a category listing, then get the list of topics
+	// for each specified category.
+	CDesCArrayFlat* array = STATIC_CAST(CDesCArrayFlat*, CategoryListLC());
+	const TInt count = array->Count();
+	for(TInt i=0; i<count; i++)
+		{
+		TPtrC pItem = array->MdcaPoint(i);
+		TheTest.Printf(_L("\nTopics for Category %S\n"), &pItem);
+
+		// Calling this will result in the topics for this category
+		// being printed out in the mixin handler
+		iModel->SearchL(ETopicListForCategory, pItem);
+		}
+	CleanupStack::PopAndDestroy(); // array
+	}
+
+
+void CHlpSearchTest::ContextSearchL(TBool aOomTesting)
+	{
+	TheTest.Printf(_L("Testing context searching\n"));
+	Reset();
+
+	// Context search for an item we know exists
+	_LIT(KContext1,	"This_is_a_multi_word_context2");
+
+	TUid uid = { 16777216 };
+	TCoeHelpContext coeSearchContext(uid, KContext1);
+	iModel->ContextSearchL(coeSearchContext);
+	if(!aOomTesting)
+		{
+		TheTest(iLastHelpModelResponse == ETopicAvailable);
+		}
+
+	
+	// Context search for an item we know doesn't exist
+	_LIT(KContext2,	"ABCDEFG");
+
+	TUid uid2 = { 00000000 };
+	TCoeHelpContext coeSearchContext2(uid2, KContext2);
+	iModel->ContextSearchL(coeSearchContext2);
+	TheTest(iLastHelpModelResponse == ETopicNotFound);
+	}
+
+
+void CHlpSearchTest::TextSearchL(TBool aOomTesting)
+	{
+	if(aOomTesting)
+		return;
+
+	_LIT(KFullTextShouldNotBeFound,	"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+	TheTest.Printf(_L("Testing text searching (when item shouldn't be found)\n"));
+
+	Reset();
+	iSchedulerStarted = EFalse;
+	iIsAsynchronous = ETrue;
+	iModel->SearchL(EFullTextSearch, KFullTextShouldNotBeFound);
+	iSchedulerStarted = ETrue;
+	CActiveScheduler::Start();
+	TheTest(iLastHelpModelResponse == ESearchListNoneFound);
+
+	_LIT(KFullTextShouldBeFound,	"boss");
+	TheTest.Printf(_L("Testing text searching (when item should be found)\n"));
+
+	Reset();
+	iSchedulerStarted = EFalse;
+	iIsAsynchronous = ETrue;
+	iModel->SearchL(EFullTextSearch, KFullTextShouldBeFound);
+	iSchedulerStarted = ETrue;
+	CActiveScheduler::Start();
+	TheTest(iLastHelpModelResponse == ESearchListAvailable);
+
+	TheTest.Printf(_L("\tTesting asynch cancel function\n"));
+	TInt searchCancelValue = Max(1, iSearchProgressCount / 2); // stop half way through
+
+	Reset();
+	iSearchCancelValue = searchCancelValue;
+	iSchedulerStarted = EFalse;
+	iIsAsynchronous = ETrue;
+	iModel->SearchL(EFullTextSearch, KFullTextShouldBeFound);
+	iSchedulerStarted = ETrue;
+	CActiveScheduler::Start();
+	}
+
+
+void CHlpSearchTest::CategoryUidSearchL(TBool aOomTesting)
+	{
+	TheTest.Console()->ClearScreen();
+	TheTest.Printf(_L("Testing category uid searching - *requires boss help file*\n"));
+	
+
+    if	((!FileExists(_L("C:\\Resource\\Help\\Boss-1.hlp"))) && (!FileExists(_L("Z:\\Resource\\Help\\Boss-1.hlp"))))
+		Panic(EHlpPanicNoBossFile);
+	
+
+	Reset();
+	iModel->CategoryUIDSearchL(TUid::Uid(16777216)); // hard coded category uid from Boss1.hlp
+	if(!aOomTesting)
+		{
+		TheTest(iLastHelpModelResponse == ETopicListAvailable);
+		}
+	TheTest(iResponseCount == 1);
+
+	// Display the index listing...
+	CHlpList* list = CHlpList::NewLC();
+	iModel->LoadListL(list);
+
+	for(TInt i=0; i<list->MdcaCount(); i++)
+		{
+		TPtrC pItem(list->MdcaPoint(i));
+		TheTest.Printf(_L("\nCategory item %d: %S"), i, &pItem);
+		}
+	CleanupStack::PopAndDestroy(); // list
+	TheTest.Printf(_L("\n"));
+
+	// Test for a category that we know doesn't exist
+	Reset();
+	iModel->CategoryUIDSearchL(KNullUid);
+	TheTest(iLastHelpModelResponse == ETopicListNoneFound);
+	TheTest(iResponseCount == 1);
+	}
+
+
+//
+//
+//
+
+
+void CHlpSearchTest::Reset()
+	{
+	iResponseCount = 0;
+	iLastHelpModelResponse = KErrGeneral;
+	iIsAsynchronous = EFalse;
+	iSearchProgressCount = 0;
+	iSearchCancelValue = KErrNone-1; // Anything less that KErrNone
+	}
+
+TBool CHlpSearchTest::FileExists(const TDesC& aFileName)
+	{
+	TEntry entry;
+	TInt error = TheFs.Entry(aFileName, entry);
+	if	(error == KErrInUse)
+		return ETrue;
+	if	(error < KErrNone)
+		return EFalse;
+	return (!entry.IsDir());
+	}
+
+CDesCArray* CHlpSearchTest::CategoryListLC()
+	{
+	// Get and print the category listing
+	CDesCArrayFlat* array = new(ELeave) CDesCArrayFlat(5);
+	CleanupStack::PushL(array);
+	iModel->CategoryListL(array);
+	return array;
+	}
+
+
+//
+//
+//
+
+
+void CHlpSearchTest::HandleModelEventL(TInt aEvent)
+	{
+	iResponseCount++;
+	iLastHelpModelResponse = aEvent;
+
+	// If this test included an asynch search, and there was a cancel value set
+	// then cancel the asynch searcher
+	if	(++iSearchProgressCount == iSearchCancelValue && iIsAsynchronous)
+		{
+		// Reset this otherwise we'll get stuck in a loop
+		iSearchCancelValue = KErrNone-1;
+
+		// Only works for full test searching as this is the only search type 
+		// which uses an active object, and even then it doesn't use them properly.
+		TheTest(iModel->CancelSearch() == KErrNone);
+		}
+
+	switch (aEvent)
+		{
+	case ESearchListAvailable:		// text searches
+		TheTest.Printf(_L("\n\tESearchListAvailable\n"));
+		break;
+	
+	case ECategoryListAvailable:
+		{
+		TheTest.Printf(_L("\n\tECategoryListAvailable\n"));
+
+		// Get and print the category listing
+		CDesCArrayFlat* array = STATIC_CAST(CDesCArrayFlat*, CategoryListLC());
+		const TInt count = array->Count();
+		for(TInt i=0; i<count; i++)
+			{
+			TPtrC pItem = array->MdcaPoint(i);
+			TheTest.Printf(_L("Category %d: %S\n"), i, &pItem);
+			}
+		CleanupStack::PopAndDestroy(); // array
+		break;
+		}
+	case ECategoryListNoneFound:
+		TheTest.Printf(_L("\n\tECategoryListNoneFound\n"));
+		break;
+
+
+	case ETopicListAvailable:		// category expansion
+		{
+		TheTest.Printf(_L("\n\tETopicListAvailable\n"));
+		CHlpList* list = CHlpList::NewLC();
+		iModel->LoadListL(list);
+		TInt count = list->MdcaCount();
+		for(TInt i=0; i<count; i++)
+			{
+			CHlpItem* item = list->Item(i);
+			TPtrC pTitle(*item->iTitle);
+			TheTest.Printf(_L("Topic %d: %S (id = %d)\n"), i, &pTitle, item->iId);
+			}
+		CleanupStack::PopAndDestroy(); // list
+		break;
+		}
+	case ETopicListNoneFound:
+		TheTest.Printf(_L("\n\tETopicListNoneFound\n"));
+		break;
+
+	
+	case ETopicAvailable:			// topic text
+		TheTest.Printf(_L("\n\tETopicAvailable\n"));
+		break;
+	case ETopicNotFound:
+		TheTest.Printf(_L("\n\tETopicNotFound\n"));
+		break;
+
+
+	case EIndexListAvailable:		// index list
+		TheTest.Printf(_L("\n\tEIndexListAvailable\n"));
+		break;
+	case EIndexListNoneFound:
+		TheTest.Printf(_L("\n\tEIndexListNoneFound\n"));
+		break;
+	case EIndexSearchListAvailable:	// topic list from index phrase
+		TheTest.Printf(_L("\n\tEIndexSearchListAvailable\n"));
+		break;
+	case EIndexSearchListNoneFound:
+		TheTest.Printf(_L("\n\tEIndexSearchListNoneFound\n"));
+		break;
+
+
+	case EHlpSearchCancelled:
+		TheTest.Printf(_L("<SEARCH CANCELLED>"));
+		break;
+	case EModelSearchInProgress:
+		TheTest.Printf(_L("..."));
+		return;
+	case ESearchListNoneFound:
+		TheTest.Printf(_L("\n\tESearchListNoneFound\n"));
+		break;
+		}
+
+	if	(iIsAsynchronous && iSchedulerStarted)
+		CActiveScheduler::Stop();
+	}
+	
+/**
+	doSearchOrderTest
+	
+	All help files used in this part of the test use the Category UID of 0x01007000
+	Within each source RTF file the Category is defined as the drive name.
+	Hence the File copied to c:\resource\help has the Category "Drive C:"
+	There are 3 help files used in this test:
+		PlatSecSearchTestC.hlp - initially resides in z:\System\Programs\THlpmodel\
+		PlatSecSearchTestF.hlp - initially resides in z:\System\Programs\THlpmodel\
+		PlatSecSearchTest.hlp - (with Category "Drive Z:") resides in z:\Resoruce\Help
+	The exports are specified in the Hlpmodel BLD.INF file.
+	
+	As part of the building process the help files are exported to the
+	corresponding directories.
+
+	Thus initially only PlatSecSearchTest.hlp with be visible presenting 
+	the Category "Drive Z:". As the test progresses so the 2 remaining files are
+	copied (with a change in name) from z:\System\Programs\THlpmodel\ to their corresponding drive.
+	Thus PlatSecSearchTestC.hlp becomes PlatSecSearchTest.hlp in c:\Resource\Help
+	and PlatSecSearchTestF.hlp becomes PlatSecSearchTest.hlp in f:\Resource\Help
+	
+	Given the search order, the higher drive letter takes presidence (however z: is last),
+	so when there are is a file called PlatSecSearchTest.hlp on z:, c: and f: only f: 
+	will be seen.
+	
+	Note: That the test looks for a drive of type EMediaHardDisk: on Lubbock this will be F:
+	on the H2 it is likely to be E: this is managed within CSearchOrderTest.
+*/
+
+
+
+static void doSearchOrderTestL()
+	{
+	__UHEAP_MARK;
+	TheTest.Printf(_L("-------------------------------------------\n"));				
+	TheTest.Printf(_L("   Testing PlatSec drive search Order.\n"));			
+	TheTest.Printf(_L("-------------------------------------------\n"));				
+
+	// Initialise the array of mapped drives.
+	CSearchOrderTest* sort = CSearchOrderTest::NewL(TheTest);
+	CleanupStack::PushL( sort );
+	
+	TheTest.Next(_L("Test category listing"));
+	
+	CHlpModel* model = CHlpModel::NewLC(TheFs, NULL);
+
+	CDesCArray* catList = new(ELeave) CDesCArrayFlat(2);
+	CleanupStack::PushL(catList);
+		
+	// Iterate around Drive Loop
+	TBool found = EFalse;
+	for( TInt operation =CSearchOrderTest::EInitial_DeleteAll;
+		 operation<=CSearchOrderTest::EFinal_DeleteAll; 
+		 operation++)
+		{
+		sort->MoveHelpFileL( operation );
+		model->OpenL();
+		// Get the new gategory list, resulting from the repositioned file.
+		model->CategoryListL(catList);
+		// Close help model to release file handles.
+		model->CloseL();
+		// Check listed categories given the current index.
+		found = sort->CheckCategoryListL( operation, catList );
+		if( found )
+			{
+			TheTest.Printf(_L("The Correct Category was found."));			
+			}
+		TheTest(found);
+		// Remove the old contents, otherwise new 
+		// categories are simply added.
+		catList->Reset();
+		}
+	CleanupStack::PopAndDestroy( catList );
+	CleanupStack::PopAndDestroy( model );
+	CleanupStack::PopAndDestroy( sort );
+	__UHEAP_MARKEND;
+	}
+
+static void PerformOOMTestL()
+	{
+	TInt ret=KErrNoMemory;
+	TInt failAt=0;	  
+	while (ret!=KErrNone)
+		{
+		failAt++;
+		__UHEAP_SETFAIL(RHeap::EDeterministic,failAt);
+		__UHEAP_MARK;			
+		TRAP(ret, CHlpSearchTest::TestHelpModelLD(ETrue));
+		if (ret!=KErrNone)
+			{
+			__UHEAP_MARKEND;
+			}
+		__UHEAP_RESET;
+		TheTest(ret==KErrNoMemory||ret==KErrNone);
+		}
+	}
+
+static void setupFileServerAndSchedulerL()
+//
+// Initialise the cleanup stack.
+//
+	{
+	TTime time;
+	time.HomeTime();
+	TheSeed = time.Int64();
+
+	TheTest(TheFs.Connect() == KErrNone);
+	TheScheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(TheScheduler);
+	}
+
+
+static void setupCleanup()
+//
+// Initialise the cleanup stack.
+//
+    {
+	TheTrapCleanup = CTrapCleanup::New();
+	TheTest(TheTrapCleanup!=NULL);
+	TRAPD(r,
+		{
+		for (TInt i=KTestCleanupStack;i>0;i--)
+			CleanupStack::PushL((TAny*) 0);
+		CleanupStack::Pop(KTestCleanupStack);
+		});
+	TheTest(r==KErrNone);
+	}
+
+/**
+@SYMTestCaseID PIM-TSEARCH-0001
+*/	
+GLDEF_C TInt E32Main()
+//
+// Test Help Model API
+//
+    {
+	__UHEAP_MARK;
+
+	TheTest.Title();
+	TheTest.Start(_L("@SYMTestCaseID PIM-TSEARCH-0001"));
+	setupCleanup();
+	
+	__UHEAP_MARK;
+	TRAPD(r, 
+			setupFileServerAndSchedulerL();
+			CHlpSearchTest::TestHelpModelLD();
+			);
+	
+	TheTest(r==KErrNone);
+	__UHEAP_MARKEND;
+	
+	TRAP(r, PerformOOMTestL());
+	TheTest(r==KErrNone);
+	
+	// PlatSec search order test.
+	TRAP(r, doSearchOrderTestL());
+	TheTest(r==KErrNone);
+
+
+	delete TheScheduler;
+	delete TheTrapCleanup;
+	TheFs.Close();
+	TheTest.End();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/TSearch.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,31 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+TARGET			tsearch.exe
+TARGETTYPE		EXE
+CAPABILITY   None
+SOURCEPATH		../tsrc
+SOURCE			TSearch.cpp
+
+SOURCE			SearchOrderTest.CPP
+
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN 
+userinclude ../inc ../dbwriter ../tsrc
+
+LIBRARY			euser.lib	efsrv.lib	bafl.lib	hlpmodel.lib	cone.lib
+LIBRARY         pimtestclient.lib
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tcontext.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,182 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Test Context module
+// 
+//
+
+#pragma message(__FILE__ "(1) : NOTE: Requires TContext.dat in the help directory")
+
+// System includes
+#include <e32test.h>
+#include <f32file.h>
+#include <coehelp.h>
+
+// User includes
+#include "hlpmodel.h"
+
+// Globals
+static RFs					TheFs;
+static RTest				TheTest(_L("TCONTEXT - Test context sensitive searching in help model"));
+static CTrapCleanup*		TheTrapCleanup;
+static CActiveScheduler*	TheScheduler;
+
+// Constants
+const TInt KTestCleanupStack=0x20;
+
+
+class CHelpTester : public CBase, public MHlpModelObserver
+	{
+public:
+	CHelpTester();
+	~CHelpTester();
+	void ConstructL();
+
+public:
+	void Test1L();
+
+public: // from MHlpModelObserver
+	void HandleModelEventL(TInt aEvent);
+
+private:
+	TInt iLastResponse;
+	CHlpModel* iModel;
+	};
+
+
+CHelpTester::CHelpTester()
+	{
+	}
+
+CHelpTester::~CHelpTester()
+	{
+	delete iModel;
+	}
+
+void CHelpTester::ConstructL()
+	{
+	iModel = CHlpModel::NewL(TheFs, this);
+	}
+
+/**
+@SYMTestCaseID PIM-TCONTEXT-0001
+*/	
+void CHelpTester::Test1L()
+	{
+	TheTest.Next(_L("@SYMTestCaseID PIM-TCONTEXT-0001 Test 1: Test category searching"));
+	
+	iModel->OpenL();
+
+	// Create a context that we know exists
+	TCoeContextName contextName(_L("A_Remove_dialog"));
+	TUid contextUid = {268450396};
+	TCoeHelpContext context(contextUid, contextName);
+
+	// Request a search on the context
+	iModel->ContextSearchL(context);
+	
+	// Check that the response is "Found"
+	TheTest(iLastResponse == ETopicAvailable);
+
+	// Now get the topic text
+	CHlpTopic* topic = CHlpTopic::NewLC();
+	TRAPD(error, iModel->LoadTopicL(topic));
+	TheTest(error == KErrNone);
+	CleanupStack::PopAndDestroy(); // topic
+	
+	// Create a context that we know doesn't exists
+	contextName = _L("SomeSymbianTopic");
+	contextUid.iUid = 123456789;
+	TCoeHelpContext missingContext(contextUid, contextName);
+
+	// Request a search on the context
+	iModel->ContextSearchL(missingContext);
+	
+	// Check that the response is "Found"
+	TheTest(iLastResponse == ETopicNotFound);
+	
+	iModel->CloseL();
+	}
+
+void CHelpTester::HandleModelEventL(TInt aEvent)
+	{
+	// Just store the last event reported by the model so that we
+	// can test against it in the actual test.
+	iLastResponse = aEvent;
+	}
+
+
+
+
+
+
+static void DoTestL()
+	{
+	CHelpTester* tester = new(ELeave) CHelpTester();
+	CleanupStack::PushL(tester);
+	tester->ConstructL();
+	tester->Test1L();
+	CleanupStack::PopAndDestroy();
+	}
+
+static void setupFileServerAndSchedulerL()
+//
+// Initialise the cleanup stack.
+//
+	{
+	TheTest(TheFs.Connect() == KErrNone);
+	TheScheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(TheScheduler);
+	}
+
+
+static void setupCleanup()
+//
+// Initialise the cleanup stack.
+//
+    {
+	TheTrapCleanup = CTrapCleanup::New();
+	TheTest(TheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	TheTest(r==KErrNone);
+	}
+
+GLDEF_C TInt E32Main()
+//
+// Test Help Model API
+//
+    {
+	__UHEAP_MARK;
+
+	TheTest.Title();
+	setupCleanup();
+
+	TRAPD(r, 
+			setupFileServerAndSchedulerL();
+			DoTestL();
+		);
+	TheTest(r==KErrNone);
+
+	delete TheScheduler;
+	delete TheTrapCleanup;
+	TheFs.Close();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tcontext.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// TCONTEXT.MMP
+//
+
+TARGET			TCONTEXT.EXE
+TARGETTYPE		EXE
+CAPABILITY   None
+SOURCEPATH		..\TSRC
+SOURCE			TCONTEXT.CPP
+
+USERINCLUDE		..\TSRC
+USERINCLUDE		..\INC
+USERINCLUDE		..\DBWRITER
+
+SYSTEMINCLUDE	..\INC
+SYSTEMINCLUDE	..\DBWRITER
+SYSTEMINCLUDE	\EPOC32\INCLUDE
+
+LIBRARY			EUSER.LIB		EFSRV.LIB
+LIBRARY			HLPMODEL.LIB	CONE.LIB
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tdumper.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,488 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// TDumper test module
+// 
+//
+
+// System includes
+#include <e32test.h>
+#include <f32file.h>
+#include <s32file.h>
+#include <s32stor.h>
+#include <charconv.h>
+
+// User includes
+#include "HLPMODEL.H"
+
+// Globals
+static RFs								TheFs;
+static RTest							TheTest(_L("TDUMPER - Dumps a help file to a plain text file"));
+static CTrapCleanup*					TheTrapCleanup;
+static CActiveScheduler*				TheScheduler;
+static CCnvCharacterSetConverter*		TheConverter;
+
+// Literal constants
+_LIT(KDumpOutputFile,					"C:\\%S-Dump.txt");
+_LIT(KSQLTopicIdColumn,					"TopicId");
+_LIT(KSQLIndexIdColumn,					"IndexId");
+_LIT(KSQLTopicTitleColumn,				"TopicTitle");
+_LIT(KSQLTopicTextColumn,				"TopicText");
+_LIT(KSQLCategoryColumn,				"Category");
+_LIT(KSQLSynonymColumn,					"Synonym");
+_LIT(KSQLIndexColumn,					"Index");
+_LIT(KSQLContextColumn,					"Context");
+_LIT(KSQLCategoryUidColumn,				"CategoryUID");
+
+// Constants
+const TInt KTestCleanupStack	= 0x20;
+
+// Typedefs
+typedef TBuf<80> TConsoleLine;
+
+
+static TBool GetLine(TConsoleLine& aLine)
+	{
+	TPoint posStart = TheTest.Console()->CursorPos();
+	TheTest.Console()->Write(aLine);
+
+	TKeyCode key;
+	TConsoleLine line(aLine);
+	FOREVER
+		{
+		key = TheTest.Console()->Getch();
+		
+		switch(key)
+			{
+			case EKeyEscape:
+				return EFalse;
+			case EKeyEnter:
+				aLine = line;
+				return ETrue;
+			case EKeyBackspace:
+			case EKeyDelete:
+				{
+				if	(line.Length())
+					line = line.Left(line.Length()-1);
+				break;
+				}
+			default:
+				line.Append(TChar(key));
+				break;
+			}
+
+		TheTest.Console()->SetCursorPosAbs(posStart);
+		TheTest.Console()->ClearToEndOfLine();
+		TheTest.Console()->Write(line);
+		}
+	}
+
+static void WriteTopicTableL(RFile& aOutputFile, RDbStoreDatabase& aDatabase)
+	{
+	TInt count = 0;
+	_LIT(KCategoryTable, "TOPIC");
+
+	// Open the topic table so that we can use it to build the category list
+	RDbTable table;
+	User::LeaveIfError(table.Open(aDatabase, KCategoryTable, RDbRowSet::EReadOnly));
+	CleanupClosePushL(table);
+
+	// Now build the list
+	if	(!table.FirstL())
+		{
+		CleanupStack::PopAndDestroy(); // table
+		return; // assume no rows
+		}
+
+	// Get the column of the category
+	CDbColSet* colset		= table.ColSetL();
+	TDbColNo titleCol		= colset->ColNo(KSQLTopicTitleColumn);
+	TDbColNo catCol			= colset->ColNo(KSQLCategoryColumn);
+	TDbColNo topicIdCol		= colset->ColNo(KSQLTopicIdColumn);
+	TDbColNo synonymCol		= colset->ColNo(KSQLSynonymColumn);
+	TDbColNo catIdCol		= colset->ColNo(KSQLCategoryUidColumn);
+	TDbColNo topicTextCol	= colset->ColNo(KSQLTopicTextColumn);
+	delete colset;
+
+	//
+	// WRITE THE TOPIC TABLE
+	//
+	TBuf8<1000> buffer;
+	aOutputFile.Write(_L8("==============================\r\n"));
+	aOutputFile.Write(_L8("==       TOPIC TABLE        ==\r\n"));
+	aOutputFile.Write(_L8("==============================\r\n"));
+	do
+		{
+		count++;
+		table.GetL();
+
+		// Write category & category Id
+		TBuf8<150> category;
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(category, table.ColDes(catCol)));
+		buffer.Format(_L8("Category (Id): %S (%d)\r\n"), &category, table.ColUint32(catIdCol));
+		aOutputFile.Write(buffer);
+
+		// Write topic Id
+		buffer.Format(_L8("Topic Id: %d\r\n"), table.ColUint32(topicIdCol));
+		aOutputFile.Write(buffer);
+
+		// Write title
+		TBuf8<150> title;
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(title, table.ColDes(titleCol)));
+		buffer.Format(_L8("Title: %S\r\n"), &title);
+		aOutputFile.Write(buffer);
+
+		// Write synonym
+		TBuf8<200> synonym;
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(synonym, table.ColDes(synonymCol)));
+		buffer.Format(_L8("Synonym: %S\r\n"), &synonym);
+		aOutputFile.Write(buffer);
+
+		// Write topic text
+		TInt len = table.ColLength(topicTextCol);
+		HBufC* text = HBufC::NewLC(len);
+		TPtr pText(text->Des());
+	
+		// Retrieve actual text from column
+		RDbColReadStream stream;
+		stream.OpenLC(table, topicTextCol);
+		stream.ReadL(pText, len);
+		CleanupStack::PopAndDestroy(); // stream
+
+		// Write the text
+		HBufC8* narrowText = HBufC8::NewLC(len);
+		TPtr8 pNarrowText(narrowText->Des());
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(pNarrowText, pText));
+		CleanupStack::Pop(); // narrowText
+		CleanupStack::PopAndDestroy(); // text
+
+		aOutputFile.Write(_L8("Body: "));
+		aOutputFile.Write(*narrowText);
+		aOutputFile.Write(_L8("\r\n"));
+		delete narrowText;
+
+		aOutputFile.Write(_L8("\r\n"));
+		}
+	while (table.NextL());
+	aOutputFile.Write(_L8("\r\n"));
+
+	CleanupStack::PopAndDestroy(); // table
+	}
+
+static void WriteContextTableL(RFile& aOutputFile, RDbStoreDatabase& aDatabase)
+	{
+	_LIT(KContextTable, "CONTEXT");
+
+	// Open the topic table so that we can use it to build the category list
+	RDbTable table;
+	User::LeaveIfError(table.Open(aDatabase, KContextTable, RDbRowSet::EReadOnly));
+	CleanupClosePushL(table);
+
+	// Now build the list
+	if	(!table.FirstL())
+		{
+		CleanupStack::PopAndDestroy(); // table
+		return; // assume no rows
+		}
+
+	// Get the column of the category
+	CDbColSet* colset		= table.ColSetL();
+	TDbColNo contextCol		= colset->ColNo(KSQLContextColumn);
+	TDbColNo topicIdCol		= colset->ColNo(KSQLTopicIdColumn);
+	delete colset;
+
+	//
+	// WRITE THE TOPIC TABLE
+	//
+	TBuf8<1000> buffer;
+	aOutputFile.Write(_L8("==============================\r\n"));
+	aOutputFile.Write(_L8("==      CONTEXT TABLE       ==\r\n"));
+	aOutputFile.Write(_L8("==============================\r\n"));
+	do
+		{
+		table.GetL();
+
+		{
+		// Write context
+		TBuf8<150> context;
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(context, table.ColDes(contextCol)));
+		buffer.Format(_L8("Context: %S\r\n"), &context);
+		aOutputFile.Write(buffer);
+		}
+		{
+		// Write topic Id
+		buffer.Format(_L8("Topic Id: %d\r\n"), table.ColUint32(topicIdCol));
+		aOutputFile.Write(buffer);
+		}
+		aOutputFile.Write(_L8("\r\n"));
+		}
+	while (table.NextL());
+	aOutputFile.Write(_L8("\r\n"));
+
+	CleanupStack::PopAndDestroy(); // table
+	}
+
+
+static void WriteTopicIndexTableL(RFile& aOutputFile, RDbStoreDatabase& aDatabase)
+	{
+	_LIT(KTopicIndexTable, "TOPICINDEX");
+
+	// Open the topic table so that we can use it to build the category list
+	RDbTable table;
+	User::LeaveIfError(table.Open(aDatabase, KTopicIndexTable, RDbRowSet::EReadOnly));
+	CleanupClosePushL(table);
+
+	// Now build the list
+	if	(!table.FirstL())
+		{
+		CleanupStack::PopAndDestroy(); // table
+		return; // assume no rows
+		}
+
+	// Get the column of the category
+	CDbColSet* colset			= table.ColSetL();
+	TDbColNo topicIdCol			= colset->ColNo(KSQLTopicIdColumn);
+	TDbColNo indexIdCol			= colset->ColNo(KSQLIndexIdColumn);
+	TDbColNo categoryUidCol		= colset->ColNo(KSQLCategoryUidColumn);
+	TDbColNo titleCol			= colset->ColNo(KSQLTopicTitleColumn);
+	delete colset;
+
+	//
+	// WRITE THE TOPIC TABLE
+	//
+	TBuf8<1000> buffer;
+	aOutputFile.Write(_L8("==============================\r\n"));
+	aOutputFile.Write(_L8("==    TOPIC/INDEX TABLE     ==\r\n"));
+	aOutputFile.Write(_L8("==============================\r\n"));
+	do
+		{
+		table.GetL();
+
+		// Write topic Id
+		buffer.Format(_L8("Topic Id: %d\r\n"), table.ColUint32(topicIdCol));
+		aOutputFile.Write(buffer);
+
+		// Write index Id
+		buffer.Format(_L8("Index Id: %d\r\n"), table.ColUint32(indexIdCol));
+		aOutputFile.Write(buffer);
+
+		// Write out the category uid
+		buffer.Format(_L8("Category Uid: %d\r\n"), table.ColUint32(categoryUidCol));
+		aOutputFile.Write(buffer);
+
+		{
+		// Write out the topic title
+		TBuf8<150> topicTitle;
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(topicTitle, table.ColDes(titleCol)));
+		buffer.Format(_L8("TopicTitle: %S\r\n"), &topicTitle);
+		aOutputFile.Write(buffer);
+		}
+
+		aOutputFile.Write(_L8("\r\n"));
+		}
+	while (table.NextL());
+	aOutputFile.Write(_L8("\r\n"));
+
+	CleanupStack::PopAndDestroy(); // table
+	}
+
+static void WriteIndexTableL(RFile& aOutputFile, RDbStoreDatabase& aDatabase)
+	{
+	_LIT(KIndexTable, "INDEX");
+
+	// Open the topic table so that we can use it to build the category list
+	RDbTable table;
+	User::LeaveIfError(table.Open(aDatabase, KIndexTable, RDbRowSet::EReadOnly));
+	CleanupClosePushL(table);
+
+	// Now build the list
+	if	(!table.FirstL())
+		{
+		CleanupStack::PopAndDestroy(); // table
+		return; // assume no rows
+		}
+
+	// Get the column of the category
+	CDbColSet* colset		= table.ColSetL();
+	TDbColNo indexCol		= colset->ColNo(KSQLIndexColumn);
+	TDbColNo indexIdCol		= colset->ColNo(KSQLIndexIdColumn);
+	delete colset;
+
+	//
+	// WRITE THE TOPIC TABLE
+	//
+	TBuf8<1000> buffer;
+	aOutputFile.Write(_L8("==============================\r\n"));
+	aOutputFile.Write(_L8("==       INDEX TABLE        ==\r\n"));
+	aOutputFile.Write(_L8("==============================\r\n"));
+	do
+		{
+		table.GetL();
+
+		// Write topic Id
+		TBuf8<140> index;
+		User::LeaveIfError(TheConverter->ConvertFromUnicode(index, table.ColDes(indexCol)));
+		buffer.Format(_L8("Index (Id): %S (%d)\r\n"), &index, table.ColUint32(indexIdCol));
+		aOutputFile.Write(buffer);
+
+		aOutputFile.Write(_L8("\r\n"));
+		}
+	while (table.NextL());
+	aOutputFile.Write(_L8("\r\n"));
+
+	CleanupStack::PopAndDestroy(); // table
+	}
+
+static void WriteFileUidL(RFile& aOutputFile, const TDesC& aFileName)
+	{
+	//
+	// WRITE THE TOPIC TABLE
+	//
+	TBuf8<1000> buffer;
+	aOutputFile.Write(_L8("==============================\r\n"));
+	aOutputFile.Write(_L8("==       FILE UID           ==\r\n"));
+	aOutputFile.Write(_L8("==============================\r\n"));
+
+	TEntry entry;
+	TheFs.Entry(aFileName, entry);
+	buffer.Format(_L8("File Uids: [0x%x][0x%x][0x%x]\r\n"), entry[0], entry[1], entry[2]);
+	aOutputFile.Write(buffer);
+	aOutputFile.Write(_L8("\r\n"));
+	}
+
+static void Test1L()
+	{
+
+	TConsoleLine inputFile(_L("C:\\Resource\\Help\\"));
+	TheTest.Printf(_L("Enter filename: "));
+	if	(!GetLine(inputFile))
+		{
+		// Escape'd
+		return;
+		}
+
+	TFileName outputFileName;
+	TParsePtrC parser(inputFile);
+	TPtrC pName(parser.Name());
+	outputFileName.Format(KDumpOutputFile, &pName);
+
+	RFile outputFile;
+	User::LeaveIfError(outputFile.Replace(TheFs, outputFileName, EFileShareExclusive | EFileWrite));
+	CleanupClosePushL(outputFile);
+
+	CPermanentFileStore* store = CPermanentFileStore::OpenLC(TheFs, inputFile, EFileRead);
+	CStreamDictionary* dictionary = CStreamDictionary::NewLC();
+	RStoreReadStream in;
+	in.OpenLC(*store, store->Root());
+	dictionary->InternalizeL(in);
+	CleanupStack::PopAndDestroy(); // in
+
+	// restore the database
+	RDbStoreDatabase database;
+	database.OpenL(store, dictionary->At(KUidHlpDbStream));
+	CleanupClosePushL(database);
+
+	// Write the topic table
+	WriteTopicTableL(outputFile, database);
+
+	// Write the context table
+	WriteContextTableL(outputFile, database);
+
+	// Write topic/index table
+	WriteTopicIndexTableL(outputFile, database);
+
+	// Write index table
+	WriteIndexTableL(outputFile, database);
+
+	// Write the uid of the file itself
+	WriteFileUidL(outputFile, inputFile);
+
+	CleanupStack::PopAndDestroy(4); // database, dictionary, store, outputFile
+	}
+
+
+
+
+
+static void setupUnicodeConverterL()
+//
+// Initialise charconv
+//
+	{
+	TheConverter = CCnvCharacterSetConverter::NewL();
+	CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* arrayOfCharacterSetsAvailable = TheConverter->CreateArrayOfCharacterSetsAvailableL(TheFs);
+	CleanupStack::PushL(arrayOfCharacterSetsAvailable);
+	TheConverter->PrepareToConvertToOrFromL(0x100012b6, *arrayOfCharacterSetsAvailable, TheFs); // 0x100012b6 is KCharacterSetIdentifierCodePage1252
+	TheConverter->SetReplacementForUnconvertibleUnicodeCharactersL(_L8("?"));
+	CleanupStack::PopAndDestroy(); // arrayOfCharacterSetsAvailable
+	}
+
+
+static void setupFileServerAndSchedulerL()
+//
+// Initialise the cleanup stack.
+//
+	{
+	TheTest(TheFs.Connect() == KErrNone);
+	TheScheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(TheScheduler);
+	}
+
+
+static void setupCleanup()
+//
+// Initialise the cleanup stack.
+//
+    {
+	TheTrapCleanup = CTrapCleanup::New();
+	TheTest(TheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	TheTest(r==KErrNone);
+	}
+
+GLDEF_C TInt E32Main()
+//
+// Test Help Model API
+/**
+@SYMTestCaseID PIM-TDUMPER-0001
+*/
+//
+    {
+	__UHEAP_MARK;
+
+	TheTest.Start(_L("@SYMTestCaseID PIM-TDUMPER-0001 "));
+	TheTest.Title();
+	setupCleanup();
+
+	TRAPD(r,
+		setupFileServerAndSchedulerL();
+		setupUnicodeConverterL();
+		Test1L();
+		);
+	TheTest(r==KErrNone);
+
+	delete TheConverter;
+	delete TheScheduler;
+	delete TheTrapCleanup;
+	TheFs.Close();
+	TheTest.End();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tdumper.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// TDUMPER.MMP
+//
+
+TARGET			tdumper.exe
+TARGETTYPE		EXE
+CAPABILITY   None
+SOURCEPATH		../tsrc
+SOURCE			tdumper.cpp
+
+userinclude ../tsrc
+userinclude ../inc 
+userinclude ../dbwriter 
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib		efsrv.lib		edbms.lib	
+LIBRARY			estor.lib		charconv.lib
+
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/thelpviewctrls.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,273 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// THelpViewCtrls module
+// 
+//
+
+#include "thelpviewctrls.h"
+
+// System includes
+#include <techview/eikcmbut.h>
+#include <techview/eikedwin.h>
+//
+#include "hlpmodel.h"
+
+// Constants
+const TInt KTimeOutPeriod = 10000000; // Ten seconds
+
+// Literal constants
+_LIT(KDoneCaption, "Done");
+
+
+//
+// ----> CHlpSearchPrompt (header)
+//
+
+CHlpSearchPrompt::CHlpSearchPrompt()
+	{
+	}
+
+CHlpSearchPrompt::~CHlpSearchPrompt()
+	{
+	iHideTimer->Cancel();
+	delete iHideTimer;
+	delete iEdwin;
+	}
+
+void CHlpSearchPrompt::ConstructL(CCoeControl& aParent)
+	{
+	CreateWindowL(&aParent);
+
+	iHideTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+
+	iEdwin = new(ELeave) CEikEdwin();
+	iEdwin->SetContainerWindowL(*this);
+	iEdwin->ConstructL(0, 25, 140, 1);
+	iEdwin->CreateTextViewL();
+	iEdwin->SetObserver(this);
+	}
+
+//
+//
+//
+
+void CHlpSearchPrompt::ResetSearchL()
+	{
+	iEdwin->Text()->Reset();
+	iEdwin->NotifyNewDocumentL();
+	iEdwin->DrawNow();
+	}
+
+HBufC* CHlpSearchPrompt::SearchTextLC()
+	{
+	HBufC* buf = iEdwin->GetTextInHBufL();
+	CleanupStack::PushL(buf);
+	return buf;
+	}
+
+//
+//
+//
+
+void CHlpSearchPrompt::MakeVisible(TBool aVisible)
+	{
+	CCoeControl::MakeVisible(aVisible);
+	if	(!aVisible)
+		{
+		iHideTimer->Cancel();
+		ResetSearchL();       // Leaves if not visible
+		}
+	}
+
+void CHlpSearchPrompt::SizeChanged()
+	{
+	iEdwin->SetRect(Rect());
+	}
+
+TInt CHlpSearchPrompt::CountComponentControls() const
+	{
+	return 1;
+	}
+
+CCoeControl* CHlpSearchPrompt::ComponentControl(TInt/* aIndex*/) const
+	{
+	return iEdwin;
+	}
+
+TKeyResponse CHlpSearchPrompt::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	if	(aKeyEvent.iCode == EKeyEnter && aType == EEventKey)
+		{
+		ReportEventL(EEventStateChanged);
+		return EKeyWasConsumed;
+		}
+	else if	(aKeyEvent.iCode == EKeyEscape && aType == EEventKey)
+		{
+		MakeVisible(EFalse);
+		return EKeyWasConsumed;
+		}
+	else
+		{
+		iHideTimer->Cancel();
+		iHideTimer->Start(KTimeOutPeriod, KTimeOutPeriod, TCallBack(HandleTimerExpiredL, this));
+		return iEdwin->OfferKeyEventL(aKeyEvent, aType);
+		}
+	}
+
+//
+//
+//
+
+void CHlpSearchPrompt::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/)
+	{
+	}
+
+//
+//
+//
+
+TInt CHlpSearchPrompt::HandleTimerExpiredL(TAny* aSelf)
+	{
+	CHlpSearchPrompt* self = STATIC_CAST(CHlpSearchPrompt*, aSelf);
+	self->MakeVisible(EFalse);
+	return EFalse; // one shot
+	}
+
+
+
+
+
+
+
+
+
+//
+// ----> CHlpListBox (source)
+//
+
+CHlpListBox::CHlpListBox()
+	{
+	}
+
+CHlpListBox::~CHlpListBox()
+	{
+	delete iContent;
+	delete iButton;
+	delete iListBox;
+	}
+
+void CHlpListBox::ConstructL(CCoeControl& aParent)
+	{
+	SetContainerWindowL(aParent);
+
+	iButton = new(ELeave) CEikCommandButton();
+	iButton->SetContainerWindowL(*this);
+	iButton->SetTextL(KDoneCaption);
+	iButton->SetObserver(this);
+
+	iListBox = new(ELeave) CEikTextListBox();
+	iListBox->ConstructL(this, CEikListBox::ENoExtendedSelection);
+	iListBox->CreateScrollBarFrameL()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+	iListBox->SetObserver(this);
+	}
+
+//
+// FROM CCoeControl
+//
+
+void CHlpListBox::SizeChanged()
+	{
+	TRect rect(Rect());
+	TSize size(rect.Size());
+	const TInt KButtonHeight = iButton->MinimumSize().iHeight;
+	iButton->SetExtent(rect.iTl, TSize(size.iWidth, KButtonHeight));
+	rect.iTl.iY += KButtonHeight;
+	iListBox->SetRect(rect);
+	}
+
+TInt CHlpListBox::CountComponentControls() const
+	{
+	return 2;
+	}
+
+CCoeControl* CHlpListBox::ComponentControl(TInt aIndex) const
+	{
+	if	(!aIndex)
+		return iListBox;
+	return iButton;
+	}
+
+TKeyResponse CHlpListBox::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	return iListBox->OfferKeyEventL(aKeyEvent, aType);
+	}
+
+TSize CHlpListBox::MinimumSize()
+	{
+	return iButton->MinimumSize();
+	}
+
+//
+// NEW
+//
+
+const CHlpItem& CHlpListBox::HelpItemL() const
+	{
+	TInt index = iListBox->CurrentItemIndex();
+	if	(!iContent || index >= iContent->MdcaCount())
+		User::Leave(KErrNotFound);
+
+	// Return the topic id of the topic that the user is interested in
+	return *iContent->Item(index);
+	}
+
+void CHlpListBox::PopulateListBoxL(CHlpList* aContent)
+	{
+	SetContent(aContent);
+
+	CDesCArray* itemArray = STATIC_CAST(CDesCArray*, iListBox->Model()->ItemTextArray());
+	itemArray->Reset();
+
+	const TInt count = iContent->MdcaCount();
+	for(TInt i=0; i<count; i++)
+		{
+		itemArray->AppendL(iContent->MdcaPoint(i));
+		}
+
+	iListBox->HandleItemAdditionL();
+	iListBox->SetCurrentItemIndex(0); // first item
+	}
+
+//
+// FROM MCoeControlObserver
+//
+
+void CHlpListBox::HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType)
+	{
+	if	(aControl == iButton)
+		ReportEventL(EEventRequestExit);
+	else if (aControl == iListBox)
+		ReportEventL(aEventType);
+	}
+
+
+//
+// INTERNAL
+//
+
+void CHlpListBox::SetContent(CHlpList* aContent)
+	{
+	delete iContent;
+	iContent = aContent;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/thelpviewctrls.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,138 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __THELPVIEWCTRLS_H__
+#define __THELPVIEWCTRLS_H__
+
+// System includes
+#include <coecntrl.h>
+#include <coecobs.h>
+#include <techview/eiktxlbx.h>
+#include <techview/eiktxlbm.h>
+
+// Classes referenced
+class CHlpList;
+class CHlpItem;
+//
+class CEikEdwin;
+class CEikCommandButton;
+
+
+
+//
+// ----> CHlpSearchPrompt (header)
+//
+class CHlpSearchPrompt : public CCoeControl, public MCoeControlObserver
+    {
+//
+public:
+//
+	CHlpSearchPrompt();
+	~CHlpSearchPrompt();
+	void ConstructL(CCoeControl& aParent);
+
+//
+public:	// NEW
+//
+	void ResetSearchL();
+	HBufC* SearchTextLC();
+
+//
+public:	// FROM CCoeControl
+//
+	void MakeVisible(TBool aVisible);
+	void SizeChanged();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+//
+public:	// FROM MCoeControlObserver
+//
+	void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+
+//
+private: // NEW INTERNAL
+//
+	static TInt HandleTimerExpiredL(TAny* aSelf);
+
+//
+private: // MEMBER DATA
+//
+	CEikEdwin* iEdwin;
+	CPeriodic* iHideTimer;
+    };
+
+
+
+
+
+
+//
+// ----> CHlpListBox (header)
+//
+class CHlpListBox : public CCoeControl, public MCoeControlObserver
+    {
+//
+public:
+//
+	CHlpListBox();
+	~CHlpListBox();
+	void ConstructL(CCoeControl& aParent);
+
+//
+public:	// FROM CCoeControl
+//
+	void SizeChanged();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	TSize MinimumSize();
+
+//
+public:	// NEW
+//
+	const CHlpItem& HelpItemL() const;
+	void PopulateListBoxL(CHlpList* aContent); // takes ownership
+	inline CTextListBoxModel* Model() const		{ return iListBox->Model(); }
+	inline CEikTextListBox* ListBox() const		{ return iListBox; }
+
+//
+public:	// FROM MCoeControlObserver
+//
+	void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+
+//
+private: // INTERNAL
+//
+	void SetContent(CHlpList* aContent);
+
+//
+private: // MEMBER DATA
+//
+	CHlpList* iContent;
+	CEikCommandButton* iButton;
+	CEikTextListBox* iListBox;
+	};
+
+
+
+
+
+
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tlch.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,111 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Element within the Help Model module
+// 
+//
+
+#include "tlch.hrh"
+#include "tlch.h"
+#include "HLPLCH.H"
+#include <eikstart.h>
+
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CTLchApplication;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
+
+
+TUid CTLchApplication::AppDllUid() const
+	{
+	return KUidTLchApp;
+	}
+
+CApaDocument* CTLchApplication::CreateDocumentL()
+	{
+	return new (ELeave) CTLchDocument(*this);
+	}
+
+CTLchDocument::CTLchDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+CEikAppUi* CTLchDocument::CreateAppUiL()
+	{
+    return new(ELeave) CTLchAppUi;
+	}
+
+void CTLchAppUi::ConstructL()
+    {
+    BaseConstructL();
+    iAppView=new(ELeave) CTLchAppView;
+    iAppView->ConstructL(ClientRect());
+	AddToStackL(iAppView);
+    }
+
+
+CTLchAppUi::~CTLchAppUi()
+	{
+	RemoveFromStack(iAppView);
+    delete iAppView;
+	}
+
+void CTLchAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case ETlchMenuHelpC:
+			{
+			CArrayFix<TCoeHelpContext>* buf=AppHelpContextL();
+			HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), buf);
+			break;
+			}
+		case ETlchMenuHelp:
+			{
+			HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession());
+			break;
+			}
+		case EEikCmdExit: 
+			Exit();
+			break;
+		}
+	}
+
+CArrayFix<TCoeHelpContext>* CTLchAppUi::HelpContextL() const
+	{
+	CArrayFixFlat<TCoeHelpContext>* array=new(ELeave)CArrayFixFlat<TCoeHelpContext>(1);
+	array->AppendL(TCoeHelpContext(KUidTLchApp, _L("App Ui Context 1")));
+	array->AppendL(TCoeHelpContext(KUidTLchApp, _L("App Ui Context 2")));
+	array->AppendL(TCoeHelpContext(KUidTLchApp, _L("App Ui Context 3")));
+	return array;
+	}
+
+void CTLchAppView::ConstructL(TRect aRect)
+	{
+	CreateWindowL();
+    SetRect(aRect);
+    ActivateL();
+	}
+
+void CTLchAppView::GetHelpContext(TCoeHelpContext& aContext) const
+	{
+	aContext.iMajor=KUidTLchApp;
+	aContext.iContext=_L("Context Id 12");
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tlch.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,127 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Element within Help Model module
+// 
+//
+
+#ifndef __TLBX_H__
+#define __TLBX_H__
+
+#if !defined(__COECNTRL_H__)
+#include <coecntrl.h>
+#endif
+#if !defined(__COECCNTX_H__)
+#include <coeccntx.h>
+#endif
+#if !defined(__COEMAIN_H__)
+#include <coemain.h>
+#endif
+#if !defined(__COEHELP_H__)
+#include <coehelp.h>
+#endif
+#if !defined(__EIKAPPUI_H__)
+#include <eikappui.h>
+#endif
+#if !defined(__EIKAPP_H__)
+#include <eikapp.h>
+#endif
+#if !defined(__EIKDOC_H__)
+#include <eikdoc.h>
+#endif
+#if !defined(__EIKENV_H__)
+#include <eikenv.h>
+#endif
+#if !defined(__APGTASK_H__)
+#include <apgtask.h>
+#endif
+#if !defined(__EIKHLBX_H__)
+#include <techview/eikhlbx.h>
+#endif
+#if !defined(__EIKHLBM_H__)
+#include <techview/eikhlbm.h>
+#endif
+#if !defined(__EIKHLBI_H__)
+#include <techview/eikhlbi.h>
+#endif
+#if !defined(__EIKHLBV_H__)
+#include <techview/eikhlbv.h>
+#endif
+#if !defined(__EIKLBI_H__)
+#include <techview/eiklbi.h>
+#endif
+#if !defined(__EIKLBM_H__)
+#include <techview/eiklbm.h>
+#endif
+#if !defined(__EIKLBX_H__)
+#include <techview/eiklbx.h>
+#endif
+#if !defined(__EIKCLBD_H__)
+#include <techview/eikclbd.h>
+#endif
+#if !defined(__EIKBTGPC_H__)
+#include <techview/eikbtgpc.h>
+#endif
+#if !defined(__EIKTXLBM_H__)
+#include <techview/eiktxlbm.h>
+#endif
+#if !defined(__HLPMODEL_H__)
+#include "HLPMODEL.H"
+#endif
+#if !defined(__GULICON_H__)
+#include <gulicon.h>
+#endif
+#include <techview/eikon.hrh>
+
+
+
+const TUid KUidTLchApp={ 0x100052b7 };
+
+class CTLchAppView : public CCoeControl
+	{
+public:
+	void ConstructL(TRect aRect);
+	void GetHelpContext(TCoeHelpContext& aContext) const;
+	};
+
+
+class CTLchAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CTLchAppUi();
+public:  // from CCoeAppUi
+	CArrayFix<TCoeHelpContext>* HelpContextL() const;
+private: // from CEikAppUi
+	void HandleCommandL(TInt aCommand);
+private:
+    CTLchAppView* iAppView;
+    };
+
+class CTLchDocument : public CEikDocument
+	{
+public:
+	// construct/destruct
+	CTLchDocument(CEikApplication& aApp);
+private: // from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+class CTLchApplication : public CEikApplication
+	{
+private: // from CEikApplication - pure virutal
+	CApaDocument* CreateDocumentL();
+	// FROM CApaApplication - pure virutal	
+	TUid AppDllUid() const;
+	};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tlch.hrh	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+enum
+	{
+	ETlchMenuHelpC=0x400,
+	ETlchMenuHelp,
+	ETlchAppView,
+	ETlchDialogView
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tlch.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,55 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+  TARGET        tlch.exe
+  TARGETTYPE    exe
+
+TARGETPATH	/sys/bin
+EPOCSTACKSIZE 0x5000
+
+
+
+CAPABILITY   None
+UID		0x100039CE	0x100052b7
+VENDORID	0x70000001
+
+SOURCEPATH	../tsrc
+SOURCE		tlch.cpp
+
+start resource	tlch.rss
+header
+targetpath	/resource/apps
+lang            SC
+end
+
+start resource	tlch_reg.rss
+targetpath	/private/10003a3f/apps
+lang		sc
+end
+
+
+
+USERINCLUDE	.
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN 
+userinclude ../inc ../lch 
+ 
+
+LIBRARY		euser.lib	 
+LIBRARY		cone.lib	
+LIBRARY		apparc.lib eikcore.lib	
+LIBRARY		hlplch.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tlch.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,70 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+NAME TLCH
+
+#include <techview/eikon.rh>
+#include "tlch.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	menubar=r_tlch_menubar;
+	hotkeys=r_tlch_hotkeys;
+//	toolbar=r_tlch_toolbar;
+	}
+
+RESOURCE HOTKEYS r_tlch_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; },
+		HOTKEY { command=ETlchMenuHelpC; key='h'; },
+		HOTKEY { command=ETlchMenuHelp; key='i'; } 
+        };
+    }
+
+RESOURCE MENU_BAR r_tlch_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_tlch_file_menu; txt="File"; },
+		MENU_TITLE { menu_pane=r_tlch_view_menu; txt="View"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_tlch_file_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=ETlchMenuHelpC; txt="Help with contexts"; },
+		MENU_ITEM { command=ETlchMenuHelp; txt="Help without contexts"; flags=EEikMenuItemSeparatorAfter; },
+		MENU_ITEM { command=EEikCmdExit; txt="Close"; }
+        };
+    }
+
+RESOURCE MENU_PANE r_tlch_view_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=ETlchAppView; txt="View"; },
+		MENU_ITEM { command=ETlchDialogView; txt="Dialog"; }
+		};
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tlch_reg.rss	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,25 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x100052b7 // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{	
+	app_file = tlch;
+	localisable_resource_file="\\resource\\apps\\tlch";
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tstore.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,368 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "tstore.h"
+
+// System includes
+#include "DBWRITER.H"
+#include <txtrich.h>
+#include <txtfmlyr.h>
+#include <txtmrtsr.h>
+#include <gdi.h>
+
+// Constants
+const TUint32 KBaseCategoryUID = 1;
+const TUint32 KHelpFileUID = 0;
+const TUint32 KNumberHelpTopics = 20;
+
+// Literal constants
+_LIT(KProgressText, ".");
+
+// Classes
+CTestWriter::CTestWriter(RFs& aFs)
+:	iFs(aFs), iCategoryUID(KBaseCategoryUID)
+	{
+	}
+
+CTestWriter::~CTestWriter()
+	{
+	delete iWriter;
+	delete iRichText;
+	delete iCharFormatLayer;
+	delete iParaFormatLayer;
+	}
+
+CTestWriter* CTestWriter::NewL(RFs& aFs)
+	{
+	CTestWriter* self = new(ELeave) CTestWriter(aFs);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestWriter::ConstructL()
+	{
+	iWriter = CHlpDbWriter::NewL(iFs);
+	iCharFormatLayer = CCharFormatLayer::NewL();
+	iParaFormatLayer = CParaFormatLayer::NewL();
+	iRichText = CRichText::NewL(iParaFormatLayer, iCharFormatLayer);	
+	}
+
+void CTestWriter::BuildFilesL()
+	{
+	//SinceDBWriter can not add/remove files from the protected rsc directory we put the file in the public area
+	_LIT(KHelpFileNameFormatString, "C:\\Public\\Help\\file%d.dat");
+
+	TheFsSession.MkDirAll(KHelpFileNameFormatString);
+	DeleteFilesL();
+	TInt i = 0;
+	TFileName fileName;
+	TInt numberOfFiles=25;
+
+	// build 25 1UID database files 
+	
+	
+	TheTest.Next(_L("Creating 25 databases with 1 category"));
+	for (i=0; i<numberOfFiles; i++)
+		{
+		iFileCount=i;
+		fileName.Format(KHelpFileNameFormatString, i);
+		BuildFileL(fileName, TUid::Uid(KHelpFileUID + i), 1);
+		}
+
+	// build 25 3UID database files 
+		
+	TheTest.Next(_L("\nCreating 25 databases with 3 categories"));
+	for (i=0; i<numberOfFiles; i++)
+		{
+		iFileCount=i;
+		fileName.Format(KHelpFileNameFormatString, (i+numberOfFiles));
+		BuildFileL(fileName, TUid::Uid(KHelpFileUID + i), 3);
+		}
+	
+	// build 25 15UID database files 
+	
+	TheTest.Next(_L("\nCreating 25 databases with 15 categories"));
+	for (i=0; i<numberOfFiles; i++)
+		{
+		iFileCount=i;
+		fileName.Format(KHelpFileNameFormatString, (i+2*numberOfFiles));
+		BuildFileL(fileName, TUid::Uid(KHelpFileUID + i), 15);
+		}
+	}
+
+void CTestWriter::BuildFileL(const TDesC& aFileName, TUid aUid, TUint aNumberCategoryUID)
+	{
+	// Pre writing
+	iWriter->CreateFileL(aFileName);
+	iWriter->SetDatabaseUidL(aUid);
+	iWriter->CreateDatabaseL();
+
+	// Writing
+	WriteUidTableL(aNumberCategoryUID);
+	WriteTopicTableL(aNumberCategoryUID);
+	WriteContextTableL();
+	WriteTopicIndexTableL();
+	WriteIndexTableL();
+
+	// Post writing
+	iWriter->CompressDatabaseL();
+	iWriter->CloseFileL();
+	}
+
+// write out the uid table 
+void CTestWriter::WriteUidTableL(TUint aNumberCategoryUID)
+	{
+	for (TUint i=0; i < aNumberCategoryUID; i++)
+		{
+		TUid uid;
+		uid.iUid=iCategoryUID+i;
+		iWriter->SetUidL(uid);
+		}
+	}
+
+void CTestWriter::WriteTopicTableL( TUint aNumberCategoryUID)
+	{
+	iWriter->BeginTransaction();
+
+	// loop for the number of categories in the database
+	for( TUint i = 0; i < aNumberCategoryUID;i++)
+		{
+		// write out a set of topics
+		WriteTopicsL(i);
+		iCategoryUID++;
+		}
+
+	// commit the transaction
+	iWriter->CommitTransaction();
+
+	TheTest.Printf(KProgressText);
+	}
+
+// write out a set of topics
+void CTestWriter::WriteTopicsL(TUint aTopicIDMultiplier)
+	{
+	TBuf<32> buf;
+	TBuf<1042> buf2;
+
+	CHlpTable* table = iWriter->TopicTable();
+
+	for(TUint i=0; i<KNumberHelpTopics; i++)
+		{
+		// create and write out a title
+		table->InsertL();
+		buf.Zero();
+		buf.Format(KTopicTitle, (KNumberHelpTopics*aTopicIDMultiplier)+i+(1000*iFileCount), iFileCount);
+		table->SetColL(KTopicTblTopicTitle,buf);
+
+		// add the title to the body text
+		buf2.Append(buf);
+		buf2.Append(TChar(2029));
+
+		// create and write the category string
+		buf.Zero();
+		buf.Format(KCategory, iCategoryUID);
+		table->SetColL(KTopicTblCategoryTitle, buf);
+
+		// add the category to the body text
+		buf2.Append(buf);
+		buf2.Append(TChar(2029));
+		buf2.Append(KBodyText);
+		iRichText->Reset();
+		iRichText->InsertL(0, buf2);
+		
+		// write out the body text
+		table->SetColL(KTopicTblTopicText, KTopicTblTopicMarkup, *iRichText);
+
+		// write out some synonyms
+		buf2.Zero();
+		table->SetColL(KTopicTblSynonym, CONST_CAST(TDesC&, KSynonymText()));
+
+		// calculate and write out the topicID
+		TInt id;
+		id=(KNumberHelpTopics*aTopicIDMultiplier)+i+(1000*iFileCount);
+		table->SetColL(KTopicTblTopicId, id);
+
+		// set the category UID
+		table->SetColL(KTopicTblCategoryUID, iCategoryUID);
+		
+		table->PutL();
+		}
+
+	TheTest.Printf(KProgressText);
+	}
+
+
+void CTestWriter::WriteContextTableL()
+	{
+	CHlpTable* table = iWriter->ContextTable();
+	iWriter->BeginTransaction();
+
+	TBuf<32> buf;
+	for(TInt i=1; i <=20; i++)
+		{
+		buf = KContextText;
+		buf.AppendNum(iFileCount);
+		buf.AppendNum(i);
+		table->InsertL();
+		table->SetColL(KContextTblTopicId, i+(1000*iFileCount));
+		table->SetColL(KContextTblContext, buf);
+		table->PutL();
+		}
+
+	iWriter->CommitTransaction();
+
+	TheTest.Printf(KProgressText);
+	}
+
+void CTestWriter::WriteIndexTableL()
+	{
+	CHlpTable* table = iWriter->IndexTable();
+	iWriter->BeginTransaction();
+
+	TBuf<120> buf;
+	for(TInt i=1; i<=20; i++)
+		{
+		table->InsertL();
+		buf.Format(KIndexPhrase, i, iFileCount);
+		table->SetColL(KIndexTblIndex, buf);
+		table->SetColL(KIndexTblIndexId, i);
+		table->PutL();
+		}
+
+	iWriter->CommitTransaction();
+
+	TheTest.Printf(KProgressText);
+	}
+
+void CTestWriter::WriteTopicIndexTableL()
+	{
+	CHlpTable* table = iWriter->TopicIndexTable();
+	iWriter->BeginTransaction();
+
+	for(TInt i=1; i<=20; i++)
+		{
+		table->InsertL();
+		const TInt id = i+(1000*iFileCount);
+		table->SetColL(KTopicIndexTblTopicId, id);
+		table->SetColL(KTopicIndexTblIndexId, i);
+		table->PutL();
+		}
+
+	iWriter->CommitTransaction();
+
+	TheTest.Printf(KProgressText);
+	}
+
+void CTestWriter::DeleteFilesL()
+	{
+	_LIT(KHelpFileNameFormatString, "C:\\Public\\Help\\*.*");
+	CFileMan* fileman = CFileMan::NewL(iFs);
+	CleanupStack::PushL(fileman);
+	TInt error = (fileman->Delete(KHelpFileNameFormatString)); 
+	if	(error != KErrNone && error != KErrNotFound)
+		User::Leave(error);
+
+	CleanupStack::PopAndDestroy(fileman);
+	}
+
+static void StartTestL()
+    {
+	TheWriter = CTestWriter::NewL(TheFsSession);
+
+	TRAPD(error,
+		TheWriter->BuildFilesL();
+	); 
+	if	(error)
+		TheTest.Printf(_L("leave code=%d\n"), error);
+	else
+		TheTest.Printf(_L("\nok"));
+	TheTest(error == KErrNone || error == KErrNoMemory);
+
+	TheTest.Printf(_L("Last category written %d\n"), TheWriter->CategoryUID());
+	delete TheWriter;
+    }
+
+static void TidyFilesL(TAny*)
+	{
+	TheWriter = CTestWriter::NewL(TheFsSession);
+	CleanupStack::PushL(TheWriter);
+	TheWriter->DeleteFilesL();
+	CleanupStack::PopAndDestroy(TheWriter);
+	}
+
+static void DoOOMTestL()
+	{
+	TInt error = KErrNoMemory;
+	TInt failAt = 0;
+	
+	while(error!=KErrNone)
+		{
+		failAt++;
+		__UHEAP_SETFAIL(RHeap::EDeterministic, failAt);
+		__UHEAP_MARK;
+		TRAP(error, StartTestL());
+		if	(error != KErrNone)
+			{
+			__UHEAP_MARKEND;
+			}
+
+		__UHEAP_RESET;
+		TheTest(error == KErrNoMemory || error == KErrNone);
+		}
+	}
+
+static void doMainL()
+	{
+	TInt error = KErrNone;
+
+	CleanupStack::PushL(TCleanupItem(TidyFilesL, 0));
+
+	// Normal test
+	TRAP(error, StartTestL());
+	TheTest(error == KErrNone);
+
+	// OOM test
+	TRAP(error, DoOOMTestL());
+	TheTest(error == KErrNone);
+
+	CleanupStack::PopAndDestroy();
+	}
+
+/**
+@SYMTestCaseID PIM-TSTORE-0001
+*/	
+GLDEF_C TInt E32Main()
+    {
+	__UHEAP_MARK;
+	TheTest.Start(_L("@SYMTestCaseID PIM-TSTORE-0001 Creating cleanup objects"));
+
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TheTest(TheFsSession.Connect() == KErrNone);
+
+	TRAPD(error, doMainL());
+	TheTest(error == KErrNone);
+
+	// Cleanup & close
+	delete cleanup;
+	TheFsSession.Close();
+
+	TheTest.End();
+	TheTest.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tstore.h	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,93 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __TSTORE_H__
+#define __TSTORE_H__
+
+// System includes
+#include <e32base.h>
+#include <e32test.h>
+#include <f32file.h>
+
+// Literal constants
+_LIT(KContextText, "Context");
+_LIT(KTopicTitle, "Topic Title %d File %d");
+_LIT(KCategory, "Category %d");
+_LIT(KIndexPhrase, "Index Phrase %d File %d");
+_LIT(KSynonymText, "SynonymA SynonymB SynonymC");
+_LIT(KBodyText,	"When a program requests a service, this service can be performed either synchronously or asynchronously. A synchronous service is the “usual” pattern for function calls: when the function returns, the service requested has been performed or an error code returned. An asynchronous service is requested by a function call, but completion occurs later, and is indicated by a signal. Between the issue of the request and the signal, the request is said to be pending. The requesting program may do other processing while the request is pending, else it issues a wait. The operating system will wake up the program when completion of any of its pending requests is signalled.");
+
+// Classes referenced
+class CRichText;
+class CTestWriter;
+class CHlpDbWriter;
+class CCharFormatLayer;
+class CParaFormatLayer;
+
+// Globals
+static RTest TheTest(_L("TStore"));
+static RFs TheFsSession;
+static CTestWriter* TheWriter;
+
+// Classes
+class CTestWriter : public CBase
+	{
+public:
+	static CTestWriter* NewL(RFs& aFs);
+	~CTestWriter();
+
+private:
+	CTestWriter(RFs& aFs);
+	void ConstructL();
+
+public:
+	void BuildFilesL();
+	void DeleteFilesL();
+	TUint CategoryUID(){return iCategoryUID;}
+
+private:
+	void BuildFileL(const TDesC& aFileName, TUid aUid, TUint aNumberCategoryUID);
+	void WriteTopicTableL(TUint aNumberCategoryUID);
+	void WriteIndexTableL();
+	void WriteTopicIndexTableL();
+	void WriteContextTableL();
+	void WriteUidTableL(TUint aNumberCategoryUID);
+	void WriteTopicsL(TUint aTopicIDMultiplier);
+
+private:
+	RFs& iFs;
+	TInt iFileCount;
+	TUint32 iCategoryUID; 
+	//
+	CRichText* iRichText;
+	CHlpDbWriter* iWriter;
+	CCharFormatLayer* iCharFormatLayer;
+	CParaFormatLayer* iParaFormatLayer;
+	};
+
+/*
+LOCAL_C void WriteToTablesL();
+LOCAL_C void WriteContextTableL();
+LOCAL_C void WriteIndexTableL();
+LOCAL_C void WriteTopicTableL();
+LOCAL_C void WriteTopicIndexTableL();
+LOCAL_C void WriteUidTableL();
+LOCAL_C void CreateFilesL();
+LOCAL_C void BuildFileL(const TDesC& aFileName);
+
+_LIT(KTestDbName, "c:\\testdb.dat");
+*/
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symhelp/helpmodel/tsrc/tstore.mmp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// TSTORE.MMP
+//
+
+TARGET			tstore.exe
+TARGETTYPE		EXE
+CAPABILITY   All -TCB
+SOURCEPATH	../tsrc
+SOURCE			tstore.cpp
+APP_LAYER_SYSTEMINCLUDE_SYMBIAN
+userinclude ../inc ../dbwriter ../tsrc
+
+LIBRARY			euser.lib	efsrv.lib	dbwriter.lib	etext.lib
+VENDORID 0x70000001
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinition.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "systemDefinition.dtd"[
+
+ 	<!ENTITY layer_real_source_path "\sf\app\helps">
+ 	<!ENTITY layer_name "helps">
+
+ 	<!ENTITY layer_file SYSTEM "systemDefinitionLayer.xml">
+ 	<!ENTITY targetDefinition_file SYSTEM "/epoc32/tools/systemDefinition/targetDefinition.xml">
+ 	<!ENTITY defaultbuild_file SYSTEM "/epoc32/tools/systemDefinition/default_build.xml">
+ 	<!ENTITY defaultclean_file SYSTEM "/epoc32/tools/systemDefinition/default_clean.xml">
+]>
+
+<SystemDefinition name="SystemDefinition" schema="1.4.0">
+  <systemModel>
+&layer_file;
+  </systemModel>
+  <build>
+&targetDefinition_file;
+
+		<configuration name="build" description="build layer" filter="">
+    	<layerRef layerName="&layer_name;"/>
+
+&defaultbuild_file;
+    </configuration>
+
+		<configuration name="clean" description="clean layer" filter="">
+    	<layerRef layerName="&layer_name;"/>
+
+&defaultclean_file;
+    </configuration>
+
+  </build>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinitionLayer.xml	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,7 @@
+<layer name="helps">
+  <module name="group_helps">
+    <component name="group_helps">
+      <unit unitID="helps" mrp="" bldFile="&layer_real_source_path;\group" name="helps" />
+    </component>
+  </module>
+</layer>