Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2919 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Traduction du C vers Ada

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Traduction du C vers Ada

n°2149060
Profil sup​primé
Posté le 11-07-2012 à 21:45:13  answer
 

Bonjour,
 
Je voudrais traduire ceci :
 

Code :
  1. #define Pm_Message(status, data1, data2) \
  2.         ((((data2) << 16) & 0xFF0000) | \
  3.          (((data1) << 8) & 0xFF00) | \
  4.          ((status) & 0xFF))
  5. #define Pm_MessageStatus(msg) ((msg) & 0xFF)
  6. #define Pm_MessageData1(msg) (((msg) >> 8) & 0xFF)
  7. #define Pm_MessageData2(msg) (((msg) >> 16) & 0xFF)


 
Avec Ada.
Deux chose : je ne connais pas la signification de ces macros et donc, je sais encore moins comment le traduire.
Peut-être qu'en répondant au premier problème, je résoudrait le second.
Je e suis pas de la partie C, c'est pourquoi, je traduit vers Ada.
Merci pour vos réponses.

mood
Publicité
Posté le 11-07-2012 à 21:45:13  profilanswer
 

n°2149067
breizhbugs
Posté le 11-07-2012 à 23:24:24  profilanswer
 

<< est le décalage de bit (>> dans le sens contraire) et & est le ET logique et | est le OU logique
et le \ sert a continuer la macro sur la ligne suivante


Message édité par breizhbugs le 11-07-2012 à 23:26:40

---------------
Seul Google le sait...
n°2149091
Profil sup​primé
Posté le 12-07-2012 à 09:58:34  answer
 

Merci breizhbugs.

n°2149263
Profil sup​primé
Posté le 13-07-2012 à 16:07:24  answer
 

Bonjour,
 
Voilà ce que donne la fonction Ada de la macro Pm_Message :

Code :
  1. --
  2.   function Pm_Message(Status, Data1, Data2 : Interfaces.C.Long) return Interfaces.C.Long is
  3.  
  4.      Message : Unsigned_32 := 0;
  5.      Low     : Unsigned_32 := Unsigned_32(Data2);
  6.      Middle  : Unsigned_32 := Unsigned_32(Data1);
  7.      High    : Unsigned_32 := Unsigned_32(status);
  8.   begin
  9.      Message := ((Shift_Left(Low, 16) and 16#FF0000#) or
  10.                     (Shift_Left(middle, 8) and 16#FF00#) or
  11.                     (high and 16#FF#));
  12.  
  13.      return Interfaces.C.Long(Message);
  14.   end Pm_Message;


 
Ce que je cherche, c'est un moyen de me passer de corps de paquetage, autrement dit, comment en faire une macro avec Ada. j'ai cherché un peu mais je crois bien que ce soit impossible.

Message cité 1 fois
Message édité par Profil supprimé le 13-07-2012 à 16:08:14
n°2149272
Anonymouse
Posté le 13-07-2012 à 16:38:35  profilanswer
 


 
Le preprocessor cpp est indépendant du langage utilisé.

Message cité 1 fois
Message édité par Anonymouse le 13-07-2012 à 16:42:25
n°2149273
Profil sup​primé
Posté le 13-07-2012 à 16:55:28  answer
 

Anonymouse a écrit :


 
Le preprocessor cpp est indépendant du langage utilisé.


 
Ah, si tu me dis ça, c'est que j'ai une chance...
 
Par exemple ?

n°2149278
Anonymouse
Posté le 13-07-2012 à 17:29:05  profilanswer
 


 
Un fichier macro.h
 

Code :
  1. #define Pm_Message(status, data1, data2) \
  2.             ((((data2) << 16) & 0xFF0000) | \
  3.              (((data1) << 8) & 0xFF00) | \
  4.              ((status) & 0xFF))
  5.            
  6. #define Pm_MessageStatus(msg) ((msg) & 0xFF)
  7. #define Pm_MessageData1(msg) (((msg) >> 8) & 0xFF)
  8. #define Pm_MessageData2(msg) (((msg) >> 16) & 0xFF)


 
Un fichier qui n'est même pas du code : test.txt
 

Code :
  1. #include "macro.h"
  2. N importe quoi
  3. Pm_MessageStatus(10);
  4. N importe quoi


 
La commande:

Code :
  1. cpp -P -I . non_code.txt prepro.txt


 
Le résultat prepro.txt
 

Code :
  1. N importe quoi
  2. ((10) & 0xFF);
  3. N importe quoi


 
T'intègre la commande dans la chaine de compilation pour compiler le résultat issu du préprocesseur.

Message cité 1 fois
Message édité par Anonymouse le 13-07-2012 à 17:29:52
n°2149279
Profil sup​primé
Posté le 13-07-2012 à 17:39:21  answer
 

Anonymouse a écrit :


 
Un fichier macro.h
 

Code :
  1. #define Pm_Message(status, data1, data2) \
  2.             ((((data2) << 16) & 0xFF0000) | \
  3.              (((data1) << 8) & 0xFF00) | \
  4.              ((status) & 0xFF))
  5.            
  6. #define Pm_MessageStatus(msg) ((msg) & 0xFF)
  7. #define Pm_MessageData1(msg) (((msg) >> 8) & 0xFF)
  8. #define Pm_MessageData2(msg) (((msg) >> 16) & 0xFF)


 
Un fichier qui n'est même pas du code : test.txt
 

Code :
  1. #include "macro.h"
  2. N importe quoi
  3. Pm_MessageStatus(10);
  4. N importe quoi


 
La commande:

Code :
  1. cpp -P -I . non_code.txt prepro.txt


 
Le résultat prepro.txt
 

Code :
  1. N importe quoi
  2. ((10) & 0xFF);
  3. N importe quoi


 
T'intègre la commande dans la chaine de compilation pour compiler le résultat issu du préprocesseur.


 
 
Mais merci pour l'exemple, merci beaucoup même.
Je crois finalement que ma version soit d'avantage portable.
Qu'en penses- tu ? Si je peux me permettre !

n°2149324
breizhbugs
Posté le 14-07-2012 à 14:09:04  profilanswer
 

Si le "préprocessor cpp" est indépendant du langage, le corps de la macro lui ne l'est pas: le <<, >> & et | sont propre au langage et apparemment pas en ada?


---------------
Seul Google le sait...
n°2149325
Profil sup​primé
Posté le 14-07-2012 à 14:17:00  answer
 

Pour les décalages effectivement il faut utiliser les fonction du paquetage Interfaces.
 
Pour les "et" et les "ou" il y a respectivement les "and" et "or" qui permettent de faire des opération logique sur des modulo.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Traduction du C vers Ada

 

Sujets relatifs
[Ada] Cookie manquant ou vide[C] Quelle différences entre le langage C pour Win XP et Win CE 6.0 ?
Des listes en C..[C#] Datagrid point decimal supprimé automatiquement [Résolu]
Developpement d'un jeu sous udk (C++)reception INT de C vers Java problématique
[VB.NET] Appel d'une DLL écrite en C++C++ Builder 6 - Utiliser une liste déroulante
Plus de sujets relatifs à : Traduction du C vers Ada


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR