SaErrorT findEvent(SaHpiSessionIdT sessionId, SaHpiEventT * event, SaHpiBoolT * found) { SaErrorT status = SA_OK; SaHpiEventT e; *found = SAHPI_FALSE; while (!(*found) && status == SA_OK) { status = saHpiEventGet(sessionId, D_TIMEOUT, &e, NULL, NULL, NULL); if (status == SA_OK) { *found = sameEvent(event, &e); } else if (status != SA_ERR_HPI_TIMEOUT) { e_print(saHpiEventGet, SA_OK, status); } } // For a timeout, found will be set to false. // Therefore, return OK to indicate that nothing abnormal happened. if (status == SA_ERR_HPI_TIMEOUT) { status = SA_OK; } return status; }
char cMaps::belongsToDiskList(tLevel* lev, tGateRow *fila,int i) { char total=0; char pertenece; //recorrer la lista de eventos for (int k=i;((*lev).gateEvents.event[k].pos[0]<(0x80));k++) { total++; pertenece=0; for (char j=0;(j<(*fila).size) && (!pertenece);j++) { pertenece=(sameEvent((*fila).event[j],(*lev).gateEvents.event[k])); } if (!pertenece) { return MAPS_GATE_DIFFERS; } } if (total==(*fila).size) { return MAPS_GATE_EQUALS; } else { return MAPS_GATE_BELONGS; } }
char intertLeft(tLevel* lev,tGateRow fila,int inicioFila,int numeroFila,char mode) { /* Esta funcion inserta en gateEvents el o los eventos de fila que no estan insertados */ /* Por cada insersion deben ser modificados los ids correspondientes en la gateList */ /* devuelve 1 si entro */ /* devuelve 0 en caso de superarse lso 256 bytes */ /* 1) En caso de MULTIPLE EVENT los elementos de la fila que ya estan enliastados en gateEvents deben ser eliminados de la fila. Se coloca el evento nulo en reemplazo de estos. */ char j,pertenece; if (mode==MAPS_GATE_MULTIPLE_EVENT) { for (int k=inicioFila;((*lev).gateEvents.event[k].pos[0]<(0x80));k++) { pertenece=0; for (j=0;(j<fila.size) && (!pertenece);j++) { pertenece=(sameEvent(fila.event[j],(*lev).gateEvents.event[k])); } if (pertenece) { anularEvento(&(fila.event[j])); } } } /* 2) En caso de MAPS_GATE_SINGLE_EVENT el ultimo debe marcar fin de la lista. A tal fin, cambiaremos ese flag del evento. Como la inserion se hara de adelante hacia atras, simplemente debemos setear el flag al principio */ int c=(mode==MAPS_GATE_SINGLE_EVENT); /* 3) Se debera iterar para toda la fila e insertar evento por evento en la gateEvents en la posicion inicioFila. Cada insersion implica un corrimiento de ids en la gateList */ for (j=0;(j<fila.size);j++) { if (fila.event[j].pos[0]) { /* Para cada evento nonulo de la fila */ /* Adelantar todos los eventos posteriores a inicioFila */ for (int k=(*lev).gateEvents.size;k>inicioFila;k--) { (*lev).gateEvents.event[k+1]=(*lev).gateEvents.event[k]; } /* Insertar (*fila).event[j] en la gateEvents en la posicion generada en inicioFila. */ /* Se tendra en cuenta el flag de de fin de lista */ (*lev).gateEvents.event[inicioFila]=setFlag(fila.event[j],c); /* El flag del fin de lista se cancela */ c=0; /* Incrementar la cantidad de eventos de la gateEvent, en caso de no poder abortar */ if ((*lev).gateEvents.size==255) { return 0; } else { (*lev).gateEvents.size++; } /* Finalmente se debe recorrer la gate list e incrementar el contenido que supere a inicioFila */ for (int k=0;k<(*lev).gateList.size;k++) { if ((*lev).gateList.item[k].id>=inicioFila) ((*lev).gateList.item[k].id)++; } } } return 1; }