Orientierungslos

Ihr habt ein Problem mit C++ oder anderen Sprachen ? Dann seit Ihr in diesem Forum genau richtig! Hier können alle Fragen gestellt werden, die mit Programmierung (MorphOS, Linux, BeOS, BSD,...) zu tun haben.

Moderatoren: analogkid, roschmyr

eliot
Quasselstrippe
Quasselstrippe
Beiträge: 640
Registriert: 17 Mär 2004, 17:44
Wohnort: Hötzum, bei Braunschweig

Orientierungslos

Beitragvon eliot » 21 Nov 2008, 23:26

Hallo,

ich habe heute etwas Zeit gefunden und mich ein wenig mit
der Amiga API gesch¿ftigt, leider mit m¿¿igem Erfolg.
Bisher habe ich die Autodocs aus dem Mos SDK und der
Amiga OS SDK CD und die RKMs zum Autodoc Reader hinzugef¿gt.

Mein erstes Ziel f¿r huete sollte recht einfach ausfallen:
Ein kleines Shell Toll welches mir den benutzten und
freien Speicher auf der Shell ausgibt.
AvailMem habe ich schnell gefunden, dieser gibt mir allerdings
nur den gr¿¿ten freien Block zur¿ck. Ein Blick in memory.h
zeigt mir, dass es eine Struktur MemList gibt, nur wie kann
ich diese anfordern?

Weiterhin meldet sich der Log Server des Autodocs Readers sehr
oft (gefogt von einem Totalabsturz).
Insgesamt f¿llt mir die Orientierung sehr schwer!
Wo fange ich an? Der AutodocReader ist zu unzuverl¿ssig,
Thematisch sortiert ist leider auch nichs.

Insgesamt alles sehr z¿h und unbersichtlich :(

regards
eliot

EDIT: Selbst einfach Dinge, wie die Definition des Version Strings
eines Binarys finde ich nicht mir dem Autodoc Reader (gesucht habe
ich nach "version", "version string", "version information").
Sleep ergab auch kein Ergebnis (was aber zum Gl¿ck exakt gleich funktioniert wie unter Linux).
Entweder fehlen mir viele wichtige Dateien der Doku oder sie
ist so schlecht.
Zuletzt geändert von eliot am 21 Nov 2008, 23:34, insgesamt 2-mal geändert.

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 21 Nov 2008, 23:32

Ist doch ganz einfach wenn man die API richtig liest:

ULONG AvailMem( ULONG type );

Als Typ kannst angeben:

MEMF_ANY
Ganzer Speicher
MEMF_CHIP
Chip speicher
MEMF_FAST
FastRAM
MEMF_LARGEST
GrößterBlock

Die Optionen können mit OR verbunden werden, z.B.
Mem = AvailMem(MEMF_FAST|MEMF_LARGEST);

in Mem steht die Anzahl Bytes und keine Struktur
http://www.disk-doktor.de

eliot
Quasselstrippe
Quasselstrippe
Beiträge: 640
Registriert: 17 Mär 2004, 17:44
Wohnort: Hötzum, bei Braunschweig

Beitragvon eliot » 21 Nov 2008, 23:37

Thore hat geschrieben:Ist doch ganz einfach wenn man die API richtig liest:

ULONG AvailMem( ULONG type );

Als Typ kannst angeben:

MEMF_ANY
Ganzer Speicher
MEMF_CHIP
Chip speicher
MEMF_FAST
FastRAM
MEMF_LARGEST
GrößterBlock

Die Optionen können mit OR verbunden werden, z.B.
Mem = AvailMem(MEMF_FAST|MEMF_LARGEST);

in Mem steht die Anzahl Bytes und keine Struktur


Ups, ich habe die Frage undeutlich ausformuliert:

Ja, den noch freien Speicher bekomme ich dadurch,
aber nicht die Gesamtmenge an Speicher (z.B. Fast),
oder die Menge des beirets belegten Bytes
(2 der 3 Werte würden mir reichen, der rest läßt sich berechnen).

regards
eliot

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 21 Nov 2008, 23:58

ups sorry, hatte MEMF_TOTAL noch vergessen anzugeben, ich dachte ich hätts dazugeschrieben. Die belegten Bytes kannst dann einfach ausrechnen.
b
http://www.disk-doktor.de

Benutzeravatar
Kronos
Moderator
Moderator
Beiträge: 718
Registriert: 07 Sep 2003, 01:10
Wohnort: Hagen

Re: Orientierungslos

Beitragvon Kronos » 21 Nov 2008, 23:58

eliot hat geschrieben:
EDIT: Selbst einfach Dinge, wie die Definition des Version Strings
eines Binarys finde ich nicht mir dem Autodoc Reader (gesucht habe
ich nach "version", "version string", "version information").
.


Den Versionsonsstring einfach so in den C-Source einfügen:

char *vers = "$VER: eliot_sein_Murks_0.0001 Copyrecht © 1867 der Eliot das\0";

"version" sucht dann im Binary nach "$VER:" und gibt alles was von da an bis zum nächsten Null-Byte (\0) aus.
!! Bin Wichtig !!

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 22 Nov 2008, 00:02

Wenn du Probleme mit den Dokumenten hast, schau Dir lieber die Beispielsourcen von der Developer CD an, die helfen oft weiter.
BitmapScale hab ich nur aufgrund von Beispielen und selbst ausprobieren rausgefunden ;)
http://www.disk-doktor.de

