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

amiga-news.de Forum > Programmierung > Grundlegende Grafikroutinen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 [ - Beitrag schreiben - ]

04.07.2005, 15:50 Uhr

Ralf27
Posts: 2779
Nutzer
Ich hab begonnen mein Programm komplett von Basic zu lösen und komplett auf die Libs zu gehn, auch mit den Grafikroutinen. Da hab ich aber jetzt folgendes Problem. Wie könnte ich folgenden Befehl am besten mit Befehlen aus dem System nachbilden?

--

Line(x1,y1)-(x2,y2),0,bf

--

bf=Block füllen

Mit Move und Draw bekomme ich zwar einen Block, aber der Bereich der gefüllt werden soll ist sozusagen mit Grafikmüll zugemüllt, ein einfaches "Füllen bis Farbe 0" würde wohl nix bringen.

Also, wie kann man am besten so ein Bereich löschen bzw. mit der Farbe 0 füllen?


PS: Ja, ich hab bis jetzt immer die Basic-Befehle benutzt, nicht die von den Libs. War halt bis jetzt immer einfacher. :D Und jetzt kann ich halt nicht so ohne weiteres (also nicht ohne Hack) in die Systemfenster mit Basicbefehlen schreiben.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 16:17 Uhr

thomas
Posts: 7717
Nutzer
@Ralf27:

Für diesen Befehl wird es auch weiterhin in Basic einfacher sein.

In C würde man das so machen:

SetAPen (rp,0);
AreaMove (rp,x1,y1);
AreaDraw (rp,x1,y2);
AreaDraw (rp,x2,y2);
AreaDraw (rp,x2,y1);
AreaEnd (rp);

"rp" ist der RastPort des Fensters, also Window->RPort.

Damit du die Area-Befehle benutzen kannst, mußt du allerdings noch einige Felder im RastPort initialisieren, die normalerweise vom System nicht angelegt werden.

Als Beispiel könntest du vielleicht das hier nehmen: http://thomas-rapp.homepage.t-online.de/examples/piechart.c



Ich könnte auch noch eins schreiben, das sich nur auf die Area-Befehle konzentriert.

Edit: hier ist es: http://thomas-rapp.homepage.t-online.de/examples/area.c


Gruß Thomas

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

