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

amiga-news.de Forum > Programmierung > Alle Laufwerke finden... [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 [ - Beitrag schreiben - ]

01.04.2004, 16:13 Uhr

Ralf27
Posts: 2779
Nutzer
Wie ist es möglich alle Device bzw. alle Units programmiertechisch zu finden? Dachte auch schon das DEVS:-Verzeichniss zu durchsuchen, aber das ist wohl nicht gerade der optimale Weg.


Sinn und Zweck:
Ich möchte brauchbare Laufwerke für mein Programm finden. Auf Brauchbarkeit kann ich schon testen, jetzt brauch ich halt "nur" noch alle möglichen Devices und Units.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

01.04.2004, 18:27 Uhr

Holger
Posts: 8116
Nutzer
http://www.amiga-news.de/forum/thread.php3?id=5632&BoardID=7


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

[ - Antworten - Zitieren - Direktlink - ]

01.04.2004, 18:37 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von Holger:
http://www.amiga-news.de/forum/thread.php3?id=5632&BoardID=7



mfg



Falsches Thema. Es geht darum, Exec-Devices aufzulisten, nicht Dos-Devices.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

01.04.2004, 18:59 Uhr

thomas
Posts: 7716
Nutzer

Hier ist ein Beispiel, wie du die im Speicher befindlichen Devices auflistest:

code:
#include <exec/execbase.h>
#include <proto/dos.h>

extern struct ExecBase *SysBase;

int main (void)

{
struct Node *n;

for (n = SysBase->DeviceList.lh_Head; n->ln_Succ != NULL; n = n->ln_Succ)
	{
	Printf ("%s\n",n->ln_Name);
	}

return (0);
}



Theoretisch müßte man die Schleife mit Forbid()/Permit() einschließen, weil sich die Liste sonst ändern könnte, während man sie ausliest und dann landet man leicht im Nirvana. Dann dürfte man auch kein Printf() drin machen.

Das ist auch gleich ein gutes Beispiel für den for-Befehl in C. Der eignet sich nämlich auch hervorragend zum Verfolgen von verketteten Listen.

Gruß Thomas
--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

01.04.2004, 21:23 Uhr

Ralf27
Posts: 2779
Nutzer
Ich wollte dieses Beispiel gleich testen und hab es mit gcc compiliert. Leider ist dann folgender Fehler aufgetreten:

test.c:25 warning: initialization makes integer from pointer without a cast.

Ich bin recht neu in C... was hat das zu bedeuten?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 00:08 Uhr

AchimStegemann
Posts: 112
Nutzer
Zitat:
Original von Ralf27:
Ich wollte dieses Beispiel gleich testen und hab es mit gcc compiliert. Leider ist dann folgender Fehler aufgetreten:

test.c:25 warning: initialization makes integer from pointer without a cast.

Ich bin recht neu in C... was hat das zu bedeuten?


Das ist kein Fehler, sondern nur eine Warnung, dass du einen Integerwert von einem Pointer ohne Cast (explizite Umwandlung) vornimmst. Das kann man aber getrost ignorieren.

Falls dich die Warnungen nerven, kannst du sie mit "-W" (glaube ich
?( ) abschalten.

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 00:44 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von AchimStegemann:
Das ist kein Fehler, sondern nur eine Warnung, dass du einen Integerwert von einem Pointer ohne Cast (explizite Umwandlung) vornimmst. Das kann man aber getrost ignorieren.

Falls dich die Warnungen nerven, kannst du sie mit "-W" (glaube ich
?( ) abschalten.

Tolle Empfehlung.
Deshalb gibt es vermutlich soviel "Qualitätssoftware" für den Amiga.

@Ralf27:
Die richtige Vorgehensweise ist, den vom Compiler angemahnten typecast einzufügen. Damit sagt man dem Compiler, daß man an dieser Stelle genau weiß, was man tut, und er kann dafür dann an den anderen Stellen warnen, wo es vielleicht tatsächlich ein Fehler wäre.

Warnungen sollte man nie ausschalten, es sei denn, man liebt es, irgendwann mal tagelang nach einem kleinen dummen Fehler suchen zu müssen.

Allerdings frage ich mich, wie Du es schaffst bei diesem Programm auf Zeile 25 zu kommen. ?(

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 00:47 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von thomas:
Falsches Thema. Es geht darum, Exec-Devices aufzulisten, nicht Dos-Devices.

Ok, übersehen.
Allerdings war auch die Rede von Units und wenn man nicht Inquiry auf allen devices machen soll, ist das das Ermitteln der tatsächlich benutzten Geräte über die angemeldeten DOS-Devices vielleicht doch gar nicht so falsch...

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 08:16 Uhr

thomas
Posts: 7716
Nutzer

Zitat:
Ich wollte dieses Beispiel gleich testen und hab es mit gcc compiliert.

GCC kannst du als Anfänger vergessen. Die Amiga-Includes sind dafür nicht geeignet. Nimm Dice C oder VBCC. Oder beide. Wenn das Programm mit beiden ohne Warnungen kompiliert, ist es nur noch ein endlicher Aufwand, das Programm auch durch den GCC zu bekommen (für einen C-Könner).

Zitat:
Die richtige Vorgehensweise ist, den vom Compiler angemahnten typecast einzufügen.

Leichter gesagt als getan. Das Program verwendet nur Pointer, wo soll denn der Cast da hin ? Das einzige, was ich mir vorstellen kann ist, daß beim GCC das eine Include nicht alle benötigten anderen Includes mit einbindet oder daß GCC eine Uraltversion der types.h benutzt, in der APTR noch als Integer deklariert ist (war bei den 1.3 Includes so).

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 12:57 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von thomas:
Leichter gesagt als getan. Das Program verwendet nur Pointer, wo soll denn der Cast da hin ? Das einzige, was ich mir vorstellen kann ist, daß beim GCC das eine Include nicht alle benötigten anderen Includes mit einbindet oder daß GCC eine Uraltversion der types.h benutzt, in der APTR noch als Integer deklariert ist (war bei den 1.3 Includes so).

Bei 1.3 includes gibt es aber keine Printf Funktion (DOS-Funktion mit Großbuchstaben), oder?
Allerdings, wenn kein Prototyp für eine Funktion gefunden wird, nimmt der Compiler auch int-Parameter an, kann es daran liegen?
Wie sieht denn die Deklaration von Printf (AmigaDOS) aus?

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 13:06 Uhr

thomas
Posts: 7716
Nutzer

LONG Printf (STRPTR,...);

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 13:08 Uhr

Palgucker
Posts: 1342
Nutzer
@ Ralf27

quote: Ich wollte dieses Beispiel gleich testen und hab es mit gcc compiliert.

Hab es eben auch mal versucht, und merkwürdigerweise kompiliert gcc2.95 wie auch 3.3 ohne murren durch.

mfg Palgucker

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 13:26 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Palgucker:
Hab es eben auch mal versucht, und merkwürdigerweise kompiliert gcc2.95 wie auch 3.3 ohne murren durch.

Hängt möglicherweise mit der Version des ndk's zusammen.
Bei mir übersetzt gcc auch ohne Beanstandung, sonst hätte man den Fehler ja auch genauer eingrenzen können.

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 14:29 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Holger:
Zitat:
Palgucker:
Hab es eben auch mal versucht, und merkwürdigerweise kompiliert gcc2.95 wie auch 3.3 ohne murren durch.

Hängt möglicherweise mit der Version des ndk's zusammen. Bei mir übersetzt gcc auch ohne Beanstandung, sonst hätte man den Fehler ja auch genauer eingrenzen können.
Printf() ist eine varargs Funktion, die in inline/dos.h als Makro definiert ist. Die variablen Argumente werden ein ULONG Array gepackt. Wenn man einen Pointer reinsteckt meckert der GCC egal welche Version.

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 15:31 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von gni:
Printf() ist eine varargs Funktion, die in inline/dos.h als Makro definiert ist. Die variablen Argumente werden ein ULONG Array gepackt. Wenn man einen Pointer reinsteckt meckert der GCC egal welche Version.

Du wirst mir und Palgucker doch wohl noch zutrauen zu merken, ob der Compiler meckert oder nicht, ok?

Abgesehen davon sehe ich nirgendwo in dem source-code ein
#include <inline/dos.h>

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 15:36 Uhr

Solar
Posts: 3680
Nutzer
Und ich keine Zeile #25...

Werdet Euch doch erst einmal einig:

* welcher Source,
* welche GCC-Version,
* welche -W... Optionen,

und haut Euch *dann* die Köppe ein.

8)

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 16:01 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Holger:
Zitat:
gni:
Printf() ist eine varargs Funktion, die in inline/dos.h als Makro definiert ist. Die variablen Argumente werden ein ULONG Array gepackt. Wenn man einen Pointer reinsteckt meckert der GCC egal welche Version.

Du wirst mir und Palgucker doch wohl noch zutrauen zu merken, ob der Compiler meckert oder nicht, ok?
Wenns um den GCC geht, dann nicht.
Zitat:
Abgesehen davon sehe ich nirgendwo in dem source-code ein
#include <inline/dos.h>

Mußt Du auch nicht. Es wird trotzdem benutzt.

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 18:53 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Solar:
Und ich keine Zeile #25...

Werdet Euch doch erst einmal einig:

* welcher Source,
* welche GCC-Version,
* welche -W... Optionen,

Hmm, daß ich keine Zeile 25 entdecken kann, habe ich auch schon geschrieben, aber wenn man zwischen allen Zeilen eine Leerzeile einfügt (optisches Gimmick), dann paßt es vermutlich.
Gcc Versionen hat palgucker schon geschrieben und nachdem ich ohne Optionen keine Warnung bekommen habe, habe ich natürlich -Wall probiert.
Zufrieden?

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 18:57 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von gni:
Zitat:
Abgesehen davon sehe ich nirgendwo in dem source-code ein
#include <inline/dos.h>

Mußt Du auch nicht. Es wird trotzdem benutzt.
Bist Du jetzt unter die Hellseher gegangen und willst behaupten, daß Ralf27 inlines hinzugefügt hat, oder willst Du erzählen, daß protos neuerdings inlines einbinden?
Wäre ja ganz was neues.

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

[ - Antworten - Zitieren - Direktlink - ]

02.04.2004, 20:33 Uhr

thomas
Posts: 7716
Nutzer

proto/#?.h bindet normalerweise protos und pragmas ein, bei gcc protos und inlines. Wenn du nur protos haben möchtest, mußt du clib/#?_protos.h einbinden.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

03.04.2004, 01:48 Uhr

obw
Posts: 94
Nutzer
Zitat:
Original von Holger:
Zitat:
Original von gni:
Zitat:
Abgesehen davon sehe ich nirgendwo in dem source-code ein
#include <inline/dos.h>

Mußt Du auch nicht. Es wird trotzdem benutzt.
Bist Du jetzt unter die Hellseher gegangen und willst behaupten, daß Ralf27 inlines hinzugefügt hat, oder willst Du erzählen, daß protos neuerdings inlines einbinden?
Wäre ja ganz was neues.


Nur mal ein Hinweis: Du sagst gerade dem gcc-Portierer auf AmigaOS, was sein Port macht und was nicht. :D

Und ganz zufällig steht bei mir in gg:os-include/proto/dos.h
code:
#ifdef __GNUC__
#include <inline/dos.h>
[...]

und ich bin da glaube ich nicht der einzige, bei dem das so ist.:P

Schwamm drüber,
OBW

[ - Antworten - Zitieren - Direktlink - ]

09.04.2004, 17:23 Uhr

Ralf27
Posts: 2779
Nutzer
So, ich hab endlich wieder Zeit zum programmieren und hab nun dieses Beispiel in Basic konvertiert und da geht es ohne Probleme.

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

[ - Antworten - Zitieren - Direktlink - ]

09.04.2004, 19:38 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von obw:
Nur mal ein Hinweis: Du sagst gerade dem gcc-Portierer auf AmigaOS, was sein Port macht und was nicht. :D

Und ganz zufällig steht bei mir in gg:os-include/proto/dos.h
code:
#ifdef __GNUC__
#include <inline/dos.h>
[...]

und ich bin da glaube ich nicht der einzige, bei dem das so ist.:P

Schwamm drüber,
OBW


Naja, liegt vielleicht auch an gni s Art, sowas zu sagen... ob der GCC meckert oder nicht, sollte er den Jungs schon glauben, wenn sie es sagen. Bei mir meckern nämlich auch beide Versionen nicht (2.95.2 und 3.3) und ich denke, die Leutz können proggen und daher auch lesen. Aber wenns nix zu lesen gibt, kann man das halt net ;)

Sagt Dir die Option "do-inline" was? ;)

Übrigens: Hat nicht H. Wrobel den ersten Port des 3.x erledigt? ;)

