|
|
|
|
bin gerade dabei, einen patch für firefox zu schreiben, kann aber kein c++.
bisher sieht das programm so aus:
|
Code: |
get_gtk_cursor(nsCursor aCursor) {
GdkCursor *gdkcursor = nsnull;
PRUint8 newType = 0xff;
if ((gdkcursor = gCursorCache[aCursor])) {return gdkcursor;}
//dicker switch, um die interne enum in cursors umzusetzen
switch (aCursor) {
...
case eCursor_nesw_resize:
//wir behaupten jetzt mal, das theme des users hat diesen cursor nicht
//hurr
newType = MOZ_CURSOR_NESW_RESIZE;
break;
case eCursor_all_scroll:
//diesen hier erstellen wir mit einer 100000 jahre alten funktion,
//die tolle cursor wie "boat" enthält, aber keine doofen wie den obigen.
//durr
gdkcursor = gdk_cursor_new(GDK_FLEUR);
break;
...
}
if (newType != 0xff) {
... //erstelle nen hässlichen customcursor
}
gCursorCache[aCursor] = gdkcursor;
return gdkcursor; |
|
nach meinem patch soll für jedes switch-statement sowas reinkommen:
|
Code: |
case eCursor_nesw_resize:
//array aller aliase. geht so wohl nicht in c++
char[][] aliases = {"nesw-resize", "bd_double_arrow", "size_bdiag"};
for each (char[] name in aliases) {
gdkcursor = gdk_cursor_new_from_name(name);
if (gdkcursor != NULL)
break;
//sonst probieren wir die übrigen aliases durch.
}
//wenn das theme so scheiße ist, dass es kein einziges der aliases enthält,
//können wir ja als fallback unsere hässlichen cursor selberbauen
if (gdkcursor == NULL)
newType = MOZ_CURSOR_NESW_RESIZE;
break; |
|
jetzt die frage: kann jemand meinem scriptsprachen-verwöhnten geist auf die sprünge helfen und mir beibringen, wie man „iteriere über ein stringarray“ in c++ löst?
|
|
|
|
|
|
|
|
Code: |
const char* items[] = {"foo", "bar", "baz"};
for (int i = 0; i < sizeof(items) / sizeof(items[0]); i++)
{
const char* item = items[i];
}
|
|
|
|
|
|
|
|
|
geht das auch, wenn die strings verschieden lang sind? oder ist das ein array von referenzen und sizeof(items[0]) gibt die speichergröße eines pointers zurück?
|
|
|
|
|
|
|
Wird die Funktion öfter mal aufgerufen? Wenn die nämlich im Repaint-Loop drin ist, dürfte der Grund für das Swtich-Statement die Performance sein.
|
|
|
|
|
|
|
die wird einmal pro cursoränderung aufgerufen.
dass ich das patchen will, hat schon seine richtigkeit: die funktion gdk_cursor_new_from_name gibt es nämlich erst seit gtk 2.8, was aber inzwischen etabliert genug ist, dass man es ändern kann.
|
|
|
|
|
|
|
Idioten gibt es... Eben auf dem Weg vom Edeka zurück nach Hause war ein Dreieck aus 3 Kreuzungen durch die Polizei abgesperrt. Ich vermute wegen eines Demonstrations-Zugs.
Ich wollte dann die Straße auf höhe der Fußgängerampel überqueren. Da genau an der Stelle ein Bully stand un die Straße blockiert hat und die Autos standen, bin ich natürlich rüber ohne auf Grün zu warten.
Auf höhe der linken Fahrbahn der rechten Spur meinte dann der vorderste Fahrer genau dann gereizt vollgas zu geben (um einen U-Turn zu beginnen) als ich nur noch Zentimeter von seiner Fahrspur entfernt war. Entsprechend hat er mich fast um erwischt.
Hab mich richtig erschrocken. Naja, ein Streifenwagen hat ihn danach verfolgt. Ich hoffe das wird teuer. Mieses Arschloch.
|
|
|
|
|
|
|
andere frage zu nem anderen c++-programm:
was bedeutet unsigned long ttf_count = *(unsigned long*) &buffer[0x08];
gehe ich recht in der annahme, dass hier einfach das zeichen an achter stelle des strings, auf den *buffer zeigt, als unsigned long interpretiert und als solcher in
ttf_count gespeichert wird?
/e ich frage das, weil verwundert bin, dass in der datei an dieser stelle nur eine 0 ist, obwohl da die anzahl der enthaltenen ttf-dateien gespeichert sein sollte.
also ist entweder das programm, das ich mir anschaue doof, die datei nicht standardgemäß, oder ich interpretiere eben den code falsch.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von flying sheep am 12.11.2010 18:27]
|
|
|
|
|
|
Hast du den Buffer geflusht?
|
|
|
|
|
|
|
Geil, wie man sich mit so ein paar alten Bildern schoen wehtun kann \o/
|
|
|
|
|
|
|
Du warst eben ein hässliches Kind.
|
|
|
|
|
|
|
Frei.Wild? Waren die nicht rechts? Oder warum erinnern dich mich so an die Onkelz?
|
|
|
|
|
|
|
| Zitat von Flash_
Hast du den Buffer geflusht?
| |
nein, ich hab die datei in nem hexeditor offen gehabt und von byte 5 bis 12 oder so sind nur nuller.
|
|
|
|
|
|
|
| Zitat von Danzelot
Frei.Wild? Waren die nicht rechts? Oder warum erinnern dich mich so an die Onkelz?
| |
Lektion 1: Harter Deutschrock ist immer rechts.
Lektion 2: Ist eine harte Deutschrock-Band nicht rechts, tritt automatisch Lektion 1 in Kraft.
Übrigens sind das Italiener (Südtiroler um genau zu sein).
|
|
|
|
|
|
|
ich braeuchte mal schnell hilfe ... oder zumindest ne idee.
ich lese ein array ein mit sagen wir 2 elementen. wenn ich mir ueber A'Length die Laenge des Arrays ausgeben will bekomme ich "4262725" raus und ich hab kein Plan warum. kann mir das irgendwer erklaeren?
|
|
|
|
|
|
|
| Zitat von Renga
ich braeuchte mal schnell hilfe ... oder zumindest ne idee.
ich lese ein array ein mit sagen wir 2 elementen. wenn ich mir ueber A'Length die Laenge des Arrays ausgeben will bekomme ich "4262725" raus und ich hab kein Plan warum. kann mir das irgendwer erklaeren?
| |
Code bitte.
|
|
|
|
|
|
|
| Zitat von Renga
ich braeuchte mal schnell hilfe ... oder zumindest ne idee.
ich lese ein array ein mit sagen wir 2 elementen. wenn ich mir ueber A'Length die Laenge des Arrays ausgeben will bekomme ich "4262725" raus und ich hab kein Plan warum. kann mir das irgendwer erklaeren?
| |
Hast du das Ende mit NULL markiert?
|
|
|
|
|
|
|
ok, also der fehlerliegt wohl darin
Grenze : Integer;
Benutzer_Permutation : Permutation (1 .. Grenze);
grenze wird erst zu laufzeit eingelesen. Deshalb nimmt er wohl den max. Wert. Aber ich brauch die Anzahl an elemente im Array und nicht den rießen wert, den Ada mir anlegt, nur weil er die Grenze nicht kennt.
|
|
|
|
|
|
|
| Zitat von SkunkyVillage
| Zitat von Danzelot
Frei.Wild? Waren die nicht rechts? Oder warum erinnern dich mich so an die Onkelz?
| |
[...]
Übrigens sind das Italiener (Südtiroler um genau zu sein).
| |
Ein Grund mehr. Eigentlich kommt der ganze Kram ja von dem blöden Mussolini
Aber Italiener mag ja eh niemand!
|
|
|
|
|
|
|
| Zitat von flying sheep
geht das auch, wenn die strings verschieden lang sind? oder ist das ein array von referenzen und sizeof(items[0]) gibt die speichergröße eines pointers zurück?
| |
Letzteres.
|
|
|
|
|
|
|
| Zitat von flying sheep
andere frage zu nem anderen c++-programm:
was bedeutet unsigned long ttf_count = *(unsigned long*) &buffer[0x08];
gehe ich recht in der annahme, dass hier einfach das zeichen an achter stelle des strings, auf den *buffer zeigt, als unsigned long interpretiert und als solcher in
ttf_count gespeichert wird?
| |
Nein. Es interpretiert die naechsten 4 Bytes (oder 8 Bytes, je nach Architektur) *beginnend* an Position 8 von buffer als unsigned long; also nicht nur das eine Element in buffer[8].
|
|
|
|
|
|
|
weil long 4 bytes lang ist? dann macht das sinn!
|
|
|
|
|
|
|
und was macht dann das hier?
unsigned long* ttf_offset_array = (unsigned long*) &buffer[0x0C];
|
|
|
|
|
|
|
Kommt drauf an: Unter Windows ist long immer 4 Bytes lang. Unter Unix/Linux ist long 4 Bytes lang, wenn es sich um ein 32-Bit-System handelt und 8 Bytes, wenn es sich um ein 64-Bit-System handelt.
/: Nach 40 Minuten einfach so dazwischenposten ...
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von cms am 13.11.2010 2:02]
|
|
|
|
|
|
bin gerade dabei, ein c++-programm, das ttc- in ttf-dateien umwandelt nach python zu portieren, um dabei die basics von c++ zu lernen, und gleichzeitig die-low-level-module von python kennenzulernen. neueste entdeckung: struct.unpack_from("!L", buffer, 0x08)
|
|
|
|
|
|
|
Ihr spinnt doch! alle!
|
|
|
|
|
|
|
| Zitat von Renga ok, also der fehlerliegt wohl darin
Grenze : Integer;
Benutzer_Permutation : Permutation (1 .. Grenze);
grenze wird erst zu laufzeit eingelesen. Deshalb nimmt er wohl den max. Wert. Aber ich brauch die Anzahl an elemente im Array und nicht den rießen wert, den Ada mir anlegt, nur weil er die Grenze nicht kennt. | |
War ziemlich zusammenhanglos, was ich da von mir gegeben hab ...
Nach ein bischen nachdenken (:P) bin ich doch noch auf ne Loesung gekommen.
|
Code: |
procedure Foo() is
Grenze : Integer;
procedure Bar(I : in Integer)is
type Boobar is array (Positive range <>) of Positive;
Koobar : Boobar(1..Grenze);
begin
end Bar;
begin
Get (Grenze);
Bar (Grenze);
end Foo;
|
|
Eigentlich ganz einfach ... aber gestern ging echt gar nix mehr.
|
|
|
|
|
|
|
Ich hab mich gerade tatsaechlich bei facebook registriert. Mich schauderts leicht.
|
|
|
|
|
|
|
Zur Zeit kommen Mittwochs immer 3 Freunde längst zum Bier trinken.
Da kam mir grad die Idee, dass man da mit Gesellschaftsspielen das Niveau etwas heben könnte. Tipps?Hinter Monopoly hört mein Horizont da schon auf
|
|
|
|
|
|
|
Wenn ihr etwas Zeit habt: Risiko. Ansonsten Siedler von Catan oder Carcasonne. Je nach Nerdfaktor deiner Leute ist Munchkin auch toll.
|
|
|
|
|
|
|
Nerdfaktor strebt gegen Null. Wir haben uns auch mal bei 'nem Schwedentrip an einer Variation von "Mensch ärger dich nicht" probiert. Hat dazu geführt, dass wir nen ganzen Tag nicht mehr miteinander gesprochen haben und alle ziemlich aggressiv wurden
--
Hmhm. Bisschen Geld muss man da scheinbar auch in die Hand nehmen :X
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von TriggerTG am 13.11.2010 12:18]
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |