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

Pages vues depuis 25/07/2007 : 33 743 008

  • Nb. de membres 193
  • Nb. d'articles 1 329
  • 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

3 Modérateur(s)
K-LElwoodcorto
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
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
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]
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
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
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
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
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
efher efhericon_post
La solution la plus simple me paraît être la suivante (testé sous OS4):

int DATA[] = { 1,2,3,4 };

Pour avoir la taille du tableau:

printf("%ld\n", sizeof(DATA));

Ce programme donne un résultat égal à 16.

Pour avoir le nombre de données dans le tableau:

printf("%ld\n", sizeof(DATA)/sizeof(int))

Cette ligne donne un résultat égal à 4.
SAM440EP, 512Mo de mémoire, disques durs de 500Go et 1To, OS4.1FE,
carte graphique Radeon 9250.
thellier thelliericon_post
taille en octets
s=sizeof(VAR);

taille en nombre elements
nb=sizeof(VAR)/sizeof(int);

taille d'un ensemble de variables heteroclites : les englober dans une struct et demander le sizeof de la struct

struct mesvars{
int VAR[]={1,2,3,4,5,6};
int x,y,z;
float Pi;
} vars;

size=sizeof(struct mesvars);
fp=Open("monprog.sav",MODE_NEWFILE);
if(fp)
{
Write(fp,&vars,size);
Close(fp);
}

@elwood: Développeur ou non toutes les réponses ont un sens et sont paradoxalement aussi intéressante les unes que les autres car les points de vues n'est pas le même.

Tout à fait : je suis étonné de la diversité des réponses

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