Grüße

[ - Antworten - Zitieren - Direktlink - ]

10.04.2004, 12:13 Uhr

gni
Posts: 1106
Nutzer
Zitat:
whose:
ob der GCC meckert oder nicht, sollte er den Jungs schon glauben, wenn sie es sagen. Bei mir meckern nämlich auch beide Versionen nicht (2.95.2 und 3.3)

K.A. was ihr mit euren GCC Installationen veranstaltet. Wenn Ihr keine Hilfe benötigt, ist ja gut.
Zitat:
Sagt Dir die Option "do-inline" was? ;)
Nie gehört. Aber gut, ich kenne den GCC auch nicht so gut wie Du...
Zitat:
Übrigens: Hat nicht H. Wrobel den ersten Port des 3.x erledigt? ;)
Wozu der Smiley?

[ - Antworten - Zitieren - Direktlink - ]

10.04.2004, 13:07 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von gni:
K.A. was ihr mit euren GCC Installationen veranstaltet. Wenn Ihr keine Hilfe benötigt, ist ja gut.


Hm, also mit meiner GCC-Installation hab ich gar nichts veranstaltet... der 3.3 ist der aus der GoldEd-Installation und läuft ohne irgendwelche "Anpassungen". Der 2.95.2 ist der StormC4-GCC mit Includes die ich mir per fd2inline neu erzeugt hab, weil die mitgelieferten arge Probleme haben (weshalb meist ein NO_INLINE_LIBCALLS notwendig wird, wenn man AOS-Funktionen nutzt)

Zitat:
Zitat:
Sagt Dir die Option "do-inline" was? ;)
Nie gehört. Aber gut, ich kenne den GCC auch nicht so gut wie Du...

Das soll jetzt ein Scherz oder Ironie sein, oder? Versteh zwar nicht, warum, aber wenns scheee macht...

Zitat:
Zitat:
Übrigens: Hat nicht H. Wrobel den ersten Port des 3.x erledigt? ;)
Wozu der Smiley?
[/quote]

Aus Spaß an der Freud?

Grüße

P.S.: Ich hab nochmal nachgeschaut, die "Option" heißt __USE_INLINE__. Ich nutz die beim 3.3 selten, weil ich den meist nur für Testzwecke einsetze. Beim StormC hab ich das als Default, da heißts dann "Dont inline" und ist ausgeschaltet.

[ Dieser Beitrag wurde von whose am 10.04.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

16.04.2004, 17:33 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Original von whose:
Hm, also mit meiner GCC-Installation hab ich gar nichts veranstaltet... der 3.3 ist der aus der GoldEd-Installation und läuft ohne irgendwelche "Anpassungen".

Und welche Includes verwendet diese Installation? Die üblichen Inlines verwenden LP Makros und genau diese Includes sind dann auch die Ursache für die Warnungen der VARARGS Funktionen.
Zitat:
Der 2.95.2 ist der StormC4-GCC mit Includes die ich mir per fd2inline neu erzeugt hab, weil die mitgelieferten arge Probleme haben (weshalb meist ein NO_INLINE_LIBCALLS notwendig wird, wenn man AOS-Funktionen nutzt)
Wo wird NO_INLINE_LIBCALLS definiert?
Zitat:
Zitat:
Zitat:
Übrigens: Hat nicht H. Wrobel den ersten Port des 3.x erledigt? ;)
Wozu der Smiley?
Aus Spaß an der Freud?
Vermutlich weisst Du es nicht besser.
Zitat:
P.S.: Ich hab nochmal nachgeschaut, die "Option" heißt __USE_INLINE__. Ich nutz die beim 3.3 selten, weil ich den meist nur für Testzwecke einsetze. Beim StormC hab ich das als Default, da heißts dann "Dont inline" und ist ausgeschaltet.
Ich kenne auch __USE_INLINE__ nicht. Was soll das sein?


