1

Euh, j'ai tout essayer, mais lorsque jessaye de creer un ecran virtuel, il ne fait pas ce que j'attend.
expliquation:
je creer mon ecran principal drawstr(......), puis, il y a un deplacement de la barre, qui sert a naviguer dans les menus.
mais lorsque la barre bouge, l'ecran s'efface.
voila ma commande:

void *Vscreen1 = malloc(3840);

PortSet(Vscreen1, 239, 127);
.
.
.
.
l'ecran principal
.
.
ClrScr();
memcpy(LCD_MEM, Vscreen1, 3840);
.
.
.
conditions avec ngetkey() et if pour le deplacement de la barre
.
.


vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

2

A quoi sert le ClrScr?

Et sinon je te déconseille fortement de réallouer le vscreen à chaque passage dans la boucle.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

ba en fait, vu que j'avais des pb, et en plus a chaque fois, la barre ne s'effacée pa, dc el laissé des trace a chaque passage, donc, il reinitialise l'ecran
pkoi ne pas realouer le vscreen sachant que la boucle ne demmare q'apré le memcpy
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

4

Mais pourquoi il est après l'affichage de l'écran alors?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

ba sinon, ca redessine tout
alor est-ce ke g tout compris???
void *Vscreen1 = malloc(3840); ca c pour definir vscreen1
PortSet(Vscreen1, 239, 127); ca c pour enregistrer l'ecran
memcpy(LCD_MEM, Vscreen1, 3840); ca c pour copier l'ecran virtuel vers lecran normal


c ca???
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

6

#2 : S'il te plaît, tu pourrais te relire après avoir écrit ?
Je tolère les fautes généralement... mais y'a une limite de lisibilité à ne pas franchir wink

Le ClrScr ne serta à rien puisque tu remplis l'écran avec memcpy juste après. C'est une perte de temps énorme.
Il y a une erreur très grave dans ton programme : tu ne vérifies pas si malloc a trouvé la place que tu voulais. S'il n'a pas trouvé de bloc libre, ton programme va planter la calculatrice !
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.

7

Le ClrScr ne serta à rien puisque tu remplis l'écran avec memcpy juste après. C'est une perte de temps énorme.

Euh non ce n'est pas inutile puisqu'il y a un PortSet, donc on efface le vscreen, pas LCD_MEM. Sauf qu'évidemment si on le fait juste avant de recopier l'écran, alors l'écran sera irrémédiablement blanc tongue


voodoo93> Si tu pouvais poster un code source plus conséquent (surtout où sont les boucles et où sont les fonctions de dessin), on pourrait peut-être t'aider. Enfin je soupçonne fortement que ton problème soit que le ClrScr devrait être placé juste après le PortSet, mais si ce n'est pas ça je ne peux pas t'aider sans plus de détails.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

ok, je vais voir ce que je peux faire pour vous. Quant aux fautes d'orthographe, elles sont volontaires, car cela permet d'etre plus rapide. Il faut juste faire un peu d'effort... wink
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

9

