Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 25 149 958

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Help demandée sur routine et programmation C

Help demandée sur routine et programmation C#2508

7Contributeur(s)
SharynnElwoodYesCopthellierefheralex
3 Modérateur(s)
K-LElwoodcorto
alex alexicon_post
Il ne sera pas possible de faire ça dans une fonction en effet la seule façon que tu auras pour passer ta variable ce sera sous forme de pointeur. Or tu ne pourras pas savoir la taille de ta variable initiale à partir de ce pointeur la seule chose que te reverra sizeof c'est la taille en octet d'un pointeur sur ton système (sous AOS4 c'est 32 bits). Par définition un pointeur peut pointer vers une zone mémoire quelconque mais pas possible de savoir juste en regardant le pointeur.

La solution du sizeof ne marche que tant que tu as le tableau original dans le scope. Désolé pas possible de faire ça dans une fonction.
--
AmigaOne A1222
AmigaOne X1000 - RadeonHD - 2 Gio RAM
AmigaOne XE G4@933 - Radeon 9200 SE - 512 Mio RAM
Elwood Elwoodicon_post
C'est pour ça qu'en AmigaE, une structure de donnée est constituée de : un espace pour stocker les données + un octet donnant la taille de la structure. Du coup il suffit de faire un Sizeof d'une structure pour avoir sa taille.
Il était malin ce Wouter :-)
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
alex alexicon_post
Euh s'il n'y a qu'un octet en E on doit pas pouvoir avoir de grosses structures de données ???
--
AmigaOne A1222
AmigaOne X1000 - RadeonHD - 2 Gio RAM
AmigaOne XE G4@933 - Radeon 9200 SE - 512 Mio RAM
Elwood Elwoodicon_post
Oups, c'est sûr. J'aurai dû dire "une zone réservée" pour éviter toute erreur :-) 
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !

Message édité par : Elwood / 03-03-2018 23:42
thellier thelliericon_post
>Si vous avez aussi un moyen d'utiliser un joystick sans passer par la "lowlevel.library", je suis preneur..

