#include "diabolo.h" #include "fichier.h" #include "acqui.h" #include #include "alarme.h" #include "controle.h" char dossier_dia2_1[256],dossier_dia2_2[256]; char dossier_arch_1[256],dossier_arch_2[256]; char dossier_datex[256]; char nom_du_fichierx[256]; char message_sommairex[512]; char fichiers_perdusx[512]; char *dossier_date; char *nom_du_fichier; char *message_sommaire; char *fichiers_perdus; extern unsigned long temps_debut_arch; F_entete * E; F_block_desc * BD; F_block_param * BP; F_donne * T; // tableau courant de donnee //--------------------------------------------------------------------------------------- //--------------- fonctions pour DIA2 et pour ARCH ------------------------- //--------------------------------------------------------------------------------------- void exec_fichier(int fen,int item,double valeur,...) // exec de la fenetre de controle du fichier { //DateTimeRec date;char ss[300];VDos d; //if(item>1000) item-=1000; // pour appeler le case pour tous les cara d'un edit texte switch(item) { case ouverture : T=malloc(max_nb_donne*sizeof(F_donne)); E=malloc(sizeof(F_entete)); BD=malloc(sizeof(F_block_desc)); BP=malloc(sizeof(F_block_param)); BD->n_ligne_don=0; BD->n_blok=0; BD->change=2; // debut nouveau fichier BD->bololut=0; E->version=2; // 2 pour cette version du programme E->long_entete=sizeof(F_entete); // longueur de l'entete E->long_entete_part=sizeof(F_block_desc)+sizeof(F_block_param); // longueur de l'entete partielle E->long_donne=sizeof(F_donne); // longueur d'une ligne de données ecritD(fen,f_ouvre,2); // affiche fichier fermé dossier_date=dossier_datex; nom_du_fichier=nom_du_fichierx; message_sommaire=message_sommairex; fichiers_perdus=fichiers_perdusx; break; case f_ouvre : if (valeur==2) { if( alerte(2,"etes vous sur de vouloir fermer les fichiers ?")==1 ) fich_new(0,3); // fermeture des fichiers else ecritD(fen,f_ouvre,1); } else fich_new(0,1); // nouveau fichier cree: fichier ordinaire sans scan et nouveau dossier break; case f_new : if(!gg->scan_en_cours) fich_new(0,0); break; case f_don_tele : lit_data_telescope(); break; case caseferme : cache(fen);stop_exec(fen); break; break; case fermeture : free(T);free(E);free(BD);free(BP); break; default : break; } } void debut_scan_fich(void) { if(!gg->fichier_dia2_ouvert) // debut de scan sans enregistrement des fichiers { if( litD(fenetre_alarme,a_debut_scan,0)>0 ) {son(5);son(6);son(7);son(8);son(135);} return; } fich_new(1,0); // nouveau fichier cree : fichier scan } void fin_scan_fich(void) // pas utilisé { printf("fin_fich_scan --> ne devrait jamais arriver ici !!!!!\n\n"); select(printf_ref);son(135);son(135);son(135);son(135); if(!gg->fichier_dia2_ouvert) return; #ifdef lire_les_donnees_POM2 litRS(port_A,0L,finRS_tout,120,0);// vide le buffer RS232 #endif fich_new(0,0); // nouveau fichier cree : fichier ordinaire sans scan } void fich_new(int scan,int newdos) { DateTimeRec date;VDos d; char ss[255]; int sub; sub=gg->compte_subscan; if(sub<0) sub=-sub; #ifdef lire_les_data_telescope_IRAM // attend que tous les fichiers tp et th soit lu avant de fermer // avec un time out de 20 sec if(nom_du_fichier[18]=='_') // un fichier scan en cours est ouvert { unsigned long ttx1,ttx2,tt; GetDateTime(&ttx1); while(1) { // printf("dans fich_new : ferme fichier scan : attend de lire tous les tp-th \n"); lit_data_telescope(); // printf(" subscan=%d fichier_th=%d fichier_tp=%d \n",sub,gg->compte_fichiers_th,gg->compte_fichiers_tp); if( (gg->compte_fichiers_th==sub) && (gg->compte_fichiers_tp==sub) ) break; GetDateTime(&ttx2); tt=(ttx2-ttx1); if(tt>30) { // 15 sec printf("time out: tp=%d th=%d ",gg->compte_fichiers_th,gg->compte_fichiers_tp); sprintf(ss,"time out: tp=%d th=%d ",gg->compte_fichiers_th,gg->compte_fichiers_tp); ajoute_sommaire(ss);break; } if((tt%2)==0) { printf(" attente des fichiers th et tp \n"); ttx1--; } } } #endif if(nom_du_fichier[18]=='_') // un fichier scan en cours est ouvert { if(fenetre(fichier_sommaire_scan_0)) { ecritT(fichier_sommaire_scan_0,fin_f,"%s --> %d subscan %s \n",nom_du_fichier,sub,message_sommaire); if(strlen(fichiers_perdus)>4) ecritT(fichier_sommaire_scan_0,fin_f," fichiers perdus : %s\n",fichiers_perdus); } if(fenetre(fichier_sommaire_scan_1)) { ecritT(fichier_sommaire_scan_1,fin_f,"%s --> %d subscan %s \n",nom_du_fichier,sub,message_sommaire); if(strlen(fichiers_perdus)>4) ecritT(fichier_sommaire_scan_1,fin_f," fichiers perdus : %s\n",fichiers_perdus); } if(fenetre(fichier_sommaire_scan_2)) { ecritT(fichier_sommaire_scan_2,fin_f,"%s --> %d subscan %s \n",nom_du_fichier,sub,message_sommaire); if(strlen(fichiers_perdus)>4) ecritT(fichier_sommaire_scan_1,fin_f," fichiers perdus : %s\n",fichiers_perdus); } } else { // if(fenetre(fichier_sommaire_scan_1)) ecritT(fichier_sommaire_scan_1,fin_f,"%s --> fichier simple\n",nom_du_fichier); // if(fenetre(fichier_sommaire_scan_2)) ecritT(fichier_sommaire_scan_2,fin_f,"%s --> fichier simple\n",nom_du_fichier); } strcpy(nom_du_fichier," "); //efface le nom de fichier message_sommaire[0]=0; //efface le message pour sommaire fichiers_perdus[0]=0; //efface le message pour sommaire gg->compte_fichiers_th=0; gg->compte_fichiers_tp=0; //select(printf_ref); fich_save_partiel(3); litD(fenetre_fichier,f_comment,E->commentaires); GetDateTime(&E->tempsfin); //------ commence par fermer les fichiers ouverts if( fenetre(fichier_dia2_1) ) { position(fichier_dia2_1,0L); ecritF(fichier_dia2_1,(long)E->long_entete,E); ferme(fichier_dia2_1); } if( fenetre(fichier_dia2_2) ) { GetDateTime(&E->tempsfin); position(fichier_dia2_2,0L); ecritF(fichier_dia2_2,(long)E->long_entete,E); ferme(fichier_dia2_2); } if( fenetre(fichier_arch_1) ) ferme(fichier_arch_1); if( fenetre(fichier_arch_2) ) ferme(fichier_arch_2); ecritD(fenetre_fichier,f_comment,"../.."); ecritD(fenetre_fichier,f_bloc,""); ecritD(fenetre_fichier,f_nom,"fichier fermé"); ecritD(fenetre_controle,con_fichier," ***** fichier fermé ***** "); while(fenetre(fichier_dia2_1)) printf(" fermeture du fichier_dia2_1 en cours\n"); while(fenetre(fichier_dia2_2)) printf(" fermeture du fichier_dia2_2 en cours\n"); while(fenetre(fichier_arch_1)) printf(" fermeture du fichier_arch_1 en cours\n"); while(fenetre(fichier_arch_2)) printf(" fermeture du fichier_arch_2 en cours\n"); if(newdos==3) { if(fenetre(fichier_sommaire_scan_0)) ferme(fichier_sommaire_scan_0); if(fenetre(fichier_sommaire_scan_1)) ferme(fichier_sommaire_scan_1); if(fenetre(fichier_sommaire_scan_2)) ferme(fichier_sommaire_scan_2); return; // fermeture definitive } GetTime(&date); if(newdos) // seulement si création d'un nouveau dossier de jour { sprintf(dossier_date,"%d%d%d" ,100+(date.year%100),100+date.month,100+date.day); dossier_date[0]='-';dossier_date[3]='_';dossier_date[6]='_'; sprintf(ss,"sommaire%s",dossier_date); // nouveauT(fichier_sommaire_scan_0,0,ss); ouvre('WIND',fichier_sommaire_scan_0,0,ss,exec_cache,0L); litD(fenetre_fichier,f_d1,dossier_dia2_1); if( (strlen(dossier_dia2_1)>2) && (*dossier_dia2_1!='/') ) { strcat(dossier_dia2_1,":dia2"); d=cherchedossier(dossier_dia2_1); // verifie que le dossier dia2 existe ou le crée strcat(dossier_dia2_1,":dia2"); strcat(dossier_dia2_1,dossier_date); printf("dossier DIA2_1: %s ",dossier_dia2_1); d=cherchedossier(dossier_dia2_1); // printf(" dossier1 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume); if(d.dossier) { fixedossier(d); if(!ouvrirF(fichier_sommaire_scan_1,ss)) ouvreF('TEXT',fichier_sommaire_scan_1,ss); // if(!ouvrirT(fichier_sommaire_scan_1,0,ss)) nouveauT(fichier_sommaire_scan_1,0,ss); } } else *dossier_dia2_1=0; litD(fenetre_fichier,f_d2,dossier_dia2_2); if( (strlen(dossier_dia2_2)>2) && (*dossier_dia2_2!='/') ) { strcat(dossier_dia2_2,":dia2"); d=cherchedossier(dossier_dia2_2); // verifie que le dossier dia2 existe ou le crée strcat(dossier_dia2_2,":dia2"); strcat(dossier_dia2_2,dossier_date); printf("dossier DIA2_2: %s ",dossier_dia2_2); d=cherchedossier(dossier_dia2_2); // printf(" dossier2 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume); if(d.dossier) { fixedossier(d); if(!ouvrirF(fichier_sommaire_scan_2,ss)) ouvreF('TEXT',fichier_sommaire_scan_2,ss); // if(!ouvrirT(fichier_sommaire_scan_2,0,ss)) nouveauT(fichier_sommaire_scan_2,0,ss); } } else *dossier_dia2_2=0; litD(fenetre_fichier,f_a1,dossier_arch_1); if( (strlen(dossier_arch_1)>2) && (*dossier_arch_1!='/') ) { sprintf(dossier_arch_1,"%s:arch_%d",dossier_arch_1,version_num); d=cherchedossier(dossier_arch_1); // verifie que le dossier arch existe ou le crée // strcat(dossier_arch_1,":arch"); d=cherchedossier(dossier_arch_1); // verifie que le dossier arch existe ou le crée sprintf(dossier_arch_1,"%s:arch%s",dossier_arch_1,dossier_date); printf("dossier ARCH_1: -->%s<-- ",dossier_arch_1); } else *dossier_arch_1=0; litD(fenetre_fichier,f_a2,dossier_arch_2); if( (strlen(dossier_arch_2)>2) && (*dossier_arch_2!='/') ) { sprintf(dossier_arch_2,"%s:arch_%d",dossier_arch_2,version_num); d=cherchedossier(dossier_arch_2); // verifie que le dossier arch existe ou le crée sprintf(dossier_arch_2,"%s:arch%s",dossier_arch_2,dossier_date); printf("dossier ARCH_2: -->%s<-- ",dossier_arch_2); } else *dossier_arch_2=0; printf("\n"); } sprintf(nom_du_fichier,"%d%d%d%d%d%d" , 100+(date.year%100),100+date.month,100+date.day,100+date.hour,100+date.minute,100+date.second); nom_du_fichier[0]='a'; #ifdef lire_les_data_telescope_IRAM nom_du_fichier[0]='t'; #endif nom_du_fichier[3]='_';nom_du_fichier[6]='_';nom_du_fichier[9]='-';nom_du_fichier[12]='h';nom_du_fichier[15]='m'; if(scan) strcat(nom_du_fichier,"_scan"); printf("nouveau fichier : %s \n",nom_du_fichier); if(*dossier_dia2_1) { d=cherchedossier(dossier_dia2_1); // printf(" dossier1 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume); if(d.dossier) {fixedossier(d);ouvreF('DIA2',fichier_dia2_1,nom_du_fichier);} } if(*dossier_dia2_2) { d=cherchedossier(dossier_dia2_2); // printf("dossier2 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume); if(d.dossier) {fixedossier(d);ouvreF('DIA2',fichier_dia2_2,nom_du_fichier);} } nom_du_fichier[0]='h'; if(*dossier_arch_1) { d=cherchedossier(dossier_arch_1); if(d.dossier) {fixedossier(d);ouvreF('ARCH',fichier_arch_1,nom_du_fichier);} GetDateTime(&temps_debut_arch); } if(*dossier_arch_2) { d=cherchedossier(dossier_arch_2); if(d.dossier) {fixedossier(d);ouvreF('ARCH',fichier_arch_2,nom_du_fichier);} GetDateTime(&temps_debut_arch); } nom_du_fichier[0]='a'; #ifdef lire_les_data_telescope_IRAM nom_du_fichier[0]='t'; #endif fich_save_partiel(2); ecritD(fenetre_fichier,f_nom,"%s",nom_du_fichier); ecritD(fenetre_controle,con_fichier,"ouvre -> %s",nom_du_fichier); }