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 234 024

  • Nb. de membres 367
  • Nb. d'articles 2 852
  • Nb. de forums 24
  • Nb. de sujets 13
  • Nb. de critiques 0

Top 10  Statistiques

Index du forum »»  Développement »» Petites questions en Vrac.

Petites questions en Vrac.#869

3Contributeur(s)
AmiDARKHenesJuLieN
2 Modérateur(s)
PapiosaurBeWorld
AmiDARK AmiDARKicon_post
1. En plein dans le processus de "portage" de l'AmiDARK Engine à MorphOS, je me heurte à des fonctions du noyau AmigaOS4 que je ne retrouve pas sous MorphOS ...
J'ai checké dans les !!include!!s et docs de MorphOS ... et apparemment, ce seraient des fonctions que AmigaOS4 possède et pas MorphOS...

J'explique, voici un exemple de fonction compatible Os4 & MorphOS :
int MyGetFileSize( BPTR FileID ){
int MySize = 0;
#if defined( __amigaos4__ )
MySize = IDOS->GetFileSize( FileID );
#else
MySize = GetFileSize( FileID );
#endif
return MySize;
}

Hors si IDOS->GetFileSize existe sous AmigaOS4, GetFileSize n'existe pas sous MorphOS.
J'ai essayé de trouver une fonction qui puisse le faire ... mais rien ... nib ...

Voici 3 fonctions que j'ai sous AmigaOS4 et que je ne retrouve pas sous MorphOS dans la dos.library :
GetFilePosition, GetFileSize & ChangeFilePosition.

Quelqu'un aurait-il quelques idées ?

Merci par avance.
Sincèrement.
AmiDARK
Henes Henesicon_post
Je te propose d'utiliser la fonction que possède la dos.library d'AmigaOS depuis le début pour faire tout cela et bien plus : Seek().
Les autodocs expliquent comment l'appeler pour faire ce que tu veux. Genre Seek(f, 0, OFFSET_CURRENT) pour la position courante...

Sinon, il y a aussi les fonctions manipulant les FileInfoBlock pour connaître la taille et les autres attributs d'un fichier. Mais pourquoi se compliquer la vie quand Seek() fait ça en une ligne...

Edit : il y a aussi Seek64() si tu veux faire un truc spécifique à MorphOS 2.x et qui puisse gérer des fichiers de plus de 2 Go... Sinon, un simple Seek() me semble préférable pour ne pas te poser de question et unifier tes sources (AROS, AmigaOS, MorphOS...)
AmiDARK AmiDARKicon_post
Merci Hénès pour ces informations très utiles :)
Je vais utiliser tout cela de ce pas :p

EDIT :
Niquel ça compile avec sans défaut pour ces fonctions modifiées.
Maintenant je passe aux autres pbes de compilation :p
JuLieN JuLieNicon_post
@Amidark

Henes, a raison, il faut que tu nettoies au maximum ton code toutes les parties du code qui devraient être générales mais font au contraire appel à des spécificités de la plateforme sur laquelle il est compilé.

En fait, ton code devrait être écrit pour tourner sous AmigaOS3.1, qui est la version commune à tous les OS actuels. Ensuite, bien sûr, rien ne t'empêche de faire des #IFDEF OS4, #IFDEF MorphOS (je ne sais pas si c'est très C/C++, car je programme en Pascal), etc... pour ajouter des fonctions ou des optimisations qui exploitent au mieux chaque plateforme.

Je connais très bien le problème, car j'ai converti l'année dernière mon jeu d'échecs de Windows vers MacOSX. Pour cela je l'ai tout simplement nettoyé de toutes ses parties purement Windows API, et les ai remplacées par du code universel. Résultat, à part des #IFDEF qui doivent concerner à tout casser 30 lignes de code sur 8000, le code est identique pour tout le reste sur chaque plateforme. Et oh!, divine surprise, la version OSX de mon code compile sans changer une ligne sur MorphOS :)

Pour l'instant, seules les versions Windows (x32 et x64) et OSX sont téléchargeables, mais la prochaine version aura un exe MorphOS inclus :

http://predateur-chess.blogspot.com/

(Pour les amateurs d'échecs ;) Attention, ce n'est qu'un "engine" la partie purement IA d'un jeu d'échecs: il faut utiliser une interface compatible UCI pour l'utiliser, ou alors piloter le moteur depuis un shell, en entrant les commandes UCI... raison pour laquelle l'intérêt est limité sous MorphOS, qui n'a aucune de ces interfaces...)
AmiDARK AmiDARKicon_post
@Julien :
Oui je le sais et c'est déjà ce que j'ai fait ...
toutes les fonctions du GDK qui utilisent des fonctions systèmes AmigaOS/MorphOS ont ces fonctions systèmes extraites et j'ai crée des sortes de fonctions de wrap qui utilisent les ifdef ... & if defined( ... ) pour choisir le bon OS Ã la compilation.
J'ai déjà collé un exemple plus haut qui le montre ;)

Sachant que j'utilise MiniGL l'OS 3.1 c'est pas trop possible ... mais quoi qu'il en soit j'ai déjà néttoyé toutes les fonctions OS spécifiques par des fonctions refaites d'auto sélection d'OS...

Ce qui est marrant c'est de voir les différences entre GCC pour OS4 et GCC pour MorphOS ... Qui ne réagissent pas de la même façon pour des trucs qui devraient être compatibles avec les 2 ...