amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Wie Checkbox-Status abfragen ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

02.02.2007, 19:40 Uhr

Beeblebrox
Posts: 723
Nutzer
Versuche hier immernoch ein Reaction-Programm (OS4) zu schreiben. Mit dem Event WMHI_GADGETUP kriege ich schonmal mit, wenn jemand auf die Checkbox klickt. Wie kriege ich raus ob diese Checkbox nun einen Haken hat oder nicht ? Benutzt man da eine GetAttr() Methode ? Im Header habe ich gesehen es gibt ein Attribut CHECKBOX_Checked im Objekt. Also, wie komme ich an die Attribute ran ?
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 20:34 Uhr

thomas
Posts: 7717
Nutzer
GetAttr (CHECKBOX_Checked,checkbox_object,&status);

Zitat:
Im Header habe ich gesehen

Die Headerfiles sollten der letzte Ort sein, wo man Informationen sucht. Zuerst immer in die Autodocs schauen, da sind zu jedem Gadget alle Attribute beschrieben.

Und bevor du mit ReAction anfängst, solltest du erstmal BOOPSI lernen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ Dieser Beitrag wurde von thomas am 02.02.2007 um 20:37 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 20:36 Uhr

Beeblebrox
Posts: 723
Nutzer
@thomas:

IIntuition->GetAttr(CHECKBOX_Checked, object[GID_CDDB], &signal);

gibt einen DSI Error wenn das Programm zu der Stelle kommt. signal ist ein ULONG (Laut Autodocs) , muß das ein BOOL sein (wie das Attribut?)
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 20:50 Uhr

ZeroG
Posts: 1487
Nutzer
@Beeblebrox:
Also CHECKBOX_Checked ist gleichbedeutend mit GA_Selected (laut Header) und wenn du dann im checkbox_gc.doc unter GA_Selected nachguckst, siehst du das da nichts von OM_GET steht.
Also muß das praktisch in die Hose gehen.
Ich hab bis jetzt immer eine Variable mitlaufen lassen um über Checkboxen bescheid zu wissen.

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 21:04 Uhr

ZeroG
Posts: 1487
Nutzer
@thomas

Zitat:
GetAttr (CHECKBOX_Checked,checkbox_object,&status);
Ist doch gar nicht erlaubt... :shock2:

Zitat:
Die Headerfiles sollten der letzte Ort sein, wo man Informationen sucht. Zuerst immer in die Autodocs schauen, da sind zu jedem Gadget alle Attribute beschrieben.
Bloß nicht das CHECKBOX_Checked ein alias für GA_Selected ist.
Auch wenn man wirklich nicht als erstes in die Header gucken sollte, ist es schon eine gute Idee sich die Dinger mal anzusehen. Da sind mitunter Sachen drin die man nirgendwo anders finden kann.

Zitat:
Und bevor du mit ReAction anfängst, solltest du erstmal BOOPSI lernen.
Och, ist doch sowieso ein und das gleiche, zumindest im großen Ganzen.

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 21:20 Uhr

Beeblebrox
Posts: 723
Nutzer
Zitat:
Original von ZeroG:
@Beeblebrox:
Ich hab bis jetzt immer eine Variable mitlaufen lassen um über Checkboxen bescheid zu wissen.

na das ist zumindest ein Vorschlag wie es geht. Wenn auch nicht grade elegant ;)

Ich habe übrigens echt Probleme mir den Amiga-API Kram beizubringen. Da gibt es keine aktuellen Bücher, keine IDE, die Autodocs sind auch nur teilweise brauchbar (da gibt es keinen Eintrag für reaction), dann lauter Begriffe wie Gadtools, BOOPSI, und weiss der Geier. GCC verhält sich manchmal unerklärlich. Ausserdem ist mir nicht klar wie es unter C eigentlich Objekte geben kann. Auf dem PC programmieren ist echt extrem einfach dagegen. Auch unter OS3.x mit StormC ging das noch. Ach ja, ich habe noch nie im Leben einen Amiga-Programmierer persönlich getroffen. Trotzdem schlage ich mich jedes Jahr wieder ein paar Tage damit rum und versuche es erneut.

Bleibt zuguterletzt immernoch die Frage: Wie komme ich da jetzt an das Attribut ran ?
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 22:23 Uhr

whose
Posts: 2156
Nutzer
@Beeblebrox:

Mal ne Zwischenfrage: Was genau ist signal bei Dir? Wirklich nur ein ULONG oder doch zufällig ein const ULONG? Wenn letzteres, dann wunder Dich nicht über den DSI. ;) Ansonsten sollte die Variable ein ULONG sein, welches Du dann nach BOOL casten müßtest. In den AutoDocs steht es auch als "*ULONG".

