| Level
4gl : Page 1
> Level
4gl : Page 3
PAGE 2 : PARTICIPER
A L'EVOLUTION DE ENDUSER4GL
Le chemin du projet
OPEN SOURCE
: c:\EndUser4gl\4gl\bin\OpenSource\Enduser4gl\EndUser4gl.dsw
Le programme EndUser4gl.exe
est dans le répertoire c:\EndUser4gl\4gl\bin\EndUser4gl.exe.
C'est obligatoire
A chaque nouvelle
compilation de vos codes éxécutions, vous devez transférer
le nouveau programme c:\endUser4gl\4gl\bin\OpenSourcel\Enduser4gl\debug\EndUser4gl.exe
dans le répertoire
c:\EndUser4gl\4gl\bin\EndUser4gl.exe.
Autre
Exemple : Utilsation de la librairie statique : ENDUSER4GL.LIB
(regroupe tous les pgms sources du standard )
c:\EndUser4gl\4gl\bin\User4gl\Enduser4gl\EndUser4gl.dsw

|
Niveau 3: Les Spécialistes 4gl: Mise
en oeuvre
A vous de réaliser
...... . Allons aux explications les plus simples pour
comprendre
|
|
Le compilateur
../FichierCommun/Sysdict.txt
../FichierCommun/Systoken.txt
|
Le compilateur
EndUser4gl a 2 cycles :
Cycle
1 : C' est la lecture du programme de l' utilisateur
*.Eu4glExe et création de la table des
symboles,
analyseur syntaxique etc..
Vous pouvez
développer des codes exécutions pour créer
des variables, contrôler des instructions etc..
1)Ces codes
exécutions possibles sont compris dans la tranche
de 20000 à 21000 :
création
des variables de type uniquement : integer,char,string,
float,double
2)Ces codes
exécutions possibles sont compris dans la tranche
à 21001 à 32500 :
création
de contrôles ou autres
Cycle
2 : C' est la relecture du programme de l' utilisateur
*.Eu4glExe et exécution de vos actions
à
travers vos
codes exécutions.
La tranche
de numéro des codes exécutions doit être
> à 32500 jusqu' à 2,147,483,647
(c' est un
type long)
|
|
Instructions
../FichierCommun/EndUserRules.txt
|
C' est pratiquement
l' exercice le plus difficile:
Réflexion
sur la création d' une instruction : son objectif,
son utilité, son optimisation.
EndUsergl a
pour vocation d' être un langage OPTIMUM sans
être restreint. Il existe suffisamment de
langage informatique
sur le marché capable de stafisfaire nos informaticiens
en cas de programmation
complexe.
EndUser4gl
: C'est l'art de maitriser la synthèse d'une
fonction ou plusieurs fonctions à travers une
instruction
.......
|
|
RESUME
:
ENDUSERCOMPIL.CPP
OPCCODEX.H
ENDUSERGL.H
EXECUTE.CPP
|
* créer votre token
: EndUserCompil.cpp : #TOKEN xxxxx
* créer vos instructions
et ou mots clés :EndUsercompil.cpp: #DEFINE-INST <identifiant
pour la
règle> suivi <mot clé
du langage> ou #DEFINE-MCLE
<identifiant pour la règle> suivi
<mot clé
du langage>
* créer votre règle
syntaxique : EndUsercompil.cpp :
T_INSTRUCTION : ",
"
T_DECLARE_PROCFUNC
",
"
|
M_BEGIN T_INST_LIST M_ENDBEGIN ",
* créer vos codes exécutions
: EndUsercompil.cpp + opccodex.h
"#define CodeCreateVarInteger
20000",
+ votre source cpp : Créer
la fonction qui sera appelée par EXECUTE.CPP
* Ajouter dans la
Classe ENDUSER4GL.H
: votre nouvelle fonction
* Ajouter dans EXECUTE.CPP
: fonction :
EndUser4glApp::OPCExecute_user(long
OPCcodeExe) :
votre code exécution en y ajoutant la fonction crée ci dessus
|
|
Les
fonctions du
compilateur
Type
de la variable :
P_INTEGER
P_FLOAT
P_DOUBLE
P_STRING
P_ALNUM
P_NAMEVAR
: Nom de la variable
../FichierCommun/Opcsysh.txt
../FichierCommun/Opcdefineh.txt
|
Voir les fonctions Depile au dessus
Mettre à
jour la table des symboles : Ex
: a := b;
OPC_Update_TableSymbole(Nom de la
variable (a), &adresse de la valeur) ../FichierCommun/Excalculcpp.txt
OPC_Update_TableSymboleString(Nom
de la variable , &adresse de la valeur) ../FichierCommun/Exmovecpp.txt
OPC_CreateGlobalVar_TableSymbole(P_INTEGER,zone1,(int)NULL);
OPC_CreateLocalVar_TableSymbole(P_INTEGER,0,zone1,(int)NULL);
../FichierCommun/Exvarcpp.txt
void OPC_ReturnValuesTabSymbole(\
short int , /* type : P_FLOAT,P_STRING etc... */
short int, /* local : LOCAL ou GLOBAL ou CONTEXTE */
char *, /* Nom de la variable */
short int *, /* Taille de la structure : type P_STRUCT, */
short int *, /* nombre d'élément : type P_TABLE */
short int *, /* offsetDebut de la variable dans la structure : type P_STRUCT, */
short int *, /* offsetFin de la variable dans la structure : type P_STRUCT, */
short int *, /* longueur decimale de la variable */
short int *, /* longueur de la variable */
void *); /* ./FichierCommun/Excalculcpp.txt
Récupérer
l'index
une boite de dialogue :
NumDialog
= OPC_Return_NumDialog(zone1);../FichierCommun/Exewinob.txt
Récupérer l'indesx
une fenêtre d'une boite de dialogue :./FichierCommun/Exewinob.txt
Dialog[NumDialog].TabCoordWin[Ival].hWnd
nstruction
EndUser4gl : M_SETNEWPARENTWIN
M_PO L_WIN M_2PP L_WIN M_PF {
CodeExeSetNewParentWin } ",
case CodeExeSetNewParentWin
:
OPCF_Pile_Depile(
P_NAMEVAR, (void *)zone1 );
OPCF_Pile_Depile(
P_INTEGER, (void *)&Ival ) ;
NumDialog
= OPC_Return_NumDialog(zone1);
OPCF_Pile_Depile(
P_NAMEVAR, (void *)zone2 );
OPCF_Pile_Depile(
P_INTEGER, (void *)&Ival2 ) ;
NumDialog2
= OPC_Return_NumDialog(zone2);
OPC_Depile_All();
SetParent(Dialog[NumDialog2].TabCoordWin[Ival2].hWnd,
Dialog[NumDialog].TabCoordWin[Ival].hWnd);//
child,new parent
Vider les
piles de variables : OPC_Depile_All();
Après
chaque exécutiond'un code , la pile doit être
vide .a utiliser en cas de précaution...
|
|
Codes
Sources
|
calcul.cpp
: calculette ordinaire
if.cpp
move.cpp
sql.cpp
ExeSynListView.cpp
ExeWinOb.cpp
etc....
les codes éxécutions
de EnUser4gl ( non compris exewin.cpp,sql.cpp,query.cpp,gif.cpp,grid.cpp....)
|
Exemple de mise en
oeuvre :
Création d'une instruction : CycleCompilerEndUser4gl
: <L_STRING>
Objectif de cette instruction : Démonstration
des 2cycles de EndUser4gl : Ex : C:\ENDUSER4GL\EXAMPLECYCLEENDUSER4GL.EU4GLEXE
Cycle1 : Test de la valeur
<L_string> et affichage d'une boite de dialogue. Rappel :
le cycle 1 permet
de créer la table des symboles,
analyse syntaxique et vérifications souhaitées par
l'informaticien.(notre exemple)
Cycle 2 : Lecture de la
chaine de caractère , concatènation avec "http:\\"
et accès à internet.
Ce sont les actions des codes éxécutions
de EndUser4gl.
Ce qui faut dévélopper
pour cette démonstration :
Dans le programme source EndUserCompil.cpp
:
1°) Création du token
: #TOKEN T_4GL
2°) Création du mot clé
: #DEFINE-MCLE
M_CYCLECOMPILERENDUSER4GL CYCLECOMPILERENDUSER4GL
3°) Ajout du token : T_4GL
à la fin du Token T_INSTRUCTIONS et développemet
de l'instruction CycleCompilerEndUser4gl :
Extrait de Endusercompli.cpp :
"
| T_4GL ;",
// *****************************************************
// PARTICIPATION 4GL :
specialist
// ***************************************************
" T_4GL :
M_CYCLECOMPILERENDUSER4GL M_2PP
L_STRING ",
" {
CodexDemoCycle1 } ",
" {
CodexDemoCycle2 } ; ",
4°) Toujours dans EndUserCompil.cpp,
création des codes exécutions :
" #define CodexDemoCycle1
20600",
" #define CodexDemoCycle2
70000",
5°) Déclarations C/CPP
Dans le fichier entête OPCCODEXE.H
#define CodexDemoCycle1
20600
#define CodexDemoCycle2
70000
6°) Rattachement des 2 codes
éxécutions ci-dessus dans le programme source : EXECUTE.CPP
Extrait de execute.cpp
:
long EndUser4glApp::OPCExecute_user(long
OPCcodeExe)
{ MSG msg;
/* ************** *****************************************
*/
/* DEMO ENDUSER4GL COMPILER
*/
/************** *****************************************
*/
if((
OPCcodeExe == 20600) || ( OPCcodeExe == 70000)
)
return
OPCExecute_DemoEndUser4gl(OPCcodeExe) ;
7°) Développement de la
fonction ci-dessus : OPCExecute_DemoEndUser4gl(OPCcodeExe)
au sein d'un programme source ExedemendUser.cpp
Développement des
cdes éxécutions :
Extrait de exedemoenuser.cpp
:
long EndUser4glApp ::OPCExecute_DemoEndUser4gl(long
OPCcodeExe)
{ char
valeur1 [MAXBUFLENSTRING] = "\0";
char
url [MAXBUFLENSTRING] = "\0";
char
zone1[C_CMP_TAILLE_NOM_DICT] = "\0";
switch(
OPCcodeExe)
{ case
CodexDemoCycle1 : // 20600
see you: EndUsercompil.cpp/Opccodex.h
OPCF_Pile_Depile(
P_NAMEVAR, (void *)zone1 ); // ***NULL
OPCF_Pile_Depile(
P_STRING, (void *)valeur1 ) ;
OPC_Depile_All();
printfEU("Cycle 1 Enduser4gl Compiler : Action %s ",valeur1);STOP();STOP();
OkMsgBox("Enduser4gl
Compiler ","Waiting...%s",valeur1); break;
case
CodexDemoCycle2 : // 70000
see you: EndUsercompil.cpp/Opccodex.h
OPCF_Pile_Depile(
P_NAMEVAR, (void *)zone1 ); // ***NULL
OPCF_Pile_Depile(
P_STRING, (void *)valeur1 ) ;
OPC_Depile_All();
printfEU("Cycle 2 Enduser4gl Compiler : Action %s ",valeur1);STOP();STOP();
lstrcpy(url,"http://");
lstrcat(url,valeur1);
ShellExecute(NULL,_T("open"),url,_T(""),NULL,0);
8) Création de votre fichier
texte avec l'extension *.Eu4glExe
:
c:\endUser4gl\exampleEndUser4lgLib.Eu4glExe.


Bergougnoux
Consulting
14 rue Jean Moulin 37550 St Avertin, Tours FRANCE.
Copyright (c) 2001-2005 ENDUSER4GL
Tous droits réservés.
All rights reserved
fax : 00
33 8 71 22 59 46
contact@enduser4gl.com
|