/* dirstat.rex srexx */ /* # 1.1 on génére la liste des fichiers avec redirection */ /* de la sortie dans le fichier fn */ /* call checkOs */ fn = '/tmp/dir.dir' "\rm -f " fn 'ls -l > ' fn /* # 1.2 on initialise les tableaux dynamiques */ /* et le nombre de fichiers vus, d'extensions distinctes */ compte. = 0 ; nom. = 0 ; taille. = 0 ; nbfic = 0 ; nbext = 0 ; tailletot = 0 /* # 2. on passe en revue le fichier obtenu */ do while lines(fn)>0 ligne = linein(fn) /* # 2.1 une ligne valide est non vide, contient / */ /* (dans la date) et ne contient pas de . */ /* en premier mot, contrairement aux sous-répertoires */ if ligne <> "" then do parse var ligne pass lnk user grp kO mois jou heure fid . parse var fid with nom "." ext /* # 2.2 le . dans parse permet d'ignorer */ /* le reste de la ligne */ if substr(pass,1,1) = "-" then do if ext ="" then do ext = '???' end /* if words(ligne) = 4 then */ /* # 2.3 on utilise l'indexation dynamique */ if compte.ext = 0 then do /* nouvelle extension */ compte.ext = 1 ; nbext = nbext + 1 nom.nbext = ext ; taille.ext = taille.ext + kO end /* nouvelle extension */ else do /* ancienne extension */ /* utilisation de la "mémoire associative" */ compte.ext = compte.ext + 1 taille.ext = taille.ext + kO end /* ancienne extension */ /* et on compte un fichier en plus */ nbfic = nbfic + 1 tailletot = tailletot + kO end /* if if pos("/",ligne) > 0 & pos(".",nom) = 0 */ end /* if ligne <> then */ end /* do while lines(fn) */ call lineout fn /* # 3. après la parcours, affichage */ bl = copies(" ",3) say " extension nombre taille_en_kO " nbl = 1 ; do i = 1 to nbext /* on écrit une ligne sur 2 */ ext = nom.i ; nb = compte.ext ; taillekO = trunc(taille.ext/1000) if ext = '???' then ext = '(vide)' call charout , bl left(ext,12) bl format(nb,3) format(taillekO,12) bl nbl = nbl + 1 ; /* if nbl = 3 then do ; */ say /* ; nbl = 1 ; end */ end /* do i = 1 to nbext */ ; say if nbfic = 0 then say "Pas de fichiers (peut-etre)" ; else do fvc = " fichiers vus dans la directory " exd = " extensions différentes " say " " nbfic fvc "avec" nbext exd " taille totale " format(tailletot/1024,9,0) " kO" say end exit