int main() { unsigned int germe ; /* pour le generateur aleatoire */ unsigned int nb_evenements ; unsigned int ratio ; unsigned int x ; /* valeur aleatoire */ unsigned int i ; /* compteur d'evenements */ unsigned int r, s ; /* numeros de requete */ unsigned int p ; /* numero d'imprimante */ /* initialisation du generateur aleatoire */ printf (" germe : ") ; scanf ("%d", &germe) ; init_alea(germe, 99) ; /* valeurs aleatoires entre 0 et 99 */ /* lecture des parametres de la simulation */ printf("\n nombre d'evenements a generer : ") ; scanf("%d", &nb_evenements) ; printf("\n Pourcentage de \"Requete d'impression\" (entre 0 et 100) : ") ; scanf("%d", &ratio) ; printf("\n") ; /* simulation */ Initialiser() ; r = 0 ; for (i=0 ; i<nb_evenements ; i++) { x = suivant_alea() ; if (x+1>ratio) { if (! EstVide()) { p = suivant_alea() % P ; Extraire (&s, p) ; if (s!=-1) printf("traitement de la requete %d par l'imprimante %d\n", s, p) ; } else printf("\t file vide !\n") ; } else { if (! EstPlein()) { p = suivant_alea() % P ; printf("insertion de la requete %d pour l'imprimante %d\n", r, p) ; Inserer (r, p) ; r = r+1 ; } else printf("\t file pleine !\n") ; } ; } ; return 0 ; }
/** ********************************************************************** * \fn void Decode_Trame_Brute (char *tab_recu_brut,char *Motdetat, char *Adeco,char *Optarif, * char *Isousc, char *Base, char *Hchc, char *Hchp,char *Ptec, char *Iinst, char *Imax, * char *Papp, char *Hhphc, char *Checksum, short *Statu_chcksm) * \brief Décode et interprète l'étiquette \n * Retourne les valeurs des étiquettes correspondantes, le Cheksum * et la validité de la donnée * \param [in] tab_recu_brut Pointeur vers un tableau contenant la trame brute reçue du compteur * \param [out] Motdetat Pointeur vers un tableau contenant la valeur de Motdetat * \param [out] Adeco Pointeur vers un tableau contenant la valeur de Adeco * \param [out] Optarif Pointeur vers un tableau contenant la valeur de Optarif * \param [out] Isousc Pointeur vers un tableau contenant la valeur de Isousc * \param [out] Base Pointeur vers un tableau contenant la valeur de Base * \param [out] Hchc Pointeur vers un tableau contenant la valeur de Hchc * \param [out] Hchp Pointeur vers un tableau contenant la valeur de Hchp * \param [out] Ptec Pointeur vers un tableau contenant la valeur de Ptec * \param [out] Iinst Pointeur vers un tableau contenant la valeur de Iinst * \param [out] Imax Pointeur vers un tableau contenant la valeur de Imax * \param [out] Papp Pointeur vers un tableau contenant la valeur de Papp * \param [out] Hhphc Pointeur vers un tableau contenant la valeur de Hhphc * \param [out] Checksum Pointeur vers un tableau contenant la valeur de Checksum * \param [out] Statu_chcksm Pointeur vers un tableau contenant la valeur de Statu_chcksm *************************************************************************/ void Decode_Trame_Brute (char *tab_recu_brut,char *Motdetat, char *Adeco,char *Optarif,char *Isousc, char *Base, char *Hchc, char *Hchp,char *Ptec, char *Iinst, char *Imax, char *Papp, char *Hhphc, char *Checksum, short *Statu_chcksm){ int indice =0; int indice_deb=0; // Parcour du tab_recu_brut jusqu'à la fin while(tab_recu_brut[indice] != '\0'){ // Identification de l'étiquette puis sauvegarde de la valeur indice_deb = indice; // MOTDETAT if (tab_recu_brut[indice] == 'M' && tab_recu_brut[indice+1] == 'O'){ indice = Extraire (tab_recu_brut, indice, 9, Motdetat); Checksum[IND_MOTDETAT] = tab_recu_brut[indice]; Statu_chcksm[IND_MOTDETAT] = Statu_Checksum(tab_recu_brut,indice_deb, indice); } // ADECO else if (tab_recu_brut[indice] == 'A' && tab_recu_brut[indice+1] == 'D'){ indice = Extraire (tab_recu_brut, indice, 5, Adeco); Checksum[IND_ADECO] = tab_recu_brut[indice]; Statu_chcksm[IND_ADECO] = Statu_Checksum(tab_recu_brut,indice_deb, indice); } // OPTARIF else if (tab_recu_brut[indice] == 'O' && tab_recu_brut[indice+1] == 'P'){ indice = Extraire (tab_recu_brut, indice, 8, Optarif); Checksum[IND_OPTARIF] = tab_recu_brut[indice]; Statu_chcksm[IND_OPTARIF] = Statu_Checksum(tab_recu_brut,indice_deb, indice); } // BASE else if (tab_recu_brut[indice] == 'B' && tab_recu_brut[indice+1] == 'A'){ //&& tab_recu_brut[indice+6] == '0'){ /** **** * \bug Suppression de la condition * tab_recu_brut[indice+6] == '0' * ***********/ indice = Extraire (tab_recu_brut, indice, 5, Base); Checksum[IND_BASE] = tab_recu_brut[indice]; Statu_chcksm[IND_BASE] = Statu_Checksum(tab_recu_brut,indice_deb, indice); } else if (tab_recu_brut[indice] == 'I'){ switch (tab_recu_brut[indice+1]){ // ISOUSC case 'S': indice = Extraire (tab_recu_brut, indice, 7, Isousc); Checksum[IND_ISOUSC] = tab_recu_brut[indice]; Statu_chcksm[IND_ISOUSC] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; // IINST case 'I': indice = Extraire (tab_recu_brut, indice, 6, Iinst); Checksum[IND_IINST] = tab_recu_brut[indice]; Statu_chcksm[IND_IINST] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; // IMAX case 'M': indice = Extraire (tab_recu_brut, indice, 5, Imax); Checksum[IND_IMAX] = tab_recu_brut[indice]; Statu_chcksm[IND_IMAX] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; default: indice++; } } else if (tab_recu_brut[indice] == 'H'){ switch (tab_recu_brut[indice+3]){ // HCHC case 'C': indice = Extraire (tab_recu_brut, indice, 5, Hchc); Checksum[IND_HCHC] = tab_recu_brut[indice]; Statu_chcksm[IND_HCHC] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; // HCHP case 'P': indice = Extraire (tab_recu_brut, indice, 5, Hchp); Checksum[IND_HCHP] = tab_recu_brut[indice]; Statu_chcksm[IND_HCHP] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; // HHPHC case 'H': indice = Extraire (tab_recu_brut, indice, 6, Hhphc); Checksum[IND_HHPHC] = tab_recu_brut[indice]; Statu_chcksm[IND_HHPHC] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; default: indice++; } } else if (tab_recu_brut[indice] == 'P'){ switch (tab_recu_brut[indice+1]){ // PTEC case 'T': indice = Extraire (tab_recu_brut, indice, 5, Ptec); Checksum[IND_PTEC] = tab_recu_brut[indice]; Statu_chcksm[IND_PTEC] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; // PAPP case 'A': indice = Extraire (tab_recu_brut, indice, 5, Papp); Checksum[IND_PAPP] = tab_recu_brut[indice]; Statu_chcksm[IND_PAPP] = Statu_Checksum(tab_recu_brut,indice_deb, indice); break; default: indice++; } } else{ indice++; } } }