Allerdings wundere ich mich ein wenig, daß man den Status der Checkbox nicht "ohne Buchführung" erfragen kann (selbst unter OS4 nicht). Eventuell sollte ich mich doch mal melden, um bei ReAction etwas auszuhelfen...

Übrigens zeigt das entsprechende Beispiel, daß man den Status der Checkbox beim GADGETUP-Event im Code-Feld der Message in Form von TRUE oder FALSE serviert bekommt. Vielleicht hilft Dir das etwas weiter. Zumindest erleichtert es die "Buchführung" etwas :D

Davon ab sollte sich eine Möglichkeit finden lassen, diese Information dem Objekt anschließend mitzugeben. In der Gadget-Struktur ist z.B. ein UserData-Feld, da könntest Du diese Information unterbringen.

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 22:24 Uhr

ZeroG
Posts: 1487
Nutzer
@thomas:
Oh, scheint ein Fehler im Autodoc zu sein. OM_GET geht doch mit GA_Selected. Entschuldigung.
Wen schreibt man den da an um das zu Melden? HJF?

@Beeblebrox:
Guck mal in SDK:Examples/Reaction/RA_Auto/testapp.c da wird ein CheckBox Objekt in Zeile 460 abgefragt.

Das es kein Autodoc für Reaction gibt ist klar, wenn man weiß das Reaction eigendlich BOOPSI ist.
Daher gibt es auch nur Autodocs für die einzelnen Klassen.

Obwohl ich irgendwie die Autodocs zur rootclass, icclass, modelclass, imageclass, frameiclass, sysiclass, fillrectclass, itexticlass, gadgetclass, propgclass, strgclass, buttongclass, frbuttonclass, groupgclass vermisse.
Die scheint es nur im RKM zu geben? Warum eigendlich?

Folge am besten dem Rat von thomas und lese dir im RKM und in der AmigaMailVol2 alles durch was es zu BOOPSI gibt, dann kommt das mit Reaction fast von allein.

Zitat:
Ausserdem ist mir nicht klar wie es unter C eigentlich Objekte geben kann.
Objekte, Klassen und vererbung und dieses ganze OOP-Zeug sind nur Denkmodelle, das hat nicht direkt etwas mit Programmiersprachen zu tun.
Auch wenn z.B. C++ soetwas direkt mit Sprachmitteln unterstützt, kann man durchaus in jeder Programmiersprache etwas schreiben was wie Klassen funktioniert.

Aber das dürfte klarer werden wenn du dir die BOOPSI Unterlagen angesehen hast.
Falls dann noch Fragen zu OOP im allgemeinen sind: Frag doch mal Holger und/oder Solar, das Thema dürfte praktisch wie geschaffen für die beiden sein. :D

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 22:31 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Beeblebrox:
Ich habe übrigens echt Probleme mir den Amiga-API Kram beizubringen. Da gibt es keine aktuellen Bücher, keine IDE,


*hüstel* schon mal an Cubic gedacht? Die serviert einem die Prototypen der Funktion unterm Cursor und man kann nach Schlagworten suchen lassen (auch und gerade in den Autodocs!).

Zitat:
die Autodocs sind auch nur teilweise brauchbar (da gibt es keinen Eintrag für reaction),

*etwas lauter hust* Das stimmt so auch nicht. Schau doch mal ins 3.9 NDK z.B. (oder wahlweise auch ins OS4 SDK), unter "checkbox_gc"...

Zitat:
dann lauter Begriffe wie Gadtools, BOOPSI, und weiss der Geier. GCC verhält sich manchmal unerklärlich.

Könntest Du das näher erläutern, inwiefern der sich unerklärlich verhält, der GCC?

Zitat:
Ausserdem ist mir nicht klar wie es unter C eigentlich Objekte geben kann.

Alles eine Definitionsfrage. Im Prinzip kannst Du Dir die C++-Objekte z.B. als Strukturen vorstellen, die Zeiger auf Funktionen mit sich herumschleppen (nämlich für die Methoden. Die Attribute lassen sich da ja ziemlich simpel drin unterbringen).

Bei BOOPSI ist das etwas anders geregelt (die Methoden z.B. hängen nicht unmittelbar mit den "Objekten" zusammen, manchmal finden die sich auch woanders. Aber das Prinzip ist schon objektorientiert, auch nach den gängigen Paradigmen), aber nicht wirklich unverständlich. Ungewöhnlich, ja, aber durchschaubar.

Zitat:
Auf dem PC programmieren ist echt extrem einfach dagegen. Auch unter OS3.x mit StormC ging das noch. Ach ja, ich habe noch nie im Leben einen Amiga-Programmierer persönlich getroffen. Trotzdem schlage ich mich jedes Jahr wieder ein paar Tage damit rum und versuche es erneut.