eliot
Quasselstrippe
Quasselstrippe
Beiträge: 640
Registriert: 17 Mär 2004, 17:44
Wohnort: Hötzum, bei Braunschweig

Beitragvon eliot » 22 Nov 2008, 00:15

Code: Alles auswählen

#include<stdio.h>
#include<unistd.h>
#include<exec/memory.h>

main(){
unsigned long l =3;
unsigned long ll=3;

printf("Hello World!\n");
sleep(1);
l=AvailMem();
ll=TypeOfMem(MEMF_TOTAL);

printf("Wert=%lu mb\n", l/(1024*1024));
printf("Wert=%lu mb\n", ll/(1024*1024));

}   



Das Ergebnis:

Hello World!
Wert=421 mb
Wert=0 mb

Header vergessen?
Vielen Dank f¿r eure schnellen Hilfen.
Aber es kann ja nicht im Sinne des Erfinders sein,
dass man sich alles aus einem Forum oder den Beispiel Sourcen
beibringen muss.
Ist die Doku so lueckenhaft, oder habe ich etwas vergessen
in den AutodocReader einzufuegen? Welche Verzeichnisse sind
die richtigen um eine komplette Doku zu haben?

regards
eliot

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 22 Nov 2008, 00:26

From the scratch ohne getestet zu haben, also nur als Richtlinie zu verwenden, da vermutlich so nicht 100% lauffähig

#include<stdio.h>
#include<exec/memory.h>

main()
{
int BelegtChip;
int BelegtFast;
int BelegtAny;

BelegtChip = AvailMemMEMF_TOTAL|MEMF_CHIP)-AvailMem(MEMF_CHIP);
BelegtFast = AvailMem(MEMF_TOTAL|MEMF_FAST)-AvailMem(MEMF_FAST);
BelegtAny = AvailMem(MEMF_TOTAL|MEMF_ANY)-AvailMem(MEMF_ANY);

printf(" Any CHIP Fast\n");
printf("Frei : %8x %8x %8x\n", AvailMem(MEMF_ANY), AvailMem(MEMF_CHIP), AvailMem(MEMF_FAST));

printf("Belegt : %8x %8x %8x\n", BelegtAny, BelegtChip, BelegtFast);

printf("Gesamt : %8x %8x %8x\n", AvailMem(MEMF_TOTAL|MEMF_ANY), AvailMem(MEMF_TOTAL|MEMF_CHIP), AvailMem(MEMF_TOTAL|MEMF_FAST));

}
http://www.disk-doktor.de

Benutzeravatar
Blackbird
Eroberer
Eroberer
Beiträge: 92
Registriert: 08 Jan 2006, 21:36
Wohnort: Coburg
Kontaktdaten:

Re: Orientierungslos

Beitragvon Blackbird » 22 Nov 2008, 18:18

Kronos hat geschrieben:
eliot hat geschrieben:
EDIT: Selbst einfach Dinge, wie die Definition des Version Strings
eines Binarys finde ich nicht mir dem Autodoc Reader (gesucht habe
ich nach "version", "version string", "version information").
.


Den Versionsonsstring einfach so in den C-Source einf¿gen:

char *vers = "$VER: eliot_sein_Murks_0.0001 Copyrecht ¿ 1867 der Eliot das\0";

"version" sucht dann im Binary nach "$VER:" und gibt alles was von da an bis zum n¿chsten Null-Byte (\0) aus.



ohne jetzt n¿her darauf einzugehen, ist das faktisch komplett falsch was du da schreibst....

In einem Versionsstring sind nur Numerische Ausgaben erlaubt...
regards
Blackbird

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 22 Nov 2008, 18:25

Nene das mit dem $VER ist schon in Ordnung so =) Also Filename etc pp darf da auch stehen.
"$VER: Datei 1.0 (01.01.2000) Copyright by me"
ist gültig.
http://www.disk-doktor.de

Benutzeravatar
Blackbird
Eroberer
Eroberer
Beiträge: 92
Registriert: 08 Jan 2006, 21:36
Wohnort: Coburg
Kontaktdaten:

Beitragvon Blackbird » 22 Nov 2008, 18:38

Thore hat geschrieben:Nene das mit dem $VER ist schon in Ordnung so =) Also Filename etc pp darf da auch stehen.
"$VER: Datei 1.0 (01.01.2000) Copyright by me"
ist gültig.


seit wann ?

und wo steht das ?

ist das bei MOS so oder generell ?

Auf A-News ist da gerade auch so ein Thread, schon komisch wie sich das manchmal so zeitgleich wiederholt...
regards
Blackbird

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 22 Nov 2008, 18:53

In AWeb hab ich das auch so, Christian hats auch so in seinen Programmen (siehe z.B. Elements) und auch in vielen anderen Programmen ist das so.
Eine Ausnahme bilden Libs, Devices, etc weil da die Version in einer Struktur festgehalten wird.
Ich empfehl Dir FileX als Hex-Editor. Da kannst man ein wenig in den Programmen nach dem $VER String suchen.
http://www.disk-doktor.de

Benutzeravatar
Blackbird
Eroberer
Eroberer
Beiträge: 92
Registriert: 08 Jan 2006, 21:36
Wohnort: Coburg
Kontaktdaten:

Beitragvon Blackbird » 22 Nov 2008, 19:10

Thore hat geschrieben:In AWeb hab ich das auch so, Christian hats auch so in seinen Programmen (siehe z.B. Elements) und auch in vielen anderen Programmen ist das so.
Eine Ausnahme bilden Libs, Devices, etc weil da die Version in einer Struktur festgehalten wird.
Ich empfehl Dir FileX als Hex-Editor. Da kannst man ein wenig in den Programmen nach dem $VER String suchen.


FileX verwende ich schon sehr lange....

Bis vor kurzem hatte ich die Versionierung auch in PerfectPaint so

Da stand dann ebenso "$Ver: PerfectPaint V2.94 Datum blabla"

Also bei Aplikationsprogrammen ist es dann wurscht ?

Aber da du AWeb ansprichst, ich habe gerade bei mir geschaut:
Der WbBefehl Version gibt aus: 3.5.09

wenn ich per FielX schau, dann steht da aber:

$Ver: AWeb APL Lite 3.5.09 (May 28 2007) OS4.0 PPC 3.5.09

wie erklärst du dir das ? :D
regards
Blackbird

Benutzeravatar
DrB
FireWire-Beschwörer
FireWire-Beschwörer
Beiträge: 1349
Registriert: 19 Sep 2004, 18:01
Wohnort: Hamburg-Harburg

Beitragvon DrB » 22 Nov 2008, 19:13

Thore hat geschrieben:Nene das mit dem $VER ist schon in Ordnung so =) Also Filename etc pp darf da auch stehen.
"$VER: Datei 1.0 (01.01.2000) Copyright by me"
ist gültig.


Zumindestens laut dem 3.1 NDK ist es das nicht.

Auch finde ich es gewagt, den VERSTAG nur als
char zu definierten, ohne referenz wird dieser
vom compiler schnell wegoptimiert.

Code: Alles auswählen

Version Command
===============

There has been some confusion about what the format of version strings
are. The exact format is detailled in the Amiga User Interface Style Guide
on page 110.  The format is:

   $VER: <name> <version>.<revision> (dd.mm.yy)

The string starts with $VER: followed by a space, followed by <name>.
<name> is the name of the program.  <name> can NOT contain any spaces.
You can use underscores to achieve a similar effect.