je vous fais confiance pour ne pas utiliser ma source.... on sait jamais... merci
#include <tigcclib.h> void _main(void) {      SCR_RECT ECRAN = {{0, 0, 159,99}} ;      int APDTIM = OSTimerCurVal(APD_TIMER);      short key;   int REPKE, REPK, y = 14; void *Vscreen1 = malloc(3840); PortSet(Vscreen1, 239, 127);      ST_busy(3);      DrawLine (0, 93, 160, 93, A_NORMAL) ;      ST_helpMsg("Protools 1.0 developpé par Vodoo93");      ScrRectFill(&(SCR_RECT){{0, 10, 8, 93}}, &ECRAN ,A_NORMAL) ;      ScrRectFill(&(SCR_RECT){{0, 0, 160, 10}}, &ECRAN ,A_NORMAL) ;      FontSetSys(F_4x6);      DrawStr (10, 3, "--------ProTools 1.0 by Vodoo93--------", A_REVERSE);      DrawStr (10, 15, "1-Reset calculatrice    /!\  \0", A_REVERSE);      DrawStr (10, 25, "2-Activer Break       (active ON)", A_NORMAL);      DrawStr (10, 35, "3-Desactiver Break (desactive ON)", A_NORMAL);      DrawStr (10, 45, "4-APD", A_NORMAL);   DrawStr (10, 55, "5-Reglage du contraste", A_NORMAL);   DrawStr (10, 65, "*6-Clavier", A_NORMAL);      DrawStr (10, 73, "* = indisponible  \0", A_REVERSE);      DrawStr (10, 86, "9-Credits", A_NORMAL);       ClrScr();       memcpy(LCD_MEM, Vscreen1, 3840);    MyLabel: debut: MyLabel1:         if (y < 10)      {            y = 85;      }      else if (y == 74)      {           y = 85;      }      else if (y ==75)      {           y = 64;      }      else if (y > 86)      {            y = 14;      }      ScrRectFill(&(SCR_RECT){{9, y, 160., y+6}}, &ECRAN ,A_XOR) ;      key = ngetchx();      if (key == KEY_DOWN)      {           y = y+10;                 goto debut;      }      else if (key == KEY_UP)      {           y = y-10;           goto debut;      }            else if( key == 13)      {           if (y == 14 )      {           OSReset();      } else if (y == 24  )           {                OSClearBreak() ;                OSEnableBreak() ;                OSSetSR(0x0000) ;                goto MyLabel;           } else if (y == 34 )           {                OSClearBreak() ;                OSDisableBreak() ;                OSSetSR(0x0700) ;                goto MyLabel;           } else if (y == 44 )           {                APDTIM = APDTIM/20;                clrscr();                printf("Valeur actuelle de l'APD:%i", APDTIM);                printf("\nValeur de l'APD:");                 scanf("%i", &APDTIM);                printf("\nAPD reglé a:%i", APDTIM);                printf("seconde(s)");                ngetchx();                OSFreeTimer(APD_TIMER) ;                 OSRegisterTimer(APD_TIMER, 20*APDTIM) ;                goto MyLabel;           } else if (y == 54 )           {                clrscr();                printf("Appuyez sur + pour augmenter le contraste.\nAppuyez sur - pour diminuer le contraste.");  MyLabel2:                               key = ngetchx();                if (key == 45)                {                OSContrastUp() ;                     goto MyLabel2;                }                else if (key == 43)                {                OSContrastDn() ;                goto MyLabel2;                }                else if (key == 264)                {                goto MyLabel;                }                else                {                goto MyLabel2;                }                } else if (y == 64 )           {                goto MyLabel; MyLabel4:                clrscr();                printf("Reglage du clavier\nappuyez sur + pour accelerer le clavier\nappuyez sur - pour ralentir le clavier\nappuyez sur 0  pour les valeurs par defaut");                 DrawLine (0, 25, 160, 25, A_NORMAL) ; MyLabel3:                ST_helpMsg("Appuyez sur une touche...");                               key = ngetchx();                if (key == 45)                {                REPKE = REPKE + 10;                REPK = REPK + 50;                DrawStr (150, 80, "-", A_REPLACE);                OSInitBetweenKeyDelay (REPKE);                     OSInitKeyInitDelay (REPK);                goto MyLabel3;                }                else if (key == 43)                {                     REPKE = REPKE - 10;                     REPK = REPK - 50;                     DrawStr (150, 80, "+", A_REPLACE);                     if (REPKE <8)                                    {                                    DrawStr (10, 50, "Pour l'instant la limite est 8", A_REPLACE);                                    DrawStr (10, 60, "Consultez:progti89.ifrance.com", A_REPLACE);                                    REPKE = 8;                                    ngetchx();                                    goto MyLabel4;                                    }                                    else                                    {                                              OSInitBetweenKeyDelay (REPKE);                                              OSInitKeyInitDelay (REPK);                                    }                     goto MyLabel3;                }                else if (key == 48)                {                     OSInitBetweenKeyDelay (48);                     OSInitKeyInitDelay (336);                REPKE = 48;                goto MyLabel3;                }                else if (key == 264)                {                goto MyLabel;                }                else                {                goto MyLabel3;                }           } else if (y == 85 )           {                clrscr();                FontSetSys(F_4x6);              ST_busy(3);              ScrRectFill(&(SCR_RECT){{0, 10, 8, 93}}, &ECRAN ,A_NORMAL) ;                ScrRectFill(&(SCR_RECT){{0, 93, 160, 100}}, &ECRAN ,A_NORMAL) ;                ScrRectFill(&(SCR_RECT){{0, 0, 160, 10}}, &ECRAN ,A_NORMAL) ;                ScrRectFill(&(SCR_RECT){{150, 0, 160, 93}}, &ECRAN ,A_NORMAL) ;                FontSetSys(F_4x6);                DrawStr (10, 3, "--------------CREDITS--------------", A_REVERSE);          DrawStr (10, 15, "Protools 1.0 developpe par Vodoo93", A_NORMAL);                DrawStr (10, 25, "Mail: lepiranas1@hotmail.com", A_NORMAL);                DrawStr (10, 35, "Site: progti89.ifrance.com", A_NORMAL);                DrawStr (10, 45, "Consultez les mises a jour regulieres", A_NORMAL);                DrawStr (10, 55, "et les programmes basic.", A_NORMAL);                DrawStr (10, 63, "Remerciements:", A_NORMAL);                DrawStr (10, 70, "euh....bah a moi, mon PC et ma TI", A_NORMAL);                DrawStr (10, 76, "sans qui je ne serais pas la...;)", A_NORMAL);                DrawStr (10, 85, "Developpe en C avec TIGCC et VTI", A_NORMAL);                ngetchx();                goto MyLabel;           } else if (key == 264)   {      } else   {        goto MyLabel1;   }      }   else if (key == 264)   {             free(Vscreen1);      }      else      {           goto debut;      }                        }
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

10

Ouille gni

Alors :
1) De manière générale, essaye d'indenter correctement. Par exemple, regarde comment indentent certains éditeurs qui disposent d'une fonction de ré-indentage (je ne sais pas lesquels font ça, désolé)
2) Comme l'a dit Thibaut, tu as oublié de vérifier si malloc() avait réussi
3) Tu as aussi oublié le PortRestore()
4) Evite les gotos! Ta source sera bcp plus lisible si elle est indentée et sans gotos. Bcp de tes gotos (tous?) peuvent se traduirent en termes de boucle while, do/while ou de break et de continue.
5) Tu oublies de mettre à jour l'écran. En gros, le squelette de ton programme devrait être :
  ...initialisations...
  PortSet(...);
  do {
    ClrScr();
    ... affichage divers ...
    memcpy(LCD_MEM,Vscreen1,3840);  // ou encore : LCD_restore(Vscreen1), c'est pareil
    key = ngetchx();
    ... traitements divers ...
  } while (key!=264);
  PortRestore();
  free(Vscreen1);


(le but étant de mettre à jour l'écran le moins souvent possible, donc seulement une fois que tout est affiché, mais qu'au moment où on attend une touche [key = ngetchx();] l'écran soit à jour)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

t'inquiete pas pour l'utilsiation de ta source grin
je pense pas que bcp de personnes l'utiliseront comme ca wink

12

desolé, mais ca fait 3 jours quee j'ai commencé le c , alors critiquez pas svp...
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

13

6) Évite scanf. Tu n'as pas besoin d'une routine de 1,5 KO pour lire un entier. getsn et atoi devraient faire l'affaire en moins de la moitié de la place.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

vodoo93
: desolé, mais ca fait 3 jours quee j'ai commencé le c , alors critiquez pas svp...

C'est toi qui cherche smile
Ton code est pas spécialement joli en plus wink

15

c'est comme ca qu'on fait des progres. Mais c'est pas grave. Je connait pas While, donc je vais aprendre.
Et juste avant d'envoyer le code j'ai fait des modification a "l'arrache", donc m'en veuillez pas wink
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

16

On peut faire des gotos en C ??
A ça pour une nouvelle !
Mais bon c'est vrai que c'est pas terrible les gotos....
Ben voilà. Ben ouais quoi.