Steter Tropfen höhlt den Stein ;) Wirf die Flinte nicht ins Korn, irgendwann kommt die Erleuchtung. So lange fragst Du halt einfach munter weiter und läßt Dich nicht von evtl. leicht patzigen Antworten entmutigen.

Nichts desto trotz solltest Du Dir die entsprechenden Kapitel in den RKMs zu Gemüte führen, die Information darin sind immer noch recht aktuell.

Zitat:
Bleibt zuguterletzt immernoch die Frage: Wie komme ich da jetzt an das Attribut ran ?

Siehe oben, GADGETUP-Event und UserData-Feld oder eigene Variable.

Grüße


--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

02.02.2007, 22:38 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von ZeroG:
@thomas:
Oh, scheint ein Fehler im Autodoc zu sein. OM_GET geht doch mit GA_Selected. Entschuldigung.
Wen schreibt man den da an um das zu Melden? HJF?


Im Zweifel ja. Aber soweit mir bekannt ist, sind diese Unzulänglichkeiten im SDK schon bekannt und mit der kommenden Version für die Final abgestellt. Aber melden kann trotzdem nicht schaden, denk ich :D

Mensch, da machste die Pferde scheu wegen OM_GET, ich hab schon am Geisteszustand derjenigen gezweifelt, die für ReAction zuständig sind/waren. Eine Checkbox ohne Abfragemöglichkeit des Status wäre ja ungefähr so nützlich wie ne Zyste am A*** :D

Nun müssen wir nur noch herausfinden, warum GetAttr() bei ihm reapert, dann ist das Problem auch gelöst :)

Edit:

Ei verdammt, gerade bemerkt!

Sag mal, Beeblebrox, ist Dein "ULONG signal" zufällig das, was man allgemein zum Empfang von Signalen an einem Port verwendet (also alá " signals = Wait(...." )? Was machst Du sonst noch damit?

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233


[ Dieser Beitrag wurde von whose am 02.02.2007 um 22:43 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 10:31 Uhr

Beeblebrox
Posts: 723
Nutzer
@all

also meine Signal-Variable ist ein einfacher ULONG (kein const ULONG). Ich benutze das Ding, weil es zuvor schon im Code von einem Reaction-Example vorkam den ich benutze:
IIntuition->GetAttr(WINDOW_SigMask, object[OID_MAIN], &signal);

Zitat:
Übrigens zeigt das entsprechende Beispiel, daß man den Status der Checkbox beim GADGETUP-Event im Code-Feld der Message in Form von TRUE oder FALSE serviert bekommt. Vielleicht hilft Dir das etwas weiter. Zumindest erleichtert es die "Buchführung" etwas

Werde ich mir mal anschauen.

Zitat:
Guck mal in SDK:Examples/Reaction/RA_Auto/testapp.c da wird ein CheckBox Objekt in Zeile 460 abgefragt.

Das gucke ich mir auch an.

Zitat:
Folge am besten dem Rat von thomas und lese dir im RKM und in der AmigaMailVol2 alles durch was es zu BOOPSI gibt, dann kommt das mit Reaction fast von allein.
Welche RKM und wo gibts die AmigaMailVol2 ? Wo finde ich BOOPSI Unterlagen ? Zumindest nicht im SDK/Documentation

Zitat:
*hüstel* schon mal an Cubic gedacht? Die serviert einem die Prototypen der Funktion unterm Cursor und man kann nach Schlagworten suchen lassen (auch und gerade in den Autodocs!).

Gedacht, na klar. Habe im November mein Studium beendet. Spätestens seit dem ist Ebbe im Portemonnaie. ABer ich habe ab dem 12.2. Arbeit, dann habe ich quasi das Geld, aber kaum Zeit mehr...
Während Praktikum / Diplom habe ich übrigens 8 Monate C# programmiert und weiss in etwa was objektorientierte Programmierung bedeutet.

Zitat:
Könntest Du das näher erläutern, inwiefern der sich unerklärlich verhält, der GCC?

Kann ich dummerweise nicht ohne meinen Code hier zu posten. Folgendes hat mich gestern 2 Stunden gekostet: Ich habe zwei rieseige char-Arrays mit je 256000 Werten angelegt. Das lässt sich in meinem Programm nicht compilieren. Ich habe letztendlich beide Arrays auf 25600 Werte verkleinern müssen. Ein kleines Test-Programm:
#include <stdio.h>

int main(void)
{
char string1[256000]="Hallo";
char string2[256000]="Welt";

printf("%s %sn",string1, string2);

return 0;
}
funktioniert allerdings.
Ach ja, und der Compiler sagt mir ständig: Could not relocate PCH oder sowas und bricht ab. Wenn ich dieses .gch file lösche, was wohl etwas mit der GUI zu tun hat, dann gehts wieder.

Danke für die freundlichen Kommentare. Werde mich heute nochmal einen Tag mit der "Erleuchtung" beschäftigen können.


--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ Dieser Beitrag wurde von Beeblebrox am 03.02.2007 um 10:33 Uhr geändert. ]

