Problèmes de pointeurs

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

  • 1
  • 2
  • Baba

    • Messages : 409
    #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

    • Messages : 2616
    #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

    • Messages : 409
    #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

    • Messages : 409
    #40556

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

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

    Grand merci ;)

    Nicholas

    • Messages : 322
    #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

    • Messages : 409
    #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

    • Messages : 460
    #40559

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

    stan

    • Messages : 508
    #40560

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

    Nicholas

    • Messages : 322
    #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

    • Messages : 322
    #40562

    Modération de Bégonia : Doublon.

    Yomgui

    • Messages : 1589
    #40563

    @Nicholas : tu as le hoquet ? ;-)


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

    Lanza

    • Messages : 895
    #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

    • Messages : 409
    #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

    • Messages : 2616
    #40566

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

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

    crisot

    • Messages : 1436
    #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