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

amiga-news.de Forum > Programmierung > OS4 Progamm mit vbcc [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 2 3 -4- [ - Beitrag schreiben - ]

20.12.2007, 18:26 Uhr

MaikG
Posts: 5172
Nutzer
>Um zu verhindern daß der autoopen-Code hinzugelinkt wird muß

>struct CyberGfxIFace *ICyberGfx;

>als globale Variable deklariert werden.


Danke, jetzt geht es.


>Beim GetInterface()-Aufruf muß "main" in Anführungszeichen stehen.

Das hat man davon wenn man es aus migration pdf kopiert...


>Speaking of preprocessor symbols, the compiler defines a preprocessor symbol when targeting AmigaOS 4.0:
>_amigaos4__. You can use this symbol for optional compilation of
>code.

Gut, danke.

>Das gilt natürlich nur gesetzt den Fall, die Compiler-Installation
>ist hasenrein und nicht durch "geht nich, also löschen wir irgendwas,

Das war die 1. umgebung, diese ist neu.



>Schau mal in Dein SDK, ob Du diesen Teil in der Datei
>"proto/cybergraphics.h" genau so wiederfindest.

Sieht genauso aus.



>Wenn du irgendeinen Teil davon nicht verstehen kannst darfst
>du gerne Nachfragen, aber hör bitte damit auf immer zu behaupten
>"Ich habs gelesen, aber das steht da nicht drin.".


Ja das verstehen ist so eine sache als C-Anfänger und OS4-Anfänger...


>Du versucht gerade einen Quelltext der für OS3 geschrieben wurde
>zu einem OS4-Programm zu compilieren. Also machst du gerade ein
>OS4 Programm, das sich selbstverständlich auch an die OS4 Regeln
>zu halten hat. Klar soweit?

Ja, aber src.c muss ohne änderungen weiterhin für OS3+WOS Compilierbar
bleiben.


>Kriegst du es hin ohne änderungen an dem Programm oder den
>Systemheadern folgendes Beispiel fehlerfrei zu compilieren
>und laufen zu lassen (linken gegen libauto.a nicht vergessen)?

Compilieren ja, aber bin grade unter OS3.9 unterwegs.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 18:49 Uhr

ZeroG
Posts: 1486
Nutzer
@MaikG:
Zitat:
Das hat man davon wenn man es aus migration pdf kopiert...
Du hast dich verschrieben oder eine alte SDK-Version, bei mir steht korrekt "main".

Zitat:
Ja das verstehen ist so eine sache als C-Anfänger und OS4-Anfänger...
Meine empfehlung ist das du dir ein gutes C-Buch für Einsteiger besorgst und das erstmal sehr gründlich durcharbeitest. Wenn das dann gut klappt gehts an die AmigaOS API.

Es ist zwar möglich sofort zu rennen, im allgemeinen sollte man aber schon eine Zeit gelaufen sein bevor man es mit rennen versucht.

Zitat:
Ja, aber src.c muss ohne änderungen weiterhin für OS3+WOS Compilierbar
bleiben.

Das ist ja das schöne an __amigaos4__ damit kannst du soviel ändern wie du willst, wenn du für OS3 oder sonstwas compilierst sind die Änderungen nicht mehr für den Compiler sichtbar und spielen daher keine Rolle.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 19:51 Uhr

gni
Posts: 1106
Nutzer
Zitat:
MaikG:
assign vincludeos4: vbcc:targets/ppc-amigaos/include
assign vincludeos4: vbcc:Includes
assign vlibos4: vbcc:targets/ppc-amigaos/lib

Da fehlt wieder mal ein ADD
Zitat:
In vbcc:Includes/ hab ich das OS4 zeugs kopiert.


[ - Antworten - Zitieren - Direktlink - ]

21.12.2007, 00:04 Uhr

MaikG
Posts: 5172
Nutzer
>Du hast dich verschrieben oder eine alte SDK-Version, bei mir steht
>korrekt "main".

Ich hab es mittels Markieren, Kopieren vom OS4 PDF Anzeiger
kopiert und Eingefügt.
Das SDK habe ich erst kürzlich geladen.


>Meine empfehlung ist das du dir ein gutes C-Buch für Einsteiger
>besorgst und das erstmal sehr gründlich durcharbeitest.
>Wenn das dann gut klappt gehts an die AmigaOS API.

Ich hab den C-Kurs auf Papier...
Ich benutze die AOS(3) API seit vielen Jahren, nur nicht mit
C und AOS4.


>Das ist ja das schöne an __amigaos4__ damit kannst du soviel
>ändern wie du willst, wenn du für OS3 oder sonstwas compilierst
>sind die Änderungen nicht mehr für den Compiler sichtbar und spielen
>daher keine Rolle.

Ja, sieht jetzt ganz gut aus.



>Da fehlt wieder mal ein ADD

Hast du ein paar Seiten nicht gelesen?
War die alte Installation und da hatte ich das auch schon korregiert.

[ Dieser Beitrag wurde von MaikG am 21.12.2007 um 00:04 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

21.12.2007, 17:49 Uhr

MaikG
Posts: 5172
Nutzer
>Hätte ich jetzt fast vergessen: __USE_INLINE__ reicht normalerweise
>völlig aus, um ehemalige 68K-Programme durch den VBCC oder GCC unter
>OS4 zu bekommen.

Stimmt, hatte die ganzen sachen von der 1. Compiler Installation noch drin,
wird jetzt tatsächlich nicht mehr benötigt.

[ - Antworten - Zitieren - Direktlink - ]

21.12.2007, 19:55 Uhr

whose
Posts: 2156
Nutzer
@MaikG:

heißt? Daß es nun mit __USE_INLINE__ tut, wie es das bei nahezu allen anderen auch tut? Wenn ja, wären wir ein gewaltiges Stück weiter und Deine vbcc-Installation wäre damit auch "koscher" und lustigen Porgrammierversuchen unter OS4 stünde nur noch wenig im Wege :D

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

21.12.2007, 22:23 Uhr

MaikG
Posts: 5172
Nutzer
>heißt? Daß es nun mit __USE_INLINE__ tut, wie es das bei nahezu
>allen anderen auch tut?


Ja, bei der ersten installation hab ich nicht alle
Komponenten des SDK's kopiert.
Da brauchte ich die anderen #define's noch.
Ich hab es erst kürzlich rausgefunden das ich die mit
der 2.Installation jetzt gar nicht mehr brauche.

Natürlich muss ich trotzdem noch mit ein paar OS4
unterscheidungen arbeiten, z.B. ebend bei den Interface
sachen.


>Wenn ja, wären wir ein gewaltiges Stück weiter und Deine
>vbcc-Installation wäre damit auch "koscher" und lustigen
>Porgrammierversuchen unter OS4 stünde nur noch wenig im Wege :D

Sag ich ja das die jetzt schon okay sein muss.

[ - Antworten - Zitieren - Direktlink - ]

22.12.2007, 05:19 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von MaikG:
Natürlich muss ich trotzdem noch mit ein paar OS4
unterscheidungen arbeiten, z.B. ebend bei den Interface
sachen.


Öhm... wenn __USE_INLINE__ seinen Dienst korrekt erledigt, brauchst Du die Interfaces einstweilen nicht. Das macht im Grunde nichts anderes, als auf die "altbewährte" Methode des Library-Einsprungs (zumindest sieht es der Compiler so) "zurückzuschalten".

Wenn Du immer noch explizit Interfaces zu einer der "normalen" Libraries anlegen mußt, ist immer noch etwas nicht i.O. mit Deiner Installation.


--
---

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

[ - Antworten - Zitieren - Direktlink - ]

22.12.2007, 08:36 Uhr

thomas
Posts: 7676
Nutzer
@whose:

Wenn du eine Library selbst öffnest, dann mußt du auch das Interface dazu besorgen. Da kommst du nicht drum herum, es sei denn, du generierst Auto-Open-Code für jede zusätzliche Library. Das wiederum beraubt dich der Möglichkeiten, den Benutzer über eine fehlende Library zu informieren, eine bestimmte Version vorauszusetzen und bestimmte Libraries optional einzusetzen.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

22.12.2007, 10:32 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von thomas:
@whose:

Wenn du eine Library selbst öffnest, dann mußt du auch das Interface dazu besorgen. Da kommst du nicht drum herum, es sei denn, du generierst Auto-Open-Code für jede zusätzliche Library. Das wiederum beraubt dich der Möglichkeiten, den Benutzer über eine fehlende Library zu informieren, eine bestimmte Version vorauszusetzen und bestimmte Libraries optional einzusetzen.


Hm, bei "speziellen" Libraries ist das wohl so, deswegen schrieb ich oben auch von "normalen" Libraries. Die cybergraphics.library scheint inzwischen dazuzugehören. Allerdings weiß ich natürlich nicht, welche Libraries MaikG sonst noch verwendet, das stimmt.

Ich weiß jetzt nicht, wie die OS4-libauto intern funktioniert, bei der libauto für die älteren Versionen des 68k-GCCs konnte man eine gewünschte Version im eigenen Quellcode vorgeben. Müßte ich nochmal nachschauen, wie die globalen Variablen dazu hießen, mit denen man das steuern konnte. Irgendwas wie z.B. "int __auto_intuition_vers" oder so ähnlich... ich könnte mir gut vorstellen, daß sich diese Vorgehensweise bei den beiden noch erhältlichen Compilern durchgesetzt hat.

Bei optionalen Libraries und beim Öffnen "von Hand" allerdings hast Du Recht, da kommt er um bedingtes Compilieren nicht herum (und damit auch nicht um die Interfaces).

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

22.12.2007, 13:16 Uhr

ZeroG
Posts: 1486
Nutzer
@whose:
Die cybergraphics.library befindet sich nicht in den beiden libauto.a Varianten die beim SDK dabei sind. VBCC scheint seine eigene Version mitzubringen, da ist dann wohl auch CGX bei.

Diese "int __auto_intuition_vers" Geschichte wird im moment wohl nicht unterstützt, obwohl es Sinn machen würde.
Hier mal der autoinit-output von IDLTool am beispiel von CGX:

code:
/*
** $Id$
** Generated by IDLTool 51.8
** Do not edit
**
** AutoInit stub for cybergraphics
**
** (C) Copyright 2003-2005 Amiga, Inc.
**     All Rights Reserved
*/

#include <exec/lists.h>
#include <graphics/rastport.h>
#include <graphics/view.h>
#include <utility/tagitem.h>
#include <utility/hooks.h>

#include <interfaces/cybergraphics.h>
#include <proto/exec.h>
#include <assert.h>

__attribute__((weak)) struct CyberGfxIFace * ICyberGfx = NULL;
/****************************************************************************/

extern struct Library * CyberGfxBase;

void __init_cybergraphics_main(void) __attribute__((constructor));
void __exit_cybergraphics_main(void) __attribute__((destructor));

/****************************************************************************/

void __init_cybergraphics_main(void)
{
    struct Library * LibBase;
    if (CyberGfxBase == NULL) /* Library base is NULL, we need to open it */
    {
        LibBase = IExec->OpenLibrary("cybergraphics.library", 0L);
        assert(LibBase != NULL);
    }
    else
    {
        LibBase = CyberGfxBase;
    }

    ICyberGfx = (struct CyberGfxIFace *)IExec->GetInterface((struct Library *)LibBase, "main", 1, NULL);
    assert(ICyberGfx != NULL);
}

/****************************************************************************/

void __exit_cybergraphics_main(void)
{
    if (ICyberGfx) IExec->DropInterface ((struct Interface *)ICyberGfx);
}

/****************************************************************************/


code:
/*
** $Id$
** Generated by IDLTool 51.8
** Do not edit
**
** AutoInit stub for cybergraphics
**
** (C) Copyright 2003-2005 Amiga, Inc.
**     All Rights Reserved
*/

#include <exec/lists.h>
#include <graphics/rastport.h>
#include <graphics/view.h>
#include <utility/tagitem.h>
#include <utility/hooks.h>

#include <interfaces/cybergraphics.h>
#include <proto/exec.h>
#include <assert.h>

/****************************************************************************/

__attribute__((weak)) struct Library * CyberGfxBase = NULL;

void __init_cybergraphics_base(void) __attribute__((constructor));
void __exit_cybergraphics_base(void) __attribute__((destructor));

/****************************************************************************/

void __init_cybergraphics_base(void)
{
    if (CyberGfxBase != NULL) return; /* Someone was quicker */
    CyberGfxBase = IExec->OpenLibrary("cybergraphics.library", 0L);
    assert(CyberGfxBase != NULL);
}

/****************************************************************************/

void __exit_cybergraphics_base(void)
{
    if (CyberGfxBase) IExec->CloseLibrary((struct Library *)CyberGfxBase);
}

/****************************************************************************/


[ - Antworten - Zitieren - Direktlink - ]


1 2 3 -4- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > OS4 Progamm mit vbcc [ - Suche - Neue Beiträge - Registrieren - Login - ]


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