[ Dieser Beitrag wurde von thomas am 04.07.2005 um 20:00 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 21:08 Uhr

Ralf27
Posts: 2779
Nutzer
@thomas:

Danke für die Infos.

Allerdings braucht dein Beispiel ja Chipram, wie sieht es dann mit Systemen mit Grafikkarte aus? Wird dann auch Chipram benutzt? Bei 1600*1200 wird es ja eng mit Chipram.

Ich frag mich auch eben wie es Basic intern macht.

Ich hab auch eventuell daran gedacht das Feld mit einzelnen Linien einfach zu füllen.
Oder man könnte ja auch vorher denn ganzen Bildschirm löschen und dann einfach nur das Bild reinsetzen. Wäre zwar dann nicht ganz so effektiv wie nur denn rest zu löschen, aber nunja.


Mir ist nochwas aufgefallen:
Wenn ich ein Event(VanillaKey) bekomme, dann sind teilweise die ASCII-Codes anderst als bei der übergabe durch INKEY$ von Basic und das wundert mich schon. z.b. haben die Cursortasten einen anderen Wert?!?

Ich werde so wohl einige Werte angleichen müssen.

--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 21:26 Uhr

thomas
Posts: 7717
Nutzer

Irgendwie hatte ich heute Mittag wohl einen Alzheimer-Anfall.

Um eine rechteckige Fläche zu füllen, benutzt man einfach

RectFill (rp,x1,y1,x2,y2);

Das mit den Area-Befehlen ist etwas für unregelmäßige Flächen oder Kreise.

Zu deinen Fragen: auf Grafikkartensystemen kann man für TmpRas vermutlich auch Fast-RAM benutzen. Wahrscheinlich wäre AllocRaster auch besser als AllocVec. Dann kann die Grafikkartensoftwar ebestimmen, ob Fast-RAM benutzt wird.

Für Cursor-Tasten bekommst du gar keinen VanillaKey. Zumindest keinen IDCMP_VANILLAKEY, wenn du das meinst. VanillaKey funktioniert nur bei Tasten, die zu genau einem ASCII-Wert übersetzt werden können. Die Cursor-Tasten haben aber eine ganze Zeichenkette (eine Esc-Sequenz). Das gleiche gilt auch für die F-Tasten und Help.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 22:18 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
Für Cursor-Tasten bekommst du gar keinen VanillaKey. Zumindest keinen IDCMP_VANILLAKEY, wenn du das meinst. VanillaKey funktioniert nur bei Tasten, die zu genau einem ASCII-Wert übersetzt werden können. Die Cursor-Tasten haben aber eine ganze Zeichenkette (eine Esc-Sequenz). Das gleiche gilt auch für die F-Tasten und Help.


Stimmt, ich bekomme da nur die Info über RawKey, damit geht es.

Übrigens läuft Rectfill ganz gut. Hab es eben eingebaut.


--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 23:24 Uhr

MaikG
Posts: 5172
Nutzer
Gefülltes Rechteck -> Rectfill
PSET -> WritePixel
Line -> Draw
Vordergrundfarbe SetAPen
Hintergrundfarbe SetBPen
Circle -> DrawEllipse
Paint -> Flood
Print -> Text

Die Library Funktionen sind im Bereich von 30000 durchläufen
geringfügig schneller.
Das Programm wird zwangsläufig größer und unübersichtlicher.
Daher hab ich die GUI Funktionen in SUBs/Functions und
Größere Grafiken als Data/Datei.

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 23:28 Uhr

Ralf27
Posts: 2779
Nutzer
So, jetzt häng ich am SLEEP-Befehl von Basic fest. Dieser Befehl läßt mein Programm so lange warten bis irgendwas passiert und das ohne CPU-Zeit zu verschwenden.

In den Systemroutinen(in der exec.lib) hab ich folgendes gefunden:

sig& = xWait&(1& << PEEK(userport& + mp_SigBit%))

(xWait statt Wait, weil es sonst ein Namenskonflikt gibt)

Das ganze läuft zwar recht gut, aber irgendwie "verschluckt" dieser Befehl immer einen "Aktion" bzw. gibt diese erst später aus. Als wäre da so eine Art Stapel vorhanden.
Z.b. Drücke ich Cursor Hoch, Runter, Runter, Links, dann kommt z.b. beim Drücken von Links erst der Runter-Befehl, etc. Alles irgendwie versetzt? Wie kann das sein? Wenn ich diesen Befehl weg lasse, dann geht alles normal.

Hintergrund:
Ich könnte Sleep zwar noch benutzen, aber eine Aktion meldet mir dieser Befehl nicht: NewSize bei einem Fenster. Und dieses bräuchte ich.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

04.07.2005, 23:31 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
Gefülltes Rechteck -> Rectfill
PSET -> WritePixel
Line -> Draw
Vordergrundfarbe SetAPen
Hintergrundfarbe SetBPen
Circle -> DrawEllipse
Paint -> Flood
Print -> Text

Die Library Funktionen sind im Bereich von 30000 durchläufen
geringfügig schneller.
Das Programm wird zwangsläufig größer und unübersichtlicher.
Daher hab ich die GUI Funktionen in SUBs/Functions und
Größere Grafiken als Data/Datei.


Es ging nur um RectFille, der rest ist mir klar. Bzw. braucht man übrigens 2 Befehle für eine Line-> Move und Draw. :D

Es gibt zwar auch ein Hack um die Basic Befehl auch in einem Systemfenster laufen zu lasse, aber nunja, lassen wir das lieber :)

Ich würde auch gerne mal deine Basicprogramme sehn, bzw. was du da schon gebaut hast.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 00:04 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Dass xWait etwas verschluckt, könnte daran liegen dass ein xWait nicht sagt dass EINE Nachricht angekommen ist, sondern nur das irgendetwas passiert ist. Dass heisst nach einem xWait musst du eine schleife einbauen die solange den Massegeport abfragt wie Messages da sind in C könnte das so aussehen:

