Obligement - L'Amiga au maximum

Dimanche 26 septembre 2021 - 15:10  

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


Twitter

Suivez-nous sur Twitter




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

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Amiga C Manual - Trucs et Astuces
(Article écrit par Anders Bjerin et extrait d'Amiga C Manual - mars 1990)


Note : traduction par Serge Hammouche.

14. Trucs et Astuces

14.1 Introduction

Ce chapitre contient plusieurs trucs et astuces utiles.

14.2 NTSC contre PAL

Si vous avez un Amiga américain, vous pouvez ouvrir des écrans d'au plus 200 lignes (400 en mode entrelacé) : c'est le système NTSC. Par contre, si vous avez un Amiga européen, vos écrans pourront faire jusqu'à 256 lignes (512 en mode entrelacé) : c'est le système PAL.

14.2.1 Comment écrire des programmes utilisables sur les deux systèmes

Si vous voulez écrire des programmes utilisables sur les deux systèmes, vous avez deux possibilités :
  1. Ne pas ouvrir d'écran de plus de 200 lignes. Votre programme pourra ainsi être utilisé sur les deux systèmes. Cependant, ce n'est pas toujours la meilleure solution, car les utilisateurs du système PAL seront gênés de ne pas pouvoir utiliser les 56 dernières lignes de leur écran.

  2. Ouvrir la bibliothèque "graphics.library" et regarder sur quel système votre programme s'exécute : s'il s'agit d'un système NTSC, n'utilisez alors que les 200 premières lignes de l'écran. Par contre sur un système PAL, vous pouvez utiliser entièrement les 256 lignes.
Si vous décidez que votre programme n'utilisera que des écrans de 200 lignes, vous devriez quand même regarder sur quel système votre programme s'exécute. S'il s'agit d'un Amiga européen, vous pouvez positionner votre affichage 28 (56/2) lignes plus bas, de manière à ce que la grande zone inutilisée en bas de l'écran PAL semble disparaître.

14.2.2 NTSC ou PAL ?

Pour savoir sur quel système (NTSC ou PAL) votre programme s'exécute, il vous suffit d'ouvrir la bibliothèque "graphics.library", et de tester les "DisplayFlags" (indicateurs d'affichage). Voici un petit programme de démonstration :

/* Exemple 1 : */
/* Cet exemple vous dira si vous avez un Amiga américain */
/* (NTSC) ou européen (PAL)                              */

/* Déclaration des types de données couramment utilisés */
#include <exec/types.h>

/* Déclaration de la structure GfxBase */
#include <graphics/gfxbase.h>

/* Pointeur vers la structure GfxBase. Attention : ce pointeur */
/* doit obligatoirement être appelé "GfxBase"                  */
struct GfxBase *GfxBase;

main()
{
 /* Ouvre la bibliothèque "graphics.library" (n'importe quelle version) */
 GfxBase = (struct GfxBase *)
 OpenLibrary( "graphics.library", 0 );

 if( !GfxBase )
  exit(); /* Erreur ! Impossible d'ouvrir la bibliothèque ! */

 if( GfxBase->DisplayFlags & NTSC )
  printf( "Vous avez un Amiga américain (NTSC).\n" );

 if( GfxBase->DisplayFlags & PAL )
  printf( "Vous avez un Amiga européen (PAL).\n" );

 /* Fermeture de la bibliothèque */
 CloseLibrary( GfxBase );
}

14.3 Programmes exécutés depuis le Workbench

Un programme peut être exécuté aussi bien depuis le CLI que depuis le Workbench. Quand un programme est exécuté depuis le Workbench, une fenêtre spéciale est ouverte automatiquement. Tous les affichages seront effectués dans cette fenêtre. Si le programme est exécuté depuis le CLI, aucune fenêtre ne sera ouverte, puisque les affichages se feront dans la fenêtre du CLI.

Comme nous venons de le dire, une fenêtre spéciale est automatiquement ouverte quand le programme s'exécute depuis le Workbench. Cependant, il peut arriver que vous ne vouliez pas de cette fenêtre : si votre programme n'affiche rien cette fenêtre est inutile, et peut-être même gênante.

Pour vous débarrasser de cette fenêtre, il vous suffit de renommer votre fonction main() en _main() (notez bien le symbole "_" !). Le programme n'ouvrira alors plus de fenêtre quand il sera exécuté depuis le Workbench, mais en contrepartie vous ne pourrez bien sûr plus afficher de texte avec la fonction printf(). Si vous essayez d'afficher quelque chose sans avoir de fenêtre pour le faire, votre Amiga se plantera (ce qu'il vaut mieux éviter !).

Voici maintenant deux exemples. Le premier est un programme C normal, qui affiche simplement "Hello!". Si le programme est exécuté depuis le CLI, le message sera affiché dans la fenêtre du CLI. Si le programme est exécuté depuis le Workbench, une fenêtre spéciale sera ouverte, et le message s'y affichera. Le second exemple n'ouvrira pas de fenêtre s'il est exécuté depuis le Workbench, et ne pourra donc rien afficher.

/* Exemple 2 : */
/* Ce programme affichera "Hello!" dans la fenêtre du CLI s'il est */
/* lancé depuis le CLI, ou dans une fenêtre spéciale (qui sera     */
/* ouverte automatiquement) s'il est lancé depuis le Workbench     */

void main();

void main()
{
 int loop;

 printf( "Hello!\n" );

 /* Attend un peu... */
 for( loop = 0; loop < 500000; loop++ )
  ;
}

/* Exemple 3 : */
/* Ce programme n'ouvrira pas de fenêtre s'il est exécuté      */
/* depuis le Workbench. L'inconvénient est qu'on ne peut plus  */
/* utiliser les fonctions standard d'affichage, comme printf() */

void _main();

void _main() /* Notez le caractère spécial "_" avant le mot "main" ! */
{
 int loop;

 /* Attend un peu... */
 for( loop = 0; loop < 500000; loop++ )
  ;
}

Dans l'exemple 3, la fenêtre spéciale n'est pas ouverte parce que nous avons renommé notre fonction main() en _main(). En fait, la première fonction qu'exécute le C n'est pas main(), mais la fonction _main(), qui appelle ensuite main(). La fonction _main() est une sorte de préprocesseur, qui initialise les variables argc et argv. Elle regarde également si le programme est appelé depuis le Workbench, et dans ce cas ouvre la fenêtre spéciale.

Le source de la fonction _main() se trouve sur le quatrième disque Lattice, dans le répertoire "umain.c".

Si vous renommez votre propre fonction main() en _main(), la fonction _main() normale ne sera pas utilisée. La fenêtre spéciale ne sera donc pas ouverte, aucun affichage ne pourra se faire, et vous devrez initialiser vous-même les variables argc et argv.

14.4 Savoir si le programme a été lancé depuis le CLI ou le Workbench

Il peut arriver que vous vouliez savoir si votre programme a été lancé depuis le Workbench ou depuis le CLI. Il est très simple de le savoir : en effet, la valeur de la variable argc est toujours au moins égale à 1 quand le programme est lancé depuis le CLI, alors qu'elle est toujours nulle dans le cas où le programme a été lancé depuis le Workbench.

Voici un petit programme de démonstration, qui vous dira s'il a été lancé depuis le CLI ou depuis le Workbench.

/* Exemple 4 : */
/* Ce programme vous dira s'il a été lancé depuis le CLI */
/* ou depuis le Workbench.				 */

void main();

void main( argc, argv )
int argc;
char *argv[];
{
 int loop;

 if( argc )
  printf( "Le programme a été lancé depuis le CLI !\n" );
 else
  printf( "Le programme a été lancé depuis le Workbench !\n" );

 /* Attend un peu... */
 for( loop = 0; loop < 500000; loop++ )
  ;
}

14.5 Exemples

Voici des exemples (dans le répertoire "Amiga_C_Manual/14.Trucs&Astuces") sur les sujets précédemment abordés.

Exemple 1

Cet exemple vous dira si vous avez un Amiga américain (NTSC) ou européen (PAL).

Exemple 2

Ce programme affichera "Hello!" dans la fenêtre du CLI s'il est lancé depuis le CLI, ou dans une fenêtre spéciale (qui sera ouverte automatiquement) s'il est lancé depuis le Workbench.

Exemple 3

Ce programme n'ouvrira pas de fenêtre s'il est exécuté depuis le Workbench. L'inconvénient est qu'on ne peut plus utiliser les fonctions standard d'affichage, comme printf().

Exemple 4

Ce programme vous dira s'il a été lancé depuis le CLI ou depuis le Workbench.


[Retour en haut] / [Retour aux articles] [Chapitre précédent : Les VSprites]