[ Dieser Beitrag wurde von gni am 16.04.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.04.2004, 19:29 Uhr

Holger
Posts: 8116
Nutzer
Also bei mit steht in den protos:
code:
#if defined(__OPTIMIZE__) && !defined(__NOINLINES__)
#include <inline/dos.h>
#endif

Mag jeder selbst raten, welche compiler-optionen dafür gesetzt sein müssen. Ich habe das Beispiel ohne weitere Optionen übersetzt und zumind. mit Version 2.7 keine Probleme gehabt. Allerdings habe ich den starken Verdacht, daß auch die inlines anders aussehen und bei diesem Beispiel auch keine Warnungen produzieren würden. Habe jetzt auch keine Lust, für dieses Beispiel jetzt noch andere gcc-Versionen durchzuprobieren.
Anständige includes zur Verfügung zu stellen ist eh Aufgabe der OS-Entwickler.

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

[ - Antworten - Zitieren - Direktlink - ]

18.04.2004, 20:41 Uhr

obw
Posts: 94
Nutzer
Zitat:
Original von Holger:

Mag jeder selbst raten, welche compiler-optionen dafür gesetzt sein müssen. Ich habe das Beispiel ohne weitere Optionen übersetzt und zumind. mit Version 2.7 keine Probleme gehabt.


Verstehe ich das jetzt richtig? Laut
GCC History hast Du da einen steinalten Compiler, der nur noch unter "historical releases" geführt wird und wunderst Dich, daß bei anderen Leuten die Includes anders aussehen könnten? Nach 9 Jahren könnte man sich ja mal was aktuelleres gönnen.:lach:

Und ich dachte schon mein 2.95.3 hier wäre antik und hatte Gewissensbisse, weil ich den gcc 3 noch nicht einsetze...

OBW

[ - Antworten - Zitieren - Direktlink - ]

19.04.2004, 14:44 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von obw:
Verstehe ich das jetzt richtig? Laut
GCC History hast Du da einen steinalten Compiler, der nur noch unter "historical releases" geführt wird und wunderst Dich, daß bei anderen Leuten die Includes anders aussehen könnten? Nach 9 Jahren könnte man sich ja mal was aktuelleres gönnen.:lach:

Ich habe ihn ausschliesslich zum Testen der in diesem Forum geposteten Code-Schnipsel schnell mal installiert, weil die CD in Griffweite rumlag. Alles andere hätte länger gedauert.
Und da alle Beispiele fehlerfrei übersetzt werden konnten und auch liefen...
Sollten neuere Compiler/Umgebungen jetzt Fehler oder unnötige Warnungen verursachen, ist das nicht gerade eine Motivation zum Umsteigen.

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

[ - Antworten - Zitieren - Direktlink - ]

19.04.2004, 16:54 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Holger:
Also bei mit steht in den protos:
code:
#if defined(__OPTIMIZE__) && !defined(__NOINLINES__)
#include <inline/dos.h>
#endif

Mag jeder selbst raten, welche compiler-optionen dafür gesetzt sein müssen.
So sahen GCC Proto/ Dateien ganz früher aus. Mittlerweile wird das inline immer eingebunden (hängt aber u.U. auch davon ab wer die protos Erzeugt)
Zitat:
Ich habe das Beispiel ohne weitere Optionen übersetzt und zumind. mit Version 2.7 keine Probleme gehabt.
Die Warnungen kommen nur wenn man die Inlines auch verwendest, was Du aber nicht getan hast... Dafür hättest Du optimieren müssen.
Zitat:
Allerdings habe ich den starken Verdacht, daß auch die inlines anders aussehen und bei diesem Beispiel auch keine Warnungen produzieren würden. Habe jetzt auch keine Lust, für dieses Beispiel jetzt noch andere gcc-Versionen durchzuprobieren.
[...]
Sollten neuere Compiler/Umgebungen jetzt Fehler oder unnötige Warnungen verursachen, ist das nicht gerade eine Motivation zum Umsteigen.

Das hat nix mit einer speziellen GCC Version zu tun, sondern ausschliesslich mit der Art des Inlinens von VARARGS Funktionen.

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Alle Laufwerke finden... [ - Suche - Neue Beiträge - Registrieren - Login - ]


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