/*2011-01-03T15:23:06-01:00*/

/********************************************************************
 * logique_et_10_cov.c
 * 
 * generated by: plcgen 2.1.201
 ********************************************************************/

#include "cb_comp.h"
#include "cb_covs.h"
#include "iec_1131.h"

#include "logique_et_10.h"



/**************************** Variables *****************************/

CB_Index logique_et_10__num = 0;
CB_Mem_Bool *logique_et_10_bitEntree1;
CB_Mem_Bool *logique_et_10_bitEntree2;
CB_Mem_Bool *logique_et_10_bitEntree3;
CB_Mem_Bool *logique_et_10_bitEntree4;
CB_Mem_Bool *logique_et_10_bitEntree5;
CB_Mem_Bool *logique_et_10_bitEntree6;
CB_Mem_Bool *logique_et_10_bitEntree7;
CB_Mem_Bool *logique_et_10_bitEntree8;
CB_Mem_Bool *logique_et_10_bitEntree9;
CB_Mem_Bool *logique_et_10_bitEntree10;
CB_Mem_Bool *logique_et_10_bitSortie;
CB_Mem_Bool *logique_et_10_logiqueEntree1;
CB_Mem_Bool *logique_et_10_logiqueEntree2;
CB_Mem_Bool *logique_et_10_logiqueEntree3;
CB_Mem_Bool *logique_et_10_logiqueEntree4;
CB_Mem_Bool *logique_et_10_logiqueEntree5;
CB_Mem_Bool *logique_et_10_logiqueEntree6;
CB_Mem_Bool *logique_et_10_logiqueEntree7;
CB_Mem_Bool *logique_et_10_logiqueEntree8;
CB_Mem_Bool *logique_et_10_logiqueEntree9;
CB_Mem_Bool *logique_et_10_logiqueEntree10;
CB_Mem_Bool *logique_et_10_logiqueSortie;
CB_Mem_Int *logique_et_10_nbEntree;
CB_Mem_Bool *logique_et_10_d_sortie;
CB_Mem_Bool *logique_et_10_v_d_sortie;

/**************************** Variables *****************************/

#define bitEntree1 (logique_et_10_bitEntree1->CB_current_value)
#define bitEntree2 (logique_et_10_bitEntree2->CB_current_value)
#define bitEntree3 (logique_et_10_bitEntree3->CB_current_value)
#define bitEntree4 (logique_et_10_bitEntree4->CB_current_value)
#define bitEntree5 (logique_et_10_bitEntree5->CB_current_value)
#define bitEntree6 (logique_et_10_bitEntree6->CB_current_value)
#define bitEntree7 (logique_et_10_bitEntree7->CB_current_value)
#define bitEntree8 (logique_et_10_bitEntree8->CB_current_value)
#define bitEntree9 (logique_et_10_bitEntree9->CB_current_value)
#define bitEntree10 (logique_et_10_bitEntree10->CB_current_value)
#define bitSortie (logique_et_10_bitSortie->CB_current_value)
#define logiqueEntree1 (logique_et_10_logiqueEntree1->CB_current_value)
#define logiqueEntree2 (logique_et_10_logiqueEntree2->CB_current_value)
#define logiqueEntree3 (logique_et_10_logiqueEntree3->CB_current_value)
#define logiqueEntree4 (logique_et_10_logiqueEntree4->CB_current_value)
#define logiqueEntree5 (logique_et_10_logiqueEntree5->CB_current_value)
#define logiqueEntree6 (logique_et_10_logiqueEntree6->CB_current_value)
#define logiqueEntree7 (logique_et_10_logiqueEntree7->CB_current_value)
#define logiqueEntree8 (logique_et_10_logiqueEntree8->CB_current_value)
#define logiqueEntree9 (logique_et_10_logiqueEntree9->CB_current_value)
#define logiqueEntree10 (logique_et_10_logiqueEntree10->CB_current_value)
#define logiqueSortie (logique_et_10_logiqueSortie->CB_current_value)
#define nbEntree (logique_et_10_nbEntree->CB_current_value)
#define d_sortie (logique_et_10_d_sortie->CB_current_value)
#define v_d_sortie (logique_et_10_v_d_sortie->CB_current_value)


/************************ Components offsets ************************/


/********************* Initialization function **********************/

