1

coucou smile

G un pitit pb d'ordre général :
A un moment dans un prog PC, je fais une boucle pour récupérer 4 coordonnées avec la souris.
Voici la fonction que j'utilise :

void setPtControle(void)
{
     unsigned char i ;
     for (i = 0 ; i < 4 ; i++) {
          do {
               __asm {
                    mov ax,3                 //fn 3 de la souris => status bouttons + coords
                    int 33h
               }
          } while (!_BX) ;                   //tant qu'on appuie pas sur un boutton, on reboucle
          coordStruct[i]->x = _CX ;          //on sauve x
          coordStruct[i]->y = _DX ;          //et pis y..
     }
}



Le pb c que c tellement rapide que les 4 coordonnées sont identiques.. : on n'a meme pas le temps de relacher le boutton... roll
Et forcement, apres, le prog a une légère tendance à me faire une pitite erreur du style divide by 0.. (c normal vu les calculs que je fais + tard..) mad


c sûr que c ce pb vu qu'en rajoutant une pitite getch() comme ceci..

void setPtControle(void)
{
     unsigned char i ;
     for (i = 0 ; i < 4 ; i++) {
          do {
               __asm {
                    mov ax,3
                    int 33h
               }
          } while (!_BX) ;
          coordStruct[i]->x = _CX ;
          coordStruct[i]->y = _DX ;
          getch() ;
     }
}



..ça fonctionne.. wink


bref y'a pas une technique plus propre qu'une temporisation ?

2

Essaie ça wink

void setPtControle(void)
{
  unsigned char i;
  
  for (i = 0 ; i < 4 ; i++)
  {
    do
    {
      __asm
      {
        mov ax,3               // fn 3 de la souris => status bouttons + coords
        int 33h
      }
    } while (!_BX);            // tant qu'on appuie pas sur un boutton, on reboucle
    coordStruct[i]->x = _CX;   // on sauve x
    coordStruct[i]->y = _DX;   // et pis y..
    
    do
    {
      __asm
      {
        mov ax,3              // fn 3 de la souris => status bouttons + coords
        int 33h
      }
    } while (_BX);            // tant qu'on n'a pas relâché le boutton, on reboucle !!
  }
}

[edit]Edité par Thibaut le 16-03-2002 à 10:45:09[/edit]
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

3

Au fait, fait de i un unsigned int plutôt qu'un unsigned char, ça devrait accélérer (bon d'accord vraiment très peu pour ce genre de besoins) et diminuer de 1 ou deux instructions ASM la taille de ton code wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

4

ça alors, j av meme pas pensé, merci bcp smile love

pour les int/short, t sûr de ça ?
pour moi, un char c un octet, et un int c un mot..
je vois assez mal comment un int pourrait etre plus pitit qu'un short confus
tu peux expliquer ste plait ?

5

Sur PC les int sont équivalent à des long (double mot). Ce type change suivant les plateformes. C'est à cause de ça que j'ai hésité à le supporter dans le langage Azur (abandonné).

C'est justement parcequ'un char est codé sur 8 bits qu'il demandera plus de temps lorqu'il sera utilisé en index : pour calculer l'adresse de l'élément coordStruct[ i ] le compilo va d'abord devoir l'étendre sur 16 bits. Si i fait 16 bits ou 32 bits, le complio n'aura pas cette opération à faire smile
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

6

>Ce type change suivant les plateformes
oui, je sais, mais je pensais que sur PC ct aussi
char
int/short
long

d'ailleurs dans ma doc de mon <vieux> compilo y'a :
Syntax

[signed|unsigned] int <identifier> ;

Description

Use the int type specifier to define an integer data type.
Variables of type int are one word in length.
They can be signed (default) or unsigned.



pour le reste, ok j'av pas pensé. merci.

7

rmq c vrai que mes docs sont pas tres à jour : g appris sur un bouqquin de 1984, mon compillo est dépassé, etc grin
lol

8

Avec Borland Turbo C++ peut-être que int=short triso
En tout cas avec GCC (DJGPP sur PC par exemple) int= long pencil

Tu sais l'astuce qui consiste à attendre qu'on ait relâché le bouton, moi non plus je n'y ai jamais pensé, j'avais vu ça dans un tuto y'a un bout de temps wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

9

ba je te crois, t'inquietes pô.

>Tu sais l'astuce [...]
c pourtant tout con smile
en tous cas ça fonctionne !
smile