After <name> comes a single space, followed by <version>.  <version> is
the major version number for the program.  There should be no leading
zeros.

After <version> comes a single space, followed by <revision>.  <revision>
is the minor version number for the program.  There should be no leading
zeros.

Following the revision number comes a space, and then the date.  The date
is specified in numeric form only, with no leading zeros on any of the
components.  First comes the day of the month, then the month, then the
two digits year.  In the future, a four digit year format will also be
supported, but not yet.

[...]
Zuletzt geändert von DrB am 22 Nov 2008, 19:37, insgesamt 1-mal geändert.

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 22 Nov 2008, 19:20

Bei mir zeigt er bei AWeb immer sowas an
AWeb APL Lite 3.5

und bei FULL
AWeb APL Lite 3.5
.09 X-Version (Feb 9 2008) mc68020

(X-Version ist meine Programmierversion, aber die Ursprungs-Version hat den gleichen Effekt)

Sicher gibt es einen Programmiertechnischen Kniff um die Versionsnummer so ausgeben zu lassen. Ich hab im Source zu 3.5.09 geschaut, aber da kein Hinweis dieser Art gefunden.

Natürlich gehen wir von einem
static STRPTR versionstring = "$VER ....";
aus, wir wollen ja den String nicht wegoptimieren lassen.
http://www.disk-doktor.de

eliot
Quasselstrippe
Quasselstrippe
Beiträge: 640
Registriert: 17 Mär 2004, 17:44
Wohnort: Hötzum, bei Braunschweig

Beitragvon eliot » 22 Nov 2008, 20:25

@DrB

Hmm, es scheint also doch was in der Doku dazu zu geben.
Habe eben nochmal AutodocReader angeschmissen und nach
Version command gesucht. Kein Treffer.
Entweder habe ich nicht alles in der Basis oder die Suchfunktion
ist murks (ich gehe eher vom ersteren aus).

Was wird alles von der Amiga OS SDK CD benötigt um eine
möglichst vollständige Doku zu haben?

@all
vielen Dank für Eure Hilfe und Geduld!

regards
eliot

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 22 Nov 2008, 20:55

Die RKM, Includes&Autodocs, Devices und Hardware. Im Grunde bietet die DeveloperCD alles nötige.
Zur Erweiterung utilitybase.com oder hier im Forum hats auch genug Programmierer.
Dann such nach Quellcodes im Aminet, sehr hilfreich.
In den Autodocs stehen auch nur die Befehle, Lib-API-Funktionen etc, und nicht die Shell-Befehle.
Hol Dir auch zu den Komponenten die Du zum Programmieren brauchst die nötigen Autodocs (MUI-Klassen, Libs etc).
http://www.disk-doktor.de

Benutzeravatar
DrB
FireWire-Beschwörer
FireWire-Beschwörer
Beiträge: 1349
Registriert: 19 Sep 2004, 18:01
Wohnort: Hamburg-Harburg

Beitragvon DrB » 22 Nov 2008, 23:23

eliot hat geschrieben:Hmm, es scheint also doch was in der Doku dazu zu geben.
Habe eben nochmal AutodocReader angeschmissen und nach
Version command gesucht. Kein Treffer.
Entweder habe ich nicht alles in der Basis oder die Suchfunktion
ist murks (ich gehe eher vom ersteren aus).


Wie Thore schon schrieb, die autodocs enthalten
keine grundsaetzlichen Entwickler Informationen,
sondern sind eine Hilfe um die Funktionen der
"Amiga API" moeglichst komfortabel abzubilden.

eliot hat geschrieben:Was wird alles von der Amiga OS SDK CD benötigt um eine
möglichst vollständige Doku zu haben?


Aus meiner Sicht die ganze CD, ohne die extra
contributions und die Dinge die in MorphOS SDK
erneuert wurden. Hier koennen sicher andere
User mehr zu sagen, da ich fuer AmigaOS nicht
wirklich viel programmiere und mein Ueberblick
was Aenderungen Erneuerungen angeht, begrenzt
ist. So weiss ich auch nicht, ob das, was im
3.1 NDK zu finden ist, der letzte Stand der
Dinge ist.

Benutzeravatar
judas
Tastaturkiller
Tastaturkiller
Beiträge: 311
Registriert: 31 Mai 2006, 18:49
Wohnort: Augsburg