17

Rising Sun> si c'est pour faire des gotos autant programmer en asm tongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

18

Bof, y'a des fois où c'est indispensable ....

19

Je veux dire "que" des gotos. J'en utilise aussi de temps en temps, mais rarement smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

20

pas souvent qu'il y a plus de deux boucles imbriquées smile

21

Encore un débat récurrent sur yN...
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.

22

meuh nan, on est d'accord ... là, le goto est même nécessaire dans tres peu de cas ;-)

23

Meuh si, on est d'accord ... Kevin va nous sortir qu'il utilise pleins de gotos dans Backamond (quelle référence tongue) et ça va partir en couille : -"oui mais tu pouvais éviter" -"oui mais c'est plus petit" -"oui mais c'est incompréhensible" -"oui mais je m'en fout" -"clair, y'a qu'à voir la gueule de ta source, tout est illisible" -"va te faire foutre c*nnard" -"Kevin soit poli !" -"...".

C'est bon, le débat est clos. Reprenons 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.

24

et je fais comment quand j'ai plusieurs conditions:
do
{
key = 0;
key = ngetchx();
}
while ( key != 49);
{
OSReset();
}
while ( key != 50);
{
OSClearBreak() ;
OSEnableBreak() ;
OSSetSR(0x0000) ;
}

ici, il me prend que la premiere...
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

25

k() ; OSSetSR(0x0000) ; }
Indente. C'est illisible sinon.do
	{
		key = 0;
		key = ngetchx();
	}
	while ( key != 49);
	{
			OSReset();
	}
  while ( key != 50);
	{
			OSClearBreak() ;
			OSEnableBrea

Il y a un problème là smile
SR(0x0000) ; }
tu voulais dire :do
  {
    key = 0;
    key = ngetchx();
  }
while (key != 49);

do
  {
    OSReset();
  }
while (key != 50);

while (key != 50)
  {
    OSClearBreak() ;
    OSEnableBreak() ;
    OSSet
?
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.

26

je comprend po commen tu fait pour le mettre sur fond blanc
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

27

J'ai édité, répond à ce que j'ai ajouté wink

Pour mettre sur fond blanc, il faut utiliser les balises PRE. A droite du cadre où tu tapes ton post, il y a des balises écrites en gras. Tu cliques sur pre après avoir sélectionné ton code dans le cadre.

Au fait, le key = 0; (dans la première boucle) est inutile.
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.

28

ouais, c'était pas exactement comme je l'avais pensé, mais ca ma aidé.....
vodoo93
I still believe in your eyes;
I just don't care what you have done in your life.
Baby i'll always be here by your side;
Don't leave me waiting too long, please come by!
I, still believe in your eyes;
There is no choice, I belong to your life.
Because I will live to love you someday;
You'll be my baby and we'll fly away

29

--

30

Utilise les balises [ pre ] et [ /pre ] pour que le forum ne te bouffe pas les espaces...

En fait les boucles do-while ne prennent qu'un seul while, donc voilà ce que comprend le compilo avec ton exemple :
do
	{
		key = 0; // cette affectation ne sert à rien puisque key sera de toutes façons modifié par l'instruction suivante
		key = ngetchx();
	}
while ( key != 49);

// en dehors de la première boucle do-while (bloc isolé)
{
	OSReset();
}

// boucle infinie si key != 50 : c'est équivalent à 'while (key!=50) { }'
while ( key != 50);


// encore un bloc isolé :
{
	OSClearBreak() ;
	OSEnableBreak() ;
	OSSetSR(0x0000) ;
}


Je présume que tu voulais dire :
// attendre une pression de touche
do {
    key = ngetchx();
} while (key == 0);

// est-ce 49 ?
if (key == 49) {
    OSReset();
}

// est-ce 50 ?
if (key == 50) {
    OSClearBreak() ;
    OSEnableBreak() ;
    OSSetSR(0x0000) ;
}

// sinon on ne fait rien (attention : avec ce programme on ne recommence pas si on appuye sur une touche qui ne fait rien : il faut rajouter une boucle si on veut ce comportement)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)