Programmer l’amiga 68k bouts de code IDE langages, astuces

4 sujets de 16 à 19 (sur un total de 19)

  • 1
  • 2
  • Gilloo

      #375938
      /* easy.c : a complete example of how to open an Amiga function library inc.
      In this case the function library is Intuition. * function library is open, any Intuition function can be called. Once the Intuition This example uses the DisplayBeep() function of Intuition to flash the screen. 
      With SAS/C (Lattice), compile with lc -L easy.c 
      */
      
      /* Declare the return type of the functions we will use. */
      
      /* En premier, ajout des includes qui ne sont pas dans l'exemple */
      #include <stdlib.h>
      #include <proto/exec.h>
      #include <proto/intuition.h>
      
      struct IntuitionBase *IntuitionBase; /* Get storage for the library base. The base name MUST be IntuitionBase */
      
      int main()
      {
      
      IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",33L);
      
      if (IntuitionBase) {  /* Check to see if it actually opened. The Intuition library is now open so. any of its functions may be used. */
          DisplayBeep(0L); /* la fonction simple de la mort */
          CloseLibrary((struct Library *)IntuitionBase); /* Always close a library if not in use. */
      }
      else{    /* The library did not open so return an error code. The exit() function is not part of the 0S, it is part of the compiler link library. */
      exit(20);
            }
      }
      
      /* 1) prototypes */
      /* 2) OL remplacé par 0L, NULL aurait été préférable */
      /* 3) comme on a inclu le prototype de CloseLibrary, et que struct IntuitionBase * n'est pas un struct Library *, on le cast */
      

      __sam__

        #375943

        Il me semble que si tu déclares IntuitionBase en void*, tu n’as plus besoin de caster. Tant que tu ne va pas chercher des data dedans (99.9% du temps), ca marche.

        Samuel.

        Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
        A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
        A500 Vampire V2+ ^8^ 🙂
        (mais aussi TO8, TO8D, TO9. Groupe PULS.)

        Sethghost

          #375945

          /* 1) prototypes */
          /* 2) OL remplacé par 0L, NULL aurait été préférable */
          /* 3) comme on a inclu le prototype de CloseLibrary, et que struct IntuitionBase * n’est pas un struct Library *, on le cast */

          Bravo à Gilloo pour avoir réussi à corriger le code précédent qui avait 2 gros problèmes :
          C’est l’exemple d’un copié collé de PDF qui tourne mal. En plus des includes qu’il fallait rajouter et enlever, le copié collé dans le PDF a transformé le début du source C en instructions au lieu de commentaires et DisplayBeep(0L); en DisplayBeep(OL); (un grand O à la place d’un zéro)

          Pour la signification de cast (conversion) :
          Exemple : (“warning: initialization makes pointer from integer without a cast”), sont liés à des conversions de types, ou “casts”, en langage C.
          Un “cast” est une opération qui vous permet de convertir une valeur d’un type de données en un autre. En C, les castings peuvent être explicites ou implicites…

          La fonction DisplayBeep() n’est pas semble t-il une fonction sonore mais graphique. Du coup DisplayBeep(1000L); provoque une erreur ou un warning…
          https://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node03A4.html

          /* easy2.c Un exemple de code qui fonctionne avec DisplayBeep()  */
          #include <dos/dos.h>
          #include <proto/dos.h>
          #include <proto/intuition.h>
          #include <stdio.h>
          #include <libraries/dos.h>
          
          struct Library *OpenLibrary();
          /* void CloseLibrary(struct Library *); */
          
          struct IntuitionBase *IntuitionBase;
          
          int main()
          {
              IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 33L);
          
              if (IntuitionBase) {
                  struct Screen *screen = NULL; /* Déclarez un pointeur vers la structure Screen */
                  int numFlashes =7; /* Nombre de clignotements souhaité */
                  int i; /* Déclarez la variable i en dehors de la boucle */
                  
                  for (i = 0; i < numFlashes; i++) {
                      Delay(50);
                      DisplayBeep(screen); /* Appelez DisplayBeep() avec le pointeur Screen */
                  }
          
                  CloseLibrary((struct Library *)IntuitionBase);
              } else {
                  exit(20);
              }
          }

          Vite, un panneau solaire.

          Sethghost

            #376094

            Encore un bout de code intéressant qu’il est recommandé d’améliorer pour des raisons précises, l’affichage infini de la suite de Fibonacci. C’est un algorithme très simple sans pointeurs :peur qui calcule cette célèbre suite : “chaque nombre est la somme des deux nombres qui le précèdent. ”

            // fibonacci6.c
            
            #include <stdio.h>
            #include <unistd.h>
            
            int main() {
              unsigned long a = 0, b = 1, next;
            
              while (1) {
                printf("%lu\n", a);
                next = a + b;
                a = b;
                b = next;
                sleep(1);
              }
            
              return 0;
            }

            Avec ce simple calcul infini, on atteint les limites des processeurs 32 bits qui finissent pas indiquer des nombres incorrects vers la 48e itération. Il semble après des tests que gcc 2.95.3 ne peut pas afficher de unsigned long long Le problème se posera aussi sur un processeur 64 bits mais l’affichage faux se produit plus tard dans la boucle.

            A noter que Frontier Elite utilise une génération procédurale à base de suite de Fibonacci pour générer ses galaxies de millions de planètes en 3D vectorielle en Assembleur 68k :peur.

            Vite, un panneau solaire.

          4 sujets de 16 à 19 (sur un total de 19)

          • 1
          • 2
          • Vous devez être connecté pour répondre à ce sujet.

          Forums AmigaOS, MorphOS et AROS Développement Programmer l’amiga 68k bouts de code IDE langages, astuces

          Amiga Impact