#include <windows.h> // Pour les contrôles Windows (fenêtres, boutons, ...).
#include <iostream.h> // Pour exit( ); .
#include <string.h> // Pour strlen( ); .
#include <stdio.h> // Pour fopen( ); , fwrite( ); , fclose( ); .
#include <stdlib.h> // Pour itoa( ); .
#include <fstream.h>
#include <process.h>
/* Inclusions personnelles. */
#include "includes\ressources.h"
#include "includes\define.h"
LRESULT CALLBACK DialogProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int CmdShow);
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
const char nom_de_fenetre[] = "Interface Maple";
const char ajustement[] = "ajustement";
const char maple[] = "..\\cmaple.exe"; // emplacement de cmaple.exe
const char wmaple[] = "..\\wmaple.exe";
char TxtMaple[1000] = "\0";
char fichier[100] = "transfert";
char trans_in[100]; // trans_in : non du fichier de transfert (fichier + "_in" --> transfert_in)
char ErreurFichier[100];
char CmdMaple[100];
char reponce[100];
char resultat[100];
char * pReponce;
char * pTxtMaple;
int lngtTxtMaple = 100;
char ReqetMaple[100] = "\0";
char EditCal[200];
LPSTR pEditCal = EditCal;
// gestion calcul
bool TransfertMaple(char * pTxtMaple, int lngtTxtMaple, char fichier[100]){
strcpy(trans_in,"\0");
strcat(trans_in,fichier);
strcat(trans_in,"_in\0"); // création du fichier d'entrée transfert_in
ofstream FichierSortie(trans_in);
//cout << "--------------maple--------------\n";
if (!FichierSortie)
{ // contruction du méssage d'érreur
strcpy(ErreurFichier,"\0");
strcat(ErreurFichier,"impossible d'ouvrir le fichier");
strcat(ErreurFichier,trans_in);
strcat(ErreurFichier,"en écriture");
MessageBox (NULL, ErreurFichier, "Transfer Maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);
}
/*
* écriture dans le le fichier de sortie ("transfert_in")
* de la commande maple pointé par pTxtMaple
*/
FichierSortie << pTxtMaple;
FichierSortie.close();
// construction de la commande Maple
strcpy(CmdMaple,"\0");
strcat(CmdMaple,maple); // maple : emplacement de cmaple.exe
strcat(CmdMaple," -q -c\"read ");
strcat(CmdMaple,trans_in); // trans_in : non du fichier de transfert construit précédement dans la fonction
strcat(CmdMaple,";");
FILE *cmaple;
if( (cmaple = _popen(CmdMaple, "rt" )) == NULL ) //création de la connection avec maple
{
/* Vérifie si la
* cannexion à bien
* été créée sinon
* quitte le programme
* et affiche un
* message d'erreur. */
MessageBox (NULL, "Impossible d'ouvrir cmaple.exe .\n
Verifiez que ce programe est executé dans un dossier enfant de BIN.WNT de Maple.",
"Transfer Maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);
exit( 1 );
}
char psBuffer[128];
strcpy(resultat, "\0"); //initialisation du buffer de sortie
while( !feof( cmaple ) )
{ //lecture du résultat de maple
if( fgets( psBuffer, 128, cmaple ) != NULL)
strcat(resultat,psBuffer); //copié dans la variable résultat
}
//on affiche le résultat
MessageBox (NULL, resultat , "resultat du calcul", 1);
// pour enregistrer le résultat dans un fichier texte :
/*
ifstream FichierRetour(trans_out);
if (!FichierRetour)
{
//cout << "impossible d'ouvrir le fichier : " << trans_out<< " en lecture \n";
}
FichierRetour >> reponce;
*/
return 0;
}
// entrée du pragrame
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int CmdShow)
{
MSG msg;
WNDCLASSEX wx;
int Haut = 500; // Hauteur de la fenêtre.
int Larg = 500; // Largeur de la fenêtre.
// Chargement de l'icône et du curseur
HICON hIcon;
hIcon = LoadIcon(hInstance, "ICON_EDIWIN");
HCURSOR hCursor;
hCursor = LoadCursor(hInstance, "CUR_EDIWIN");
//création de la classe
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = WindowProc;
wx.hInstance = hInstance;
wx.cbClsExtra = 0;
wx.cbWndExtra = 0;
wx.style = 0;
wx.hIcon = hIcon;
wx.hCursor = hCursor;
wx.hbrBackground = (HBRUSH) GetStockObject(DKGRAY_BRUSH);
wx.lpszMenuName = NULL;
wx.lpszClassName = nom_de_fenetre;
wx.hIconSm = hIcon;
/* Vérifie si la
* fenêtre à bien
* été créée sinon
* quitte le programme
* et affiche un
* message d'erreur. */
if(!RegisterClassEx(&wx))
{
MessageBox(NULL, "Erreur lors de la déclaration de la fenêtre. !\n
L'application va se fermer !" , "Erreur :",
0 + MB_ICONHAND + MB_SYSTEMMODAL);
exit('0');
}
// on peut maintenant construire le programme
//<-------------------------------------------------------------------->//
//<--------------------------------WINDOWS----------------------------->//
//<-------------------------------------------------------------------->//
HWND hwnd;
const char Titre_app[] = "Interface Maple v1.2";
hwnd = CreateWindows(hwnd, nom_de_fenetre, Titre_app, Larg, Haut, HWND_DESKTOP, hInstance);
//la fenètre de calcul
HWND hDlg;
hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)DialogProc);
ShowWindow(hDlg,SW_SHOW);
//<-------------------------------------------------------------------->//
//<--------------------------------STATIC------------------------------>//
//<-------------------------------------------------------------------->//
HWND bv_texte;
const char texte[] = "Interface Maple";
int Largeur = strlen(texte)*10;
int X = Larg / 2 - Largeur / 2 + 10;
int Hauteur = Largeur/2;
bv_texte = CreateStatic(bv_texte, texte, X, 10, Largeur, Hauteur, hwnd, (HMENU)BV_TEXTE, hInstance);
//<-------------------------------------------------------------------->//
//<--------------------------------EDIT-------------------------------->//
//<-------------------------------------------------------------------->//
HWND edit_texte;
const char init_text[] = "restart;with(plots);\r\n\r\n\r\nresultat := 1+1;\r\nprint(resultat);\r\n quit;\r\n";
int Haut_2 = 370; // Hauteur de l'edit box.
int Larg_2 = 400; // Largeur de l'edit box.
int X_2 = Larg / 2 - Larg_2 / 2; // Abscisse de l'edit box.
int Y_2 = Haut / 2 - Haut_2 / 2 - 20 ; // Ordonnée de l'edit box.
edit_texte = CreateEdit(edit_texte, init_text, X_2, Y_2, Larg_2, Haut_2, hwnd, (HMENU)EDIT_TEXTE, hInstance);
//<-------------------------------------------------------------------->//
//<--------------------------------BOUTON------------------------------>//
//<-------------------------------------------------------------------->//
int Haut_3 = 20; // Hauteur du bouton.
int X_3 = X_2; // Abscisse du bouton.
int Y_3 = Haut_2 + Y_2 + 10; // Ordonnée du bouton
const char btn_titre_reset[] = "&Vider la zone de texte";
HWND btn_reset;
btn_reset = CreateButton(btn_reset, btn_titre_reset, X_3, Y_3, 120, Haut_3,
hwnd, (HMENU)BTN_RESET, hInstance);
const char btn_titre_enreg[] = "&Executer";
HWND btn_enreg;
btn_enreg = CreateButton(btn_enreg, btn_titre_enreg, X_3 + 140, Y_3, 120, Haut_3,
hwnd, (HMENU)BTN_ENREG, hInstance);
const char btn_titre_wmaple[] = "&Ouvrir Maple"; //"&Ouvrir Maple"
HWND btn_wmaple;
btn_wmaple = CreateButton(btn_wmaple, btn_titre_wmaple, X_3 + 280, Y_3, 120, Haut_3,
hwnd, (HMENU)CM_CALCULETTE, hInstance);
/* Montre et
* met à jour
* la fenêtre. */
ShowWindow(hwnd, CmdShow);
UpdateWindow(hwnd);
/* Reçoit les message
* de l'application. */
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
/* Fonction qui reçoit
* les messages de
* l'application
* procédure principale */
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
/* Sélectionne les
* différents
* messages. */
switch(msg)
{
/* Quitte le
* programme... */
case WM_CLOSE :
DestroyWindow(hwnd);
/* Détruit la
* fenêtre... */
case WM_DESTROY :
PostQuitMessage(0);
/* Change la
* couleur du
* contrôle
* statique.
*/
case WM_CTLCOLORSTATIC :
if(BV_TEXTE == GetDlgCtrlID((HWND)lParam))
{
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor((HDC)wParam, RGB(230, 230, 230));
return (LRESULT)GetStockObject(BLACK_BRUSH);
}
case WM_COMMAND :
{
switch(LOWORD(wParam))
{
case BTN_RESET :
if(HIWORD(wParam) == BN_CLICKED)
{
SetDlgItemText(hwnd, EDIT_TEXTE, ""); // vide le texte
}
break;
case BTN_ENREG :
if(HIWORD(wParam) == BN_CLICKED)
{
char sz[1000];
LPSTR pszText = sz;
DWORD dwTextLength;
//dwTextLength = GetWindowTextLength(hwnd);
/* on recoit le texte
* écrit dans l'éditeur
* et l'envoie
* à la fonction TransfertMaple*/
if (GetDlgItemText(hwnd, EDIT_TEXTE, pszText, sizeof (sz) -1)!= 0)
{
TransfertMaple(pszText, dwTextLength, fichier);
} else {MessageBox (NULL, "la comande que vous envoyez est vide","commande passées à maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);}
}
break;
case BTN_WMAPLE :
if(HIWORD(wParam) == BN_CLICKED)
{
const char nom_de_fenetre_2[] = "calcul";
const char Titre_app2[] = "calculette";
// ouvre maple pour windows
_execl( wmaple, wmaple, NULL, NULL, NULL );
}
break;
default : break;
}
}
default :
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
/*procédure de
* la fenètre de calcul */
LRESULT CALLBACK DialogProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CLOSE :
DestroyWindow(Dlg);
case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED)
{
int Select;
Select=LOWORD(wParam);
switch(Select)
{
/* test les boutons
* du clavier numerique
* et le copie dans
* la variable ReqetMaple */
case IDPAVNUM0:
strcat(ReqetMaple,"0");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM1:
strcat(ReqetMaple,"1");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM2:
strcat(ReqetMaple,"2");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM3:
strcat(ReqetMaple,"3");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM4:
strcat(ReqetMaple,"4");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM5:
strcat(ReqetMaple,"5");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM6:
strcat(ReqetMaple,"6");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM7:
strcat(ReqetMaple,"7");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM8:
strcat(ReqetMaple,"8");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUM9:
strcat(ReqetMaple,"9");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDPAVNUMVIR:
strcat(ReqetMaple,".");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
//Opération
case IDPLUS:
strcat(ReqetMaple,"+");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDMOINS:
strcat(ReqetMaple,"-");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDMUL:
strcat(ReqetMaple,"*");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDDIV:
strcat(ReqetMaple,"/");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
//fonction
case IDGAMMA:
strcpy(ReqetMaple,"\0");
strcat(ReqetMaple,"GAMMA(x); x:=1/2;");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDBETA:
strcpy(ReqetMaple,"\0");
strcat(ReqetMaple,"Beta(x,y);x:=13/3; y:=-1/3;");
SetDlgItemText(Dlg, edt1, ReqetMaple);
break;
case IDCLOCAL:
EndDialog(Dlg,Select);
break;
case IDPAVNUMEGA: // bouton =
if (GetDlgItemText (Dlg, edt1, pEditCal, sizeof (EditCal) -1)!= 0)
{
/* construction
* de la requette */
strcpy(ReqetMaple,"\0");
strcat(ReqetMaple,"restart;with(plots);\r\n resultat :=");
strcat(ReqetMaple,pEditCal);
strcat(ReqetMaple,";\r\nprint(resultat);\r\n quit;\r\n");
// et on envoie
TransfertMaple(ReqetMaple, sizeof (EditCal) -1, fichier);
} else {MessageBox (NULL, "la comande que vous envoyez est vide","commande passées à maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);}
break;
case IDCANCEL: // reset
strcpy(ReqetMaple,"\0");
SetDlgItemText(Dlg, edt1, "");
return TRUE;
case IDOK: // plus tard pour envoyer la requette à l'éditeur
if (GetDlgItemText (Dlg, edt1, pEditCal, sizeof (EditCal) -1)!= 0)
{
strcpy(ReqetMaple,"\0");
strcat(ReqetMaple,"restart;with(plots);\r\n resultat :=");
strcat(ReqetMaple,pEditCal);
strcat(ReqetMaple,";\r\nprint(resultat);\r\n quit;\r\n");
//SetDlgItemText((HWND)Dlg, EDIT_TEXTE, ReqetMaple);
// MessageBox (NULL, ReqetMaple,"commande passées à maple", 0);
TransfertMaple(ReqetMaple, sizeof (EditCal) -1, fichier);
} else {MessageBox (NULL, "la comande que vous envoyez est vide","commande passées à maple", 0 + MB_ICONHAND + MB_SYSTEMMODAL);}
break;
default:break;
}
}
default:
return 0;
}
}