source dynakit.cpp

source dynakit.cpp

Cette page contient le code des fonctions de la bibliothèque dynakit.cpp

Vous pouvez consulter ces codes, en utilisant les liens ci-dessous, dont les noms sont identiques aux noms des fonctions de la bibliothèque.

fonction init : initialisation des paramètres d'environnement

fonction initdipho : initialisation d'une banque de phonèmes

fonction lonwav : calcul de la longueur en octets d'une source .wav

fonction charger : charge un fichier en mémoire vive

fonction mid : permet de couper une portion d'une chaine de caractère

fonction lmid : permet de couper une chaîne de caractères de grande taille

fonction hdrdata : donne le tableau hdr qui correspond au début des données d'un .wav

fonction lonliste : calcule les positions du début des phonèmes de la banque

fonction extraire : extrait un phonème de la banque de phonème

fonction diredyna : lit une phrase avec les modes de lecture courants

fonction gram : moteur de synthèse

fonction lire : lecture sonore sans synthèse

fonction ficlonliste :

fonction initlonliste :

fonction chemin : recherche le chemin de la langue indiquée

fonction formuler : lecture des formules

fonction epeler : lecture en mode caractères

fonction direwav : lecture des fichiers .wav

fonction entrerpage : charge une page en mémoire vive

fonction donnerligne : saisie d'une ligne en mémoire vive

fonction isoler : traite les caractères isolés pour la synthèse vocale

fonction chiffre : transforme un nombre écrit avec des chiffres pour le lire avec la synthèse vocale

fonction centaine : utilisée par la fonction chiffre pour traiter les centaines

fonction coder : code un caractère avec les données listechar et listecode

fonction coderphr : code les caractères d'une chaîne avec la fonction coder

fonction entrer : charge une chaîne d'un fichier en mémoire vive fonction sortir : écrit une chaîne dans un fichier

fonction dynaplay : lecture sonore sans synthèse

fonction mciplay : lecture des fichiers .wav et .mid en mode mci

fonction saisirpara : définit les paramètres d'environnement contenus dans une chaîne en les prononçant

fonction saisirparamuet : comme saisirpara mais sans prononcer les paramètres d'environnement rencontrés dans une chaîne

fonction ajouter : ajoute des données à la suite d'un tableau de données

fonction couper : coupe un tableau de données

fonction copier : copie un tableau de données

fonction mciplaymot : lecture d'un mot en mode mci

fonction synthese : synthèse sonore en mode mci

fonction analyse : analyse sonore en mode mci

fonction indication : recherche des indications pour l'analyse et la synthèse mci

fonction htmind : recherche des indications dans un fichier html

fonction executerind : exécution d'une indication de commande

//dynakit.cpp //auteur : c.hartmann //description : moteur de synthŠse dynamique #include "dynaincl.h" #include "dynavar.h"

fonction init int in it(char *ficinit) { #include "dyna.h" int i;
char phr[512];
char page[2048];
strcpy(chembase,"\\sv3\\");
strcpy(listeind,"œ#~");
strcpy(listesep," !\"#$%&()*+,-./0123456789:;
<=>?@[\\]^`{|àáâãäåæçèéêëìíîïðñòóôõö÷øûüý");
strcpy(ficlec,"lisez.txt");
isel=1;
imode=1;
ivoix=40;
iparle=1;
ilang=0;
ipos=1;
iligne=1;
ipage=1;
i=entrerpage(page,1,ficinit);
if(i==0) return 0;
saisirparamuet(page,phr);
return 1;
}

fonction initdipho int initdipho(char *nomdipho,char *diphonem,char *listedipho,long *londipho) { #include "dyna.h" int itest;
long l;
char fic[80];
sprintf(fic,"%sdyna.ini",nomdipho);
init(fic);
sprintf(fic,"%spho.wav",nomdipho);
l=charger(fic,diphonem);
if(l==0) return 1;
sprintf(fic,"%spho.ind",nomdipho);
itest=initlonliste(listedipho,fic,londipho);
return itest;
}

fonction lonwav long lonwav(char *ficwav) { #include "dyna.h" FILE *in;
int i;
unsigned char num;
long lon;
long londata;
unsigned char numout;
if((in=fopen(ficwav,"rb"))==NULL) { fprintf(stderr,"impossible d'ouvrir le fichier %s en lecture\n",ficwav);
fclose(in);
return 0;
} for(i=1;
i<=44;
i++) { num=getc(in);
if(i==5) lon=num;
else if(i==6) lon+=(256L*num);
else if(i==7) lon+=256L*256L*num;
else if(i==8) lon+=256L*256L*256L*num;
else if(i==41) londata=num;
else if(i==42) londata+=(256L*num);
else if(i==43) londata+=256L*256L*num;
else if(i==44) londata+=256L*256L*256L*num;
} fclose(in);
lon+=8;
londata+=44;
if(lon==londata) return lon;
else return 1L;
}

fonction charger
long charger(char *ficwav,char *pho) { #include "dyna.h" fstream fic;
char c;
long lon;
fic.open(ficwav,ios::in);
if(!fic) { MessageBox(NULL,ficwav,"impossible d'ouvrir en lecture",MB_OK);
return 0L;
} lon=0;
while(c != EOF) { c=fic.get();
pho[lon]=c;
if(lon>99998) goto fin;
lon++;
} fin : ;
fic.close();
if(strstr(ficwav,".wav") != NULL) { pho[25]=ivoix;
pho[29]=ivoix;
} return lon;
}

fonction mid
char mid(char *cible, char *source, int d, int l) { int i=0;
*cible=0;
if (l<=0) { return 1;
} else { if(d<=0) { return 1;
} else { while ( (*source != 0) && (++i if (*source==0) return 1;
else { while ( (*source != 0) && (l-->0) ) *cible++=*source++;
*cible=0;
if (l>0) return 1;
else return 0;
} } } }

fonction lmid
char lmid(char *cible, char *source, long d, long l) { int i=0;
*cible=0;
if (l<=0) { return 1;
} else { if(d<=0) { return 1;
} else { while ( (*source != 0) && (++i if (*source==0) return 1;
else { while ( (*source != 0) && (l-->0) ) *cible++=*source++;
*cible=0;
if (l>0) return 1;
else return 0;
} } } }

fonction hdrdata
long hdrdata(char *hdr,char *data,long lon) { #include "dyna.h" long i;
unsigned char n1;
unsigned char n2;
unsigned char n3;
unsigned char n4;
long londeb;
long londata;
if(lon>100000L) lon=44L;
londeb=lon-8L;
n4=londeb/(256L*256L*256L);
londeb=londeb-256L*256L*256L*n4;
n3=londeb/(256L*256L);
londeb=londeb-256L*256L*n3;
n2=londeb/256L;
n1=londeb-256L*n2;
hdr[4]=n1;
hdr[5]=n2;
hdr[6]=n3;
hdr[7]=n4;
londata=lon-44L;
n4=londata/(256L*256L*256L);
londata=londata-256L*256L*256L*n4;
n3=londata/(256L*256L);
londata=londata-256L*256L*n3;
n2=londata/256L;
n1=londata-256L*n2;
hdr[40]=n1;
hdr[41]=n2;
hdr[42]=n3;
hdr[43]=n4;
hdr[25]=ivoix;
hdr[29]=ivoix;
for(i=44L;
ii++) hdr[i]=data[i-43L];
return lon;
}

fonction lonliste
int lonliste(char *liste,long*indice) { #include "dyna.h" int i;
int j;
int lon;
long l;
char l1[10];
char mot[512];
j=0;
lon=strlen(liste);
strcpy(mot,"");
for(i=1;
i<=lon;
i++) { mid(l1,liste,i,1);
if(strcmp(l1," ")==0 && strcmp(mot,"") != 0) { if(j==200) return j;
strcat(mot,".wav");
l=lonwav(mot);
if(l>0) { j++;
indice[j]=l;
} strcpy(mot,"");
} else if(strcmp(l1," ") != 0) strcat(mot,l1);
} indice[0]=j;
return j;
}

fonction extraire
long extraire(char *mot,char *liste,char *hdrliste,long *indice,char *data) { #include "dyna.h" int i;
int j;
int imot;
int lon;
long l;
long ideb;
long ilon;
char l1[10];
char prov[80];
lon=strlen(liste);
j=0;
imot=0;
strcpy(prov,"");
for(i=1;
i<=lon;
i++) { mid(l1,liste,i,1);
if(strcmp(l1," ")==0 && strcmp(prov,"") != 0) { j++;
if(strcmp(prov,mot)==0) { imot=j;
i=lon;
} else strcpy(prov,"");
} else if(strcmp(l1," ") != 0) strcat(prov,l1);
} if(imot==0) { data[0]=0;
return 0;
} ilon=indice[imot];
ideb=0;
if(imot>1) for(i=1;
ii++) ideb=ideb+indice[i]-44L;
for(l=ideb;
l<=ideb+ilon;
l++) data[l-ideb+1]=hdrliste[l+44];
return ilon;
}

fonction diredyna
int diredyna(char *phr,char *listedipho,char *diphonem,long *londipho,char *hdr) { #include "dyna.h" int i;
int lon;
int numsymb;
long l;
long lmot;
long ldataprv;
char l1[10];
char mot[1024];
char prov[1024];
char r[511];
char indprv[1024];
char data[100000];
char data1[32000];
char dataprv[100000];
data[0]=0;
for(l=1;
l<100000;
l++) data[l]=128;
dataprv[0]=0;
ldataprv=0L;
for(l=1;
l<100000;
l++) dataprv[l]=128;
if(iparle==2 || iparle==3) { if(iparle==2) sprintf(prov,"%sprv.txt",chembase);
else sprintf(prov,"prv%d_%d.txt",ipage,iligne);
sortir(phr,prov);
sprintf(indprv,"imode=%d",imode);
} strcat(phr," ");
if(imode==4) { chiffre("",phr,r);
strcpy(phr,r);
strcat(phr," ");
lon=strlen(phr);
strcpy(mot,"");
strcpy(r,"");
for(i=1;
i<=lon;
i++) { mid(l1,phr,i,1);
if(strstr(listesep,l1) != NULL && *l1 !=32) { strcat(r," ");
strcat(l1," ");
} strcat(r,l1);
} } else if(imode==5 || imode==6) { lon=strlen(phr);
strcpy(r,"");
for(i=1;
i<=lon;
i++) { mid(l1,phr,i,1);
numsymb=*l1;
if(numsymb<0) numsymb+=256;
sprintf(l1,"%d ",numsymb);
strcat(r,l1);
} } else if(imode<3) { if(imode==1 || imode==2) { chiffre("",phr,r);
isolercara(r,phr);
strcpy(r,phr);
} else sprintf(r,"%s ",phr);
//strlwr(r);
//gram(r);
} else strcpy(r,phr);
lon=strlen(r);
strcpy(mot,"");
for(i=1;
i<=lon;
i++) { mid(l1,r,i,1);
if(strcmp(l1,"³")==0) { strcpy(prov,"");
while(strcmp(l1,"#") != 0 && i mid(l1,r,i,1);
strcat(prov,l1);
} lire(prov);
} else if(strcmp(l1," ")==0 && strcmp(mot,"") != 0) { if(strstr("kq",mot) != NULL) strcpy(mot,"c");
lmot=extraire(mot,listedipho,diphonem,londipho,data1);
if(lmot>0) { if(iparle==2 || iparle==3) { if(ldataprv+lmot>99998) i=lon;
else ldataprv=ajouter(dataprv,ldataprv,data1,lmot,mot,indprv);
} else { hdrdata(hdr,data1,lmot);
PlaySound(hdr,NULL,SND_MEMORY);
} } else { if(imode<2 && strstr(",;
:!?_­./",mot) != NULL) { if(strstr(":!?.",mot) != NULL) lmot=4000;
else lmot=2000;
if(iparle==2 || iparle==3) { if(ldataprv+lmot>99998) i=lon;
else ldataprv=ajouter(dataprv,ldataprv,data,lmot,mot,indprv);
} else { hdrdata(hdr,data,lmot);
PlaySound(hdr,NULL,SND_MEMORY);
} } else { if(strlen(mot)>0) { if(imode==5 || imode==7) sprintf(prov,"%s%s.wav",chemlang,mot);
else if(imode==6 || imode==8) sprintf(prov,"%s.wav",mot);
else if(strlen(mot)==1) sprintf(prov,"%s%d.wav",chemlang,*mot);
else sprintf(prov,"%swav\\%s.wav",chembase,mot);
lmot=charger(prov,hdr);
if(lmot>44 && lmot<100000) { lmot-=100;
for(l=45;
l<=lmot;
l++) data[l-44]=hdr[l];
if(iparle==2 || iparle==3) { if(ldataprv+lmot>99999) i=lon;
else ldataprv=ajouter(dataprv,ldataprv,data,lmot-44,mot,indprv);
} else PlaySound(hdr,NULL,SND_MEMORY);
} } } } strcpy(mot,"");
} else if(strcmp(l1," ") != 0) strcat(mot,l1);
} if(iparle==2 || iparle==3) { hdrdata(hdr,dataprv,ldataprv);
if(iparle==2) sprintf(prov,"%sprv.wav",chembase);
else sprintf(prov,"prv%d_%d.wav",ipage,iligne);
copier(hdr,ldataprv+44L,prov);
PlaySound(prov,NULL,SND_ASYNC);
if(iparle==2) sprintf(prov,"%sprv.ind",chembase);
else sprintf(prov,"prv%d_%d.ind",ipage,iligne);
sortir(indprv,prov);
} return 0;
}

fonction gram
#pragma argsused int gram(char *r) { #include "dyna.h" //code return 0;
}

fonction lire
int lire(char *phr) { #include "dyna.h" if(imode<=4) formuler(phr);
else if(imode==5 || imode==6) epeler(phr);
else if(imode==7 || imode==8) direwav(phr);
return 0;
}

fonction ficlonliste
int ficlonliste(char *liste,char *listeindi,long*indice) { #include "dyna.h" FILE *out;
int i;
int j;
int lon;
long l;
char l1[10];
char mot[512];
if((out=fopen(listeindi,"w"))==NULL) { return 1;
} j=0;
lon=strlen(liste);
strcpy(mot,"");
for(i=1;
i<=lon;
i++) { mid(l1,liste,i,1);
if(strcmp(l1," ")==0 && strcmp(mot,"") != 0) { if(j==200) { fclose(out);
return j;
} strcat(mot,".wav");
l=lonwav(mot);
if(l>0) { j++;
indice[j]=l;
fputs(mot,out);
sprintf(mot,"%ld\n",l);
fputs(mot,out);
} else { fclose(out);
return 1;
} strcpy(mot,"");
} else if(strcmp(l1," ") != 0) strcat(mot,l1);
} fclose(out);
indice[0]=j;
return j;
}

fonction initlonliste
int initlonliste(char *liste,char *listeindi,long*indice) { #include "dyna.h" FILE *in;
char *point;
int i;
int j;
long l;
long ltotal;
char mot[512];
char prov[512];
if((in=fopen(listeindi,"r"))==NULL) { return 1;
} j=0;
ltotal=0L;
strcpy(liste,"");
for(i=0;
i<=200;
i++) indice[i]=0L;
while(!feof(in)) { fgets(mot,512,in);
point=strstr(mot,".wav");
if(point) { mid(prov,mot,1,strlen(mot)-strlen(point));
point+=4;
l=atol(point);
ltotal+=l;
if(ltotal<100000L) { j++;
strcat(liste,prov);
strcat(liste," ");
indice[j]=l;
} else { indice[0]=(long) j;
fclose(in);
return -1;
} } else { fclose(in);
return -1;
} } fclose(in);
indice[0]=(long) j;
return j;
}

fonction chemin
int chemin(int indi) { #include "dyna.h");
strcpy(chemlang,chembase);
if(indi==0) strcat(chemlang,"studyvox\\");
else if(indi==4) strcat(chemlang,"musivox\\");
else if(indi==6) strcat(chemlang,"mathvox\\");
return 0;
}

fonction formuler
int formuler(char *phr) { #include "dyna.h" int i;
int lon;
int numsymb;
char l1[10];
char ficwav[80];
char mot[512];
char prov[512];
char ent[512];
char hdr[100000];
sprintf(ent,"%s ",phr);
chiffre("",ent,prov);
lon=strlen(prov);
strcpy(mot,"");
for(i=1;
i<=lon;
i++) { mid(l1,prov,i,1);
if(strstr(listesep,l1)) { numsymb=*mot;
if(numsymb<0) numsymb+=256;
if(strcmp(mot,"") != 0) { if(strlen(mot)==1) sprintf(ficwav,"%s%d.wav",chemlang,numsymb);
else sprintf(ficwav,"%swav\\%s.wav",chembase,mot);
dynaplay(ficwav,hdr);
} numsymb=*l1;
if(numsymb<0) numsymb+=256;
sprintf(ficwav,"%s%d.wav",chemlang,numsymb);
dynaplay(ficwav,hdr);
strcpy(mot,"");
} else if(strcmp(l1," ") != 0) strcat(mot,l1);
} return 0;
}

fonction epeler
int epeler(char *phr) { #include "dyna.h" int i;
int lon;
int numsymb;
char l1[10];
char ficwav[80];
char hdr[100000];
lon=strlen(phr);
for(i=1;
i<=lon;
i++) { mid(l1,phr,i,1);
numsymb=*l1;
if(numsymb<0) numsymb+=256;
if(imode != 6) sprintf(ficwav,"%s%d.wav",chemlang,numsymb);
else sprintf(ficwav,"%d.wav",numsymb);
dynaplay(ficwav,hdr);
} return 0;
}

fonction direwav
int direwav(char *phr) { #include "dyna.h" int i;
int lon;
int numsymb;
char l1[10];
char ficwav[80];
char mot[512];
char prov[512];
char hdr[100000];
sprintf(prov,"%s ",phr);
lon=strlen(prov);
strcpy(mot,"");
for(i=1;
i<=lon;
i++) { mid(l1,prov,i,1);
if(strcmp(l1," ")==0 && i<=lon) { if(imode==4) sprintf(ficwav,"%swav\\%s.wav",chembase,mot);
else if(imode==6 || imode==8) sprintf(ficwav,"%s.wav",mot);
else sprintf(ficwav,"%s%s.wav",chemlang,mot);
dynaplay(ficwav,hdr);
strcpy(mot,"");
} else if(strcmp(l1," ") != 0) strcat(mot,l1);
} return 0;
}

fonction entrerpage
int entrerpage(char *page,int ipa,char *fichier) { #include "dyna.h" fstream fic;
char c;
int i;
long l;
long lon;
char l1[10];
strcpy(page,"");
fic.open(fichier,ios::in);
if(!fic) { MessageBox(NULL,fichier,"impossible d'ouvrir en lecture",MB_YESNOCANCEL);
return 0;
} ipa--;
l=2000L*ipa;
lon=0L;
i=0;
while(c != EOF) { c=fic.get();
if(lon>=l) { i++;
sprintf(l1,"%c",c);
strcat(page,l1);
} if(i==2000) { fic.close();
return i;
} lon++;
} fic.close();
return i;
}

fonction donnerligne
int donnerligne(char *ligne,int ili,char *page) { #include "dyna.h" int itest;
int i;
int icou;
int lon;
char l1[10];
itest=0;
icou=0;
lon=strlen(page);
strcpy(ligne,"");
for(i=1;
i<=lon;
i++) { mid(l1,page,i,1);
if(icou==ili-1) itest=1;
if(*l1>0 && *l1<32) icou++;
else if(itest==1) strcat(ligne,l1);
if(icou>=ili) return i;
} return i;
}

fonction isoler
int isolercara(char *ent,char *sort) { #include "dyna.h" int i;
int lon;
int numsymb;
char l1[10];
sprintf(sort," %s ",ent);
strcpy(ent,sort);
lon=strlen(ent);
strcpy(sort,"");
for(i=1;
i<=lon;
i++) { mid(l1,ent,i,1);
strcat(sort,l1);
if(strstr(listesep,l1) != NULL) { mid(l1,ent,i+2,1);
if(strstr(listesep,l1) != NULL && strcmp(l1,"") != 0) { mid(l1,ent,i+1,1);
if(*l1>64 && *l1<91) strcat(sort,"grand ");
strlwr(l1);
if(strstr("bcdgptv",l1) != NULL) strcat(l1,"‚");
else if(strstr("flmnrs",l1) != NULL) strcat(sort,"Š");
else if(strcmp(l1,"h")==0) strcpy(l1,"ach");
else if(strcmp(l1,"j")==0) strcpy(l1,"ji");
else if(strcmp(l1,"k")==0) strcpy(l1,"ka");
else if(strcmp(l1,"q")==0) strcpy(l1,"cu");
else if(strcmp(l1,"w")==0) strcpy(l1,"double v‚");
else if(strcmp(l1,"x")==0) strcpy(l1,"ics");
else if(strcmp(l1,"y")==0 && imode>2) strcpy(l1,"i graic");
else if(strcmp(l1,"z")==0) strcpy(l1,"zaid");
strcat(sort,l1);
i++;
} } } return 0;
}

fonction chiffre
#pragma argsused int chiffre(char *rep,char *ent,char *sort) { #include "dyna.h" int i;
int num;
int lon;
int lonnum;
char l1[10];
char ls[10];
char r[511];
char nom[511];
lon=strlen(ent);
strcpy(sort,"");
for(i=1;
i<=lon;
i++) { if(strlen(sort)>490) { i=lon;
//printf("texte trop long\n");
} mid(l1,ent,i,1);
if(strcmp(l1,".")==0 || strcmp(l1,",")==0) { mid(ls,ent,i+1,1);
if(*ls>47 && *ls<58) strcpy(l1,",");
} if(*l1>47 && *l1<58) { strcpy(r,"");
while(*l1==48) { strcat(sort," 0");
i++;
mid(l1,ent,i,1);
} while(*l1>47 && *l1<58) { strcat(r,l1);
i++;
mid(l1,ent,i,1);
} lonnum=strlen(r);
if(lonnum>0) { if(lonnum>=13) { //printf("erreur nombre\n");
strcpy(sort,ent);
return 1;
} if(lonnum>9 && lonnum<13) { mid(l1,r,1,lonnum-9);
centaine(l1,nom);
strcat(sort,nom);
strcat(sort," milliard ");
mid(l1,r,lonnum-8,9);
strcpy(r,l1);
lonnum=strlen(r);
} if(lonnum>6 && lonnum<10) { mid(l1,r,1,lonnum-6);
centaine(l1,nom);
strcat(sort,nom);
if(strcmp(nom,"") != 0) strcat(sort," million ");
mid(l1,r,lonnum-5,6);
strcpy(r,l1);
lonnum=strlen(r);
} if(lonnum>3 && lonnum<7) { mid(l1,r,1,lonnum-3);
if(strcmp(l1,"001") != 0 && strcmp(l1,"1") != 0) { centaine(l1,nom);
strcat(sort,nom);
} if(strcmp(nom,"") != 0 || strcmp(l1,"1")==0) strcat(sort," mille ");
mid(l1,r,lonnum-2,3);
strcpy(r,l1);
} centaine(r,nom);
strcat(sort,nom);
} i--;
} else strcat(sort,l1);
} return 0;
}

fonction centaine
int centaine(char *r,char *nom) { #include "dyna.h" int j;
int lonnum;
char l1[10];
char ls[10];
strcpy(nom,"");
lonnum=strlen(r);
if(strcmp(r,"1")==0) strcat(nom," un ");
else for(j=lonnum;
j>=1;
j--) { mid(l1,r,lonnum-j+1,1);
if(j==3 && *l1 != 48) { if(*l1 != 49) strcat(nom,l1);
strcat(nom," cent ");
} else if(j==2) { if(strstr("179",l1) != NULL) { if(strcmp(l1,"7")==0) strcat(nom," soixante");
else if(strcmp(l1,"9")==0) strcat(nom," quatre_vingt");
mid(ls,r,lonnum,1);
j=1;
if(strcmp(ls,"0")==0) strcat(nom," dix");
else if(strcmp(ls,"1")==0) { if(strcmp(l1,"7")==0) strcat(nom," et");
strcat(nom," onze");
} else if(strcmp(ls,"2")==0) strcat(nom," douze");
else if(strcmp(ls,"3")==0) strcat(nom," treize");
else if(strcmp(ls,"4")==0) strcat(nom," quatorze");
else if(strcmp(ls,"5")==0) strcat(nom," quinze");
else if(strcmp(ls,"6")==0) strcat(nom," seize");
else if(strcmp(ls,"7")==0) strcat(nom," dix_sept ");
else if(strcmp(ls,"8")==0) strcat(nom," dix_huit ");
else if(strcmp(ls,"9")==0) strcat(nom," dix_neuf ");
} else if(strcmp(l1,"2")==0) strcat(nom," vingt");
else if(strcmp(l1,"3")==0) strcat(nom," trente");
else if(strcmp(l1,"4")==0) strcat(nom," quarante");
else if(strcmp(l1,"5")==0) strcat(nom," cinquante");
else if(strcmp(l1,"6")==0) strcat(nom," soixante");
else if(strcmp(l1,"8")==0) { strcat(nom," quatre_vingt");
mid(ls,r,lonnum,1);
if(strcmp(ls,"1")==0) { strcat(nom," 1 ");
j=1;
} } } else if(*l1 != 48) { mid(ls,r,lonnum-1,1);
if(*ls != 48 && strcmp(ls,"") != 0) if(strcmp(l1,"1")==0) strcat(nom," et");
if(*l1==48) strcat(nom," zero ");
else if(*l1==49) strcat(nom," un ");
else if(*l1==50) strcat(nom," deux ");
else if(*l1==51) strcat(nom," trois ");
else if(*l1==52) strcat(nom," quatre ");
else if(*l1==53) strcat(nom," cinq ");
else if(*l1==54) strcat(nom," six ");
else if(*l1==55) strcat(nom," sept ");
else if(*l1==56) strcat(nom," huit ");
else if(*l1==57) strcat(nom," neuf ");
} } return 0;
}

fonction dynaplay
int dynaplay(char *ficwav,char *hdr) { #include "dyna.h" long l;
if(iparle==0) return 0;
if(iparle==1 || iparle==3) { l=charger(ficwav,hdr);
if(l==0) return 0;
PlaySound(hdr,NULL,SND_MEMORY);
} else if(iparle==2) PlaySound(ficwav,NULL,SND_SYNC);
else PlaySound(ficwav,NULL,SND_ASYNC);
return 0;
}

fonction mciplay
DWORD mciplay(char *ficmci,long ldeb,long lfin,int iflag) { #include "dyna.h" int id;
UINT wDeviceID;
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_PLAY_PARMS mciPlayParms;
MCI_STATUS_PARMS mciStatusParms;
if(strstr(ficmci,".mid") != NULL) mciOpenParms.lpstrDeviceType="sequencer";
else if(strstr(ficmci,".wav") != NULL) mciOpenParms.lpstrDeviceType="waveaudio";
mciOpenParms.lpstrElementName=(LPSTR) ficmci;
if((dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD) (LPVOID) &mciOpenParms))!=0L) { MessageBox(NULL,"erreur mci","",MB_OK);
return (dwReturn);
} wDeviceID = mciOpenParms.wDeviceID;
mciStatusParms.dwItem=MCI_SEQ_STATUS_PORT;
if ((dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD) (LPVOID) &mciStatusParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"port midi introuvable","",MB_OK);
return (dwReturn);
} mciPlayParms.dwCallback = (DWORD) 0L;
mciPlayParms.dwFrom=ldeb;
mciPlayParms.dwTo=lfin;
if(iflag==2) { if(ldeb==0 && lfin==0) { if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_WAIT, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} } else if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_WAIT | MCI_FROM | MCI_TO, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
} else if(iflag==1 || iflag==3) { debut:;
if(ldeb==0 && lfin==0) { if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} } else if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM | MCI_TO, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} suite:;
id=MessageBox(NULL, "OUI pour PAUSE, NON pour RECOMMENCER au début, ANNULER pour STOP", "Pause, retour au début ou arrêt du canal sonore", MB_YESNOCANCEL);
if(id==IDYES) { mciSendCommand(wDeviceID, MCI_PAUSE, 0, NULL);
id=MessageBox(NULL,"oui=continuer non=d‚but esc=pause","",MB_YESNOCANCEL);
if(id==IDYES) { mciSendCommand(wDeviceID, MCI_RESUME, 0, NULL);
goto suite;
} else if(id==IDNO) { mciSendCommand(wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
goto debut;
} else mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
} else if(id==IDNO) { mciSendCommand(wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
goto debut;
} else //idcancel// mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
} return 0;
}

fonction coder
int coder(char *listechar,char *listecode,char *l1) { #include "dyna.h" char *point;
if(strcmp(l1,"")==0) return 0;
point=strstr(listechar,l1);
if(!point) return 0;
mid(l1,listecode,strlen(listecode)-strlen(point)+1,1);
return 1;
}

fonction coder
int coderphr(char *listechar,char *listecode,char *phr) { #include "dyna.h" int i;
int lon;
char l1[2];
char prov[2048];
lon=strlen(phr);
if(lon==0) return 0;
strcpy(prov,"");
for(i=1;
i<=lon;
i++) { mid(l1,phr,i,1);
coder(listechar,listecode,l1);
strcat(prov,l1);
} strcpy(phr,prov);
return lon;
}

fonction entrer
int entrer(char *phr,char *fic) { #include "dyna.h" FILE *inout;
if((inout=fopen(fic,"r"))==NULL) { //fprintf(stderr,"impossible d'ouvrir %s en lecture\n",fic);
return 1;
} fgets(phr,511,inout);
fclose(inout);
return 0;
}

fonction sortir
int sortir(char *phr,char *fic) { #include "dyna.h" FILE *inout;
if((inout=fopen(fic,"w"))==NULL) { //fprintf(stderr,"impossible d'ouvrir %s en ‚criture\n",fic);
return 1;
} fputs(phr,inout);
fclose(inout);
return 0;
}

fonction saisirpara
int saisirpara(char *phr) { #include "dyna.h" char *point;
int itest;
char prov[512];
itest=0;
point=strstr(phr,"chembase=");
if(point) { point+=9;
strcpy(chembase,point);
return 1;
} point=strstr(phr,"listesep=");
if(point) { point+=9;
strcpy(listesep,point);
return 1;
} point=strstr(phr,"listeind=");
if(point) { point+=9;
strcpy(listeind,point);
return 1;
} point=strstr(phr,"ficlec=");
if(point) { point+=7;
strcpy(ficlec,point);
return 4;
} if(strstr(phr,".bat") != NULL || strstr(phr,".exe") != NULL || strstr(phr,".com") != NULL) { WinExec(phr,SW_MAXIMIZE);
return 1;
} if(strstr(phr,".wri") != NULL || strstr(phr,".doc") != NULL || strstr(phr,".txt") != NULL || strstr(phr,".mid") != NULL || strstr(phr,".wav") != NULL) { sprintf(prov,"start %s",phr);
WinExec(prov,SW_MAXIMIZE);
return 1;
} point=strstr(phr,"isel=");
if(point) { itest=1;
point+=5;
isel=atoi(point);
if(isel==0) formuler("clavier");
else if(isel==1) formuler("fichier");
else if(isel==2) formuler("sortie dos");
else isel=0;
} point=strstr(phr,"imode=");
if(point) { itest=1;
point+=6;
imode=atoi(point);
formuler("mode");
if(imode==0) formuler("texte");
else if(imode==1) formuler("chiffre texte");
else if(imode==2) formuler("dictee");
else if(imode==4) formuler("formule");
else if(imode==5) formuler("caracter");
else if(imode==6) formuler("symbole");
else if(imode==7) formuler("wav");
else if(imode==8) formuler("wav rubrique");
else imode=1;
} point=strstr(phr,"ivoix=");
if(point) { itest=1;
point+=6;
ivoix=atoi(point);
if(ivoix<36 || ivoix>60) ivoix=38;
} point=strstr(phr,"iparle=");
if(point) { itest=1;
point+=7;
iparle=atoi(point);
if(iparle==0) formuler("mode muet");
else if(iparle==1) formuler("mode_asy");
else if(iparle==2) formuler("mode_syn");
else iparle=1;
} point=strstr(phr,"ilang=");
if(point) { itest=1;
point+=6;
ilang=atoi(point);
if(ilang==0) formuler("francais");
else if(ilang==4) formuler("musique");
else if(ilang==6) formuler("mathemat");
else ilang=0;
chemin(ilang);
} point=strstr(phr,"ipos=");
if(point) { point+=5;
ipos=atoi(point);
itest=3;
} point=strstr(phr,"iligne=");
if(point) { point+=7;
iligne=atoi(point);
itest=2;
} point=strstr(phr,"ipage=");
if(point) { point+=6;
ipage=atoi(point);
itest=3;
} return itest;
}

fonction saisirparamuet
int saisirparamuet(char *page,char *phr) { #include "dyna.h" char *point;
int itest;
itest=0;
strcpy(phr,page);
point=strstr(page,"chembase=");
if(point) { point+=9;
strcpy(phr,point);
strcpy(chembase,phr);
point=strstr(phr,"\n");
if(point) { mid(chembase,phr,1,strlen(phr)-strlen(point));
strcpy(phr,chembase);
} itest=1;
} point=strstr(page,"listesep=");
if(point) { point+=9;
strcpy(phr,point);
strcpy(listesep,phr);
point=strstr(phr,"\n");
if(point) { mid(listesep,phr,1,strlen(phr)-strlen(point));
strcpy(phr,listesep);
} itest=1;
} point=strstr(page,"listeind=");
if(point) { point+=9;
strcpy(phr,point);
strcpy(listeind,phr);
point=strstr(phr,"\n");
if(point) { mid(listeind,phr,1,strlen(phr)-strlen(point));
strcpy(phr,listeind);
} itest=1;
} point=strstr(page,"ficlec=");
if(point) { point+=7;
strcpy(phr,point);
strcpy(ficlec,phr);
point=strstr(phr,"\n");
if(point) { mid(ficlec,phr,1,strlen(phr)-strlen(point));
strcpy(phr,ficlec);
} itest=4;
} point=strstr(page,"isel=");
if(point) { point+=5;
isel=atoi(point);
point++;
strcpy(phr,point);
itest=1;
} point=strstr(page,"imode=");
if(point) { point+=6;
imode=atoi(point);
point++;
strcpy(phr,point);
itest=1;
} point=strstr(page,"ivoix=");
if(point) { point+=6;
ivoix=atoi(point);
point+=2;
strcpy(phr,point);
itest=1;
} point=strstr(page,"iparle=");
if(point) { point+=7;
iparle=atoi(point);
point++;
strcpy(phr,point);
itest=1;
} point=strstr(page,"ilang=");
if(point) { point+=6;
ilang=atoi(point);
point++;
strcpy(phr,point);
itest=1;
} chemin(ilang);
point=strstr(page,"ipos=");
if(point) { point+=5;
ipos=atoi(point);
itest=3;
} point=strstr(page,"iligne=");
if(point) { point+=7;
iligne=atoi(point);
itest=2;
} point=strstr(page,"ipage=");
if(point) { point+=6;
ipage=atoi(point);
itest=3;
} return itest;
}

fonction ajouter
long ajouter(char *data1,long ldata1,char *data2,long ldata2,char *mot,char *indprv) { #include "dyna.h" long ltotal;
long l;
char prov[80];
ltotal=ldata1+ldata2;
if(ltotal>99999) return ldata1;
for(l=1;
l<=ldata2;
l++) data1[ldata1+l]=data2[l];
sprintf(prov,"$%s#%u~%u",mot,ldata1,ldata2);
strcat(indprv,prov);
return ltotal;
}

fonction couper
long couper(char *data1,long ldata1,char *data2,long ldata2,long i,long n) { #include "dyna.h" long l;
if(i>ldata2 || n<=0) { ldata1=0;
return 0;
} if(i+n-1>ldata2) n=ldata2-i+1;
if(i+n>99998) n=99998-i;
if(n>ldata1) n=ldata1;
for(l=i;
ll++) data1[l-i+1]=data2[l];
ldata1=n;
return ldata1;
}

fonction copier
int copier(char *hdr,long lhdr,char *ficwav) { #include "dyna.h" FILE *out;
long l;
if((out=fopen(ficwav,"wb"))==NULL) { MessageBox(NULL,"impossible d'ouvrir en ecriture",ficwav,MB_YESNOCANCEL);
return 1;
} for(l=0;
ll++) putc(hdr[l],out);
fclose(out);
return 0;
}

fonction mciplaymot
DWORD mciplaymot(char *phrmot,char *ficmci,char *indprv,long plus,long moins,int iflag) { #include "dyna.h" int itest;
int k;
int lon;
int id;
long ldeb;
long lfin;
UINT wDeviceID;
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_PLAY_PARMS mciPlayParms;
MCI_STATUS_PARMS mciStatusParms;
char l1[10];
char mot[80];
char motind[80];
char phr[512];
char texte[512];
char indcou[1024];
sprintf(phr,"%s ",phrmot);
strcpy(indcou,indprv);
if(strstr(ficmci,".mid") != NULL) mciOpenParms.lpstrDeviceType="sequencer";
else if(strstr(ficmci,".wav") != NULL) mciOpenParms.lpstrDeviceType="waveaudio";
mciOpenParms.lpstrElementName=(LPSTR) ficmci;
if((dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD) (LPVOID) &mciOpenParms))!=0L) { MessageBox(NULL,"erreur mci","",MB_OK);
return (dwReturn);
} wDeviceID = mciOpenParms.wDeviceID;
mciStatusParms.dwItem=MCI_SEQ_STATUS_PORT;
if ((dwReturn = mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD) (LPVOID) &mciStatusParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"port midi introuvable","",MB_OK);
return (dwReturn);
} mciPlayParms.dwCallback = (DWORD) 0L;
if(iflag==2) { //traitement de la phrase lon=strlen(phr);
strcpy(mot,"");
for(k=1;
k<=lon;
k++) { mid(l1,phr,k,1);
if(strcmp(l1," ") != 0) strcat(mot,l1);
else { sprintf(motind,"œ%s#",mot);
itest=analyse(motind,indprv,texte,ldeb,lfin);
if(itest==1) { mciPlayParms.dwFrom=ldeb+plus;
mciPlayParms.dwTo=lfin-moins;
if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_WAIT | MCI_FROM | MCI_TO, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} } strcpy(mot,"");
} //fin du traitement de la phrase } mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
} else if(iflag==1 || iflag==3) { debut:;
if(ldeb==0 && lfin==0) { if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} } else if ((dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM | MCI_TO, (DWORD) (LPVOID) &mciPlayParms))!=0L) { mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
MessageBox(NULL,"lecture du fichier mci impossible","",MB_OK);
return (dwReturn);
} suite:;
id=MessageBox(NULL, "OUI pour PAUSE, NON pour RECOMMENCER au début, ANNULER pour STOP", "Pause, retour au début ou arrêt du canal sonore", MB_YESNOCANCEL);
if(id==IDYES) { mciSendCommand(wDeviceID, MCI_PAUSE, 0, NULL);
id=MessageBox(NULL,"oui=continuer non=d‚but esc=pause","",MB_YESNOCANCEL);
if(id==IDYES) { mciSendCommand(wDeviceID, MCI_RESUME, 0, NULL);
goto suite;
} else if(id==IDNO) { mciSendCommand(wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
goto debut;
} else mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
} else if(id==IDNO) { mciSendCommand(wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
goto debut;
} else //idcancel// mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
} return 0;
}

fonction synthese
int synthese(char *indcou,char *texte,long &ldeb,long &lfin) { #include "dyna.h" char *point;
point=strstr(indcou,"œ");
if(point) { point++;
strcpy(indcou,point);
point=strstr(indcou,"#");
if(point) { mid(texte,indcou,1,strlen(indcou)-strlen(point));
point++;
ldeb=atol(point);
point=strstr(indcou,"~");
if(point) { point++;
lfin=atol(point);
strcpy(indcou,point);
} else return 0;
} else return 0;
} else return 0;
if(strstr(indcou,"œ")==NULL) return 0;
return 1;
}

fonction analyse
int analyse(char *motind,char *indprv,char *texte,long &ldeb,long &lfin) { #include "dyna.h" char *point;
char phr[512];
strcpy(texte,"");
ldeb=0;
lfin=0;
strcpy(phr,motind);
point=strstr(indprv,phr);
if(point) { point++;
strcpy(phr,point);
point=strstr(phr,"#");
if(point) { mid(texte,motind,2,strlen(motind)-2);
point++;
ldeb=atol(point);
point=strstr(phr,"~");
if(point) { point++;
lfin=atol(point);
} else return 0;
} else return 0;
} return 1;
}

fonction indication
int indication(char *indcou,char *indsep,char *texte) { #include "dyna.h" char *point;
point=strstr(indcou,indsep);
char l1[10];
char prov[512];
if(point) { point++;
strcpy(prov,point);
point=strstr(listeind,indsep);
if(point) { mid(l1,point,2,1);
point=strstr(prov,l1);
if(point) { strcpy(indcou,point);
mid(texte,prov,1,strlen(prov)-strlen(point));
} else { strcpy(indcou,"");
strcpy(texte,prov);
} } else strcpy(texte,prov);
} else { strcpy(texte,"");
return 0;
} return strlen(texte);
return 0;
}

fonction htmind
int htmind(char *pagehtm,char *indcou) { #include "dyna.h" char *point;
long ldeb;
long lfin;
char commande[80];
char texte[512];
char prv[20000];
char prov[20000];
ldeb=0;
lfin=0;
point=strstr(pagehtm," if(point) { point+=9;
strcpy(prov,point);
point=strstr(prov,"\">");
if(point) { mid(commande,prov,1,strlen(prov)-strlen(point));
point+=2;
strcpy(prov,point);
point=strstr(prov,"
");
if(point) { mid(prv,prov,1,strlen(prov)-strlen(point));
point+=4;
strcpy(pagehtm,point);
sprintf(prov,"œ%s#%u~%u!%s",prv,ldeb,lfin,commande);
strcat(indcou,prov);
} else return 0;
} else return 0;
} else return 0;
return strlen(indcou);
}

fonction executerind
int executerind(char *indsep,char *fic) { #include "dyna.h" int itest;
int id;
char commande[80];
if(strcmp(indsep,"!")==0) { if(strstr(fic,".wav") != NULL || strstr(fic,".mid") != NULL) { mciplay(fic,0,0,1);
return 0;
} sprintf(commande,"start %s",fic);
itest=WinExec(commande,SW_MAXIMIZE);
if(itest>=0 && itest<33) MessageBox(NULL,commande,"impossible d'executer la commande",MB_ICONINFORMATION);
} else if(strcmp(indsep,"?")==0) { id=MessageBox(NULL,"analyse ?",fic,MB_YESNOCANCEL);
if(id==IDYES) ;
//traitement … faire } return 0;
} 

retour au sommaire de la rubrique dynakit