void Observability(char *ifile1, char *ifile2, char *ifile3, char *ifile4, int threefiles, int fourfiles, FILE *f10)
{
        FILE *f1, *f2, *f3, *f4, *f5;
        FSM fsm1, fsm2, fsm3, fsm4;
        MULT_MASKL *mmaskL;
        char varfname[MAX_LENGTH];
        
        /*check observability*/
        
        if(!(threefiles || fourfiles))
        {
                ifile1 = "../data/observability_plant.data";
                ifile2 = "../data/observability_spec.data";
                ifile3 = "../data/observability_plant.data_events";
                ifile4 = "../data/observability.results";
        }
        else if(threefiles){ 
             /*create default filename*/
             strcpy(ifile4, ifile3); /*move result filename to ifile4*/
             strcpy(varfname, ifile1);
             strcat(varfname, "_events");
             ifile3 = varfname;
        }       
        
        f1 = fopen(ifile1, "r");
        f2 = fopen(ifile2, "r");
        f3 = fopen(ifile3, "r");
        f4 = fopen(ifile4, "w");

        fsm_read(f1, &fsm1); /*read plant*/
        fsm_read(f2, &fsm2); /*read spec*/
        
        po_extract_events(f3);
        f5 = fopen("mmlistfiles.tmp", "r");     
        
        mmaskL = po_read_maskl(f5);
        po_graph(&fsm1, &fsm2, &fsm3, mmaskL);
        
        fsm_trim(&fsm3);

        if(po_observability(&fsm3, mmaskL))
                fputs("Observable", f4);
        else
                fputs("Not Observable", f4);

        
        fclose(f1);
        fclose(f2);
        fclose(f3);
        fclose(f4);
        fclose(f5);
        po_remove_event_temp_files();

        fsm_delete(&fsm1);
        fsm_delete(&fsm2);
        fsm_delete(&fsm3);
        
        po_delete_maskl(mmaskL);

        /*end V*/
}