/*=================================================================*/
#ifdef DODEBUG
/*=================================================================*/
static void PrintJoyButtons(ULONG joy)
{
    if (joy AND JPF_BUTTON_PLAY)      DEBUGPRINTF("[PLAY/MMB]");
    if (joy AND JPF_BUTTON_REVERSE)   DEBUGPRINTF("[REVERSE]");
    if (joy AND JPF_BUTTON_FORWARD)   DEBUGPRINTF("[FORWARD]");
    if (joy AND JPF_BUTTON_GREEN)     DEBUGPRINTF("[SHUFFLE]");
    if (joy AND JPF_BUTTON_RED)       DEBUGPRINTF("[SELECT/LMB/FIRE]");
    if (joy AND JPF_BUTTON_BLUE)      DEBUGPRINTF("[STOP/RMB]");
}
/*=================================================================*/
static void PrintMouseDirection(ULONG joy)
{
    DEBUGPRINTF("[%ld,%ld]", (joy AND JP_MHORZ_MASK), (joy AND JP_MVERT_MASK) >> 8);
}
/*=================================================================*/
static void PrintJoyDirection(ULONG joy)
{
    if (joy AND JPF_JOY_UP)       DEBUGPRINTF("[UP]");
    if (joy AND JPF_JOY_DOWN)     DEBUGPRINTF("[DOWN]");
    if (joy AND JPF_JOY_LEFT)     DEBUGPRINTF("[LEFT]");
    if (joy AND JPF_JOY_RIGHT)    DEBUGPRINTF("[RIGHT]");
}
/*=================================================================*/
static void PrintJoyport(ULONG unit,ULONG joy)
{
int i;
 
    DEBUGPRINTF("UNIT%ld: ",unit);
    for(i = 31; i >= 0; i--)
    {
        DEBUGPRINTF("%d", (joy AND (1 << i)) ? 1 : 0);
    }
 
    DEBUGPRINTF(" - ");
 
    if ((joy AND JP_TYPE_MASK) == JP_TYPE_NOTAVAIL) DEBUGPRINTF("NOT AVAILABLE");
    if ((joy AND JP_TYPE_MASK) == JP_TYPE_UNKNOWN)  DEBUGPRINTF("UNKNOWN");
 
    if ((joy AND JP_TYPE_MASK) == JP_TYPE_JOYSTK)
    {
        DEBUGPRINTF("JOYSTICK - ");
        PrintJoyDirection(joy);
        PrintJoyButtons(joy);
    }
 
    if ((joy AND JP_TYPE_MASK) == JP_TYPE_GAMECTLR)
    {
        DEBUGPRINTF("GAME CONTROLLER - ");
        PrintJoyDirection(joy);
        PrintJoyButtons(joy);
    }
 
    if ((joy AND JP_TYPE_MASK) == JP_TYPE_MOUSE)
    {
        DEBUGPRINTF("MOUSE - ");
        PrintMouseDirection(joy);
        PrintJoyButtons(joy);
    }

    DEBUGPRINTF("\n");
}
/*=================================================================*/
#endif
/*=================================================================*/
void OSJoystick(struct GM_Game *G)
{
ULONG joy,n;
BOOL GotJoystick;

    GotJoystick=FALSE;
    NLOOP(4)
    {
    joy = ReadJoyPort(n);
    if(joy)
    if(!((joy AND JP_TYPE_MASK) == JP_TYPE_MOUSE) )
    if(!((joy AND JP_TYPE_MASK) == JP_TYPE_NOTAVAIL)  )
        {GotJoystick=TRUE;break;}
    }

    if(!GotJoystick) return;
    
    G->joystick.right    =((joy AND JPF_JOY_RIGHT    ) != 0);
    G->joystick.left    =((joy AND JPF_JOY_LEFT        ) != 0);
    G->joystick.down    =((joy AND JPF_JOY_DOWN        ) != 0);
    G->joystick.up    =((joy AND JPF_JOY_UP        ) != 0);    
    G->joystick.b0    =((joy AND JPF_BUTTON_RED    ) != 0);
    G->joystick.b1    =((joy AND JPF_BUTTON_PLAY    ) != 0);

    
#ifdef DODEBUG
    if(debug) PrintJoyport(n,joy);
#endif
}
/*=================================================================*/
Sam440 - Sam460 - X5000 - PowerBookG4 - WinUAE - MiniMig
icon_post
@Sharynn

Un autre dev developpe un programme pour faire tourner les programmes Amos sur AmigaOS4.x

http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=42450&forum=27#809353
[addsig]
Sharynn Sharynnicon_post
Merci Alain.

J'aime bien cette routine..

La commande "ReadJoyPort(n)" n'est-elle pas issue de la lowlevel.library ?

Mon but est de pouvoir si possible m'en passer.

@kamelito:
Oui c'est sympa.. c'est un projet en parallèle qui sera fini peut-être avant le mien :)

C'est intéressant. Personnellement j'ai déjà commencer la "librairie" pour l'utilisation en C avec un simulacre de commande qui tentent à être très proches de celles de l'AMOS dans leur libellée.

Eux parlent directement d'un interpréteur pour les programme AMOS. J'ai commencé à coté cela, mais c'est long car il faut tout "dé-tokenisé" et remettre en forme. C'est ce que j'ai fait pour avoir un fichier TEXT standard et même une version vers ma librairie pour lequel une simple re-compilation sous C suffira.
Mais je suis loin du résultat final car la librairie AmOS4 me pose problème sur bien des commandes.

Je vais finir par devoir utiliser SDL ou autre... :)

Projet AmOS4 - Retour vers l'Amos sous OS4...

SAM440EP - A1200 3.1 de base
thellier thelliericon_post

>La commande "ReadJoyPort(n)" n'est-elle pas issue de la lowlevel.library ?

Si mais elle marche aussi sur OS3 (3.1? 3.9?) dans mon WinUAE OS3 et probablement aussi sur Aros/Morphos

Alain



Sam440 - Sam460 - X5000 - PowerBookG4 - WinUAE - MiniMig
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme