Je sais pas comment dire, mais le C me fait un peu peur à un niveau. Mon code de tout de suite :
Choix du mode de l'outil courant
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;
}
}
}
En asm, je sais pas comment je me serais démerdé entre les structures de données et la valeur de retour du menu, mais je m'en serais certainement pas tiré avec un pavé very-like... J'ai dû très mal concevoir mon programme autour de ces données. En tout cas, l'avantage énorme, c'est qu'un tel pavé met 5 minutes à s'écrire. C'est réellement fou la différence avec l'assembleur à ce niveau !