Problèmes de pointeurs

15 sujets de 1 à 15 (sur un total de 17)

  • 1
  • 2
  • Baba

      #1973

      Je suis en train d’écrire un programme sur mon amiga 1200

      J’utilise le language E et je sais ouvrir des écran intuition en 256 couleurs (quel progrès, un prog os friendly !!)

      Cepandant, j’ai des phases de calcul un peu longues et j’aimerai trouver un truc pour faire apparaitre le pointeur de la souris en forme de montre, et le remetre sous forme de flèche apres le traitement.

      L’idéal serai de me fournir un bout de code en E, mais avec une routinne assembleur, je me démerderai aussi.

      P.S. Si vraiment je ne trouve pas, je me ferai autrement.

      Merci par avance a celui(ou celle) qui me donnera la solution miracle.

      henes

        #40554

        intuition.library/SetWindowPointerA() avec WA_Pointer valant NULL et WA_BusyPointer valant TRUE.

        Et un TAG_DONE à la fin puisque c’est une TagList.

        RTFM :-)

        Baba

          #40555

          humm, dans le f***ing manuel, je trouve pas mieux que SetPointer.

          Rien des le E.guide ni dans le beginner.guide.

          J’écris :

          PROC main()

          ecran := OpenS(320,256,8,0,’toto’)

          win := OpenWindowTagList(0,[WA_CUSTOMSCREEN, ecran, WA_BACKDROP,-1,WA_FLAGS,WFLG_BORDERLESS+WFLG_ACTIVATE+WFLG_RMBTRAP,WA_IDCMP,IDCMP_RAWKEY,0])

          SetWindowPointerA(ecran,win,WA_BUSYPOINTER)

          ENDPROC

          Résultat, ca compile, ca ne plante pas (miracle), 50 % est du charabia pour moi, mais j’ai toujours ma flèche.

          Et le TAG_NONE, je ne sais pas quoi en faire

          Baba

            #40556

            c’est bon, j’ai trouvé :)

            un SetWindowPointerA(win,[WA_BUSYPOINTER,TRUE,0]) me donne entière satisfaction

            Grand merci ;)

            Nicholas

              #40557

              Baba a écrit :

              humm, dans le f***ing manuel, je trouve pas mieux que SetPointer.

              Rien des le E.guide ni dans le beginner.guide.

              J’écris :

              PROC main()

              ecran := OpenS(320,256,8,0,’toto’)

              win := OpenWindowTagList(0,[WA_CUSTOMSCREEN, ecran, WA_BACKDROP,-1,WA_FLAGS,WFLG_BORDERLESS+WFLG_ACTIVATE+WFLG_RMBTRAP,WA_IDCMP,IDCMP_RAWKEY,0])

              SetWindowPointerA(ecran,win,WA_BUSYPOINTER)

              ENDPROC

              Résultat, ca compile, ca ne plante pas (miracle), 50 % est du charabia pour moi, mais j’ai toujours ma flèche.

              Et le TAG_NONE, je ne sais pas quoi en faire

              Qu’est ce qui se passe si “OpenS(320,256,8,0,’toto’)” retourne NULL ?

              Bye

              Baba

                #40558

                Si le OpenS(320,256,8,0,’toto’) retourne NULL, ou plutot NIL pour les puriste du E,

                On obtient :

                – dans le meilleur des cas un joli plantage avec pleins de couleurs clignottantes, des bandes de couleurs et des bout d’images étranges qui s’affichent de facon subliminale

                – dans un cas plus classique un “Software failure” inscrit dans un cadre rouge clignotant

                – au pire un blocage lamantable de la machine

                Il faut alors virer les images de fond et les comodities qui squattent la mémoire destinée a mon programme

                ou bien il faut créer un fichier spécial de démarrage pour lancer mon programme.

                Ex 1) toto.e (contenant tout ca) se compile vers le fichier exécutable toto

                2) créer un fichier texte dans le même répertoire nommé runtoto contenant ces quelques lignes :


                memrun runtoto RESET

                setpatch

                toto


                3) éditer l’icone du fichier runtoto, et le définir en tant que projet

                4) mofifier l’information de l’icone, et metre IconX dans l’outil par défaut

                5) double cliquer sur le fichier runtoto pour executer le programme

                (il faut bien sur avoir la commande memrun dans son répertoire C:)

                résultat, le programme se lancera apres un reset de l’amiga, et on est sur d’avoir suffisament de ressource pour le faire fonctionner correctement.

                P.S on pourrait aussi tester le résultat de OpenS, ou jouer avec les exceptions pour quitter le programme sans plantage en cas de ressources faible du système, mais un reset sur l’amiga ca prends 3 secondes, c’est pas catastrophique !!!

                /* les aléats de l’amiga sont impénétrables /*

                Gofromiel

                  #40559

                  C’est le truc le plus drôle que j’ai lu depuis 1992 !! :-D

                  stan

                    #40560

                    /me note : ne jamais lancer un programme de Baba.

                    Nicholas

                      #40561

                      – dans le meilleur des cas un joli plantage avec pleins de couleurs clignottantes, des bandes de couleurs et des bout d’images étranges qui s’affichent de facon subliminale

                      – dans un cas plus classique un “Software failure” inscrit dans un cadre rouge clignotant

                      – au pire un blocage lamantable de la machine

                      Ouch…

                      Il y a pas de condition en E pour ne pas crasher si une ressource

                      n’est pas dispo ?

                      PS: cela expliquerai bien des choses avec ANR ;-P.

                      Bye

                      Nicholas

                        #40562

                        Modération de Bégonia : Doublon.

                        Yomgui

                          #40563

                          @Nicholas : tu as le hoquet ? ;-)


                          @Baba
                          : if (bidule) n’existe pas en E ?

                          Lanza

                            #40564

                            @Nicholas, Yomgui et les autres :

                            Faut lire les messages jusqu’au bout :

                            P.S on pourrait aussi tester le résultat de OpenS, ou jouer avec les exceptions pour quitter le programme sans plantage en cas de ressources faible du système, mais un reset sur l’amiga ca prends 3 secondes, c’est pas catastrophique !!!

                            L’a de l’humour ce Baba.

                            Baba a écrit :

                            c’est bon, j’ai trouvé :)

                            un SetWindowPointerA(win,[WA_BUSYPOINTER,TRUE,0]) me donne entière satisfaction

                            Grand merci ;)

                            Le TAG_DONE est destiné à remplacer ton 0 disgrâcieux. ;-)

                            Baba a écrit :

                            humm, dans le f***ing manuel, je trouve pas mieux que SetPointer.

                            Rien des le E.guide ni dans le beginner.guide.

                            Cherche du côté des autodocs.

                            Elles sont disponibles gratuitement dans le NDK de l’os3.9 (et à ma connaissance, c’est la seule version des autodocs qui soit gratuitement accessible).

                            Baba

                              #40565

                              CONST

                              ERR_OPENSCREEN = 0

                              PROC main

                              DEF scr

                              IF (scr := OpenS(patati, patata)) = NIL THEN RAISE ERR_OPENSCREEN

                              EXCEPT

                              WriteF(‘Le programme s”est arrété pour cause d”échouage de l”ouverture de l”écran’)

                              ENDPROC

                              A ce niveau, on peu encore rajouter un IF exeption = ERR_OPENSCREEN à quelque part

                              Et dire que c’est presque la partie la mieux programmée… arf

                              Je passerai sous silences les parties en assembleur où des MOVE D6,BLTSIZE auraient pu être remplacé par des BltMaskBitMapRastPort()…, mais je fait ce que je peux avec ce que j’ai.

                              Je compile maintenant des programme ou il n’y a plus le warning :

                              warning : code outside procs

                              par ex :

                              PROC main

                              MOVE #3,D1

                              JSR toto

                              ENDPROC

                              toto:

                              MOVE #4,D0

                              IF D0 = D1 THEN WriteF(toto)

                              ADD #1,D1

                              mais enfin, tant que ca compile et que ca tourne comme je veux, ca passe


                              2eme question sur les pointeurs :

                              Je sais facilement passer du poineur montre à la flèche, mais je ne sais pas comment cacher le poineur.(comme les mouse blanker, ou la touche Del sous Dpaint)

                              Qui sais maintenant comment on cache le pointeur ?

                              henes

                                #40566

                                void *ptr = AllocVec(16, MEMF_CHIP | MEMF_CLEAR);

                                et SetPointer(win, ptr, 1, 16, 0, 0);

                                crisot

                                  #40567

                                  Si le programme de Baba plante pour impossibilité d’ouvrir l’écran car il ne test pas son retour c’est soit que:

                                  – vous n’aviez pas asser de mémoire vidéo pour vous permettre de lancer le soft.

                                  – vous avez réglé vos modeid comme des porcs.

                                  N’importe qui osant lancer un soft dans ces conditions mérite de planter.

                                15 sujets de 1 à 15 (sur un total de 17)

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

                                Forums AmigaOS, MorphOS et AROS Développement Problèmes de pointeurs

                                Amiga Impact