Beitragvon judas » 23 Nov 2008, 12:30

Wo finde ich diese DeveloperCD ?

Ich orientiere mich momentan an uralten Büchern aus der Amigazeit oder Beispielsources, die mir über den Weg laufen.
.. beides sicher suboptimal .. oder ?

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 23 Nov 2008, 12:53

Die DeveloperCD v2.1 müsste es noch bei Vesalia geben.
http://www.vesalia.de/d_developer2.htm

Die Bücher Amiga Assembler und Amiga Intern sind sehr gut wenn du ins Interna von Classic Amigas blicken willst und 68k Assembler lernen willst.
http://www.disk-doktor.de

Benutzeravatar
judas
Tastaturkiller
Tastaturkiller
Beiträge: 311
Registriert: 31 Mai 2006, 18:49
Wohnort: Augsburg

Beitragvon judas » 23 Nov 2008, 20:39

Ich hatte die Developer-CD schon im Warenkorb, da fiel mir ein, dass sie aus einem Bundle eines zugekauften A4000 bereits mein Eigen war ..

.. am Rande habe ich dabei gelernt, dass vesalia auch Dekupiersägen verkauft (!)

Andreas_Wolf
Forum Legende
Forum Legende
Beiträge: 1690
Registriert: 12 Sep 2003, 15:55

Beitragvon Andreas_Wolf » 24 Nov 2008, 21:11

Zur Diskussion um den Version-Befehl siehe auch hier.

eliot
Quasselstrippe
Quasselstrippe
Beiträge: 640
Registriert: 17 Mär 2004, 17:44
Wohnort: Hötzum, bei Braunschweig

Beitragvon eliot » 24 Nov 2008, 22:02

Hallo,

so scheints irchtig zu sein, danke!
Ich werde erstmal probieren die Dokus zu sortieren,
eine Struktur auszumachen.

Code: Alles auswählen

l=AvailMem(MEMF_FAST);
ll=AvailMem(MEMF_TOTAL|MEMF_FAST);

printf("Frei= %lu mb\n", l/(1024*1024));
printf("Gesamt= %lu mb\n", ll/(1024*1024));
printf("Belegt= %lu mb\n", (ll-l)/(1024*1024));


Ergebnis:

Frei= 431 mb
Gesamt= 479 mb
Belegt= 48 mb

479 mb? Der Restgeht für den drunter liegenden Kernel drauf?
Ganz schön viel.

regards
eliot

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 24 Nov 2008, 22:19

Und wenn Du die Debug Size in der Start-Option angegeben hast, die geht da auch noch drauf ;)
Aber das ist noch wenig. Schau mal was z.B. Linux oder Windoof an Speicher fressen, da wirds klar daß es nicht mehr ohne Auslagerungsspeicher geht.
http://www.disk-doktor.de

Benutzeravatar
Kronos
Moderator
Moderator
Beiträge: 718
Registriert: 07 Sep 2003, 01:10
Wohnort: Hagen

Beitragvon Kronos » 24 Nov 2008, 22:24

eliot hat geschrieben:Hallo,


479 mb? Der Restgeht f�r den drunter liegenden Kernel drauf?
Ganz sch�n viel.

regards
eliot


48MB belegt ? Naja, das sind dann der Kernel, JIT-Speicher, Backdrop etc.

Ist bei mir deutlich mehr :oops:
!! Bin Wichtig !!

eliot
Quasselstrippe
Quasselstrippe
Beiträge: 640
Registriert: 17 Mär 2004, 17:44
Wohnort: Hötzum, bei Braunschweig

Beitragvon eliot » 24 Nov 2008, 22:45

Was mich wundert ist folgendes:
Es sind insgesamt 479 verfügbar, oder lese ich da etwas falsch?
eigentlich sollten es 512 MB sein?
Debug size habe ich zur zeit auf 0 gestellt.

Wo sind die 33 MB hin?

BTW Beim Booten werden auch nur 481 MB angegeben?

regards
eliot
Zuletzt geändert von eliot am 24 Nov 2008, 22:47, insgesamt 1-mal geändert.

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Beitragvon Thore » 24 Nov 2008, 22:46

Vielleicht hat das Boot Image das angeknabbert? =)
http://www.disk-doktor.de


Zurück zu „Code-Küche“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast