Source Composant "Up ! Archive" Version 4.0.0;
ImporterModule UpsArc(<UpsArc.upi>, ImporterDefinitions);
Parametre <upsarc> Section "UpsArc"
/*********************************/
Prive :
/******/
Action : Nul Ou Caractere;
Detail : Booleen;
Compression : Nul Ou Caractere;
Entete : Booleen;
MotDePasse : Nul Ou Caractere;
NomArchive : Nul Ou Caractere;
RepertoireArchive : Nul Ou Caractere;
FiltreArchive : Nul Ou Caractere;
Variable
/******/
Prive :
/******/
CompressionDecodee : ModeCompressionFlux;
Prive :
/******/
Procedure AppliquerAuxFichiersDuRepertoire(NomRepertoireDepart : Caractere, NomRepertoireArrivee : Caractere, Filtre : Caractere,
Traitement : Procedure(NomDuRepertoireDepart : Caractere, NomDuRepertoireArrivee : Caractere, NomDuFichier : Caractere))
/*************************************************************************************************************************/
Variable
/******/
ListeFichiers : Nul Ou ListeDe FichierListe;
FichierListeCourant : Nul Ou FichierListe;
Debut
ListeFichiers=ListerFichiers(NomRepertoireDepart, Filtre);
Si ListeFichiers!=Nul Alors
Pour FichierListeCourant=ListeFichiers.ParcoursAuDebut() JusquA ListeFichiers.DernierElement() Faire
Fin Si
Si FichierListeCourant.EstUnRepertoire Alors
Fin Pour
Si (FichierListeCourant.NomFichier==".") Ou (FichierListeCourant.NomFichier=="..") Alors
Sinon
Continuer;
Fin Si
AppliquerAuxFichiersDuRepertoire(NomRepertoireDepart+FichierListeCourant.NomFichier+"/",
NomRepertoireArrivee+FichierListeCourant.NomFichier+"/", Filtre, Traitement);
Traitement(NomRepertoireDepart, NomRepertoireArrivee, FichierListeCourant.NomFichier);
Fin Si
Fin Procedure
Procedure ArchiverUnFichier(NomDuRepertoireDepart : Caractere, NomDuRepertoireArrivee : Caractere, NomDuFichier : Caractere)
/********************************************************************************************************************/
Variable
/******/
NomDuFichierDepart : Caractere;
Debut
NomDuFichierDepart=NomDuRepertoireDepart+NomDuFichier;
Si Detail Alors
Ecran.Ecrire(Message(UpsArc, "ArchivageDe", NomDuFichierDepart.Droite(NomDuFichierDepart.Longueur()-RepertoireArchive.Longueur())));
Fin Si
Si Non IlExisteRepertoire(NomDuRepertoireArrivee) Alors
CreerRepertoire(NomDuRepertoireArrivee);
Fin Si
CopierFichier(NomDuFichierDepart, NomDuRepertoireArrivee+NomDuFichier);
Fin Procedure
Fonction ExecuterArchiver(Nouveau : Booleen, Usage : Caractere) Retourner Entier
/**************************************************************************/
Variable
/******/
A : Nul Ou ArchiveUpsArc;
Debut
Si NomArchive==Nul Ou Compression==Nul Alors
Ecran.Ecrire(Message(UpsArc,Usage));
Fin Si
Retourner 1;
Si Nouveau Et IlExisteFichier(NomArchive) Alors
Ecran.Ecrire(Message(UpsArc, "ArchiveExisteDeja", NomArchive));
Fin Si
Retourner 1;
Si (Non Nouveau) Et (Non IlExisteFichier(NomArchive)) Alors
Ecran.Ecrire(Message(UpsArc, "ArchiveNExistePas", NomArchive));
Fin Si
Retourner 1;
CompressionDecodee=ModeCompressionFlux(Compression);
A=ArchiveUpsArc(NomArchive, "/upsarc", MotDePasse);
A.ChangerModeCompression(CompressionDecodee);
RepertoireArchive=BornerRepertoire(RepertoireArchive);
AppliquerAuxFichiersDuRepertoire(RepertoireArchive, "/upsarc/", FiltreArchive, ArchiverUnFichier);
Ecran.Ecrire("\n"+Message(UpsArc, "ArchivageAvecSucces", NomArchive));
Retourner 0;
Fin Fonction
Procedure DesarchiverUnFichier(NomDuRepertoireDepart : Caractere, NomDuRepertoireArrivee : Caractere, NomDuFichier : Caractere)
/***********************************************************************************************************************/
Variable
/******/
NomDuFichierDepart : Caractere;
Debut
NomDuFichierDepart=NomDuRepertoireDepart+NomDuFichier;
Si Detail Alors
Ecran.Ecrire(Message(UpsArc, "DesarchivageDe", NomDuFichierDepart.Droite(NomDuFichierDepart.Longueur()-8)));
Fin Si
Si Non IlExisteRepertoire(NomDuRepertoireArrivee) Alors
CreerRepertoire(NomDuRepertoireArrivee);
Fin Si
CopierFichier(NomDuFichierDepart, NomDuRepertoireArrivee+NomDuFichier);
Fin Procedure
Fonction ExecuterDesarchiver() Retourner Entier
/*********************************************/
Variable
/******/
A : Nul Ou ArchiveUpsArc;
Debut
Si NomArchive==Nul Ou Compression==Nul Ou (Non IlExisteFichier(NomArchive)) Alors
Ecran.Ecrire(Message(UpsArc, "UsageUpsArcDesarchiver"));
Fin Si
Retourner 1;
CompressionDecodee=ModeCompressionFlux(Compression);
A=ArchiveUpsArc(NomArchive, "/upsarc", MotDePasse);
A.ChangerModeCompression(CompressionDecodee);
RepertoireArchive=BornerRepertoire(RepertoireArchive);
AppliquerAuxFichiersDuRepertoire("/upsarc/", RepertoireArchive, FiltreArchive, DesarchiverUnFichier);
Ecran.Ecrire("\n"+Message(UpsArc, "DesarchivageAvecSucces", NomArchive));
Retourner 0;
Fin Fonction
Fonction ExecuterCompacter() Retourner Entier
/********************************************/
Variable
/******/
A : Nul Ou ArchiveUpsArc;
Debut
Si NomArchive==Nul Ou Compression==Nul Alors
Ecran.Ecrire(Message(UpsArc, "UsageUpsArcCompacter"));
Fin Si
Retourner 1;
CompressionDecodee=ModeCompressionFlux(Compression);
A=ArchiveUpsArc(NomArchive, "/upsarc", MotDePasse);
A.ChangerModeCompression(CompressionDecodee);
Si Detail Alors
Ecran.Ecrire(Message(UpsArc, "CompactageDeLArchive", NomArchive));
Fin Si
A.Compacter();
Ecran.Ecrire("\n"+Message(UpsArc, "CompactageTermine", NomArchive));
Retourner 0;
Fin Fonction
Procedure EnvoyerMessageVerifier(Libelle : Caractere)
/*************************************************/
Debut
Ecran.Ecrire(Libelle);
Fin Procedure
Fonction ExecuterVerifier() Retourner Entier
/******************************************/
Variable
/******/
A : Nul Ou ArchiveUpsArc;
Debut
Si NomArchive==Nul Ou Compression==Nul Alors
Ecran.Ecrire(Message(UpsArc, "UsageUpsArcVerifier"));
Fin Si
Retourner 1;
CompressionDecodee=ModeCompressionFlux(Compression);
A=ArchiveUpsArc(NomArchive, "/upsarc", MotDePasse);
A.ChangerModeCompression(CompressionDecodee);
Si Detail Alors
Ecran.Ecrire(Message(UpsArc, "VerificationDeLArchive", NomArchive));
Fin Si
Si Non A.Verifier(Decoder(Detail, Vrai, EnvoyerMessageVerifier, Nul)) Alors
Ecran.Ecrire("\n"+Message(UpsArc, "VerificationEnEchec", NomArchive));
Sinon
Retourner 1;
Ecran.Ecrire("\n"+Message(UpsArc, "VerificationAvecSucces", NomArchive));
Fin Si
Retourner 0;
Fin Fonction
Procedure EnvoyerMessageReparer(Libelle : Caractere)
/************************************************/
Debut
Ecran.Ecrire(Libelle);
Fin Procedure
Fonction ExecuterReparer() Retourner Entier
/*****************************************/
Variable
/******/
A : Nul Ou ArchiveUpsArc;
Debut
Si NomArchive==Nul Alors
Ecran.Ecrire(Message(UpsArc, "UsageUpsArcReparer"));
Fin Si
Retourner 1;
CompressionDecodee=ModeCompressionFlux(Compression);
A=ArchiveUpsArc(NomArchive, "/upsarc", MotDePasse);
A.ChangerModeCompression(CompressionDecodee);
Si Detail Alors
Ecran.Ecrire(Message(UpsArc, "ReparationDeLArchive", NomArchive));
Fin Si
Si Non A.Reparer(Decoder(Detail, Vrai, EnvoyerMessageReparer, Nul)) Alors
Ecran.Ecrire("\n"+Message(UpsArc, "ReparationEnEchec", NomArchive));
Sinon
Retourner 1;
Ecran.Ecrire("\n"+Message(UpsArc, "ReparationAvecSucces", NomArchive));
Fin Si
Retourner 0;
Fin Fonction
Fonction DecoderDroits(Droits : DroitsDAcces) Retourner Caractere
/*************************************************************/
Debut
Selon Droits Faire
Cas Pour DroitLecture Faire
Fin Selon
Retourner "l--";
Fin Cas
Cas Pour DroitEcriture Faire
Retourner "-e-";
Fin Cas
Cas Pour DroitExecution Faire
Retourner "--x";
Fin Cas
Cas Pour DroitLectureEcriture Faire
Retourner "le-";
Fin Cas
Cas Pour DroitLectureExecution Faire
Retourner "l-x";
Fin Cas
Cas Pour DroitEcritureExecution Faire
Retourner "-ex";
Fin Cas
Cas Pour DroitLectureEcritureExecution Faire
Retourner "lex";
Fin Cas
Fin Fonction
Procedure ListerLesFichiers(NomRepertoire : Caractere, Filtre : Caractere)
/*****************************************************************/
Variable
/******/
ListeFichiers : Nul Ou ListeDe FichierListe;
FichierListeCourant : Nul Ou FichierListe;
NomDuFichier : Caractere;
Ligne : Caractere;
DroitsUtilisateur : DroitsDAcces;
DroitsGroupe : DroitsDAcces;
DroitsAutres : DroitsDAcces;
Taille : Entier;
DateDerniereModification : Date;
Debut
ListeFichiers=ListerFichiers(NomRepertoire, Filtre);
Si ListeFichiers!=Nul Alors
Pour FichierListeCourant=ListeFichiers.ParcoursAuDebut() JusquA ListeFichiers.DernierElement() Faire
Fin Si
NomDuFichier=NomRepertoire+FichierListeCourant.NomFichier;
Fin Pour
Si FichierListeCourant.EstUnRepertoire Alors
Si (FichierListeCourant.NomFichier==".") Ou (FichierListeCourant.NomFichier=="..") Alors
Sinon
Continuer;
Fin Si
Ecran.Ecrire(NomDuFichier.Droite(NomDuFichier.Longueur()-8)+" :");
ListerLesFichiers(NomDuFichier+"/", Filtre);
Si Detail Alors
Fin Si
DroitsUtilisateur=LireDroitsDAcces(NomDuFichier, DroitsGroupe, DroitsAutres);
Sinon
Ligne=DecoderDroits(DroitsUtilisateur)+DecoderDroits(DroitsGroupe)+DecoderDroits(DroitsAutres);
Taille=LireCaracteristiquesFichier(NomDuFichier, ?, ?, ?, DateDerniereModification);
Ligne=Ligne+" "+Caractere(Taille).AjouterGauche(10);
Ecran.Ecrire(Ligne+" "+Caractere(DateDerniereModification)+" "+FichierListeCourant.NomFichier);
Ecran.Ecrire(NomDuFichier);
Fin Si
Fin Procedure
Fonction ExecuterLister() Retourner Entier
/****************************************/
Variable
/******/
A : Nul Ou ArchiveUpsArc;
Debut
Si NomArchive==Nul Ou (Non IlExisteFichier(NomArchive)) Alors
Ecran.Ecrire(Message(UpsArc, "UsageUpsArcLister"));
Fin Si
Retourner 1;
A=ArchiveUpsArc(NomArchive, "/upsarc", MotDePasse);
ListerLesFichiers("/upsarc/", FiltreArchive);
Retourner 0;
Fin Fonction
Principal
/*******/
Debut
Si Entete Alors
Ecran.Ecrire(Message(UpsArc, "PresentationUpsArc1")+ "\n");
Fin Si
Ecran.Ecrire(Message(UpsArc, "PresentationUpsArc2" , Caractere(DateSysteme(), FiltreDate), Caractere(DateSysteme(), FiltreHeure))+"\n");
Si FiltreArchive==Nul Alors
FiltreArchive="*";
Fin Si
Selon Action Faire
Cas Pour Traduire(UpsArc, SectionDivers, "Archiver") Faire
Fin Selon
Retourner ExecuterArchiver(Vrai, "UsageUpsArcArchiver");
Fin Cas
Cas Pour Traduire(UpsArc, SectionDivers, "MettreAJour") Faire
Retourner ExecuterArchiver(Vrai, "UsageUpsArcMettreAJour");
Fin Cas
Cas Pour Traduire(UpsArc, SectionDivers, "Desarchiver") Faire
Retourner ExecuterDesarchiver();
Fin Cas
Cas Pour Traduire(UpsArc, SectionDivers, "Compacter") Faire
Retourner ExecuterCompacter();
Fin Cas
Cas Pour Traduire(UpsArc, SectionDivers, "Verifier") Faire
Retourner ExecuterVerifier();
Fin Cas
Cas Pour Traduire(UpsArc, SectionDivers, "Reparer") Faire
Retourner ExecuterReparer();
Fin Cas
Cas Pour Traduire(UpsArc, SectionDivers, "Lister") Faire
Retourner ExecuterLister();
Fin Cas
Defaut
Ecran.Ecrire(Message(UpsArc, "UsageUpsArc"));
Fin Defaut
Retourner 1;
Fin Principal