[ Dieser Beitrag wurde von Beeblebrox am 03.02.2007 um 10:34 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 10:54 Uhr

thomas
Posts: 7717
Nutzer
@Beeblebrox:
Zitat:
int main(void)
{
char string1[256000]="Hallo";
char string2[256000]="Welt";


Dir ist aber schon bewußt, daß automatische Variablen auf dem Stack angelegt werden (zumindest unter 68k) und daß die wenigsten Benutzer mehr als 4000 Bytes Stack haben ?

Also entweder
code:
char string1[256000]="Hallo";
char string2[256000]="Welt";

int main(void)
{


oder

code:
int main(void)
{
static char string1[256000]="Hallo";
static char string2[256000]="Welt";


oder

code:
int main(void)
{
char *string1 = malloc(256000);
char *string2 = malloc(256000);
strcpy (string1,"Hallo");
strcpy (string2,"Welt");


Zitat:
Während Praktikum / Diplom habe ich übrigens 8 Monate C# programmiert und weiss in etwa was objektorientierte Programmierung bedeutet.

Es gibt einen Grund, warum Studienabgänger von anderen Berufsgruppen mit abfälligem Unterton als Akademiker bezeichnet werden.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 11:38 Uhr

Beeblebrox
Posts: 723
Nutzer
@thomas:
Zitat:
Es gibt einen Grund, warum Studienabgänger von anderen Berufsgruppen mit abfälligem Unterton als Akademiker bezeichnet werden.

Dafür werde ich mich jetzt mal nicht entschuldigen, schliesslich fängt jeder irgendwann mal an. Übrigens bin ich kein Informatiker, ich sagte blos ich verstehe ein wenig von objektorientierter Programmierung weil ich mich halt 8 Monate erfolgreich damit beschäftigt habe. Auf dem Amiga hat mir das leider noch nicht weitergeholfen.
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ Dieser Beitrag wurde von Beeblebrox am 03.02.2007 um 11:41 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 11:38 Uhr

ZeroG
Posts: 1487
Nutzer
@Beeblebrox:
Zitat:
Welche RKM und wo gibts die AmigaMailVol2 ? Wo finde ich BOOPSI Unterlagen ? Zumindest nicht im SDK/Documentation
RKM = ROM Kernel Reference Manuals
Ist zusammen mit dem AmigaMail Archiv und anderen nützlichen Daten am billigsten auf CD zu haben z.B. bei Vesalia:

Version 2.1: http://www.vesalia.de/d_developer2.htm
Version 1.2: http://www.vesalia.de/d_amigadevcd12.htm
oder hier im Forum unter Kleinanzeigen oder bei den 4 bunten Buchstaben zu ersteigern.

Obwohl ich persönlich der Meinung bin das sich die RKM auf den CDs um einiges schlechter Lesen lassen als die echten Bücher. Aber dafür kann man besser Nachschlagen. Ist halt Geschmackssache.

Zitat:
also meine Signal-Variable ist ein einfacher ULONG (kein const ULONG). Ich benutze das Ding, weil es zuvor schon im Code von einem Reaction-Example vorkam den ich benutze:
IIntuition->GetAttr(WINDOW_SigMask, object[OID_MAIN], &signal);


Ganz böses Foul. Wenn du dieses signal einfach überschreibst, trittst du Intuition die Füsse weg.
Auch hierzu möchte ich dir die RKMs ans Herz legen.

@all:
Hab mal Meldung an HJF gemacht.

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 11:43 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Beeblebrox:
@all

also meine Signal-Variable ist ein einfacher ULONG (kein const ULONG). Ich benutze das Ding, weil es zuvor schon im Code von einem Reaction-Example vorkam den ich benutze:
IIntuition->GetAttr(WINDOW_SigMask, object[OID_MAIN], &signal);


Ok, aber "just for fun" taucht der Reaper garantiert nicht auf. Da sich langsam zeigt, daß es Dir an Erfahrung mangelt: Hast Du Dir schon mal Dein Programm vor der "abstürzenden Stelle" mal näher angesehen?

Oft genug sind es Fehler, die an vorheriger Stelle im Programm gemacht werden, die einen Absturz verursachen. Es ist (auch auf anderen Systemen) nicht 100% sicher, daß die angezeigte Stelle fehlerhaft ist. Manche Sachen wie Schreiben in nicht allozierte Speicherbereiche oder das Verwerten uninitialisierter Zeiger machen sich oft erst später bemerkbar.

Schau da mal genauer hin.

Zitat:
Zitat:
Übrigens zeigt das entsprechende Beispiel, daß man den Status der Checkbox beim GADGETUP-Event im Code-Feld der Message in Form von TRUE oder FALSE serviert bekommt. Vielleicht hilft Dir das etwas weiter. Zumindest erleichtert es die "Buchführung" etwas

Werde ich mir mal anschauen.


Kannst Du Dir im Grunde schenken, da thomas schon gezeigt hat, wie es funktioniert. Das es bei Dir just nicht funktioniert, dürfte andere Gründe haben (siehe oben).

Zitat:
Zitat:
Folge am besten dem Rat von thomas und lese dir im RKM und in der AmigaMailVol2 alles durch was es zu BOOPSI gibt, dann kommt das mit Reaction fast von allein.
Welche RKM und wo gibts die AmigaMailVol2 ? Wo finde ich BOOPSI Unterlagen ? Zumindest nicht im SDK/Documentation

Developer CD 2.1 z.B. Ist oft günstig bei einem bekannten Auktionshaus zu bekommen. Den Hinweis auf google und nicht so ganz legale Downloadmöglichkeiten hast Du übrigens nicht gelesen :D

Zitat:
Zitat:
*hüstel* schon mal an Cubic gedacht? Die serviert einem die Prototypen der Funktion unterm Cursor und man kann nach Schlagworten suchen lassen (auch und gerade in den Autodocs!).

Gedacht, na klar. Habe im November mein Studium beendet. Spätestens seit dem ist Ebbe im Portemonnaie. ABer ich habe ab dem 12.2. Arbeit, dann habe ich quasi das Geld, aber kaum Zeit mehr...


Und wie kommst Du dann darauf, daß es keine "vernünftige" IDE für AmigaOS gäbe? Außer für Linux gibt es wenige (mir ist keine bekannt) IDEs mit vollständiger Dokumentation der OS-Funktionen für lau. Selbst die Buch-Dinger für Windows kosten Geld (und sind oftmals stark eingeschränkt im Nutzwert) ;)

Zitat:
Während Praktikum / Diplom habe ich übrigens 8 Monate C# programmiert und weiss in etwa was objektorientierte Programmierung bedeutet.

"In etwa" klingt irgendwie "böse"... was genau hast Du denn studiert?

Zitat:
Zitat:
Könntest Du das näher erläutern, inwiefern der sich unerklärlich verhält, der GCC?

Kann ich dummerweise nicht ohne meinen Code hier zu posten. Folgendes hat mich gestern 2 Stunden gekostet: Ich habe zwei rieseige char-Arrays mit je 256000 Werten angelegt. Das lässt sich in meinem Programm nicht compilieren. Ich habe letztendlich beide Arrays auf 25600 Werte verkleinern müssen. Ein kleines Test-Programm:


Ok, dazu hat thomas ja schon einiges gesagt. Unerklärlich ist das allerdings nicht :D

Zitat:
Ach ja, und der Compiler sagt mir ständig: Could not relocate PCH oder sowas und bricht ab. Wenn ich dieses .gch file lösche, was wohl etwas mit der GUI zu tun hat, dann gehts wieder.

Nein, mit der GUI (Du meinst sicherlich ReAction) hat das eher nichts zu tun. Eventuell könnte ein Studium der GCC-Dokumentation da ein wenig Klarheit schaffen.

Sind .gch nicht "precompiled headers"? Weiß ich ehrlich gesagt selbst gar nicht, weil ich dieses Feature mit den OS3-Versionen eh nicht benutzen kann.

Zitat:
Danke für die freundlichen Kommentare. Werde mich heute nochmal einen Tag mit der "Erleuchtung" beschäftigen können.

Irgendwie habe ich das Gefühl, daß Du Programmierung mit "mal eben ne Schraube nachziehen" gleichsetzt. So einfach ist es aber nicht, das hätte Dir im Studium eigentlich beigebracht werden sollen.

Selbst die MS-IDEs machen einem das Leben nicht immer so leicht, weil die z.B. so lustige Konstrukte wie 256KB auf dem Stack belegen gar nicht "bemerken" bzw. gar nicht bemerken sollen wegen "automatic stack extension" usw. Schwachsinn bleibt dieses Konstrukt trotzdem, auch wenn es durch die OS-Krücken auf manchen Systemen trotzdem funktioniert.

Und die einfachen Lernbeispiele in C# decken im Grunde nur einen ganz winzigen Teil des weiten Felds der Programmierung ab. Da muß man wohl oder übel einiges an Zeit investieren, um wirklich zu verstehen, was man da so treibt, bevor man den Compiler auf seinen Text losläßt.

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 11:46 Uhr

Beeblebrox
Posts: 723
Nutzer
@ZeroG:
Danke, ich habe die Developer CD V2.1 eben ausgegraben. War mir garnicht mehr bewusst, daß ich die habe.
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 11:57 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von ZeroG:
Ganz böses Foul. Wenn du dieses signal einfach überschreibst, trittst du Intuition die Füsse weg.


Wie kommst Du denn darauf? Exec und Intuition verwenden diesen Wert doch gar nicht weiter, der in signal von Wait() & Co. abgelegt wurde, es sei denn, man "überreicht" einem der beiden diesen Wert ausdrücklich wieder zurück.

Der ist normal ausschließlich für das "empfangende" Programm von Belang und mit dem (selbst allozierten) Speicherplatz kann man theoretisch machen, was man möchte.

Da liegt aber der Hase im Pfeffer, weil wir nicht wissen, was er mit signal sonst noch so anstellt. Nachher verwendet er das noch als Maske fürs Signaling, ohne die entsprechenden Bits vorher passend zu setzen o.Ä.

Denkbar wäre auch, daß er GetMsg() ö.Ä. vergessen hat oder was weiß ich, was bei ihm nun gerade den Reaper auf den Plan ruft. Das "Überschreiben der Signale" (genauer: Das Beschreiben der vermutlich automatischen Variable signal) hat jedenfalls nicht unmittelbar damit zu tun.

Zitat:
@all:
Hab mal Meldung an HJF gemacht.


Super, danke :)

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 12:17 Uhr

Beeblebrox
Posts: 723
Nutzer
@whose:
Ok, ich will diesen Thread nicht Off topic werden lassen. Es stimmt, mir fehlt es besonders im Amiga Bereich sehr an Erfahrung / API& Programmierkenntnissen. Weil ich aber nicht mehr wusste wo ich überhaupt anfangen soll frage ich jetzt halt hier ein paar Dinge, die sich für euch vermutlich überaus laienhaft anhören. Letzendlich ist mein Ziel aber nicht euch zu ärgern, sondern ein wenig mehr zu verstehen ;) Meine Programme unter C# .Net hatten keinen Stacküberlauf, darum bin ich darauf garnicht gekommen. Ich habe auch einige Erfahrung mit der Programmierung der Mikrokontroller von Microchip, die 16f Serie benutzt den Stack lediglich für Unterprogrammaufrufe, nicht für Variablen. Grundsätzlich weiss ich schon daß solche Variablen auf dem Stack landen, bin halt nur icht drauf gekommen. Studiert habe ich Elektrotechnik.
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 12:32 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Beeblebrox:
@whose:
Ok, ich will diesen Thread nicht Off topic werden lassen. Es stimmt, mir fehlt es besonders im Amiga Bereich sehr an Erfahrung / API& Programmierkenntnissen.


OT wirds ja nicht, hat ja mit Programmierung zu tun ;) Die fehlende Erfahrung merkt man Dir aber auch an solchen "Kleinigkeiten" wie 256KB auf dem Stack anlegen u.Ä. an, deswegen...

Zitat:
Weil ich aber nicht mehr wusste wo ich überhaupt anfangen soll frage ich jetzt halt hier ein paar Dinge, die sich für euch vermutlich überaus laienhaft anhören.

Ganz und gar nicht. ReAction/BOOPSI ist nicht immer einfach zu handhaben, mußt nur mal nach Posts suchen, die damit zu tun haben.

Was halt auffiel, war Deine "mangelnde Vorbereitung". Aber da Du die DevCD2.1 ja nun gefunden hast, kannst Du Dich ja mal etwas einlesen und weißt dann u.U. besser, was Du in Deinem Programm machst ;)

