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 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 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
fonction lmid
fonction hdrdata
fonction lonliste
fonction extraire
fonction diredyna
fonction gram
fonction lire
fonction ficlonliste
fonction initlonliste
fonction chemin
fonction formuler
fonction epeler
fonction direwav
fonction entrerpage
fonction donnerligne
fonction isoler
fonction chiffre
fonction centaine
fonction dynaplay
fonction mciplay
fonction coder
fonction coder
fonction entrer
fonction sortir
fonction saisirpara
fonction saisirparamuet
fonction ajouter
fonction couper
fonction copier
fonction mciplaymot
fonction synthese
fonction analyse
fonction indication
fonction htmind
fonction executerind
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
else {
while ( (*source != 0) && (l-->0) )
*cible++=*source++;
*cible=0;
if (l>0)
return 1;
else
return 0;
}
}
}
}
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
else {
while ( (*source != 0) && (l-->0) )
*cible++=*source++;
*cible=0;
if (l>0)
return 1;
else
return 0;
}
}
}
}
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;
i
return lon;
}
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;
}
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;
i
for(l=ideb;
l<=ideb+ilon;
l++)
data[l-ideb+1]=hdrliste[l+44];
return ilon;
}
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
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;
}
#pragma argsused
int gram(char *r)
{
#include "dyna.h"
//code
return 0;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
#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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
l
fclose(out);
return 0;
}
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;
}
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;
}
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;
}
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;
}
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);
}
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;
}