D'ailleurs, faut quel niveau en C pour contribuer ? parce que bon, ça m'étonnerait que certains veuillent de mon éditeur asm à faire tourner sur émulateur de machine à base de 68k


Godzil (./329) :
Non tu manque cruellement d'un bon editeur de fichier C qui te propose de la completion automatique, avec un tel editeur, impossible (ou presque) de faire ce genre d'erreurs
Folco (./330) :
D'ailleurs, faut quel niveau en C pour contribuer ?

GCC4TI se contente essentiellement d'utiliser le code du projet TIGCC et de rajouter quelques patches de mauvaise qualité qui dégradent le tout.Kevin Kofler (./334) :Ah bon ? Heureusement que tu es là pour rétablir la vérité
Soit dit au passage que si tu veux vraiment contribuer, tu devrais contribuer à TIGCC, pas GCC4TI.GCC4TI se contente essentiellement d'utiliser le code du projet TIGCC et de rajouter quelques patches de mauvaise qualité qui dégradent le tout.

if (Key == KEY_MODE)
{
if ((MenuResult = DrawMenu(&ModeMenu,DScreen)) == 1)
{
if ((MenuResult2 = DrawMenu(&ModeMenuLP,DScreen)) == 1)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane0 = A_NORMAL;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane0 = A_NORMAL;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane0 = A_NORMAL;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane0 = A_NORMAL;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane0 = A_NORMAL;
}
if (MenuResult2 == 2)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane0 = A_REVERSE;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane0 = A_REVERSE;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane0 = A_REVERSE;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane0 = A_REVERSE;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane0 = A_REVERSE;
}
if (MenuResult2 == 3)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane0 = A_XOR;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane0 = A_XOR;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane0 = A_XOR;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane0 = A_XOR;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane0 = A_XOR;
}
}
if (MenuResult == 2)
{
if ((MenuResult2 = DrawMenu(&ModeMenuLP,DScreen)) == 1)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane1 = A_NORMAL;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane1 = A_NORMAL;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane1 = A_NORMAL;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane1 = A_NORMAL;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane1 = A_NORMAL;
}
if (MenuResult2 == 2)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane1 = A_REVERSE;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane1 = A_REVERSE;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane1 = A_REVERSE;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane1 = A_REVERSE;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane1 = A_REVERSE;
}
if (MenuResult2 == 3)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane1 = A_XOR;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane1 = A_XOR;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane1 = A_XOR;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane1 = A_XOR;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane1 = A_XOR;
}
}
}
)
unsigned char flag; /* ou autre type */
switch (DrawMenu(&ModeMenuLP,DScreen)) {
case 1: flag = A_NORMAL; break;
case 2: flag = A_REVERSE; break;
case 3: flag = A_XOR; break;
}
switch (MainData.Tool) {
case TOOL_LINE: MainData.LineModePlane0 = flag;
case TOOL_CIRCLE: etc.
}
)


. Donc ma proposition en ./346 marche (j'ai pas tout écrit hein, mais la suite me semble évidente). Mais bien ŝur utiliser des tableaux est encore mieux.MenuResult = DrawMenu(&ModeMenu,DScreen); if (MenuResult == 1)
Font_Type_t Font_Type;
if (Key == KEY_MODE)
{
MenuResult = DrawMenu(&ModeMenu,DScreen);
MenuResult2 = DrawMenu(&ModeMenuLP,DScreen);
if (MenuResult2 == 1)
{
Font_Type = A_NORMAL;
}
if (MenuResult2 == 2)
{
Font_Type = A_REVERSE;
}
if (MenuResult2 == 3)
{
Font_Type = = A_XOR;
}
if (MenuResult == 1)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane0 = Font_Type;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane0 = Font_Type;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane0 = Font_Type;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane0 = Font_Type;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane0 = Font_Type;
}
if (MenuResult == 2)
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane1 = Font_Type;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane1 = Font_Type;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane1 = Font_Type;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane1 = Font_Type;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane1 = Font_Type;
}
}
Bref, l'idée est là.
typedef enum Plane_Index_e
{
PLANE_0,
PLANE_1,
PLANE_COUNT /* Comme l'enum commence à 0 , PLANE_0 = 0, PLANE_1 = 1 et PLANE_COUNT = 2, ça tombe bien non ? */
}
Plane_Index_t;
typedef struct Type_De_Main_Data_s
{
Font_Type_t LineModePlane[PLANE_COUNT];
Font_Type_t CircleModePlane[PLANE_COUNT];
Font_Type_t EllipseModePlane[PLANE_COUNT];
Font_Type_t RectangleModePlane[PLANE_COUNT];
Font_Type_t FrameModePlane[PLANE_COUNT];
}
Type_De_Main_Data_t;
Type_De_Main_Data_t MainData;
Font_Type_t Font_Type;
Plane_Index_t Plane_Index;
Boolean_t Update_Font_Type;
if (Key == KEY_MODE)
{
MenuResult = DrawMenu(&ModeMenu,DScreen);
MenuResult2 = DrawMenu(&ModeMenuLP,DScreen);
if (MenuResult2 == 1)
{
Font_Type = A_NORMAL;
}
else if (MenuResult2 == 2)
{
Font_Type = A_REVERSE;
}
else if (MenuResult2 == 3)
{
Font_Type = = A_XOR;
}
else
{
Font_Type = -1; /* à remplacer par un code d'erreur nommé */
}
if (MenuResult == 1)
{
Plane_Index = PLANE_0;
Update_Font_Type = TRUE;
}
else if (MenuResult == 2)
{
Plane_Index = PLANE_1;
Update_Font_Type = TRUE;
}
else
{
Update_Font_Type = FALSE;
}
if ((Font_Type != -1) && (Update_Font_Typ == TRUE))
{
if (MainData.Tool == TOOL_LINE) MainData.LineModePlane [Plane_Index] = Font_Type;
if (MainData.Tool == TOOL_CIRCLE) MainData.CircleModePlane [Plane_Index] = Font_Type;
if (MainData.Tool == TOOL_ELLIPSE) MainData.EllipseModePlane [Plane_Index] = Font_Type;
if (MainData.Tool == TOOL_RECTANGLE) MainData.RectangleModePlane [Plane_Index] = Font_Type;
if (MainData.Tool == TOOL_FRAME) MainData.FrameModePlane [Plane_Index] = Font_Type;
}
}
).
) C'est peut-être aussi que tu n'as pas l'habitude du C, quand on voit un switch on sait immédiatement ce que ça fait, quand on voit une séquence de if, c'est moins évident a priori.

Kevin Kofler (./356) :
Les switches donnent aussi un code meilleur (plus petit et plus rapide) qu'une suite de if si tes valeurs sont suffisamment denses (c'est-à-dire plus proches de 1, 2, 3 que de -32768, 0, 32767).
Ximoon (./355) :
Edit : et perso j'aurais aussi fait un tableau à deux dimensions comme Kevin le suggère
Ximoon (./355) :
Enfin pour de vrai, ce n'est pas possible de t'arranger pour que tes DrawMenu retournent directement La bonne valeur de Plane_Index et de Font_Type ?![]()
)