#include #include #include #include #include #include "AccesIpc.h" #include "../Ecran/Ecran.h" #include #include #include #include #define ROBOT #define IDQ "PLENGA" #define LIGNE " " #define CLEF (key_t)5678 int Chemin[20]; int AllerOu[10]; void AffChemin(int aChemin[],int TailleChemin); int idRq,idWq; int NumRobot; int main(int argc,char *argv[]) { int rc,i = 0,idM,j,k,X=16,Y=0; int hdPipe; pid_t idPid; char *pShm; char CpAtelier[17][17],tmp[10],NumR; Trace("\t\t(ROBOT) Entree dans Robot"); if((idM=shmget(CLEF,0,0)) == -1) perror("Err. de creation de la file3"); if ((pShm = shmat(idM,NULL,0)) == (char *)-1) perror("Err. d'att de la memoire partagee"); Trace("idM3 = %d\n",idM); if(argc!=4) { Trace("\t\t(ROBOT) Trop ou trop peu d'argument(s)..."); Trace("\t\t(ROBOT) Usage: Numero_du_Robot Id_queue..."); exit(1); } NumRobot = atoi(argv[1]); idRq = atoi(argv[2]); idWq = idRq; hdPipe= atoi(argv[3]); //lecture dans le pipe if (!(read(hdPipe,tmp,10))) { perror("(Robot) Erreur de lecture dans le Pipe...\n"); } AllerOu[0] = atoi(tmp); Chemin[2] = AllerOu[0]; Trace("\t\t(ROBOT) AllerOu : %d",Chemin[2]); Chemin[1] = 1; Chemin[0] = getpid(); if(SendMessage(Chemin,3*sizeof(int),1L)<0) { perror("(Robot) Erreur d'emission...\n"); exit(1); } /*Entre du robot ds l'atelier en position 1*/ sprintf(&NumR,"%d",NumRobot); memcpy(CpAtelier,pShm,sizeof(CpAtelier)); tmp[0]=CpAtelier[X][Y]; CpAtelier[X][Y]=NumR; memcpy(pShm,CpAtelier,sizeof(CpAtelier)); while (1) { idPid = getpid(); if((rc=ReceiveMessage(Chemin,&idPid))<0) { perror("(Robot) Erreur de reception...\n"); exit(1); } rc=rc/sizeof(int); AffChemin(Chemin,rc); /* Effectuer le deplacement dans la memoire partagee*/ for (j=0;j3) break; Chemin[1]=Chemin[rc-1]; Chemin[2]=AllerOu[i]; Chemin[0]=getpid(); if(SendMessage(Chemin,3*sizeof(int),1L)<0) { perror("(Robot) Erreur d'emission...\n"); exit(1); } } } void AffChemin(int aChemin[],int TailleChemin) { int i=0; char szChemin[80],szBuff[80]; sprintf(szChemin,"\t\t(ROBOT %d) Chemin a suivre :",NumRobot); while (i < TailleChemin) { sprintf(szBuff,"%4d ",aChemin[i++]); strcat(szChemin,szBuff); } Trace(szChemin); }