/***************************************************************************** Application ASH: comp_dir.c (c) Pierre Adriaans 1994 ------------------------------------------------------------------------------ Fonction de comparaison de deux ss-rep. *****************************************************************************/ #include "ash.h" extern DirList_t *List[NB_MAX_WINS], *Current[NB_MAX_WINS]; extern InvZone_t InvZone[NB_MAX_WINS]; extern AnswerBoxItem_t *InfoMsg; extern int AL; /***************************************************************************** CompareDir() ------------------------------------------------------------------------------ Fonction de comparaison de ss-rep. Fonctionne entre deux fenetres voisines horizontalement. Marque dans chacune: - les fichiers absents de l'autre - les fichiers presents dans l'autre mais plus recents. *****************************************************************************/ void CompareDir(void) { int L1,L2,Tagged = 0; DirList_t *Dummy1,*Dummy2; L1 = AL; if(L1 < 2) L2 = !L1; else if(L1 == 2) L2 = 3; else L2 = 2; /* Deselectionner tout dans chaque liste */ for(Dummy1 = List[L1]; Dummy1 != (DirList_t *)NULL; Dummy1 = Dummy1->Suivant) Dummy1->Info.Tagged = 0; for(Dummy1 = List[L2]; Dummy1 != (DirList_t *)NULL; Dummy1 = Dummy1->Suivant) Dummy1->Info.Tagged = 0; /* Commencer les coparaisons aux fichiers de la liste source */ for(Dummy1 = List[L1]; Dummy1 != (DirList_t *)NULL; Dummy1 = Dummy1->Suivant) { /* Comparer */ for(Dummy2 = List[L2]; Dummy2 != (DirList_t *)NULL && strcmp(Dummy1->Info.Name,Dummy2->Info.Name) != 0; Dummy2 = Dummy2->Suivant); if((Dummy2 == (DirList_t *)NULL) || (Dummy2->Info.Name[0] > Dummy1->Info.Name[0])) { /* Fichier absent de la liste cible */ if(strcmp(Dummy1->Info.Name,"..") != 0) { Dummy1->Info.Tagged = 1; Tagged = 1; } } else if((difftime(Dummy1->Info.s.st_mtime, Dummy2->Info.s.st_mtime) > (double)0)) { /* Fichier plus recent que dans la liste cible */ if(strcmp(Dummy1->Info.Name,"..") != 0) { Dummy1->Info.Tagged = 1; Tagged = 1; } } } for(Dummy2 = List[L2]; Dummy2 != (DirList_t *)NULL; Dummy2 = Dummy2->Suivant) { /* Comparer */ for(Dummy1 = List[L1]; Dummy1 != (DirList_t *)NULL && strcmp(Dummy2->Info.Name,Dummy1->Info.Name) != 0; Dummy1 = Dummy1->Suivant); if((Dummy1 == (DirList_t *)NULL) || (Dummy1->Info.Name[0] > Dummy2->Info.Name[0])) { /* Fichier absent de la liste cible */ if(strcmp(Dummy2->Info.Name,"..") != 0) { Dummy2->Info.Tagged = 1; Tagged = 1; } } else if((difftime(Dummy2->Info.s.st_mtime, Dummy1->Info.s.st_mtime) > (double)0)) { /* Fichier plus recent que dans la liste cible */ if(strcmp(Dummy2->Info.Name,"..") != 0) { Dummy2->Info.Tagged = 1; Tagged = 1; } } } if(!Tagged) { InitAnswerBoxItem(&InfoMsg); AddAnswerBoxItem(&InfoMsg," The two directories appear "); AddAnswerBoxItem(&InfoMsg,"to be identical."); InfoBox(FileOpNorm,FileOpInv," Compare Directories ",InfoMsg, 0,0,DOUBLE_FRAMED); InitAnswerBoxItem(&InfoMsg); } else { RedisplayWin(L1); RedisplayWin(L2); if(Current[AL]->Info.Tagged) PaintString(InvZone[AL].Lig,InvZone[AL].Col, InvZone[AL].Length,MainWinTagRev); else PaintString(InvZone[AL].Lig,InvZone[AL].Col, InvZone[AL].Length,MainWinInv); } }