Maple interface

  1. #include <windows.h> // Pour les contrôles Windows (fenêtres, boutons, ...).
  2. #include <iostream.h> // Pour exit( ); .
  3. #include <string.h> // Pour strlen( ); .
  4. #include <stdio.h>  // Pour fopen( ); , fwrite( ); , fclose( ); .
  5. #include <stdlib.h> // Pour itoa( ); .
  6. #include <fstream.h>
  7. #include <process.h>
  8. /* Inclusions personnelles. */
  9.  
  10. #include "includes\ressources.h"
  11. #include "includes\define.h"
  12.  
  13. LRESULT CALLBACK DialogProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
  14. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int CmdShow);
  15. LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
  16.  
  17. const char nom_de_fenetre[] = "Interface Maple";
  18. const char ajustement[] = "ajustement";
  19. const char maple[] = "..\\cmaple.exe";  // emplacement de cmaple.exe
  20. const char wmaple[] = "..\\wmaple.exe";
  21.  
  22. char TxtMaple[1000] = "\0";
  23. char fichier[100] = "transfert";
  24. char trans_in[100];  // trans_in : non du fichier de transfert (fichier + "_in" --> transfert_in)
  25. char ErreurFichier[100];
  26. char CmdMaple[100];
  27. char reponce[100];
  28. char resultat[100];
  29. char * pReponce;
  30. char * pTxtMaple;
  31. int lngtTxtMaple = 100;
  32. char ReqetMaple[100] = "\0";
  33. char EditCal[200];  
  34.  
  35. LPSTR pEditCal = EditCal;
  36.  
  37. //  gestion calcul
  38. bool TransfertMaple(char * pTxtMaple, int lngtTxtMaple, char fichier[100]){
  39.  
  40.     strcpy(trans_in,"\0");
  41.     strcat(trans_in,fichier);  
  42.     strcat(trans_in,"_in\0");  // création du fichier d'entrée transfert_in
  43.  
  44.     ofstream FichierSortie(trans_in);
  45.  
  46. //cout << "--------------maple--------------\n";
  47.  
  48.   if (!FichierSortie)
  49.   {  // contruction du méssage d'érreur
  50.   strcpy(ErreurFichier,"\0");
  51.   strcat(ErreurFichier,"impossible d'ouvrir le fichier");
  52.   strcat(ErreurFichier,trans_in);
  53.   strcat(ErreurFichier,"en écriture");
  54.   MessageBox (NULL, ErreurFichier, "Transfer Maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);
  55.   }
  56.  
  57.     /*
  58.     * écriture dans le le fichier de sortie ("transfert_in")
  59.     * de la commande maple pointé par pTxtMaple
  60.     */
  61.    
  62.   FichierSortie << pTxtMaple;
  63.   FichierSortie.close();
  64.  
  65.     //  construction de la commande Maple
  66.   strcpy(CmdMaple,"\0");
  67.   strcat(CmdMaple,maple);   // maple : emplacement de cmaple.exe
  68.   strcat(CmdMaple," -q -c\"read ");
  69.   strcat(CmdMaple,trans_in);  // trans_in : non du fichier de transfert construit précédement dans la fonction
  70.   strcat(CmdMaple,";");
  71.  
  72.   FILE   *cmaple;
  73.  
  74.    if( (cmaple = _popen(CmdMaple, "rt" )) == NULL ) //création de la connection avec maple
  75.      {
  76.    /* Vérifie si la
  77.    * cannexion à bien
  78.    * été créée sinon
  79.    * quitte le programme
  80.    * et affiche un
  81.    * message d'erreur. */
  82.    
  83.      MessageBox (NULL, "Impossible d'ouvrir cmaple.exe .\n
  84.     Verifiez que ce programe est executé dans un dossier enfant de BIN.WNT de Maple.",
  85.      "Transfer Maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);
  86.      
  87.      exit( 1 );
  88.      }
  89.      
  90.    char   psBuffer[128];
  91.    
  92.    strcpy(resultat, "\0"); //initialisation du buffer de sortie
  93.      
  94.    while( !feof( cmaple ) )
  95.    {   //lecture du résultat de maple
  96.       if( fgets( psBuffer, 128, cmaple ) != NULL)
  97.          strcat(resultat,psBuffer);  //copié dans la variable résultat
  98.    }
  99.    
  100.    //on affiche le résultat
  101.    MessageBox (NULL, resultat , "resultat du calcul", 1);
  102.    
  103.    // pour enregistrer le résultat dans un fichier texte :
  104. /*  
  105.     ifstream FichierRetour(trans_out);
  106.  
  107.   if (!FichierRetour)
  108.   {
  109.     //cout << "impossible d'ouvrir le fichier : " << trans_out<< " en lecture \n";
  110.   }
  111.  
  112.   FichierRetour >> reponce;
  113. */  
  114. return 0;
  115. }
  116.  
  117. // entrée du pragrame
  118. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int CmdShow)
  119.  {
  120.   MSG msg;
  121.   WNDCLASSEX wx;
  122.  
  123.   int Haut = 500; // Hauteur de la fenêtre.
  124.   int Larg = 500; // Largeur de la fenêtre.
  125.  
  126.  
  127.   // Chargement de l'icône et du curseur
  128.  
  129.   HICON hIcon;
  130.   hIcon = LoadIcon(hInstance, "ICON_EDIWIN");
  131.  
  132.   HCURSOR hCursor;
  133.   hCursor = LoadCursor(hInstance, "CUR_EDIWIN");
  134.  
  135.   //création de la classe
  136.  
  137.   wx.cbSize = sizeof(WNDCLASSEX);
  138.   wx.lpfnWndProc = WindowProc;
  139.   wx.hInstance = hInstance;
  140.   wx.cbClsExtra = 0;
  141.   wx.cbWndExtra = 0;
  142.   wx.style = 0;
  143.   wx.hIcon = hIcon;
  144.   wx.hCursor = hCursor;
  145.   wx.hbrBackground = (HBRUSH) GetStockObject(DKGRAY_BRUSH);
  146.   wx.lpszMenuName = NULL;
  147.   wx.lpszClassName = nom_de_fenetre;
  148.   wx.hIconSm = hIcon;
  149.  
  150.  
  151.   /* Vérifie si la
  152.    * fenêtre à bien
  153.    * été créée sinon
  154.    * quitte le programme
  155.    * et affiche un
  156.    * message d'erreur. */
  157.  
  158.   if(!RegisterClassEx(&wx))
  159.    {
  160.     MessageBox(NULL, "Erreur lors de la déclaration de la fenêtre. !\n
  161.                L'application va se fermer !" , "Erreur :",
  162.                 0 + MB_ICONHAND + MB_SYSTEMMODAL);
  163.     exit('0');
  164.    }
  165.  
  166. // on peut maintenant construire le programme
  167.  
  168. //<-------------------------------------------------------------------->//
  169. //<--------------------------------WINDOWS----------------------------->//
  170. //<-------------------------------------------------------------------->//
  171.    HWND hwnd;
  172.    const char Titre_app[] = "Interface Maple v1.2";
  173.    hwnd = CreateWindows(hwnd, nom_de_fenetre, Titre_app, Larg, Haut, HWND_DESKTOP, hInstance);
  174.    
  175.    //la fenètre de calcul
  176.    HWND hDlg;
  177.    hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)DialogProc);
  178.    ShowWindow(hDlg,SW_SHOW);
  179.    
  180. //<-------------------------------------------------------------------->//
  181. //<--------------------------------STATIC------------------------------>//
  182. //<-------------------------------------------------------------------->//
  183.    HWND bv_texte;
  184.  
  185.    const char texte[] = "Interface Maple";
  186.    int Largeur = strlen(texte)*10;
  187.    int X = Larg / 2 - Largeur / 2 + 10;
  188.    int Hauteur = Largeur/2;
  189.    
  190.  
  191.    bv_texte = CreateStatic(bv_texte, texte, X, 10, Largeur, Hauteur, hwnd, (HMENU)BV_TEXTE, hInstance);
  192.  
  193. //<-------------------------------------------------------------------->//
  194. //<--------------------------------EDIT-------------------------------->//
  195. //<-------------------------------------------------------------------->//
  196.     HWND edit_texte;
  197.  
  198.     const char init_text[] = "restart;with(plots);\r\n\r\n\r\nresultat := 1+1;\r\nprint(resultat);\r\n quit;\r\n";
  199.     int Haut_2 = 370; // Hauteur de l'edit box.
  200.     int Larg_2 = 400; // Largeur de l'edit box.
  201.     int X_2 = Larg / 2 - Larg_2 / 2; // Abscisse de l'edit box.
  202.     int Y_2 = Haut / 2 - Haut_2 / 2 - 20 ; // Ordonnée de l'edit box.
  203.    
  204.     edit_texte = CreateEdit(edit_texte, init_text, X_2, Y_2, Larg_2, Haut_2, hwnd, (HMENU)EDIT_TEXTE, hInstance);
  205.  
  206. //<-------------------------------------------------------------------->//
  207. //<--------------------------------BOUTON------------------------------>//
  208. //<-------------------------------------------------------------------->//
  209.     int Haut_3 = 20; // Hauteur du bouton.
  210.     int X_3 = X_2; // Abscisse du bouton.
  211.     int Y_3 = Haut_2 + Y_2 + 10; // Ordonnée du bouton
  212.  
  213.     const char btn_titre_reset[] = "&Vider la zone de texte";
  214.        
  215.     HWND btn_reset;                      
  216.     btn_reset = CreateButton(btn_reset, btn_titre_reset, X_3, Y_3, 120, Haut_3,
  217.                 hwnd, (HMENU)BTN_RESET, hInstance);
  218.  
  219.  
  220.     const char btn_titre_enreg[] = "&Executer";
  221.    
  222.     HWND btn_enreg;                      
  223.     btn_enreg = CreateButton(btn_enreg, btn_titre_enreg, X_3 + 140, Y_3, 120, Haut_3,
  224.                 hwnd, (HMENU)BTN_ENREG, hInstance);
  225.  
  226.  
  227.     const char btn_titre_wmaple[] = "&Ouvrir Maple"; //"&Ouvrir Maple"
  228.    
  229.     HWND btn_wmaple;                      
  230.     btn_wmaple = CreateButton(btn_wmaple, btn_titre_wmaple, X_3 + 280, Y_3, 120, Haut_3,
  231.                 hwnd, (HMENU)CM_CALCULETTE, hInstance);
  232.  
  233.    /* Montre et
  234.     * met à jour
  235.     * la fenêtre. */
  236.  
  237.     ShowWindow(hwnd, CmdShow);
  238.     UpdateWindow(hwnd);
  239.  
  240.    /* Reçoit les message
  241.     * de l'application. */
  242.  
  243.    while(GetMessage(&msg, NULL, 0, 0))
  244.     {
  245.      TranslateMessage(&msg);
  246.      DispatchMessage(&msg);
  247.     }
  248.   return msg.wParam;
  249.  }
  250.  
  251.  /* Fonction qui reçoit
  252.   * les messages de
  253.   * l'application
  254.   * procédure principale */
  255.  
  256. LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  257.  {
  258.   /* Sélectionne les
  259.    * différents
  260.    * messages. */
  261.  
  262.    switch(msg)
  263.     {
  264.      /* Quitte le
  265.       * programme... */
  266.  
  267.      case WM_CLOSE :
  268.      DestroyWindow(hwnd);
  269.  
  270.      /* Détruit la
  271.       * fenêtre... */
  272.  
  273.      case WM_DESTROY :
  274.      PostQuitMessage(0);
  275.  
  276.      /* Change la
  277.       * couleur du
  278.       * contrôle
  279.       * statique.
  280.       */
  281.      case WM_CTLCOLORSTATIC :
  282.  
  283.      if(BV_TEXTE == GetDlgCtrlID((HWND)lParam))
  284.       {
  285.        SetBkMode((HDC)wParam, TRANSPARENT);
  286.            SetTextColor((HDC)wParam, RGB(230, 230, 230));
  287.        return (LRESULT)GetStockObject(BLACK_BRUSH);
  288.       }
  289.      
  290.     case WM_COMMAND :
  291.      {
  292.      
  293.      switch(LOWORD(wParam))
  294.       {
  295.        case BTN_RESET :
  296.         if(HIWORD(wParam) == BN_CLICKED)
  297.          {
  298.          SetDlgItemText(hwnd, EDIT_TEXTE, "");       // vide le texte
  299.          }
  300.          break;
  301.          
  302.        case BTN_ENREG :
  303.         if(HIWORD(wParam) == BN_CLICKED)
  304.          {
  305.          char sz[1000];  
  306.          LPSTR pszText = sz;
  307.          DWORD dwTextLength;
  308.          //dwTextLength = GetWindowTextLength(hwnd);
  309.          
  310.                   /* on recoit le texte
  311.                    * écrit dans l'éditeur
  312.                    * et l'envoie
  313.                    * à la fonction TransfertMaple*/
  314.                    
  315.                   if (GetDlgItemText(hwnd, EDIT_TEXTE, pszText, sizeof (sz) -1)!= 0)
  316.                   {
  317.                   TransfertMaple(pszText, dwTextLength, fichier);  
  318.                   } else {MessageBox (NULL, "la comande que vous envoyez est vide","commande passées à maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);}
  319.          }
  320.          break;
  321.          
  322.        case BTN_WMAPLE :
  323.         if(HIWORD(wParam) == BN_CLICKED)
  324.          {
  325.          const char nom_de_fenetre_2[] = "calcul";
  326.          const char Titre_app2[] = "calculette";
  327.          
  328.          // ouvre maple pour windows
  329.          _execl( wmaple, wmaple, NULL, NULL, NULL );
  330.  
  331.          }
  332.          break;
  333.         default : break;
  334.       }
  335.      
  336.      }
  337.  
  338.      default :
  339.           return DefWindowProc(hwnd, msg, wParam, lParam);
  340.     }
  341.   }
  342.  
  343.   /*procédure de
  344.    * la fenètre de calcul */
  345.    
  346. LRESULT CALLBACK DialogProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
  347. {
  348.        
  349.         switch(message)
  350.         {
  351.     case WM_CLOSE :
  352.      DestroyWindow(Dlg);
  353.      
  354.         case WM_COMMAND:
  355.         if(HIWORD(wParam) == BN_CLICKED)
  356.         {
  357.                 int Select;  
  358.         Select=LOWORD(wParam);
  359.                 switch(Select)
  360.                 {
  361.                
  362.         /* test les boutons
  363.      * du clavier numerique    
  364.      * et le copie dans
  365.      * la variable ReqetMaple */
  366.      
  367.         case IDPAVNUM0:
  368.             strcat(ReqetMaple,"0");
  369.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  370.             break;
  371.         case IDPAVNUM1:
  372.             strcat(ReqetMaple,"1");
  373.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  374.             break;
  375.         case IDPAVNUM2:
  376.             strcat(ReqetMaple,"2");
  377.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  378.             break;  
  379.         case IDPAVNUM3:
  380.             strcat(ReqetMaple,"3");
  381.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  382.             break;
  383.         case IDPAVNUM4:
  384.             strcat(ReqetMaple,"4");
  385.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  386.             break;
  387.         case IDPAVNUM5:
  388.             strcat(ReqetMaple,"5");
  389.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  390.             break;
  391.         case IDPAVNUM6:
  392.             strcat(ReqetMaple,"6");
  393.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  394.             break;
  395.         case IDPAVNUM7:
  396.             strcat(ReqetMaple,"7");
  397.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  398.             break;
  399.         case IDPAVNUM8:
  400.             strcat(ReqetMaple,"8");
  401.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  402.             break;
  403.         case IDPAVNUM9:
  404.             strcat(ReqetMaple,"9");
  405.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  406.             break;
  407.         case IDPAVNUMVIR:
  408.             strcat(ReqetMaple,".");
  409.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  410.             break;
  411.            
  412.  //Opération          
  413.         case IDPLUS:
  414.             strcat(ReqetMaple,"+");
  415.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  416.             break;
  417.         case IDMOINS:
  418.             strcat(ReqetMaple,"-");
  419.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  420.             break;
  421.         case IDMUL:
  422.             strcat(ReqetMaple,"*");
  423.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  424.             break;
  425.         case IDDIV:
  426.             strcat(ReqetMaple,"/");
  427.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  428.             break;
  429.            
  430.  //fonction                                                            
  431.                 case IDGAMMA:
  432.             strcpy(ReqetMaple,"\0");
  433.             strcat(ReqetMaple,"GAMMA(x); x:=1/2;");
  434.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  435.                         break;
  436.                 case IDBETA:
  437.             strcpy(ReqetMaple,"\0");
  438.             strcat(ReqetMaple,"Beta(x,y);x:=13/3; y:=-1/3;");
  439.             SetDlgItemText(Dlg, edt1, ReqetMaple);
  440.                         break;
  441.      
  442.         case IDCLOCAL:
  443.                         EndDialog(Dlg,Select);
  444.                         break;                         
  445.                        
  446.         case IDPAVNUMEGA:    // bouton =
  447.             if (GetDlgItemText (Dlg, edt1, pEditCal, sizeof (EditCal) -1)!= 0)
  448.             {
  449.            
  450.             /* construction
  451.              * de la requette */
  452.              
  453.             strcpy(ReqetMaple,"\0");
  454.             strcat(ReqetMaple,"restart;with(plots);\r\n resultat :=");  
  455.             strcat(ReqetMaple,pEditCal);
  456.             strcat(ReqetMaple,";\r\nprint(resultat);\r\n quit;\r\n");
  457.            
  458.             // et on envoie  
  459.             TransfertMaple(ReqetMaple, sizeof (EditCal) -1, fichier);  
  460.              
  461.             } else {MessageBox (NULL, "la comande que vous envoyez est vide","commande passées à maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);}
  462.             break;
  463.          
  464.                 case IDCANCEL:  // reset
  465.             strcpy(ReqetMaple,"\0");
  466.             SetDlgItemText(Dlg, edt1, "");
  467.                         return TRUE;
  468.                                                                                                                  
  469.                 case IDOK: // plus tard pour envoyer la requette à l'éditeur
  470.          if (GetDlgItemText (Dlg, edt1, pEditCal, sizeof (EditCal) -1)!= 0)
  471.           {
  472.          strcpy(ReqetMaple,"\0");
  473.          strcat(ReqetMaple,"restart;with(plots);\r\n resultat :=");  
  474.          strcat(ReqetMaple,pEditCal);
  475.          strcat(ReqetMaple,";\r\nprint(resultat);\r\n quit;\r\n");  
  476.          //SetDlgItemText((HWND)Dlg, EDIT_TEXTE, ReqetMaple);
  477.          // MessageBox (NULL, ReqetMaple,"commande passées à maple", 0);
  478.           TransfertMaple(ReqetMaple, sizeof (EditCal) -1, fichier);  
  479.               } else {MessageBox (NULL, "la comande que vous envoyez est vide","commande passées à maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);}
  480.  
  481.                    
  482.          break;
  483.          
  484.          default:break;
  485.          
  486.                 }
  487.      }
  488.         default:
  489.          return 0;
  490.         }
  491. }
  492.  

contact - link to this site