Benötige kleine Hilfe mit String-Operation :-)

Zusatz-Programme für Receiver der 5000er und 6000er Serie.

Hier geht's um alles, was mit den TAP Anwendungen für den PVR5x00/6000 zu tun hat.
Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#21

Beitrag von Elle4u » Do 13. Apr 2006, 16:39

Jetzt habe ich nochmal ne Frage.

Ich habe folgenden Befehl:

Code: Alles auswählen

	TAP_Osd_PutString1926( MsgTempRgn, 40,  15, -1, ProgramName " - Information", COLOR_Black, COLOR_None );
Das funktioniert ohne Probleme. Also eine Variable und dahinter einen String mit dran.
Jetzt möchte ich aber gerne folgendes:

Code: Alles auswählen

ProgramName " - " Text_Information
Also eine Variable, ein String und wieder eine Variable.

Da kommt dann folgende Fehlermeldung:

Code: Alles auswählen

Helper.c:249: parse error before `Text_Information'
Ich könnte das Ganze natürlich vorher zwischenkopieren

Code: Alles auswählen

TAP_SPrint(textBuf, "%s - %s", ProgramName, Text_Information);
aber lieber wäre mir, wenn es auch direkt ginge.

Ideen???

Thx.
Gruß,
Elle4u

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#22

Beitrag von Happy » Do 13. Apr 2006, 16:53

Hi,
was du vor hast geht nur mit Konstanten.

Statt TAP_SPrint, würde ich aber wieder strcat verwenden zum Anfügen.
TAP_SPrint würde ich vermeiden soweit es geht
z.B. so

Code: Alles auswählen

strcpy(textbuf, ProgramName);
strcat(textbuf, " - ");
strcat(textbuf, Information);

Gruß,
Happy
:type: Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay

t3xi
TAP-Guru
TAP-Guru
Beiträge: 1499
Registriert: Mo 16. Jan 2006, 13:35
Receivertyp: 5^4*2^3

#23

Beitrag von t3xi » Do 13. Apr 2006, 16:53

Ideen hab ich keine. Aber kann mir mal jemand erklären wieso der erste Fall überhaupt funktioniert?
(edit)
Ach so, ProgramName ist gar keine Variable, sondern eine Konstante.
Zuletzt geändert von t3xi am Do 13. Apr 2006, 16:55, insgesamt 1-mal geändert.

Benutzeravatar
Harvey
iTina-Promoter und Kuhinteressent
iTina-Promoter und Kuhinteressent
Beiträge: 3894
Registriert: So 11. Dez 2005, 22:34
Receivertyp: 0x1388 PVR
Receiverfirmware: 13.09.2005
Wohnort: Planet Erde, Milchstraße

#24

Beitrag von Harvey » Do 13. Apr 2006, 16:57

Das frage ich mich auch. Eigentlich hätte da der Kompiler motzen müssen.
Edit: ebenso Axo
Zuletzt geändert von Harvey am Do 13. Apr 2006, 17:00, insgesamt 1-mal geändert.
Gruss
Harvey

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#25

Beitrag von Elle4u » Do 13. Apr 2006, 16:57

t3xi hat geschrieben:Ideen hab ich keine. Aber kann mir mal jemand erklären wieso der erste Fall überhaupt funktioniert?
(edit)
Ach so, ProgramName ist gar keine Variable, sondern eine Konstante.
Ahh. Sorry. Falsch beschrieben. Ja. Das ist ne Konstante.

Und damit geht das also? Wundert mich schon, daß das halt immer so geklappt hat :)
Gruß,
Elle4u

Benutzeravatar
Jetson
Vielantworter
Vielantworter
Beiträge: 763
Registriert: Fr 9. Dez 2005, 19:29
Receivertyp: TF5200PVRc
Receiverfirmware: TF-NCPCd 2.75

#26

Beitrag von Jetson » Do 13. Apr 2006, 17:03

Elle4u hat geschrieben: Und damit geht das also? Wundert mich schon, daß das halt immer so geklappt hat :)

Weil das zur C-Sprache gehört, ein C-Compiler muß das unterstützen.
Zeilen mit konstanten Ausdrücken wie
#define msg "A" "B" "C"
werden vom Compiler automatisch zu "ABC" konkateniert.
Gruß,
Jetson

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#27

Beitrag von Elle4u » Do 13. Apr 2006, 19:37

So.

Da hätte ich dann nochmal ne Frage :wink: :

Ich habe folgende Deklaration:

Code: Alles auswählen

char *cSortFiles[] XDATA = {
	"Sortierung: A->Z",
	"Sortierung: Z->A",
	"Sortierung: kl->gr",
	"Sortierung: gr->kl",
	"Sortierung: alt->neu",
	"Sortierung: neu->alt",
	"Sortierung: gesehen",
	"Sortierung: unges."
};
Wenn ich diese nun abhängig der eingestellten Sprache ändern möchte.
Wie kann man so etwas machen :confused:
Gruß,
Elle4u

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#28

Beitrag von Happy » Do 13. Apr 2006, 19:46

Hi,

sieht bei mir ähnlich aus.
Mach den Array 2 dimensional (bzw 3... für weitere Sprachen).
Lege auch für andere Texte solche Arrays an und das Programm ist schnell übersetzt.

Gruß,
Happy
:type: Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#29

Beitrag von Elle4u » Do 13. Apr 2006, 19:55

Happy hat geschrieben:Lege auch für andere Texte solche Arrays an und das Programm ist schnell übersetzt.
Danke schonmal.

Werde das mit den 2 Dimensionen mal testen.

Die anderen Texte habe ich jetzt in jeder Funktion so aufgelöst:

Code: Alles auswählen

	//*************************************************************************
	// Systemsprache auslesen und Texte zuweisen
	//*************************************************************************
	char Text_Festplatte[10];
	char Text_von[5];
	char Text_frei[5];

	OSDLanguage = TAP_GetSystemVar(SYSVAR_OsdLan);
	if (OSDLanguage == 2){ // deutsch
		strcpy(Text_Festplatte, "Festplatte");
		strcpy(Text_von,        "von");
		strcpy(Text_frei,       "frei");
	} else { // english
		strcpy(Text_Festplatte, "Harddisk");
		strcpy(Text_von,        "from");
		strcpy(Text_frei,       "free");
	}
	//*************************************************************************
Gruß,
Elle4u

Benutzeravatar
Jetson
Vielantworter
Vielantworter
Beiträge: 763
Registriert: Fr 9. Dez 2005, 19:29
Receivertyp: TF5200PVRc
Receiverfirmware: TF-NCPCd 2.75

#30

Beitrag von Jetson » Do 13. Apr 2006, 20:06

Ein zweidimensionales Array reicht aus. Eine Dimension für die Sprache, die andere für die character pointer. Da Du den ersten Index ja beliebig hochzählen kannst (falls das Array entsprechend definiert ist) kannst Du n Sprachen auf diese Weise verwalten. Wenn Du die erste Dimension dann noch auf eine Enumeration abbildest, wird es auch noch gut lesbar.
Gruß,
Jetson

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#31

Beitrag von Elle4u » Do 13. Apr 2006, 20:38

Das habe ich jetzt leider nicht verstanden :oops:

Ist es also nicht so gut es (so wie ich jetzt) in jeder Funktion mit den jeweils verwendeten Texten zu machen. Sollte ich lieber ein großes globales Array nehmen?

Und wie hast Du das mit dem Array und dem Enum gemeint?
Wie würde das dann aussehen?

Sorry. Aber so tief bin ich da nicht drin :wink:
Gruß,
Elle4u

Benutzeravatar
Harvey
iTina-Promoter und Kuhinteressent
iTina-Promoter und Kuhinteressent
Beiträge: 3894
Registriert: So 11. Dez 2005, 22:34
Receivertyp: 0x1388 PVR
Receiverfirmware: 13.09.2005
Wohnort: Planet Erde, Milchstraße

#32

Beitrag von Harvey » Do 13. Apr 2006, 20:45

Das ist eigentlich eine Frage des Geschmacks, denn ändern musste eh, wenn was hinzu kommt. Ein großes Array hätte aber den Vorteil, mal eben eine neue Sprache hinzufügen zu können, ohne den Rest zu ändern.

Gib mal in google +c++ +enum ein, ich habe die Syntax nicht zu 100% im Kopf.
Grob geschrieben ist das ne Möglichkeit, DE=0, EN=1, NL=2 usw zu definieren und im Quelltext auch als DE, EN, NL usw. auszuschreiben. Im Grunde etwas, das man auch mit #define machen könnte, nur eleganter.
Gruss
Harvey

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#33

Beitrag von Elle4u » Do 13. Apr 2006, 20:55

Harvey hat geschrieben:Grob geschrieben ist das ne Möglichkeit, DE=0, EN=1, NL=2 usw zu definieren und im Quelltext auch als DE, EN, NL usw. auszuschreiben. Im Grunde etwas, das man auch mit #define machen könnte, nur eleganter.
Ahh. Das habe ich in Filer schon an manchen Stellen benutzt.

Danke.
Gruß,
Elle4u

Benutzeravatar
Jetson
Vielantworter
Vielantworter
Beiträge: 763
Registriert: Fr 9. Dez 2005, 19:29
Receivertyp: TF5200PVRc
Receiverfirmware: TF-NCPCd 2.75

#34

Beitrag von Jetson » Do 13. Apr 2006, 20:55

Also, eine Enumeration ist lediglich eine Aufzählung von Konstanten, die bei 0 beginnend vom Compiler nummeriert werden (man kann auch andere Werte vorgeben durch direkte Zuweisung).

Bsp.:
enum language {deu, eng, fra, spa, ita};

Dann hast Du 5 Konstanten mit den Werten deu = 0 bis ita = 4;

Zugriff auf das Array dann anstelle von meldung[0][1] mit meldung[deu][1].

Machst Du dann auch noch eine Enumeration für die zweite Dimension, wie z.B.
enum text {Festplatte, von, frei}
kannst Du auch sowas wie meldung[deu][Festplatte] usw. schreiben.
Gruß,
Jetson

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#35

Beitrag von Elle4u » So 23. Apr 2006, 16:49

So. Ich muß jetzt nochmal darauf zurück kommen:

Es gibt ja folgendes fertige ENUM:

Code: Alles auswählen

typedef enum
{
	LAN_English,
	LAN_French,
	LAN_German,
	LAN_Italy,
	LAN_Spain,
 	LAN_Arab,
	LAN_Greek,
	LAN_Turk,
	LAN_Danish,
	LAN_Swedish,
	LAN_Norwegian,
	LAN_Dutch,
	LAN_Russian,
	LAN_Polish,
	LAN_Iran,

      N_OsdLan
}   TYPE_Language;
Jetzt müßte ich das doch folgendermaßen machen können, oder?

Code: Alles auswählen

char *Texte[][15] XDATA = { //15 Sprachen
	{"Harddisk", "Harddisk", "Festplatte", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk", "Harddisk"},
	{"free", "free", "frei", "free", "free", "free", "free", "free", "free", "free", "free", "free", "free", "free", "free"}
usw...
};
Aufrufen dann mit

Code: Alles auswählen

Texte[0][OSDLanguage];
Ich müßte dann eben immer 15x jedes Wort/Satz schreiben...
Gruß,
Elle4u

Benutzeravatar
Jetson
Vielantworter
Vielantworter
Beiträge: 763
Registriert: Fr 9. Dez 2005, 19:29
Receivertyp: TF5200PVRc
Receiverfirmware: TF-NCPCd 2.75

#36

Beitrag von Jetson » So 23. Apr 2006, 20:10

Ja, der Zugriff wäre dann z.B. Texte[0][LAN_English].
Oder alternativ. deklarierst Du wie in meinem Beispiel, die Sprachen in der ersten Dimension und die Texte in der zweiten Dimension (Texte[LAN_English][0]). Dann würden bei der Initialisierung alle möglichen Texte für eine Sprache hintereinander stehen und das wiederholt sich pro Sprache (erste Dimension). Aber das ist natürlich Geschmackssache. Ich würde für die Elemente der "Text-Dimension" auch noch eine Enumeration machen. Dann hast Du einen recht gut lesbaren Quelltext.
Gruß,
Jetson

tapworld
Seltsamer Zeitgenosse :-(
Seltsamer Zeitgenosse  <font color=#E9E9E9>:-(</font>
Beiträge: 270
Registriert: Di 13. Dez 2005, 20:40

#37

Beitrag von tapworld » Mo 24. Apr 2006, 20:06

I comment this a little even I am not sure what u are talking about.

TAP API does not have all languages defined. E.g. finnish is not there. So to know if finnish is used, this code have to be used:
TAP_GetSystemVar(SYSVAR_OsdLan)==15

Benutzeravatar
Jetson
Vielantworter
Vielantworter
Beiträge: 763
Registriert: Fr 9. Dez 2005, 19:29
Receivertyp: TF5200PVRc
Receiverfirmware: TF-NCPCd 2.75

#38

Beitrag von Jetson » Mo 24. Apr 2006, 21:49

We're discussing the usefulness of C enumerations to make the source code better readable. The background is that Elle4u wants to add multi language support to his TAP. Your comment about the missing entry in the API is a valuable info as well.
Gruß,
Jetson

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#39

Beitrag von Elle4u » Mo 24. Apr 2006, 21:51

tapworld hat geschrieben:So to know if finnish is used, this code have to be used:
TAP_GetSystemVar(SYSVAR_OsdLan)==15
Thank you for this info!
Gruß,
Elle4u

Benutzeravatar
Erdnussnase
TAP-Guru
TAP-Guru
Beiträge: 7067
Registriert: Fr 9. Dez 2005, 12:01

#40

Beitrag von Erdnussnase » Mi 26. Apr 2006, 09:16

Hallo Ellu,

Du kannst es so machen wie oben beschrieben. Allerdings ist es nur dann sinnvoll, wenn Du nicht zuviel Textdefinitionen in Deinem Tap hast. Das Problem ist nämlich dann, das Du für jedes Wort in jeder Sprache Speicherplatz bereithalten mußt der evtl. gar nicht benötigt wird.
In diesem Fall würde ich die Texte in ein char**Texte[NUM_LANGUAGE] halten. Der Code wird dadurch aber wieder etwas unleserlicher und dummerweise kann der Compiler Fehler in der Benutzung der Struktur nicht finden.
:type: ->.....
Kein Support oder Fragen zur Registrierung per PN !
http://www.iTiNa.de
?Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit,
aber bei dem Universum bin ich mir noch nicht ganz sicher.?
Albert Einstein

Antworten

Zurück zu „TF 5x00/6000 PVR TAP“