code:
while (running){
 xWait()
 while (msg = GetMsg(MsgPort)) {
  ...
  ReplyMsg(msg);
 }
}


erst wenn GetMsg() eine NULL zurückgibt musst du wieder xWait aufrufen ,nicht Vergessen das GetMsg() sagt was passiert ist, also jedes GetMsg() in der Schleife bearbeiten.

[ Dieser Beitrag wurde von DariusBrewka am 05.07.2005 um 00:09 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 09:56 Uhr

MaikG
Posts: 5172
Nutzer
>Bzw. braucht man übrigens 2 Befehle für eine Line-> Move
>und Draw. :D

Nicht unbeding beim Rechteck(ungefüllt), sind es
1xMove und 4x Draw. Soll ja nicht zu lang werden.

>Es gibt zwar auch ein Hack um die Basic Befehl auch in
>einem Systemfenster laufen zu lasse, aber nunja, lassen
>wir das lieber :)

Das hab ich auch schon gemacht, ich glaub das war kein Hack.
Aber wegen der Kompatiblität ist es immer besser die
Systemfunktionen zu nehmen. So besteht die möglichkeit das
MBasic Programme auch auf AOS4 laufen.


>Ich würde auch gerne mal deine Basicprogramme sehn, bzw.
>was du da schon gebaut hast.

So grosse Sachen die jemand benutzen würde hab ich
nicht gemacht...

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 11:38 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DariusBrewka:
Dass xWait etwas verschluckt, könnte daran liegen dass ein xWait nicht sagt dass EINE Nachricht angekommen ist, sondern nur das irgendetwas passiert ist. Dass heisst nach einem xWait musst du eine schleife einbauen die solange den Massegeport abfragt wie Messages da sind in C könnte das so aussehen:...


Solange man aber nur auf einen einzigen Port hört, ist das Overkill. Dafür gibt es schließlich WaitPort(), den man einfach vor GetMsg() aufruft, und der alles erledigt.

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

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 11:57 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
Nicht unbeding beim Rechteck(ungefüllt), sind es
1xMove und 4x Draw. Soll ja nicht zu lang werden.

Ich sprach von einer Linie, nicht von einem Quadrat. Aber da hast du natürlich recht.
Zitat:
Das hab ich auch schon gemacht, ich glaub das war kein Hack.
Aber wegen der Kompatiblität ist es immer besser die
Systemfunktionen zu nehmen. So besteht die möglichkeit das
MBasic Programme auch auf AOS4 laufen.

Das bezweifle ich. Die MBasic-Programme laufen problemlos auf dem Peg, aber nicht auf dem AOne. Ich hab es auch schon getestet mit einem Systemfenster und den Systemfunktionen, das gleiche Problem. Es geht einfach nicht. Oder hast du das schon geschaft?
Zitat:
>Ich würde auch gerne mal deine Basicprogramme sehn, bzw.
>was du da schon gebaut hast.

So grosse Sachen die jemand benutzen würde hab ich
nicht gemacht...


Ja, was hast du denn schon gemacht?

PS: Große Projekte sind nix für MBasic, dafür hat der Compiler einen zu dummen Bug denn ich jetzt schon merke:
Mein Prog ist schon so lang das die Fehlerzeilennummer nicht mehr stimmt und das ich ca. schon 5-6 Zeilen unterhalb der angegebenen Zeile denn Fehler suchen muß. Je länger das Programm wird, um so schlimmer wird das. Ich hab am Anfang die Includes eingebunden und da durfte ich fast eine ganze Seite weiter unten danach suchen. :angry:
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 12:01 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@Holger

Ist klar, ist halt so dass man gewöhnlich mehrere Signale in seinem Programm braucht und schnell WaitPort() vergisst.

Andererseits macht WaitPort() AFAIK auch nichts anderes als Wait(1<<port->mp_SigNumber), was ich schade finde ist aber, dass man nicht einen SharedPort kreieren kann, der für Fenster, Arexx, ScreenNotify, AppWindow usw. genutzt werden kann, denn ich habe fast alle Signale in meinem Programm belegt.

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 12:03 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von DariusBrewka:
Dass xWait etwas verschluckt, könnte daran liegen dass ein xWait nicht sagt dass EINE Nachricht angekommen ist, sondern nur das irgendetwas passiert ist. Dass heisst nach einem xWait musst du eine schleife einbauen die solange den Massegeport abfragt wie Messages da sind in C könnte das so aussehen:

