Connexion
Vous n'avez pas encore de compte personnel ? Vous devriez en créer un. Une fois enregistré vous aurez certains avantages, comme pouvoir modifier l'aspect du site, ou poster des commentaires signés...
Support
Activité du Site

Pages vues depuis 06/01/2019 : 13 097 917

  • Nb. de membres 366
  • Nb. d'articles 2 843
  • Nb. de forums 24
  • Nb. de sujets 13
  • Nb. de critiques 0

Top 10  Statistiques

Index du forum »»  Développement »» [Résolu] - Compilation de ScreenModeReq.c

[Résolu] - Compilation de ScreenModeReq.c#125

2Contributeur(s)
pierrepdaddydav
2 Modérateur(s)
PapiosaurBeWorld
pierrep pierrepicon_post
Dans les exemples du SDK, dans le répertoire graphics il y a un exemple nommé ScreenModeReq.c
J'ai essayé de le compiler mais il y a un problème avec le hook utilisé.
le source est le suivant :

LONG __geta4 SMFilterfunc(__a0 struct Hook *hook,
__a1 ULONG DisplayID,
__a2 struct ScreeModeRequester *SMreq)
...
struct Hook SMFilterHook = {NULL,NULL,(void *)SMFilterFunc,NULL,NULL};

à la compilation GCC bloque sur __geta4, si je le supprime il bloque sur __a0
J'ai essayé de suprimmer __geta4 et de remplacer __a0, __a1 et __a2 par register.
ça compile mais il y a alors une erreur à l'exécution

Quelqu'un aurais une solution ?

Merci
daddydav daddydavicon_post
Voilà ce que j'utilise pour demander un écran pour DW :



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

static BOOL scrModeFilter( struct Hook *hook, struct ScreenModeRequester *smr, ULONG modeID )
{
  ASSERT( hook );
  ASSERT( smr );
  struct DimensionInfo di;

  if( GetDisplayInfoData( NULL, (UBYTE*)&di, sizeof(struct DimensionInfo), DTAG_DIMS, modeID ) >= (BYTE*)&di.Nominal.MaxY + 2 - (BYTE*)&di )
  {
     if( di.Nominal.MaxX+1 < ECR_W || di.Nominal.MaxX-1 > ECR_W || di.Nominal.MaxY+1 < ECR_H || di.Nominal.MaxY-1 > ECR_H  || di.MaxDepth < DEPTH )
     return FALSE;
  }
  return TRUE;
}

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

void demande_ecran(void)
{

  //**** declaration des variables

  struct ScreenModeRequester *req;
  struct Hook hook = { {NULL, NULL}, (HOOKFUNC)HookEntry, (HOOKFUNC)scrModeFilter, 0 };
  struct DisplayInfo di;

  //**** ouverture ecran
  req = (struct ScreenModeRequester *) AllocAslRequestTags( ASL_ScreenModeRequest,
         ASLSM_FilterFunc, (ULONG)&hook,
         ASLSM_TitleText,  (ULONG)"Choix écran",
         TAG_END );

  if( AslRequest( req, NULL ) )
  {
    modeID = req->sm_DisplayID;
  }
  FreeAslRequest( req );

  if( GetDisplayInfoData( NULL, (UBYTE*)&di, sizeof(struct DisplayInfo), DTAG_DISP, modeID ) >= (BYTE*)&di.PropertyFlags + 4 - (BYTE*)&di )
  {
    if( di.PropertyFlags & DIPF_IS_FOREIGN ) depth = 8;
  }

  if(modeID==INVALID_ID) quitp("Pas d'écran\n");

}

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



ECR_W = est la largeur écran demandé
ECR_H = est la hauteur écran demandé
DEPTH = est la profondeur écran demandé (8/16/32 bits)
pierrep pierrepicon_post
j'ai essayé d'utiliser ce bout de programme mais il manque des informations

A quoi correspondent nbsp et HookEntry ?
daddydav daddydavicon_post
Va voir cet article sur le site Gurumed :

Ouvrir un écran Intuition

Il y a l'explication du hookentry.

Pour le reste faut que je retrouve le pourquoi du comment. :-)

Message édité par : Papiosaur / 17-02-2009 09:53

pierrep pierrepicon_post
l'article sur Gurumed a résolu mon probleme

Merci