Obligement - L'Amiga au maximum

Jeudi 18 avril 2024 - 08:32  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En Pratique : Recompilation de vieux logiciels pour AmigaOS 4
(Entrevue réalisée par Peter Hutchison et extrait d'Intuition Base - juin 2004, mis à jour en février 2005)


Si vous avez un vieux programme C datant de plusieurs années, il est possible de le réécrire pour AmigaOS 4/AmigaOne. Une bonne partie de mon expérience se base sur SAS 6.5x et StormC (qui est basé sur GCC). Suivez certains des conseils ci-dessous pour convertir votre logiciel :

Fichiers d'en-tête

Fichiers clibs, pragmas, proto

Ces fichiers d'en-tête contiennent principalement des en-têtes pour les bibliothèques partagées d'AmigaOS, etc. Dans certains codes sources, vous pouvez avoir des en-têtes clib et pragma. Exemple :

#include <clib/exec_protos.h>
#include <pragmas/exec_pragmas.h>

GadToolsBox écrit parfois les en-têtes dans ce format. Cela ne fonctionnera pas complètement avec GCC sur AmigaOS 4. Vous devriez remplacer ce qui précède, avec les en-têtes proto :

#include <proto/exec.h>

Cela inclura tous les en-têtes clib et pragma appropriés pour vous.

En-têtes Inline

GCC utilise les en-têtes Inline (inclus par les en-têtes proto) pour accéder aux bibliothèques partagées d'AmigaOS. SAS C ne les utilise pas.

Fonctions C

Format des fonctions

Au début, lorsque l'on écrivait une fonction en C, certaines hypothèses étaient faites et le format était différent, les arguments étaient définis sur des lignes séparées. Exemple :

myFunction(num1, num2, string1) 
int num1, num2; 
char *string1; 
{

}

Ceci n'est pas conforme au format ANSI moderne. "myFunction" suppose qu'elle renvoie soit un "int", soit un "void" et que les définitions sont séparées :

int myFunction(int num1, int num2, char *string1) 
{

}

Prototypes

Il est d'usage de prototyper toutes les fonctions soit au début du fichier de programme C, soit dans un fichier d'en-tête. Si vous avez plusieurs fichiers de programme C, ajoutez les prototypes à un fichier d'en-tête et utilisez ce fichier "#include" dans tous vos fichiers C pour assurer la cohérence de l'ensemble du projet. Utilisez le format standard ANSI C (voir note précédente) :

/* Prototypes */

int myFunction(int num1, int num2, char *string1);

Void

S'il n'y a pas de paramètres passés ou renvoyés, utilisez "void" dans la mesure du possible :

void otherFunction(void)
{
}

Paramètres et arguments

Lorsque vous passez des données vers/depuis des arguments, assurez-vous d'utiliser le bon type de données. Par exemple, ne passez pas un "long" lorsque la fonction attend un "int" et ainsi de suite, car cela peut générer de nombreux messages d'avertissement. Définissez le bon type de données au début de la fonction ou utilisez les "casts" dans tous les autres cas.

void otherFunction(void)
{
      long numa, numb;
      char name[30];
      myFunction(numa, numb, name); /* ceci générera des avertissements car numa,numb sont des longs et non des ints */
}

...devrait devenir :

void otherFunction(void){
      int numa, numb;
      char name[30];
      myFunction(numa, numb, name); /* ceci est maintenant correct */
}

La fonction "main()" doit toujours retourner un "int", vous pouvez utiliser un "return 0" à la fin pour indiquer que le programme s'est terminé avec succès. Vous pouvez également utiliser les arguments "argc", "argv" si vous en avez besoin, sinon utilisez "void".

Compilation

Si le programme a été compilé en SAS/C, exécutez SCOPTS et changez les options de message en ANSI, STRICT. Activez également toutes les avertissements (s'ils ont été désactivés). Recompilez ensuite. Votre programme peut utiliser d'anciennes fonctions provenant de bibliothèques SAS/C uniquement, celles-ci ne seront pas transférables aux compilateurs StormC ou GCC. Dans le manuel SAS/C, dans le guide de l'utilisateur, cherchez dans la référence de la bibliothèque C les appels qui ne peuvent pas être utilisés dans GCC. Tout ce qui est marqué AmigaOS, Old, Unix ou SAS/C devra être changé pour l'équivalent ANSI ou réécrit.

Une fois que le programme a été recompilé, copiez le code source dans un autre dossier, et recompilez pour GCC/StormC. Cela devrait permettre de repérer toute autre erreur ou avertissement nécessitant une attention particulière.

Si vous utilisez un assembleur, le code 68k peut être recompilé à l'aide de Phxass qui est compatible avec le code assembleur SAS/C. Assurez-vous d'inclure le dossier asm-include dans le projet pour récupérer les fichiers d'en-tête de l'assembleur. Si possible, le code assembleur doit être réécrit en C pour la portabilité vers le code PowerPC.

Lors de la compilation, essayez de modifier le code pour supprimer autant d'avertissements et d'erreurs que possible. Cela facilitera les mises à jour ultérieures et éliminera tous les bogues potentiels du code. Les tests sont également importants, ayez un bon plan de test pour corriger toute erreur logique, le compilateur ne peut pas toutes les trouver.

Makefiles

Les fichiers makefiles ne sont pas facilement portables entre compilateurs. En SAS/C, vous pouvez créer des fichiers makefiles à l'aide de l'utilitaire smake et des Scopts qui fournissent des options pour le type de processeur, l'optimisation, etc. Pour StormC, le fichier de projet contient les informations make (lisibles dans un éditeur de texte), pour GCC, vous devez écrire votre propre fichier ou utiliser les utilitaires à votre disposition.

Mises à jour d'essai

Si vous voulez faire un essai, pourquoi ne pas télécharger quelques vieux programmes amiga sur Aminet qui incluent les sources et les essayer. Vérifiez les fichiers "readme" et la documentation, avant de distribuer un travail modifié. L'auteur peut ne pas aimer que son travail soit mis à jour ou redistribué sans son consentement. En cas de doute, ne le faites pas.

Mise à jour vers des API d'interface graphique plus récentes

L'Amiga a l'avantage de disposer d'un choix d'interfaces graphiques à utiliser : Intuition, GadTools, MUI, ClassAct, ReAction et bien d'autres. Si vous avez les compétences nécessaires, pourquoi ne pas mettre à jour le programme pour utiliser les dernières interfaces graphiques telles que ReAction ou MUI. Pour ReAction, vous pouvez utiliser le programme Reactor fourni sur l'Amiga Developer CD 2.1 dans la section "NDK 3.5". Il existe le programme MUIBuilder pour les interfaces MUI.

Attention, l'optimisation de GCC peut générer des opérations en virgule flottante à partir de code en virgule non flottante. Utilisez l'option "-msoft-float" pour désactiver la génération de code en virgule flottante pour chaque fichier.

Exemple : si vous codez des interruptions, vérifiez avec l'option gcc "-S" si la sortie assembleur de votre code d'interruption ne contient pas de registres en virgule flottante comme "lfd" ou "lfs". Comme les registres à virgule flottante ne sont pas sauvegardés dans une interruption, cela pourrait entraîner des plantages dans d'autres tâches qui utilisent également la virgule flottante.


[Retour en haut] / [Retour aux articles]