code:
while (running){
 xWait()
 while (msg = GetMsg(MsgPort)) {
  ...
  ReplyMsg(msg);
 }
}


erst wenn GetMsg() eine NULL zurückgibt musst du wieder xWait aufrufen ,nicht Vergessen das GetMsg() sagt was passiert ist, also jedes GetMsg() in der Schleife bearbeiten.

[ Dieser Beitrag wurde von DariusBrewka am 05.07.2005 um 00:09 Uhr editiert. ]


Genau so habe ich das ja auch gemacht. Wenn keine Message mehr kommt (=NULL), dann wird xWait aufgerufen und der wartet bis irgendwas passiert. Aber das geht leider etwas in die Hose.

--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 12:06 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von DariusBrewka:
@Holger

Ist klar, ist halt so dass man gewöhnlich mehrere Signale in seinem Programm braucht und schnell WaitPort() vergisst.

Andererseits macht WaitPort() AFAIK auch nichts anderes als Wait(1<<port->mp_SigNumber), was ich schade finde ist aber, dass man nicht einen SharedPort kreieren kann, der für Fenster, Arexx, ScreenNotify, AppWindow usw. genutzt werden kann, denn ich habe fast alle Signale in meinem Programm belegt.


Also ist das eine eigentlich quasi so wie das andere. Also würde es wohl auch nix bringen wenn ich auf WaitPort umschwenken würde.

PS: Ich hab erst gestern rausgefunden das es auch << für Basic gibt, bzw. das ominöse Bitshift von C. MBasic kann wirklich viel mehr als ich dachte. :lach: :D

[ Dieser Beitrag wurde von Ralf27 am 05.07.2005 um 12:07 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 13:05 Uhr

thomas
Posts: 7717
Nutzer
@DariusBrewka:
Zitat:
was ich schade finde ist aber, dass man nicht einen SharedPort kreieren kann, der für Fenster, Arexx, ScreenNotify, AppWindow usw. genutzt werden kann, denn ich habe fast alle Signale in meinem Programm belegt.

Kann man doch. Das einzige Problem wird sein, die Messages zu identifizieren.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 13:44 Uhr

Ralf27
Posts: 2779
Nutzer
xWait-Problem behoben. Jetzt gehts.

Aber jetzt hat sich wieder ein anderes Problem aufgetan (oh, ein Problem weg und ein neues kommt.. is ja wie auf nem Rummel! I-) :lach: ):

Also, die Abfrag der Maustaste läuft ganz gut und das Programm läuft gut. Allerdings gibt es an einem Punkt im Programm eine Merkwürdigkeit: Dann meldet das Programm beim Drücken der Maustaste eine 0 und wenn ich gehn lasse eine 8 bzw. MouseButtons (ich meine jetzt die Rückgabe der Events bei GetMsg).

Ich hab mir mal die Ausgabe dieser Funktion auf dem Bildschirm angesehn. Das sieht aus als wäre diese plötzlich invertiert?!? Ich hab keine Ahnung woran das liegt und leider muß ich bald wieder loslegen und ein paar Brötchen erschufften.

Ne Idee woran das liegen könnte?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 19:06 Uhr

MaikG
Posts: 5172
Nutzer
>Das bezweifle ich. Die MBasic-Programme laufen problemlos
>auf dem Peg, aber nicht auf dem AOne. Ich hab es auch
>schon getestet mit einem Systemfenster und den
>Systemfunktionen, das gleiche Problem. Es geht einfach
>nicht. Oder hast du das schon geschaft?

Ich hab kein AONE, will auch keinen. Was zählt ist
AOS4 auf dem Amiga(den mit Customchips).

>Ja, was hast du denn schon gemacht?

Kleine Programme die Dateien sortieren, alte Basic-programme
Korregiert und mit MB Compilert usw.

>PS: Große Projekte sind nix für MBasic, dafür hat der
>Compiler einen zu dummen Bug denn ich jetzt schon merke:
>Mein Prog ist schon so lang das die Fehlerzeilennummer
>nicht mehr stimmt und das ich ca. schon 5-6 Zeilen
>unterhalb der angegebenen Zeile denn Fehler suchen muß.
>Je länger das Programm wird, um so schlimmer wird das.
>Ich hab am Anfang die Includes eingebunden und da durfte
>ich fast eine ganze Seite weiter unten danach suchen.
>:angry:

Das ist ein Bug? Ich glaube der Compiler erkennt in dem
Falle nicht wo du den Fehler gemacht hast.

Print "test
For i=1 to 1000
a=a+1
next i


Ich denke der Fehler würde bei der 4. Zeile angezeigt.
MB denkt das alles hinter " bis zu den nächsten " ein
String ist.

[ - Antworten - Zitieren - Direktlink - ]

05.07.2005, 21:54 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
Ich hab kein AONE, will auch keinen. Was zählt ist
AOS4 auf dem Amiga(den mit Customchips).

Ich hab auch keinen, hab das aber schon testen lassen. Auf dem Peg laufen jedenfalls meine Programme. Der Peg ist wohl in der Emulation besser als der AOne.
Zitat:
Kleine Programme die Dateien sortieren, alte Basic-programme
Korregiert und mit MB Compilert usw.

Das ist ein Bug? Ich glaube der Compiler erkennt in dem
Falle nicht wo du den Fehler gemacht hast.

Print "test
For i=1 to 1000
a=a+1
next i


Ich denke der Fehler würde bei der 4. Zeile angezeigt.
MB denkt das alles hinter " bis zu den nächsten " ein
String ist.


Nun, wenn du nur kleine Programme geschrieben hast, dann stimmen noch die Fehlerzeilenangaben. Werden die Programme aber länger (über 1000Zeilen), dann wird es ungenau. Wenn man dann noch die Includes einbindet, dann werden ruck zuck zig tausend zeilen Code draus und die Angabe ist total für die Katz. Man kann dann zwar ca. abschätzen wo der Fehler ist, aber das ist schon alles.
Das hat nichts mit dem Beispiel von dir zu tun. Es wurde auch schon von anderen MBasic-Proggern gemeldet, die früher damit programmiert haben. Es ist halt ein wirklich sehr nerviger Bug wenn man einen Fehler im Programm sucht.

Dann gibt es z.b. noch denn Fehler bei denn Compilerangaben im Menu, die kann man aber umgehn indem man die Compilerangaben direkt ins Programm einbaut und gut ist. Ich finde, das ist eh der bessere Weg.


--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 11:41 Uhr

MaikG
Posts: 5172
Nutzer
Ich schreib zwar kompakt aber über 1000 Zeilen war ich sicher
schon drüber.

>Dann gibt es z.b. noch denn Fehler bei denn
>Compilerangaben im Menu, die kann man aber umgehn indem
>man die Compilerangaben direkt ins Programm einbaut und
>gut ist. Ich finde, das ist eh der bessere Weg.

Ja, der ist mir bekannt. Da unterschiedliche Programme
eh unterschiedliche Optionen brauchen...

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 16:08 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
Ich schreib zwar kompakt aber über 1000 Zeilen war ich sicher
schon drüber.

Also hast du eigentlich auch schon für Basicverhältnisse recht umfangreiche Programme geschrieben.

Diesen Bug gibt es wirklich. Wollte es auch nicht glauben, aber leider ist es so. Bei meinem aktuellen Projekt ist er übrigens schon 5 Zeilen versetzt und ich hab da keine Includes eingebunden. Ich hoffe nur das ich bald mehr Zeit finde um es weier zu führen.

Aber ich hab da auch das Gefühl das ich mit diesem Projekt langsam von Basic nach C abwander. :lach: :glow: :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 16:14 Uhr

thomas
Posts: 7717
Nutzer
@Ralf27:

Kann man da nicht modular programmieren, d.h. Unterprogramme in Kategorien zusammenfassen und für jede Kategorie ein eigenes Source- und Object-Modul erstellen, die dann am Ende zu einem Programm zusammen-"gelinkt" werden ?

Da bist du bei C sicher besser aufgehoben. Denn mit Hilfe von Makefiles kannst du das Projekt so aufteilen, daß immer nur das Unterprogramm kompiliert werden muß, an dem du gerade arbeitest. Das spart unheimlich viel Compile-Zeit.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 16:18 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
@Ralf27:

Kann man da nicht modular programmieren, d.h. Unterprogramme in Kategorien zusammenfassen und für jede Kategorie ein eigenes Source- und Object-Modul erstellen, die dann am Ende zu einem Programm zusammen-"gelinkt" werden ?

Da bist du bei C sicher besser aufgehoben. Denn mit Hilfe von Makefiles kannst du das Projekt so aufteilen, daß immer nur das Unterprogramm kompiliert werden muß, an dem du gerade arbeitest. Das spart unheimlich viel Compile-Zeit.


Das gibt es auch bei MBasic, nennt sich tokenisieren. Da können Programmteile vorcompiliert werden und gut ist.

Wie schon geschrieben, MBasic kann viel mehr als ich dachte, ich benutze es aber leider nicht. Ich denk halt irgendwie halt a la AmigaBasic... :( Aber selbst da gab es schon sowas mit CHAIN. Damit konnte man Programmteile hinzuladen. Aber alles natürlich für den Interpreter. Ich hab das nur einmal für ein großes Projekt benötigt, das es leider durch Datenverlust :angry: (damals Disketten) nicht mehr gibt.

Leider ist es immer noch das ich sogar MBasic-Source nicht lesen kann wenn es ein "richtiger" Progger geschrieben hat. Wie auch das <<, das ich erst vor kurzem kennen gelernt habe.

[ Dieser Beitrag wurde von Ralf27 am 06.07.2005 um 16:27 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 17:49 Uhr

thomas
Posts: 7717
Nutzer

Ein "richtiger Programmierer" schreibt (und kommentiert) die Programme so, daß sie auch einer versteht, der die Sprache nicht in allen Details beherrscht. Die Zeit, wo man sich unentbehrlich machen konnte, indem man unleserliche Programme schrieb, ist lange vorbei. Vielmehr basieren die meisten großen EDV-Betriebe auf einem Pool-System, wo der Programmierer, der gerade frei ist, ein Programm korrigieren oder erweitern muß und nicht der, der es ursprünglich geschrieben hat.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 18:50 Uhr

Ralf27
Posts: 2779
Nutzer
@thomas:

Da hast du natürlich recht. Ich wollte viel mehr damit schreiben das ich sogar teilweise Syntax nicht komplett kenne! Ich denke mir mal das das ein echter Programmierer komplett kann. Wie das z.b. << mit dem Bitshift. Kenne ich erst seit kurzem was das ist. Bzw. die Möglichkeiten die man eigentlich hat in einer Programmiersprache (um es mal allgemein zu halten).

Bei den Beispiel handelt es sich z.b. um Sachen mit Betriebssystemroutinen wo ich gar nicht mehr mitkomme. Hätte ich vor einemm Jahr mein aktuelles Programm gesehn, dann hätte ich vermutlich auch nur Bahnhof verstanden wie z.b. der WritePixelArray8-Befehl, denn ich jetzt dank deiner Hilfe bezwungen habe.

--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 06.07.2005 um 18:54 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

06.07.2005, 20:02 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Ich wollte viel mehr damit schreiben das ich sogar teilweise Syntax nicht komplett kenne! Ich denke mir mal das das ein echter Programmierer komplett kann.

Das ist mit Sicherheit keine Definition von "echter Programmierer". Ich bin auch immer wieder erstaunt, was für Details nach jahrelanger aktiver, will heißen auch beruflicher, Verwendung einer Programmiersprache noch auftauchen können.
Aber man braucht halt nicht alles zu können. Im Falle von perl darf man gar nicht alle Möglichkeiten kennen, sonst kommt man gar nicht mehr zum Entwickeln.
Zitat:
Hätte ich vor einemm Jahr mein aktuelles Programm gesehn, dann hätte ich vermutlich auch nur Bahnhof verstanden wie z.b. der WritePixelArray8-Befehl, denn ich jetzt dank deiner Hilfe bezwungen habe.
Das hat aber nichts mit der Syntax einer Programmiersprache zu tun. Für jemanden, der kein Basic programmiert, wäre die WritePixelArray8 Funktion wahrscheinlich die einzige, die er wiedererkennt.

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

[ - Antworten - Zitieren - Direktlink - ]

07.07.2005, 00:11 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@Ralf

Ich habe hier gestern schon geschrieben, leider gab es scheinbar ein Problem im Forum und mein Test scheint gelöscht worden zu sein. Es ging um das Problem mit Wait(), GetMsg(), das dir mal 0 und mal 8 zurückgegeben wird.

Kann es ein dass du ggf. die Nachricht zu früh beantwortest?, d.h.

msg=getMsg();
replyMsg(msg);

direkt hintereinander aufrufst, anstatt nach getmsg erstmal die Nachricht zu bearbeiten und dann zu replyen?

es it so, dass das ReplyMsg() dem absender sag, dass die Nachricht bearbeitet wurde und er diese ggf. löschen kann, d.h. du musst vor ReplyMsg() alles was für dich wichtig an der Nachricht ist merken und dann replyen, ansonsten kann es ein dass z.B. der TastenCode schon gelöscht wurde, bevor du anfängst die Nachricht zu bearbeiten.

Der Code (hier Psydocode, da ich die genaue Syntax nicht im Kopf habe) sollte dann eher so aussehen

msg = GetMsg();
code = msg->imsg_code;
replyMsg(msg)
if (code == MOUSEBUTTON_LEFT) ...

und nicht so

msg = GetMsg()
ReplyMsg(msg)
if (msg->imsg_code==MOUSEBUTTON_LEFT) ...

im zweitem Fall kann das Code Feld nach ReplyMsg schon gelöscht worden sein, muss es aber nicht, was auch das Auftreten von 0 und 8 erklären würde.

gruss


PS: wäre es nicht möglich auch eine Vorschau Funktion in die Foren zu integrieren?

[ - Antworten - Zitieren - Direktlink - ]

07.07.2005, 00:16 Uhr

Ralf27
Posts: 2779
Nutzer
In einem anderen Thread hier im Forum hat mir der Thomas schon geholfen und es läuft jetzt. Ich hab halt leider nur die Hälfte der Infos abgefragt und nicht alles. Es ist überwältigend was man alles von Intuition bekommen kann. :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

07.07.2005, 00:22 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Holger:
Das hat aber nichts mit der Syntax einer Programmiersprache zu tun. Für jemanden, der kein Basic programmiert, wäre die WritePixelArray8 Funktion wahrscheinlich die einzige, die er wiedererkennt.


Da hast du natürlich recht. Aber leider ist es auch so das ich quasi die Interna vom Amiga in Sachen Librarybefehle gar nicht alle kenne(ach, bei weitem nicht! :lach: ) und mir auch nicht klar ist wie alles funktioniert. Bis jetzt hat ja Basic für mich alles gemacht.
Aber auch beim Syntax (und da gehört auch << Bitshift dazu) gibt es ab und zu einige Überraschungen. Das MBasic-Handbuch ist halt kurz gehalten.

Zusammengenommen gibt es bei mir schon hin und wieder Stirnrunzeln selbst dann wenn ich MBasic-Programme von anderen Proggern lese.
Ich vermute sogar das da bei mir die gleichen Runzelfalten bewegt werden wie bei einem C-Code. :lach: :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

07.07.2005, 13:38 Uhr

thomas
Posts: 7717
Nutzer
@Ralf27:

Du mußt nicht alle verfügbaren Betriebssystem-Funktionen auswendig wissen. Du brauchst nur ein kleines Programmgerüst (z.B. Öffnen eines Fensters, Abfragen der Eingaben und schließen des Fensters). Der Rest ist Suchen in den Autodocs. Irgendwann hast du einen Überblick, welche Funktionen es alles gibt, aber welche Parameter die brauchen und in welcher Reihenfolge wirst du nie auswendig können. Man braucht immer einen Link zu den Autodocs auf dem Desktop.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Grundlegende Grafikroutinen [ - Suche - Neue Beiträge - Registrieren - Login - ]


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