Zitat:
Letzendlich ist mein Ziel aber nicht euch zu ärgern, sondern ein wenig mehr zu verstehen ;)

Wie ich schon sagte: Auch wenn manche Antworten vielleicht patzig klingen, heißt das nicht, daß Dir keiner helfen will. Aber ein klein wenig beachten solltest Du für die Zukunft schon, was man Dir schreibt ;)

Und gerade bei thomas solltest Du aufmerksam lesen. In seinen Antworten steckt sehr oft eine Menge nützliche Information drin, auch für Themen, die mit der eigentlichen Frage nur am Rande zu tun haben (wie z.B. die Sache mit den Variablen auf dem Stack).

Zitat:
Meine Programme unter C# .Net hatten keinen Stacküberlauf, darum bin ich darauf garnicht gekommen.

Unter Windows/Linux/Unix wäre das so oder so nicht passiert (auch mit C oder C++ nicht), weil diese Systeme von Haus aus den Stack erweitern, wenns notwendig wird. Sieht auf den ersten Blick sehr komfortabel aus, aber Dein Beispiel zeigt auch, zu welchen Kuriositäten der Komfort führen kann :D

Zitat:
Ich habe auch einige Erfahrung mit der Programmierung der Mikrokontroller von Microchip, die 16f Serie benutzt den Stack lediglich für Unterprogrammaufrufe, nicht für Variablen.