int _bibliotheque_epo__logique_et_10_init(void)
{
	(logique_et_10_bitEntree1)->CB_current_value = 1; /*bitEntree1*/
	(logique_et_10_bitEntree2)->CB_current_value = 1; /*bitEntree2*/
	(logique_et_10_bitEntree3)->CB_current_value = 1; /*bitEntree3*/
	(logique_et_10_bitEntree4)->CB_current_value = 1; /*bitEntree4*/
	(logique_et_10_bitEntree5)->CB_current_value = 1; /*bitEntree5*/
	(logique_et_10_bitEntree6)->CB_current_value = 1; /*bitEntree6*/
	(logique_et_10_bitEntree7)->CB_current_value = 1; /*bitEntree7*/
	(logique_et_10_bitEntree8)->CB_current_value = 1; /*bitEntree8*/
	(logique_et_10_bitEntree9)->CB_current_value = 1; /*bitEntree9*/
	(logique_et_10_bitEntree10)->CB_current_value = 1; /*bitEntree10*/
	(self.Bool+0)->CB_current_value = 1; /*logiqueEntree1*/
	(self.Bool+1)->CB_current_value = 1; /*logiqueEntree2*/
	(self.Bool+2)->CB_current_value = 1; /*logiqueEntree3*/
	(self.Bool+3)->CB_current_value = 1; /*logiqueEntree4*/
	(self.Bool+4)->CB_current_value = 1; /*logiqueEntree5*/
	(self.Bool+5)->CB_current_value = 1; /*logiqueEntree6*/
	(self.Bool+6)->CB_current_value = 1; /*logiqueEntree7*/
	(self.Bool+7)->CB_current_value = 1; /*logiqueEntree8*/
	(self.Bool+8)->CB_current_value = 1; /*logiqueEntree9*/
	(self.Bool+9)->CB_current_value = 1; /*logiqueEntree10*/
	(self.Bool+10)->CB_current_value = 1; /*logiqueSortie*/
	(self.Int+0)->CB_current_value = 10; /*nbEntree*/
	self.Bool+=13;
	self.Int+=1;


	return 0;
}


/************************ Behavior function *************************/

int bibliotheque_epo__logique_et_10(void)
{
	static char *__comp_name = "bibliotheque_epo.logique_et_10";
	if (exec_term_node(self_num)) {

		/*********************** Internals variables ************************/

		logique_et_10_logiqueEntree1 = self.Bool+0;
		logique_et_10_logiqueEntree2 = self.Bool+1;
		logique_et_10_logiqueEntree3 = self.Bool+2;
		logique_et_10_logiqueEntree4 = self.Bool+3;
		logique_et_10_logiqueEntree5 = self.Bool+4;
		logique_et_10_logiqueEntree6 = self.Bool+5;
		logique_et_10_logiqueEntree7 = self.Bool+6;
		logique_et_10_logiqueEntree8 = self.Bool+7;
		logique_et_10_logiqueEntree9 = self.Bool+8;
		logique_et_10_logiqueEntree10 = self.Bool+9;
		logique_et_10_logiqueSortie = self.Bool+10;
		logique_et_10_nbEntree = self.Int+0;
		logique_et_10_d_sortie = self.Bool+11;
		logique_et_10_v_d_sortie = self.Bool+12;

		/********************* Pre-conditions execution *********************/

		/*no Pre-conditions*/

		/************************ Behavior execution ************************/

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Boite à outils						*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module réalise une opération logique de type ET sur 		*/
			/*      entre deux et dix entrées et restitue son résultat sur un 	*/
			/*       booléen en sortie.							*/
			/* Le nombre de variables d'entrées est donné par nbEntree.		*/
			/* La sortie peut être forcée à une valeur par l'utilisateur		*/
			/* -----------------------------------------------------------------	*/
			
			/* Zone de déclaration de variables temporaires 			*/
			
			CB_Bool tabEnt[11];
			CB_Bool tabInv[11];
			CB_Int iEnt;
			
			if (d_sortie || (nbEntree<2) || (nbEntree>10)) bitSortie=v_d_sortie;
			else  {
				tabEnt[0]=bitEntree1; tabInv[0]=logiqueEntree1;
				tabEnt[1]=bitEntree2; tabInv[1]=logiqueEntree2;
				tabEnt[2]=bitEntree3; tabInv[2]=logiqueEntree3;
				tabEnt[3]=bitEntree4; tabInv[3]=logiqueEntree4;
				tabEnt[4]=bitEntree5; tabInv[4]=logiqueEntree5;
				tabEnt[5]=bitEntree6; tabInv[5]=logiqueEntree6;
				tabEnt[6]=bitEntree7; tabInv[6]=logiqueEntree7;
				tabEnt[7]=bitEntree8; tabInv[7]=logiqueEntree8;
				tabEnt[8]=bitEntree9; tabInv[8]=logiqueEntree9;
				tabEnt[9]=bitEntree10; tabInv[9]=logiqueEntree10;
				bitSortie = 1;
				for (iEnt=0;iEnt<nbEntree;iEnt++)
					bitSortie = bitSortie & (tabEnt[iEnt] ^ ! tabInv[iEnt]);
				bitSortie = bitSortie ^ ! logiqueSortie;
			}
					}

		CB_post_bool(logique_et_10_bitSortie);

		/******************** Post-conditions execution *********************/

		/*no Post-conditions*/
	}

	/*************************** self update ****************************/

	self.Bool += 13;
	self.Int += 1;

	return 0;
}

