source: Sophya/trunk/Poubelle/archediab.old/archediab.sources/c/fichier.c@ 643

Last change on this file since 643 was 637, checked in by ansari, 26 years ago

archediab version 24 initial import

File size: 11.1 KB
Line 
1#include "diabolo.h"
2#include "fichier.h"
3#include "acqui.h"
4#include <time.h>
5#include "alarme.h"
6#include "controle.h"
7
8
9char dossier_dia2_1[256],dossier_dia2_2[256];
10char dossier_arch_1[256],dossier_arch_2[256];
11
12char dossier_datex[256];
13char nom_du_fichierx[256];
14
15char message_sommairex[512];
16char fichiers_perdusx[512];
17
18char *dossier_date;
19char *nom_du_fichier;
20char *message_sommaire;
21char *fichiers_perdus;
22
23extern unsigned long temps_debut_arch;
24
25
26F_entete * E;
27F_block_desc * BD;
28F_block_param * BP;
29F_donne * T; // tableau courant de donnee
30
31
32//---------------------------------------------------------------------------------------
33//--------------- fonctions pour DIA2 et pour ARCH -------------------------
34//---------------------------------------------------------------------------------------
35
36
37
38void exec_fichier(int fen,int item,double valeur,...) // exec de la fenetre de controle du fichier
39{
40//DateTimeRec date;char ss[300];VDos d;
41
42//if(item>1000) item-=1000; // pour appeler le case pour tous les cara d'un edit texte
43
44switch(item)
45 {
46 case ouverture : T=malloc(max_nb_donne*sizeof(F_donne));
47 E=malloc(sizeof(F_entete));
48 BD=malloc(sizeof(F_block_desc));
49 BP=malloc(sizeof(F_block_param));
50 BD->n_ligne_don=0;
51 BD->n_blok=0;
52 BD->change=2; // debut nouveau fichier
53 BD->bololut=0;
54
55 E->version=2; // 2 pour cette version du programme
56 E->long_entete=sizeof(F_entete); // longueur de l'entete
57 E->long_entete_part=sizeof(F_block_desc)+sizeof(F_block_param); // longueur de l'entete partielle
58 E->long_donne=sizeof(F_donne); // longueur d'une ligne de données
59 ecritD(fen,f_ouvre,2); // affiche fichier fermé
60
61 dossier_date=dossier_datex;
62 nom_du_fichier=nom_du_fichierx;
63 message_sommaire=message_sommairex;
64 fichiers_perdus=fichiers_perdusx;
65
66 break;
67
68 case f_ouvre : if (valeur==2)
69 {
70 if( alerte(2,"etes vous sur de vouloir fermer les fichiers ?")==1 )
71 fich_new(0,3); // fermeture des fichiers
72 else ecritD(fen,f_ouvre,1);
73 }
74 else fich_new(0,1); // nouveau fichier cree: fichier ordinaire sans scan et nouveau dossier
75 break;
76
77 case f_new : if(!gg->scan_en_cours) fich_new(0,0);
78 break;
79
80 case f_don_tele : lit_data_telescope(); break;
81
82 case caseferme : cache(fen);stop_exec(fen); break;
83 break;
84
85 case fermeture : free(T);free(E);free(BD);free(BP);
86 break;
87
88 default : break;
89 }
90
91}
92
93
94
95
96void debut_scan_fich(void)
97{
98
99if(!gg->fichier_dia2_ouvert) // debut de scan sans enregistrement des fichiers
100 {
101 if( litD(fenetre_alarme,a_debut_scan,0)>0 )
102 {son(5);son(6);son(7);son(8);son(135);}
103 return;
104 }
105
106
107fich_new(1,0); // nouveau fichier cree : fichier scan
108}
109
110
111void fin_scan_fich(void) // pas utilisé
112{
113printf("fin_fich_scan --> ne devrait jamais arriver ici !!!!!\n\n");
114select(printf_ref);son(135);son(135);son(135);son(135);
115if(!gg->fichier_dia2_ouvert) return;
116#ifdef lire_les_donnees_POM2
117litRS(port_A,0L,finRS_tout,120,0);// vide le buffer RS232
118#endif
119fich_new(0,0); // nouveau fichier cree : fichier ordinaire sans scan
120}
121
122
123
124void fich_new(int scan,int newdos)
125{
126DateTimeRec date;VDos d;
127char ss[255];
128int sub;
129
130sub=gg->compte_subscan;
131if(sub<0) sub=-sub;
132
133#ifdef lire_les_data_telescope_IRAM
134// attend que tous les fichiers tp et th soit lu avant de fermer
135// avec un time out de 20 sec
136if(nom_du_fichier[18]=='_') // un fichier scan en cours est ouvert
137 {
138 unsigned long ttx1,ttx2,tt;
139 GetDateTime(&ttx1);
140 while(1)
141 {
142// printf("dans fich_new : ferme fichier scan : attend de lire tous les tp-th \n");
143 lit_data_telescope();
144// printf(" subscan=%d fichier_th=%d fichier_tp=%d \n",sub,gg->compte_fichiers_th,gg->compte_fichiers_tp);
145 if( (gg->compte_fichiers_th==sub) && (gg->compte_fichiers_tp==sub) ) break;
146 GetDateTime(&ttx2);
147 tt=(ttx2-ttx1);
148 if(tt>30) { // 15 sec
149 printf("time out: tp=%d th=%d ",gg->compte_fichiers_th,gg->compte_fichiers_tp);
150 sprintf(ss,"time out: tp=%d th=%d ",gg->compte_fichiers_th,gg->compte_fichiers_tp);
151 ajoute_sommaire(ss);break;
152 }
153 if((tt%2)==0)
154 {
155 printf(" attente des fichiers th et tp \n");
156 ttx1--;
157 }
158 }
159 }
160#endif
161
162
163if(nom_du_fichier[18]=='_') // un fichier scan en cours est ouvert
164 {
165 if(fenetre(fichier_sommaire_scan_0))
166 {
167 ecritT(fichier_sommaire_scan_0,fin_f,"%s --> %d subscan %s \n",nom_du_fichier,sub,message_sommaire);
168 if(strlen(fichiers_perdus)>4) ecritT(fichier_sommaire_scan_0,fin_f," fichiers perdus : %s\n",fichiers_perdus);
169 }
170
171 if(fenetre(fichier_sommaire_scan_1))
172 {
173 ecritT(fichier_sommaire_scan_1,fin_f,"%s --> %d subscan %s \n",nom_du_fichier,sub,message_sommaire);
174 if(strlen(fichiers_perdus)>4) ecritT(fichier_sommaire_scan_1,fin_f," fichiers perdus : %s\n",fichiers_perdus);
175 }
176
177 if(fenetre(fichier_sommaire_scan_2))
178 {
179 ecritT(fichier_sommaire_scan_2,fin_f,"%s --> %d subscan %s \n",nom_du_fichier,sub,message_sommaire);
180 if(strlen(fichiers_perdus)>4) ecritT(fichier_sommaire_scan_1,fin_f," fichiers perdus : %s\n",fichiers_perdus);
181 }
182 }
183else
184 {
185// if(fenetre(fichier_sommaire_scan_1)) ecritT(fichier_sommaire_scan_1,fin_f,"%s --> fichier simple\n",nom_du_fichier);
186// if(fenetre(fichier_sommaire_scan_2)) ecritT(fichier_sommaire_scan_2,fin_f,"%s --> fichier simple\n",nom_du_fichier);
187 }
188
189strcpy(nom_du_fichier," "); //efface le nom de fichier
190message_sommaire[0]=0; //efface le message pour sommaire
191fichiers_perdus[0]=0; //efface le message pour sommaire
192
193gg->compte_fichiers_th=0;
194gg->compte_fichiers_tp=0;
195
196//select(printf_ref);
197fich_save_partiel(3);
198litD(fenetre_fichier,f_comment,E->commentaires);
199GetDateTime(&E->tempsfin);
200
201//------ commence par fermer les fichiers ouverts
202
203if( fenetre(fichier_dia2_1) )
204 {
205 position(fichier_dia2_1,0L);
206 ecritF(fichier_dia2_1,(long)E->long_entete,E);
207 ferme(fichier_dia2_1);
208 }
209if( fenetre(fichier_dia2_2) )
210 {
211 GetDateTime(&E->tempsfin);
212 position(fichier_dia2_2,0L);
213 ecritF(fichier_dia2_2,(long)E->long_entete,E);
214 ferme(fichier_dia2_2);
215 }
216
217
218if( fenetre(fichier_arch_1) ) ferme(fichier_arch_1);
219if( fenetre(fichier_arch_2) ) ferme(fichier_arch_2);
220
221
222ecritD(fenetre_fichier,f_comment,"../..");
223ecritD(fenetre_fichier,f_bloc,"");
224ecritD(fenetre_fichier,f_nom,"fichier fermé");
225ecritD(fenetre_controle,con_fichier," ***** fichier fermé ***** ");
226
227while(fenetre(fichier_dia2_1)) printf(" fermeture du fichier_dia2_1 en cours\n");
228while(fenetre(fichier_dia2_2)) printf(" fermeture du fichier_dia2_2 en cours\n");
229while(fenetre(fichier_arch_1)) printf(" fermeture du fichier_arch_1 en cours\n");
230while(fenetre(fichier_arch_2)) printf(" fermeture du fichier_arch_2 en cours\n");
231
232if(newdos==3) {
233 if(fenetre(fichier_sommaire_scan_0)) ferme(fichier_sommaire_scan_0);
234 if(fenetre(fichier_sommaire_scan_1)) ferme(fichier_sommaire_scan_1);
235 if(fenetre(fichier_sommaire_scan_2)) ferme(fichier_sommaire_scan_2);
236 return; // fermeture definitive
237 }
238
239GetTime(&date);
240
241if(newdos) // seulement si création d'un nouveau dossier de jour
242 {
243 sprintf(dossier_date,"%d%d%d" ,100+(date.year%100),100+date.month,100+date.day);
244 dossier_date[0]='-';dossier_date[3]='_';dossier_date[6]='_';
245 sprintf(ss,"sommaire%s",dossier_date);
246// nouveauT(fichier_sommaire_scan_0,0,ss);
247 ouvre('WIND',fichier_sommaire_scan_0,0,ss,exec_cache,0L);
248
249 litD(fenetre_fichier,f_d1,dossier_dia2_1);
250 if( (strlen(dossier_dia2_1)>2) && (*dossier_dia2_1!='/') )
251 {
252 strcat(dossier_dia2_1,":dia2"); d=cherchedossier(dossier_dia2_1); // verifie que le dossier dia2 existe ou le crée
253 strcat(dossier_dia2_1,":dia2"); strcat(dossier_dia2_1,dossier_date);
254 printf("dossier DIA2_1: %s ",dossier_dia2_1);
255 d=cherchedossier(dossier_dia2_1);
256// printf(" dossier1 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
257 if(d.dossier) {
258 fixedossier(d);
259 if(!ouvrirF(fichier_sommaire_scan_1,ss)) ouvreF('TEXT',fichier_sommaire_scan_1,ss);
260// if(!ouvrirT(fichier_sommaire_scan_1,0,ss)) nouveauT(fichier_sommaire_scan_1,0,ss);
261 }
262 }
263 else *dossier_dia2_1=0;
264
265
266 litD(fenetre_fichier,f_d2,dossier_dia2_2);
267 if( (strlen(dossier_dia2_2)>2) && (*dossier_dia2_2!='/') )
268 {
269 strcat(dossier_dia2_2,":dia2"); d=cherchedossier(dossier_dia2_2); // verifie que le dossier dia2 existe ou le crée
270 strcat(dossier_dia2_2,":dia2"); strcat(dossier_dia2_2,dossier_date);
271 printf("dossier DIA2_2: %s ",dossier_dia2_2);
272 d=cherchedossier(dossier_dia2_2);
273// printf(" dossier2 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
274 if(d.dossier) {
275 fixedossier(d);
276 if(!ouvrirF(fichier_sommaire_scan_2,ss)) ouvreF('TEXT',fichier_sommaire_scan_2,ss);
277// if(!ouvrirT(fichier_sommaire_scan_2,0,ss)) nouveauT(fichier_sommaire_scan_2,0,ss);
278 }
279 }
280 else *dossier_dia2_2=0;
281
282 litD(fenetre_fichier,f_a1,dossier_arch_1);
283 if( (strlen(dossier_arch_1)>2) && (*dossier_arch_1!='/') )
284 {
285 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
286// strcat(dossier_arch_1,":arch"); d=cherchedossier(dossier_arch_1); // verifie que le dossier arch existe ou le crée
287 sprintf(dossier_arch_1,"%s:arch%s",dossier_arch_1,dossier_date);
288 printf("dossier ARCH_1: -->%s<-- ",dossier_arch_1);
289 }
290 else *dossier_arch_1=0;
291
292 litD(fenetre_fichier,f_a2,dossier_arch_2);
293 if( (strlen(dossier_arch_2)>2) && (*dossier_arch_2!='/') )
294 {
295 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
296 sprintf(dossier_arch_2,"%s:arch%s",dossier_arch_2,dossier_date);
297 printf("dossier ARCH_2: -->%s<-- ",dossier_arch_2);
298 }
299 else *dossier_arch_2=0;
300
301 printf("\n");
302 }
303
304sprintf(nom_du_fichier,"%d%d%d%d%d%d" ,
305 100+(date.year%100),100+date.month,100+date.day,100+date.hour,100+date.minute,100+date.second);
306nom_du_fichier[0]='a';
307#ifdef lire_les_data_telescope_IRAM
308nom_du_fichier[0]='t';
309#endif
310nom_du_fichier[3]='_';nom_du_fichier[6]='_';nom_du_fichier[9]='-';nom_du_fichier[12]='h';nom_du_fichier[15]='m';
311if(scan) strcat(nom_du_fichier,"_scan");
312printf("nouveau fichier : %s \n",nom_du_fichier);
313
314if(*dossier_dia2_1)
315 {
316 d=cherchedossier(dossier_dia2_1);
317// printf(" dossier1 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
318 if(d.dossier) {fixedossier(d);ouvreF('DIA2',fichier_dia2_1,nom_du_fichier);}
319 }
320
321if(*dossier_dia2_2)
322 {
323 d=cherchedossier(dossier_dia2_2);
324// printf("dossier2 : fich new : retour de dossier : d.dos=%d d.vol=%d \n",d.dossier,d.volume);
325 if(d.dossier) {fixedossier(d);ouvreF('DIA2',fichier_dia2_2,nom_du_fichier);}
326 }
327
328nom_du_fichier[0]='h';
329
330if(*dossier_arch_1)
331 {
332 d=cherchedossier(dossier_arch_1);
333 if(d.dossier) {fixedossier(d);ouvreF('ARCH',fichier_arch_1,nom_du_fichier);}
334 GetDateTime(&temps_debut_arch);
335 }
336
337if(*dossier_arch_2)
338 {
339 d=cherchedossier(dossier_arch_2);
340 if(d.dossier) {fixedossier(d);ouvreF('ARCH',fichier_arch_2,nom_du_fichier);}
341 GetDateTime(&temps_debut_arch);
342 }
343
344nom_du_fichier[0]='a';
345#ifdef lire_les_data_telescope_IRAM
346nom_du_fichier[0]='t';
347#endif
348
349fich_save_partiel(2);
350ecritD(fenetre_fichier,f_nom,"%s",nom_du_fichier);
351ecritD(fenetre_controle,con_fichier,"ouvre -> %s",nom_du_fichier);
352}
353
354
355
356
357
Note: See TracBrowser for help on using the repository browser.