diff -Nru aide-0.0.2/affichageaide.c aide-0.0.2-mod/affichageaide.c
--- aide-0.0.2/affichageaide.c	2004-07-22 04:53:21 +0400
+++ aide-0.0.2-mod/affichageaide.c	2004-11-06 15:25:33 +0300
@@ -1,18 +1,26 @@
 #include "affichageaide.h"
+#include "aideplayer.h"
 
+char *mpgfile;
 
-
-cAffichageAide::cAffichageAide(const char* AideFile) : cOsdMenu (AideFile)
+cAffichageAide::cAffichageAide(const char* selpath,const char* Title) : cOsdMenu (Title)
 {
-	char *Chemin;
-	Chemin = Trim(AideFile);
-	char *Aide;
-	FILE *f;
-	asprintf(&Aide,"%s/aide/%s/%s.aide",cPlugin::ConfigDirectory(),Chemin,Chemin);
-	f=fopen(Aide,"r");
+	asprintf(&mpgfile,"%s.%s",selpath,"mpg");
+	FILE *fmpg = fopen(mpgfile,"r");
+	if (fmpg)
+	{
+	    fclose(fmpg);
+	    SetHelp(tr("StillImage"),NULL,NULL,NULL);
+	}
+	
+	char *txtfile;
+	asprintf(&txtfile,"%s.%s",selpath,"txt");
+
+	FILE *f = fopen(txtfile,"r");
 	if (f)
 	{
-		char buff[256];
+
+		char buff[8192];
 		char *buff2;
 		cOsdItem *item;
 		while (fgets(buff,sizeof(buff),f)) {
@@ -28,17 +36,17 @@
 					if (!strcmp(buff,"NAME"))
 					{
 						tmp=strtok(NULL,"=");
-						asprintf(&Header," %sPlugin : %s",Header,tmp);
+						asprintf(&Header,tr(" %sPlugin : %s"),Header,tmp);
 					}
 					else if (!strcmp(buff,"VERSION"))
 					{
 						tmp=strtok(NULL,"=");
-						asprintf(&Header," %sVersion : %s",Header,tmp);
+						asprintf(&Header,tr(" %sVersion : %s"),Header,tmp);
 					}
 					else if (!strcmp(buff,"AUTOR"))
 					{
 						tmp=strtok(NULL,"=");
-						asprintf(&Header," %sPar : %s",Header,tmp);
+						asprintf(&Header,tr(" %sBy : %s"),Header,tmp);
 					}
 					fgetresult=fgets(buff,sizeof(buff),f);
 				}
@@ -57,20 +65,42 @@
 				item = new cOsdItem(buff2);
 				Add(item);	
 			}*/
-			char *buff3=buff;
-			asprintf(&buff2,"%s","");
+			
+			char *buff3="";
+			char *margin="";
+			bool ismargin=true;
+			
+			for (int i=0;i<(int) strlen(buff);i++)
+			{
+			    if (buff[i]!=' ') { ismargin=false; };
+			    
+			    if (ismargin)
+			    {
+				asprintf(&margin,"%s%c",margin,buff[i]);
+			    } else {
+				asprintf(&buff3,"%s%c",buff3,buff[i]);
+			    }			
+			}
+			
+	
+			asprintf(&buff2,"%s",margin);
 			strtok(buff3," ");
 			while (buff3)
 			{
-				if ((strlen(buff2)+strlen(buff3))<60)
+				if ((strlen(buff2)+strlen(buff3)+strlen(margin))<(Setup.OSDWidth/10))
 				{
-					asprintf(&buff2,"%s %s",buff2,buff3);
+					if (strlen(buff2)>strlen(margin))
+					{
+					    asprintf(&buff2,"%s %s",buff2,buff3);
+					} else {
+					    asprintf(&buff2,"%s%s",buff2,buff3);
+					}
 				}
 				else
 				{
 					item=new cOsdItem(buff2);
 					Add(item);
-					asprintf(&buff2,"%s",buff3);
+					asprintf(&buff2,"%s%s",margin,buff3);
 				}
 				buff3=strtok(NULL," ");
 			}	
@@ -89,18 +119,21 @@
 eOSState cAffichageAide::ProcessKey(eKeys Key)
 {
 	eOSState state = cOsdMenu::ProcessKey(Key);
-	return state;
-}
-
-char *cAffichageAide::Trim(const char *totrim)
-{
-	char *result="";
-	for (int i=0;i<(int) strlen(totrim);i++)
-	{
-		if (totrim[i]!=' ')
+		switch(Key)
 		{
-			asprintf(&result,"%s%c",result,totrim[i]);
+			case kRed:
+			    {
+			    	FILE *fmpg = fopen(mpgfile,"r");
+				if (fmpg)
+				{
+				    fclose(fmpg);
+				    CloseSubMenu();
+				    cControl::Launch(new cAidePlayerControl(mpgfile));
+				    return osEnd;
+				};
+			    };
+			    break;
+			default : break;
 		}
-	}
-	return result;
+	return state;
 }
diff -Nru aide-0.0.2/affichageaide.h aide-0.0.2-mod/affichageaide.h
--- aide-0.0.2/affichageaide.h	2004-07-07 23:04:02 +0400
+++ aide-0.0.2-mod/affichageaide.h	2004-11-04 00:24:46 +0300
@@ -5,10 +5,9 @@
 class cAffichageAide : public cOsdMenu
 {
 	public : 
-	cAffichageAide(const char*);
+	cAffichageAide(const char *selpath,const char *Title);
 	~cAffichageAide();
 	virtual eOSState ProcessKey (eKeys Key);
-	char *Trim(const char*);
 };
 
 #endif
diff -Nru aide-0.0.2/aide/Enregistrement/Enregistrement.aide aide-0.0.2-mod/aide/Enregistrement/Enregistrement.aide
--- aide-0.0.2/aide/Enregistrement/Enregistrement.aide	2004-07-09 20:57:52 +0400
+++ aide-0.0.2-mod/aide/Enregistrement/Enregistrement.aide	1970-01-01 03:00:00 +0300
@@ -1,13 +0,0 @@
-VDR est avant tout un magnetoscope numerique. 
-Pour enregistrer immediatement la chaine que vous regardez, appuyez sur Menu/Enregistrement (touche rouge). 
-
-On peut egalement creer un programme en allant dans Menu/Programmes/Nouveau ou en utilisant la touche bleue. 
-La liste des parametres demande quand meme quelques explications. 
-"Actif" (oui/non) permet de desactiver temporairement un programme. 
-Utile lorsque votre serie tele preferee fait une pause pendant les vacances. 
-"Jour" peut etre un jour du mois (1..31) indiquant ainsi que le programme ne sera execute qu'une seule fois. 
-On peut egalement creer un programme repetitif. 
-Par exemple, la valeur "LMMJV--" indique un programme s'executant tous les jours de la semaine sauf le week-end. 
-"Priorite" permet de gerer les programmes entrant en conflit
-Exemple, un enregistrement en cours avec une priorite de 20 sera interrompu pour laisser la place a un programme avec une priorite de 50. 
-Cette priorite est egalement stockee avec l'enregistrement et est utilisee en cas de disque dur plein afin de savoir quel enregistrement doit etre supprime
diff -Nru aide-0.0.2/aide/fra/Enregistrement.txt aide-0.0.2-mod/aide/fra/Enregistrement.txt
--- aide-0.0.2/aide/fra/Enregistrement.txt	1970-01-01 03:00:00 +0300
+++ aide-0.0.2-mod/aide/fra/Enregistrement.txt	2004-07-09 20:57:52 +0400
@@ -0,0 +1,13 @@
+VDR est avant tout un magnetoscope numerique. 
+Pour enregistrer immediatement la chaine que vous regardez, appuyez sur Menu/Enregistrement (touche rouge). 
+
+On peut egalement creer un programme en allant dans Menu/Programmes/Nouveau ou en utilisant la touche bleue. 
+La liste des parametres demande quand meme quelques explications. 
+"Actif" (oui/non) permet de desactiver temporairement un programme. 
+Utile lorsque votre serie tele preferee fait une pause pendant les vacances. 
+"Jour" peut etre un jour du mois (1..31) indiquant ainsi que le programme ne sera execute qu'une seule fois. 
+On peut egalement creer un programme repetitif. 
+Par exemple, la valeur "LMMJV--" indique un programme s'executant tous les jours de la semaine sauf le week-end. 
+"Priorite" permet de gerer les programmes entrant en conflit
+Exemple, un enregistrement en cours avec une priorite de 20 sera interrompu pour laisser la place a un programme avec une priorite de 50. 
+Cette priorite est egalement stockee avec l'enregistrement et est utilisee en cas de disque dur plein afin de savoir quel enregistrement doit etre supprime
diff -Nru aide-0.0.2/aide/fra/index.aide aide-0.0.2-mod/aide/fra/index.aide
--- aide-0.0.2/aide/fra/index.aide	1970-01-01 03:00:00 +0300
+++ aide-0.0.2-mod/aide/fra/index.aide	2004-11-04 00:49:15 +0300
@@ -0,0 +1,3 @@
+Enregistrement=Enregistrement
+Locker=locker
+Sked=sked
diff -Nru aide-0.0.2/aide/fra/locker.txt aide-0.0.2-mod/aide/fra/locker.txt
--- aide-0.0.2/aide/fra/locker.txt	1970-01-01 03:00:00 +0300
+++ aide-0.0.2-mod/aide/fra/locker.txt	2004-07-08 03:18:50 +0400
@@ -0,0 +1,31 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
Ôàéëû aide-0.0.2/aide/fra/sked.mpg è aide-0.0.2-mod/aide/fra/sked.mpg ðàçëè÷àþòñÿ
diff -Nru aide-0.0.2/aide/fra/sked.txt aide-0.0.2-mod/aide/fra/sked.txt
--- aide-0.0.2/aide/fra/sked.txt	1970-01-01 03:00:00 +0300
+++ aide-0.0.2-mod/aide/fra/sked.txt	2004-07-22 04:53:34 +0400
@@ -0,0 +1,23 @@
+:HEADER
+NAME=Sked
+VERSION=0.0.1
+AUTOR=Sad
+:BODY
+Plugin SKED
+
+Ce plugin sert a ajouter des cles a votre fichier SoftCam.Key
+
+Ajouter des Cles:
+  Pour ajouter une cle, selectionner l'entree Ajouter une cle
+  Selectionner le type de cle (Viaccess,Seca,Irdeto,Nagra)
+  Entrer le provideur : droite pour passer en mode edit, puis haut/bas
+  Valider avec OK, et faire de meme pour le numero de cle et la cle
+  Sauvegarder votre SoftCam.Key avec le bouton Rouge
+
+Rechercher une cle :
+  Entrer vos criteres de recherche comem pour l'ajout
+  Lancer la recherche avec le bouton Rouge
+
+
+
+Aide SKED By Sad
diff -Nru aide-0.0.2/aide/locker/locker.aide aide-0.0.2-mod/aide/locker/locker.aide
--- aide-0.0.2/aide/locker/locker.aide	2004-07-08 03:18:50 +0400
+++ aide-0.0.2-mod/aide/locker/locker.aide	1970-01-01 03:00:00 +0300
@@ -1,31 +0,0 @@
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
diff -Nru aide-0.0.2/aide/sked/sked.aide aide-0.0.2-mod/aide/sked/sked.aide
--- aide-0.0.2/aide/sked/sked.aide	2004-07-22 04:53:34 +0400
+++ aide-0.0.2-mod/aide/sked/sked.aide	1970-01-01 03:00:00 +0300
@@ -1,23 +0,0 @@
-:HEADER
-NAME=Sked
-VERSION=0.0.1
-AUTOR=Sad
-:BODY
-Plugin SKED
-
-Ce plugin sert a ajouter des cles a votre fichier SoftCam.Key
-
-Ajouter des Cles:
-  Pour ajouter une cle, selectionner l'entree Ajouter une cle
-  Selectionner le type de cle (Viaccess,Seca,Irdeto,Nagra)
-  Entrer le provideur : droite pour passer en mode edit, puis haut/bas
-  Valider avec OK, et faire de meme pour le numero de cle et la cle
-  Sauvegarder votre SoftCam.Key avec le bouton Rouge
-
-Rechercher une cle :
-  Entrer vos criteres de recherche comem pour l'ajout
-  Lancer la recherche avec le bouton Rouge
-
-
-
-Aide SKED By Sad
Ôàéëû aide-0.0.2/aide/sked/sked.mpg è aide-0.0.2-mod/aide/sked/sked.mpg ðàçëè÷àþòñÿ
diff -Nru aide-0.0.2/aide.c aide-0.0.2-mod/aide.c
--- aide-0.0.2/aide.c	2004-07-21 03:13:40 +0400
+++ aide-0.0.2-mod/aide.c	2004-11-04 00:41:13 +0300
@@ -1,6 +1,6 @@
 #include "aide.h"
-#include "aide-osd.h"
 #include "menuaide.h"
+#include "aidei18n.h"
 
 cPluginAide PlugAide;
 
@@ -31,15 +31,13 @@
 
 bool cPluginAide::Start(void)
 {
+	RegisterI18n(aidePhrases);
 	return true;
 }
 
 cOsdObject *cPluginAide::MainMenuAction(void)
 {
-	if (PlugAide.Osd)
-		return new cAideOsd;
-	else
-		return new cMenuAide;
+	return new cMenuAide;
 }
 
 /*
diff -Nru aide-0.0.2/aide.h aide-0.0.2-mod/aide.h
--- aide-0.0.2/aide.h	2004-07-21 03:11:16 +0400
+++ aide-0.0.2-mod/aide.h	2004-11-03 00:51:31 +0300
@@ -4,8 +4,8 @@
 #include <vdr/plugin.h>
 
 static const char *VERSION        = "0.0.2";
-static const char *DESCRIPTION    = "VDR Aide";
-static const char *MAINMENUENTRY  = "Aide";
+static const char *DESCRIPTION    = "VDR Help";
+static const char *MAINMENUENTRY  = "Help";
 
 // --- cPluginLocker -------------------------------------------------------------
 
@@ -16,7 +16,7 @@
   cPluginAide(void);
   virtual ~cPluginAide(void);
   virtual const char *Version(void) { return VERSION; }
-  virtual const char *Description(void) { return DESCRIPTION; }
+  virtual const char *Description(void) { return tr(DESCRIPTION); }
   virtual const char *CommandLineHelp(void);
   //virtual cMenuSetupPage *SetupMenu(void);
   //virtual bool SetupParse(const char *Name,const char *Value);
@@ -26,7 +26,7 @@
   bool ShowOsd;
   char *OsdAideName;
   const char *ShowOsdFile;
-  virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; }
+  virtual const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); }
   virtual cOsdObject *MainMenuAction(void);
   //void Store(void);
 };
diff -Nru aide-0.0.2/aidei18n.c aide-0.0.2-mod/aidei18n.c
--- aide-0.0.2/aidei18n.c	1970-01-01 03:00:00 +0300
+++ aide-0.0.2-mod/aidei18n.c	2004-11-06 14:40:37 +0300
@@ -0,0 +1,166 @@
+/*
+ * Frontend Status Monitor plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#include "aidei18n.h"
+
+const tI18nPhrase aidePhrases[] = {
+  { "VDR Help", // English
+    "VDR Hilfe", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    "VDR Aide", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    "ÁßàÐÒÚÐ VDR", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { "Help", // English
+    "Hilfe", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    "Aide", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    "ÁßàÐÒÚÐ", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { "Available help topics:", // English
+    "Die zugänglichen Themen:", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    "Liste des aides disponibles:", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    "´ÞáâãßÝëÕ âÕÜë:", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { "StillImage", // English
+    "Bild", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    "", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    "ºÐàâØÝÚÐ", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { " %sPlugin : %s", // English
+    "", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    "", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    " %s¼ÞÔãÛì: %s", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { " %sVersion : %s", // English
+    "", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    "", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    " %s²ÕàáØï: %s", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { " %sBy : %s", // English
+    "", // Deutsch
+    "", // Slovenski
+    "", // Italiano
+    "", // Nederlands
+    "", // Português
+    " %sPar : %s", // Français
+    "", // Norsk
+    "", // suomi
+    "", // Polski
+    "", // Español
+    "", // ÅëëçíéêÜ (Greek)
+    "", // Svenska
+    "", // Romaneste
+    "", // Magyar
+    "", // Català
+    " %s°ÒâÞà: %s", // ÀãááÚØÙ (Russian)
+    "", // Hrvatski (Croatian)
+  },
+  { "eng", // English
+    "deu", // Deutsch
+    "slv", // Slovenski
+    "ita", // Italiano
+    "dut", // Nederlands
+    "por", // Português
+    "fra", // Français
+    "nor", // Norsk
+    "fin", // suomi
+    "pol", // Polski
+    "esl", // Español
+    "ell", // ÅëëçíéêÜ (Greek)
+    "sve", // Svenska
+    "rom", // Romaneste
+    "hun", // Magyar
+    "cat", // Català
+    "rus", // ÀãááÚØÙ (Russian)
+    "hrv", // Hrvatski (Croatian)
+  },
+  { NULL }
+};
+  // The 3-letter names of the language (this MUST be the third phrase!):
diff -Nru aide-0.0.2/aidei18n.h aide-0.0.2-mod/aidei18n.h
--- aide-0.0.2/aidei18n.h	1970-01-01 03:00:00 +0300
+++ aide-0.0.2-mod/aidei18n.h	2004-11-03 00:51:31 +0300
@@ -0,0 +1,16 @@
+/*
+ * Frontend Status Monitor plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#ifndef _I18N__H
+#define _I18N__H
+
+#include <vdr/i18n.h>
+
+extern const tI18nPhrase aidePhrases[];
+
+#endif // _I18N__H
diff -Nru aide-0.0.2/aide-osd.c aide-0.0.2-mod/aide-osd.c
--- aide-0.0.2/aide-osd.c	2004-07-21 15:59:18 +0400
+++ aide-0.0.2-mod/aide-osd.c	1970-01-01 03:00:00 +0300
@@ -1,169 +0,0 @@
-#include "aide-osd.h"
-#include "aide.h"
-static const cFont *font = cFont::GetFont(fontOsd); 
-
-cAideOsd::cAideOsd (void)
-{
-	osd=NULL;
-	asprintf(&Header.Name,"%s","");
-	asprintf(&Header.Version,"%s","");
-	asprintf(&Header.Autor,"%s","");
-	BodyCurrent=0;
-	BodyNbrPage=0;
-}
-
-cAideOsd::~cAideOsd(void)
-{
-	PlugAide.Osd=false;
-	delete osd;
-}
-
-void cAideOsd::DrawHeader()
-{
-	char *buff;
-	asprintf(&buff,"Plugin : %s Version : %s By : %s",Header.Name,Header.Version,Header.Autor);
-	osd->DrawRectangle(0,0,623,30,0xBFCACACA);
-	osd->DrawText(0,0,buff,clrBlack,0xBFCACACA,font);
-	osd->Flush();
-}
-
-void cAideOsd::DrawFooter()
-{
-	char *buff;
-	asprintf(&buff,"Plugin Aide v%s    Page %i/%i",PlugAide.Version(),BodyCurrent+1,BodyNbrPage);
-	osd->DrawRectangle(0,255,623,285,0xBFCACACA);
-	osd->DrawText(0,255,buff,clrBlack,0xBFCACACA,font);
-	osd->Flush();
-}
-void cAideOsd::DrawBody(int page)
-{
-	int i=0;
-	int from=page*(215/font->Height(Body[0]));
-	osd->DrawRectangle(0,35,623,250,0xBFCACACA);
-	while (Body[from] && (i*font->Height(Body[0])<215) )
-	{
-		osd->DrawText(0,35+(i*font->Height(Body[from])),Body[from],clrBlack,0xBFCACACA,font);
-		i++;
-		from++;
-	}
-	osd->Flush();
-}
-
-void cAideOsd::Show(void)
-{
-	osd=cOsdProvider::NewOsd(50,50);
-	tArea Areas[]={ {0,0,623,30,2},
-       			{0,35,623,250,4},
-			{0,255,623,285,2}
-		      };
-	osd->SetAreas(Areas,sizeof(Areas)/sizeof(tArea));
-	osd->Flush();
-	Load();
-	DrawHeader();
-	DrawBody(0);
-	DrawFooter();
-}
-
-void cAideOsd::DrawImg(char *name,int x,int y)
-{
-	cBitmap *bmp = new cBitmap(1,1,1);
-	if (bmp->LoadXpm(name))
-	{
-		osd->DrawBitmap(x,y,*bmp);
-	}
-}
-
-
-void cAideOsd::Load()
-{
-	char *Chemin;
-	asprintf (&Chemin,"%s/aide/%s/%s.aide",cPlugin::ConfigDirectory(),PlugAide.OsdAideName,PlugAide.OsdAideName);
-	FILE *f;
-	f=fopen(Chemin,"r");
-	if (f)
-	{
-		int i=0;
-	char buff[256];
-	while (fgets(buff,sizeof(buff),f))
-		{
-			if (!strcmp(buff,":HEADER\n")) 
-			{
-				char *fgetresult=buff;
-				while(fgetresult && strcmp(buff,":BODY\n"))
-				{
-					char *tmp;
-					strtok(buff,"=");
-					if (!strcmp(buff,"NAME")) 
-					{
-						tmp=strtok(NULL,"=");
-						asprintf(&Header.Name,"%s",tmp);
-					}
-					else if (!strcmp(buff,"VERSION"))
-					{
-						tmp=strtok(NULL,"=");
-						asprintf(&Header.Version,"%s",tmp);
-					}
-					else if (!strcmp(buff,"AUTOR"))
-					{
-						tmp=strtok(NULL,"=");
-						asprintf(&Header.Autor,"%s",tmp);
-					}
-					fgetresult=fgets(buff,sizeof(buff),f);
-				}
-				fgets(buff,sizeof(buff),f);
-			}
-			char *buff3=NULL;
-			char *buff2=NULL;
-			asprintf(&buff2,"%s","");
-			asprintf(&buff3,"%s",buff);
-
-			strtok(buff3," ");
-			while (buff3)
-			{
-				if ((font->Width(buff2)+font->Width(buff3)) < osd->Width())
-				{
-					asprintf(&buff2,"%s %s",buff2,buff3);
-				}
-				else
-				{
-					asprintf(&Body[i],"%s",buff2);
-					i++;
-					asprintf(&buff2,"%s",buff3);
-				}
-				buff3=strtok(NULL," ");
-			}
-			asprintf(&Body[i],"%s",buff2);
-			i++;
-			asprintf(&buff2,"%s","");
-		}
-	Body[i]=NULL;
-	fclose(f);
-	BodyNbrPage=(i*font->Height(Body[0]))/200+1;
-	}	
-}
-
-eOSState cAideOsd::ProcessKey(eKeys Key)
-{
-	eOSState state = cOsdObject::ProcessKey(Key);
-	switch (Key)
-	{
-		case kUp: 
-			  if (BodyCurrent < (BodyNbrPage-1))
-			  BodyCurrent=BodyCurrent+1;
-			  DrawBody(BodyCurrent);
-			  DrawFooter();
-			  break;
-		case kDown:
-			  if (BodyCurrent > 0)
-			  BodyCurrent=BodyCurrent-1;
-			  DrawBody(BodyCurrent);
-			  DrawFooter();
-			  break;
-		case kBack : 
-		case kBlue:
-			  return osEnd;
-			     break;
-		default : break;
-	}
-	return state;
-}
diff -Nru aide-0.0.2/aide-osd.h aide-0.0.2-mod/aide-osd.h
--- aide-0.0.2/aide-osd.h	2004-07-21 03:06:25 +0400
+++ aide-0.0.2-mod/aide-osd.h	1970-01-01 03:00:00 +0300
@@ -1,33 +0,0 @@
-#ifndef __AIDE_OSD_H
-#define __AIDE_OSD_H
-
-#include <vdr/plugin.h>
-
-struct tHeader
-{
-	char *Name;
-	char *Version;
-	char *Autor;
-};
-
-class cAideOsd : public cOsdObject
-{
-	private:
-		cOsd *osd;
-		tHeader Header;
-		char *Body[1000];
-		int BodyCurrent;
-		int BodyNbrPage;
-	public:
-		cAideOsd(void);
-		~cAideOsd(void);
-		void Show(void);
-		virtual eOSState ProcessKey(eKeys Key);
-		void DrawImg(char *name,int x,int y);
-		void Load(void);
-		void DrawHeader();
-		void DrawBody(int page);
-		void DrawFooter();
-};
-
-#endif // __AIDE_OSD_H
diff -Nru aide-0.0.2/aideplayer.c aide-0.0.2-mod/aideplayer.c
--- aide-0.0.2/aideplayer.c	2004-07-21 16:50:15 +0400
+++ aide-0.0.2-mod/aideplayer.c	2004-11-04 00:37:28 +0300
@@ -15,8 +15,6 @@
 	if (On)
 	{
 		struct video_still_picture sp;
-		char *Image;
-		asprintf(&Image,"%s/aide/%s/%s.mpg",cPlugin::ConfigDirectory(),Aide,Aide);
 		int filefd;
 		struct stat st;
 		ssize_t nRead;
@@ -42,7 +40,7 @@
 
 cAidePlayerControl::cAidePlayerControl(const char* AideFile) : cControl(player = new cAidePlayer)
 {
-	asprintf(&(player->Aide),"%s",AideFile);
+	asprintf(&(player->Image),"%s",AideFile);
 }
 
 cAidePlayerControl::~cAidePlayerControl(void)
@@ -61,8 +59,7 @@
 	switch(Key)
 	{
 		case kBack : 
-		case kBlue : 
-			     delete player;
+			     //delete player;
 			     return osEnd;
 			     break;
 		default: break;
diff -Nru aide-0.0.2/aideplayer.h aide-0.0.2-mod/aideplayer.h
--- aide-0.0.2/aideplayer.h	2004-07-21 16:47:03 +0400
+++ aide-0.0.2-mod/aideplayer.h	2004-11-04 00:07:21 +0300
@@ -9,7 +9,7 @@
 		cAidePlayer(void);
 		virtual ~cAidePlayer(void);
 		void send_pes_packet(unsigned char *data, int len, int timestamp);
-		char *Aide;
+		char *Image;
 };
 
 class cAidePlayerControl : public cControl {
diff -Nru aide-0.0.2/HISTORY aide-0.0.2-mod/HISTORY
--- aide-0.0.2/HISTORY	2004-07-21 03:18:11 +0400
+++ aide-0.0.2-mod/HISTORY	2004-11-06 16:12:41 +0300
@@ -1,3 +1,10 @@
+v0.0.3 : modified by Vyacheslav Dikonov (sdiconov@mail.ru)
+  Multilanguage support, Russian and English translations.
+  Able to choose help files depending on OSD language  
+  New format of help files (see README)
+  Removed native plugin UI (not themeable and redundant for this version). 
+  This version supports only 2-level deep menu browsing and .mpg pictures.   
+  Russian, English and German user manuals for OSD browsing.
 v0.0.2 :
   Gestion ameliorer de la longueur des lignes... on ne coupe plus un mot!
   Affichage OSD ameliorer avec Entete, Corps et Pied de Page (voir README)
diff -Nru aide-0.0.2/Makefile aide-0.0.2-mod/Makefile
--- aide-0.0.2/Makefile	2004-07-12 02:40:06 +0400
+++ aide-0.0.2-mod/Makefile	2004-11-04 00:40:28 +0300
@@ -46,7 +46,7 @@
 
 ### The object files (add further files here):
 
-OBJS = $(PLUGIN).o menuaide.o affichageaide.o aideplayer.o aide-osd.o
+OBJS = $(PLUGIN).o menuaide.o affichageaide.o aideplayer.o aidei18n.o
 
 ### Implicit rules:
 
diff -Nru aide-0.0.2/menuaide.c aide-0.0.2-mod/menuaide.c
--- aide-0.0.2/menuaide.c	2004-07-21 15:51:37 +0400
+++ aide-0.0.2-mod/menuaide.c	2004-11-06 18:41:12 +0300
@@ -5,52 +5,79 @@
 #include <vdr/player.h>
 #include <dirent.h>
 
+char *AideFilesDir;
 
-cMenuAide::cMenuAide(void) : cOsdMenu ("VDR Aide",20)
+cMenuAide::cMenuAide(void) : cOsdMenu (tr("VDR Help"),20)
 {
 	Draw();
 }
 
 void cMenuAide::Draw(void)
 {
-	cOsdItem *item = new cOsdItem("Liste des aides disponibles:");
+	cOsdItem *item = new cOsdItem(tr("Available help topics:"));
 	item->SetSelectable(false);
 	Add(item);
-	FindAide();
+	asprintf(&AideFilesDir,"%s/help/%s",cPlugin::ConfigDirectory(),tr("eng"));
+	FindAide(AideFilesDir);
 	SetCurrent(Get(1));
 }
 
-void cMenuAide::FindAide(void)
+void cMenuAide::FindAide(const char *dir)
 {
-char *dir;
-char *dir2;
-char *AideFile;
-char *AideLine;
-asprintf(&dir,"%s/aide/",cPlugin::ConfigDirectory());
 DIR *d = opendir(dir);
 if(d)
 {
 	struct dirent *e;
-	struct dirent *e2;
-	SetHelp("StillImage",NULL,NULL,"OsdTest");
+	char *name;
+	char *ext;
+	char *aidefile;
 	while ((e = readdir(d)) != NULL)
 	{
-		if (strcmp(e->d_name,".") && strcmp(e->d_name,".."))
+		if (strcmp(e->d_name,".") && strcmp(e->d_name,"..") && strpbrk(e->d_name,"."))
 		{
-			asprintf(&dir2,"%s%s",dir,e->d_name);
-			asprintf(&AideFile,"%s.%s",e->d_name,"aide");
-			DIR *d2 = opendir(dir2);
-			if (d2)
+    			name=strtok(e->d_name,".");
+			ext=strtok(NULL,".");				
+			if (!strcmp(ext,"aide")) //find the index files
 			{
-				while (( e2 = readdir(d2)) != NULL)
-				{
-					if (!strcmp(e2->d_name,AideFile))
-					{
-						asprintf(&AideLine,"    %s",e->d_name);
-						Add(new cOsdItem(AideLine,osUser1));
+			    asprintf (&aidefile,"%s/%s.%s",dir,name,ext);
+			    FILE *f;
+			    f=fopen(aidefile,"r");
+			    if (f)
+			    {
+			        char buff[256];
+				char *title;
+				char *file;
+				char *path;
+				char *AideLine;
+				while (fgets(buff,sizeof(buff),f))
+			    	{
+				    if (strpbrk(buff,"=")) //ignore lines without = 
+				    {
+    					title=strtok(buff,"=");
+					file=strtok(NULL,"=");
+					file=strtok(file,"\n"); //strip parasitic symbols
+					asprintf (&path,"%s/%s.%s",dir,file,"txt"); //fullpath of the link
 
+					FILE *ftest = fopen(path,"r"); //check if it is a real file
+					if(ftest)
+					{
+    					    asprintf(&AideLine,"   %s",title); 
+    					    Add(new cOsdItem(AideLine,osUser1));
+					    fclose(ftest);
 					}
-				}
+				    } else { // Group entries in the Help menu
+					if ((strlen(buff)>1) && (buff[0]==':'))
+					{
+					    title=strtok(strtok(buff,":"),"\n"); //Remove 1st ":"
+					    asprintf(&title,"%s%s",title,":");
+					    cOsdItem *item = new cOsdItem(title);
+					    item->SetSelectable(false);
+					    Add(item);
+					}
+				    } 
+			    	}
+			    fclose(f);
+			    }
 			}
 		}
 	}
@@ -61,34 +88,77 @@
 {
 }
 
+char *cMenuAide::FindPath(const char *seltitle)
+{
+    char *result="";
+    if (!strncmp(seltitle,"+",1))
+    {
+//    	CloseSubMenu();
+//	return osEnd;
+    } else {
+        // We have a title. Now find index files, read them and 
+        // find path to the requested file
+        DIR *d = opendir(AideFilesDir); 
+        if(d)
+	{
+	    struct dirent *e;
+	    char *name;
+	    char *ext;
+	    char *aidefile;
+	    while ((e = readdir(d)) != NULL)
+	    {
+	        if (strcmp(e->d_name,".") && strcmp(e->d_name,"..") && strpbrk(e->d_name,".")) //only real names with extensions, please
+	        {
+    		    name=strtok(e->d_name,".");
+		    ext=strtok(NULL,".");				
+		    if (!strcmp(ext,"aide")) //find the index files
+		    {
+		        asprintf (&aidefile,"%s/%s.%s",AideFilesDir,name,ext);
+
+    			FILE *f;
+			f=fopen(aidefile,"r");
+			if (f)
+			{
+			    char buff[256];
+			    char *title;
+			    char *file;
+			    while (fgets(buff,sizeof(buff),f))
+			    {
+			        if (strpbrk(buff,"=")) //ignore lines without = 
+			        {
+    			    	    title=strtok(buff,"=");
+				    file=strtok(NULL,"=");
+				    file=strtok(file,"\n"); //strip parasitic symbols
+				    if (!strcmp(Trim(seltitle),Trim(title))) //Check if current title matches the requested one
+				    {
+					asprintf (&result,"%s/%s",AideFilesDir,file);
+				    }
+				}
+			    }
+			    fclose(f);
+			}
+		    }
+		}
+	    }
+	}
+    }
+    return result;
+}
+
+
 eOSState cMenuAide::ProcessKey(eKeys Key)
 {
+char *seltitle;
+
 	eOSState state = cOsdMenu::ProcessKey(Key);
 	switch (state)
 	{
 		case osUser1:
-			return (AddSubMenu(new cAffichageAide(Get(Current())->Text())));
+			asprintf (&seltitle,"%s",Get(Current())->Text()); //get selected title
+			return (AddSubMenu(new cAffichageAide(FindPath(seltitle),seltitle)));
 			break;
 		default : break;
 	}
-	if (state == osUnknown && !HasSubMenu())
-	{
-		switch(Key)
-		{
-			case kRed:
-				CloseSubMenu();
-				cControl::Launch(new cAidePlayerControl(Trim(Get(Current())->Text())));
-				return osEnd;
-				break;
-			case kBlue :
-				PlugAide.Osd=true;
-				asprintf(&PlugAide.OsdAideName,"%s",Trim(Get(Current())->Text()));
-				CloseSubMenu();
-				return osPlugin;
-				break;
-			default : break;
-		}
-	}
 	return state;
 }
 
diff -Nru aide-0.0.2/menuaide.h aide-0.0.2-mod/menuaide.h
--- aide-0.0.2/menuaide.h	2004-07-09 16:11:51 +0400
+++ aide-0.0.2-mod/menuaide.h	2004-11-03 16:02:08 +0300
@@ -9,7 +9,8 @@
 		cMenuAide(void);
 		~cMenuAide(void);
 		virtual eOSState ProcessKey(eKeys Key);
-		void FindAide(void);
+		void FindAide(const char *);
+		char *FindPath(const char *);
 		void Draw(void);
 		char *Trim(const char *);
 };
diff -Nru aide-0.0.2/README aide-0.0.2-mod/README
--- aide-0.0.2/README	2004-07-21 03:20:13 +0400
+++ aide-0.0.2-mod/README	2004-11-06 16:57:57 +0300
@@ -29,3 +29,79 @@
 Si le :HEADER n'est pas present, le :BODY n'est pas necessaire mais l'entete du plugin Aide sera "vide" (ou presque)
 
 Sad
+
+VDR-Aide "0.0.3"
+
+French is not one of the foreign languages I learned :( 
+
+This is a modification and expansion of the original vdr-aide plugin written by Sad. 
+My intention was to make an OSD help browser for VDR immediately available for
+real use. I am not an experienced developer and cannot maintain this plugin
+separately as a fork. The removed code can easily be readded and some clean-up
+would be desirable. So I return all changes as a contribution to the original 
+maintainer.
+
+The most important step for me was to make the code support multiple languages
+and provide some basic help data to show (available in separate packages). 
+In order to support multilingual help I had to change the file format.  
+
+
+New format of help files:
+
+The plugin directory ($VDRConf/plugins/help) has subdirectories for each
+language supported by VDR. They are named with 3-letter language codes
+(see aidei18n.c). Each language subdirectory can store arbitrary number 
+of index files (.aide extension), text (.txt) and MPEG picture (.mpg) 
+data files.
+
+
+Index files:
+
+An index file consists of "name=value" lines and group delimiters. Any
+line without a "=" sign in the middle or ":" in the first position will be 
+ignored. The index files can store help item names that cannot be safely used 
+as filenames due to mutual incompatibilities of the 8-bit codepages used by VDR.
+
+A sample of index file contents:
+------------------------------------
+VDR  Help file v 1.0                    # Comments
+
+:Keys		                   	# This is a group delimeter
+Recoding mode keys=btn_record		# Everything beyond the equal sign
+Help item2=path2			# is a path to the help text. Note
+					# that there is no extension. 
+------------------------------------
+
+If there is an identically named file, but with .mpg extemsion, the "StillImage"
+button appears on screen letting the user to view the picture. 
+
+
+Text files:
+
+Leading spaces in the text lines set the left margin, so you can use it for some
+primitive formatting. All text is wrapped at Setup.OSDWidth/10 point. Decresing
+the OSD width parameter helps if your favourite skin makes OSD window too narrow. 
+
+If a text file has a header like this then the module info will be shown together 
+with the text.
+
+-----------------------------------
+:HEADER
+NAME=PLUGNAME
+VERSION=PlugVersion
+AUTOR=NomDeLAuteur
+:BODY
+
+TITLE
+
+    Indented line 
+    
+    loooooooooooooooooooooooooooong liiiiiiiiiiiiiiine ... will be wrapped
+-----------------------------------
+
+Last but not least there are Russian, English and German user manuals for 
+vdr-aide. Hope that other languages will catch up.
+
+
+Vyacheslav Dikonov <sdiconov@mail.ru>
+November 2004