Damit kenne ich mich wiederum nicht aus. Nie mit beschäftigt ;)

Zitat:
Grundsätzlich weiss ich schon daß solche Variablen auf dem Stack landen, bin halt nur icht drauf gekommen. Studiert habe ich Elektrotechnik.

Naja, jetzt weißt Du schon mal eine Sache, wegen der sich der GCC "merkwürdig" verhält. Die Klamotte mit den .gch-Dateien dürfte sich in der Doku zu GCC finden.

Und ReAction wirst Du auch noch kapieren, ein klein wenig Übung und Geduld vorausgesetzt.

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 12:39 Uhr

ZeroG
Posts: 1487
Nutzer
Zitat:
Wie kommst Du denn darauf?
Weil der gute Beeblebrox anscheined die Reaction Beispiele aus dem OS4 SDK modifiziert.

Und da findet man öfters sowas:
code:
/* Obtain the window wait signal mask.*/
IIntuition->GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal);

/* Input Event Loop */
while (!done)
{
wait = IExec->Wait( signal | SIGBREAKF_CTRL_C | app );

Und da er signal wahrscheinlich in der Behandlung von WMHI_GADGET_UP überschreibt, fliegt im das ganze wahrscheinlich um die Ohren wenn die Schleife das nächste mal bei Wait() ankommt.

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 12:41 Uhr

whose
Posts: 2156
Nutzer
Äh, was ich noch fragen wollte:

Wie sieht eigentlich Deine Deklaration von "signal" genau aus? Lautet die
c code:
ULONG signal;


oder lautet die evtl.
c code:
ULONG *signal;

?

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 12:45 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von ZeroG:
Und da er signal wahrscheinlich in der Behandlung von WMHI_GADGET_UP überschreibt, fliegt im das ganze wahrscheinlich um die Ohren wenn die Schleife das nächste mal bei Wait() ankommt.


Ja, das habe ich ja als Nebensatz erwähnt, daß wir nicht wissen, was er damit sonst noch so treibt (signal als Signalmaske verwenden ohne die Bits vorher wieder korrekt zu setzen o.Ä.).

Prinzipiell kann man signal aber recht frei verwenden, darauf kams mir an, weil es bei Dir so klang, als dürfte man das generell nicht.

Natürlich sollte er schon darauf achten, was er wo reinschreibt oder wem übergibt :D

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 13:58 Uhr

Beeblebrox
Posts: 723
Nutzer
[quote]
Original von ZeroG:
Zitat:
Weil der gute Beeblebrox anscheined die Reaction Beispiele aus dem OS4 SDK modifiziert.
Da hast Du recht, ich habe den überaus doofen Fehler gefunden...
das ursprüngliche
IIntuition->GetAttr(CHECKBOX_Checked, object[GID_CDDB], &cddbSignal);

konnte natürlich nicht funktionieren, da die GID-CDDB nicht in der object instanz, sondern in der gadget instanz zu finden ist. Man sollte sich den Code den man klaut doch mal genau angucken. Also das da geht jetzt ohne DSI:

IIntuition->GetAttr(GA_Selected, gadget[GID_CDDB], &cddbSignal);

Ich danke euch, ich kann jetzt endlich Attribute setzen und lesen. Ausserdem auch mit den Autodocs etwas mehr anfangen und ich weiss wo ich Dokumentation finden kann.
--
>>> bEeBlEbRoX <<<
http://www.endlosstudent.de

[ Dieser Beitrag wurde von Beeblebrox am 03.02.2007 um 14:00 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 15:10 Uhr

whose
Posts: 2156
Nutzer
@Beeblebrox:

Ja super! :)

Dann noch viel Erfolg mit ReAction- und vor allem AmigaOS-Programmierung!

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 20:51 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
Zitat:
Meine Programme unter C# .Net hatten keinen Stacküberlauf, darum bin ich darauf garnicht gekommen.

Unter Windows/Linux/Unix wäre das so oder so nicht passiert (auch mit C oder C++ nicht), weil diese Systeme von Haus aus den Stack erweitern, wenns notwendig wird. Sieht auf den ersten Blick sehr komfortabel aus, aber Dein Beispiel zeigt auch, zu welchen Kuriositäten der Komfort führen kann :D


Ich bezweifle, dass in den Programmen, um die es hier geht, überhaupt explizit Stack-Speicher angefordert wurde. C# stellt für Gelegenheitsprogrammierer einen Speichermanager zur Verfügung...

Zitat:
Original von ZeroG:
...
Und da er signal wahrscheinlich in der Behandlung von WMHI_GADGET_UP überschreibt, fliegt im das ganze wahrscheinlich um die Ohren wenn die Schleife das nächste mal bei Wait() ankommt.


Wait() fliegt einem überhaupt nicht um die Ohren. Wie soll es auch? Das schlimmste, was passieren kann, ist, dass man auf erwünschte Signale nicht reagiert oder auf Signale hört, die nicht belegt sind.

Also, wenn die entscheidenden Signale fehlen, kehrt Wait() nicht mehr zurück, das ist alles.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

03.02.2007, 21:17 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Holger:
Zitat:
Original von whose:
Zitat:
Meine Programme unter C# .Net hatten keinen Stacküberlauf, darum bin ich darauf garnicht gekommen.

Unter Windows/Linux/Unix wäre das so oder so nicht passiert (auch mit C oder C++ nicht), weil diese Systeme von Haus aus den Stack erweitern, wenns notwendig wird. Sieht auf den ersten Blick sehr komfortabel aus, aber Dein Beispiel zeigt auch, zu welchen Kuriositäten der Komfort führen kann :D


Ich bezweifle, dass in den Programmen, um die es hier geht, überhaupt explizit Stack-Speicher angefordert wurde. C# stellt für Gelegenheitsprogrammierer einen Speichermanager zur Verfügung...


Du hast nicht alle Beiträge gelesen, oder? Es ging da um ein Problem, bei dem er char foo[256000]; und char bar[256000]; deklarierte, innerhalb eines Blocks = automatische Variablen und sich dann über Probleme mit dem Ergebnis unter AmigaOS (vermutlich 4) wunderte.

In unserem Fall landen die auf dem Stack, was halt nicht so wirklich funktioniert bei typischerweise 4KB Stack für 68K-Systeme und 32KB für PPC-Systeme (oder benutzt MOS/ABox standardmäßig einen größeren Stackframe oder gar stack extension? Ich weiß es nicht).

Das C# da etwas anders ist, habe ich gar nicht angesprochen. Ich meinte nur, daß das auch bei Benutzung von C++ oder C nicht zu Problemen geführt hätte wegen der automatischen Stack-Extension von Windows, Linux und Co.

Dort wäre ihm weiterhin (also nicht nur dann, wenn er C# benutzt) nicht aufgefallen, daß er unnötig Stackspeicher verballert.

Was das angeht, finde ich AmigaOS gerade wegen dieser "Einschränkungen" sehr lehrreich. Es zeigt einem, wie viele Dinge man nicht mehr beachtet, wenn man zu viel Komfort hat.

Das ist jetzt aber nicht als absolute Wertung/Angriff zu verstehen, gell? Ist einfach nur meine persönliche Meinung ;)

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

05.02.2007, 17:31 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
Du hast nicht alle Beiträge gelesen, oder?

Doch.
Zitat:
Es ging da um ein Problem, bei dem er char foo[256000]; und char bar[256000]; deklarierte, innerhalb eines Blocks = automatische Variablen und sich dann über Probleme mit dem Ergebnis unter AmigaOS (vermutlich 4) wunderte.
eigentlich keine Probleme mit dem AmigaOS, sondern mit dem Compiler, der das gar nicht erst zuließ...
und der andere Punkt war, dass er mit C# (und nur C#) solche Probleme nicht hatte.
Zitat:
Ich meinte nur, daß das auch bei Benutzung von C++ oder C nicht zu Problemen geführt hätte wegen der automatischen Stack-Extension von Windows, Linux und Co.
Was ich mal nicht so pauschal stehen lassen würde. Ob z.B. embedded-Linux oder WindowsCE das mit jeder x-beliebigen Zielplattform verkraften würden, kann ich nicht so einfach beantworten, weißt Du das mit Sicherheit?
Zitat:
Was das angeht, finde ich AmigaOS gerade wegen dieser "Einschränkungen" sehr lehrreich. Es zeigt einem, wie viele Dinge man nicht mehr beachtet, wenn man zu viel Komfort hat.
Aber eben nur, wenn einem das Erlernte auch einen Nutzen bringt. Wer außerhalb der Amiga/gcc Welt nur mit C# programmiert, der lernt in diesem Falle auch nichts, das er außerhalb der Amiga-Welt gebrauchen kann.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Wie Checkbox-Status abfragen ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.