Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Sun 28 May 2017, 06:46
All times are UTC - 4
 Forum index » House Training » Users ( For the regulars ) » Pour les francophones
Vive la mémoire... LIBRE !!!
Moderators: Béèm, darkerror05
Post new topic   Reply to topic View previous topic :: View next topic
Page 3 of 8 [106 Posts]   Goto page: Previous 1, 2, 3, 4, 5, 6, 7, 8 Next
Author Message
Médor

Joined: 26 May 2011
Posts: 2822

PostPosted: Sun 01 Feb 2015, 17:56    Post subject:  

musher0 wrote:
Bon, ben... retour à l'établi !

Je te fais confiance Wink

Cordialement,
Médor.

_________________
Recherches Puppy|Index Puppy|Index FR|Tuto Toutou
Back to top
View user's profile Send private message 
jplt


Joined: 12 Nov 2010
Posts: 282
Location: Terre

PostPosted: Sun 01 Feb 2015, 18:23    Post subject:  

Excellent script Musher0.

Un grand merci.

_________________
Precise , Tahr
Back to top
View user's profile Send private message 
Médor

Joined: 26 May 2011
Posts: 2822

PostPosted: Sun 01 Feb 2015, 18:29    Post subject:  

Bonsoir Philippe,

augras wrote:
Je suis étonné : après avoir lancé le script quand je compare l'indication de mémoire utilisée avec celle donnée par lxtask, ce dernier indique environ 300 Mo de moins !

EDIT : je crois que je me suis mal exprimé et que l'on ne comprend pas ce que je voulais dire ! Le script m'indique après nettoyage par exemple 800 Mo utilisés alors que lxtask m'indique 500 Mo. On est pas à quelques Mo mais là il est anormal que 2 outils aient une telle différence dans le calcul de la mémoire vive utilisée.


Voici l'explication :
http://a.michelizza.free.fr/pmwiki.php?n=Main.TutoAdminMemory :

La commande free wrote:

...
Dans l'exemple ci-dessus, le système dispose en tout de 4054 Mo de mémoire.
Sur ce total, 3893 Mo sont utilisés et 161 Mo sont inutilisés.

A première vue, toute la mémoire est consommée et la machine est donc dans un état critique.
Pourtant, çe n'est pas du tout le cas.



Attention à ne pas confondre mémoire inutilisée et mémoire disponible !

Le système consomme un maximum de mémoire pour optimiser au mieux ses performances via l'utilisation de caches, et il n'y a donc que très peu de mémoire inutilisée (colonne free).
Mais la mémoire utilisée par les caches (colonnes buffers et cached) peut être libérée à tout moment.

La deuxième ligne indique la quantité de mémoire réellement consommée par les applications (colonne used) et la mémoire réellement disponible (colonne free) :
-/+ buffers/cache: ........ 390 ....... 3663

En cessant d'utiliser les caches, le système ne consommerait donc plus que 390 Mo de mémoire alors que 3663 Mo seraient disponibles.
Finalement, ce serveur a encore beaucoup de mémoire disponible en réserve !
...


Ici avec free je n'ai généralement, comme sur ma capture précédente, que 7 Mo de libre sur 238 Mo de ram Wink
Tu peux noter que dans LxTask il y a dans Affichage une case en principe cochée : Afficher la mémoire utilisée par le cache comme étant libre.
Htop ne donne les mêmes valeurs que LxTask.


Cordialement,
Médor.

_________________
Recherches Puppy|Index Puppy|Index FR|Tuto Toutou
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Sun 01 Feb 2015, 19:33    Post subject:  

@augras

On peut traduire des champs avec awk, mais c'est beaucoup plus lent qu'avec
replaceit.

En modifiant la fonction FreeMem comme suit et en enlevant la ligne des chaînes
"replaceit" plus bas dans le script, on peut s'en passer, on y arrive, mais avec
lenteur ainsi qu'avec un problème de mise en forme à la ligne 3 (voir capture) :

Code:
FreeMem () {
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- .... -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" >> $MMLBR
if [ ${LANG:0:2} = "fr" ];then
   echo "(En Mo)      total        utilisé      libre        partagé    tampons" > /tmp/mevlibr
   echo "`free -m | awk -F"  " 'NR=="2" { print "Mém.";for (i=2; i<=NF; i++) print $i" " }'| tr '\n' ' '`" >> /tmp/mevlibr
   echo "`free -m | awk -F"  " 'NR=="3" { print "±tampons";for (i=3; i<=NF; i++) print $i" " }'| tr '\n' ' '`" >> /tmp/mevlibr
   echo "`free -m | awk -F"  " 'NR=="4" { print "Éch. ";for (i=2; i<=NF; i++) print $i" " }'| tr '\n' ' '`" >> /tmp/mevlibr
else
   free -m | awk -F"  " 'NR=="1" { print "(In Mb)";for (i=2; i<=NF; i++) print $i" " }'| tr "\n" " " > /tmp/mevlibr
   echo >> /tmp/mevlibr
   free -m | tail -n 3 >> /tmp/mevlibr
fi
   cat /tmp/mevlibr >> $MMLBR;rm -f /tmp/mevlibr
echo . >> $MMLBR
}


On notera les deux façons de mettre la ligne awk, etc., en forme avec echo. J'ai
mis une 2e forme dans la partie anglaise.

Le problème, c'est qu'on ne sait pas combien d'espaces mettre à awk comme
séparateur de champs (le -F " "), parce que les résultats de free vont varier et
donc le remplissage entre les chiffres.

Je conserve la version avec replaceit, qui est beaucoup plus rapide et qui ne
bouscule pas la mise en forme.

Intéressante découverte par contre, cette possibilité de traduire des éléments de
texte avec awk exactement là où on veut dans un tableau. (Déduite à partir de :
http://www.theunixcode.com/2013/12/using-awk-to-print-all-columns-from-the-nth-to-the-last,
le post de "Koullis" au milieu de la page.) Ça peut toujours servir.

À+

musher0
Traduit-avec-awk_2015-02-01_18.10.59.jpg
 Description   Mise en forme déjantée à la ligne 3...
 Filesize   46.15 KB
 Viewed   195 Time(s)

Traduit-avec-awk_2015-02-01_18.10.59.jpg


_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Tue 03 Feb 2015, 00:00    Post subject:  

Salut, les gars !

Sous cette forme on gagne une seconde... de 4 à 3. (Voir archive ci-jointe.)

Renommez l'ancien fichier cleanup_memory cleanup_memory.vieux, faites un lien
symbolique de cleanup_memory3 à cleanup_memory, et ça va marcher comme
avant. Rien d'autre à changer.

Aussi une présentation de deux lignes plus compacte, mais pas la peine de mettre
une saisie d'écran juste pour ça.

Soyez prévenus que j'arrête là, avant de devenir tout à fait gaga !!!... Razz Rolling Eyes Shocked
(Hé, les ricaneurs au fond de la salle : silence ! Je sais, c'est déjà commencé !!!) Wink

À+

musher0
cleanup_memory3.zip
Description  Dans cette version, on travaille davantage sur les chaînes directement en mémoire.
On économise ainsi le temps de plusieurs enregistrements transitoires sur disque.
Bravo à celui ou à celle qui a inventé "echo -e $VARIABLE" !
zip

 Download 
Filename  cleanup_memory3.zip 
Filesize  1.41 KB 
Downloaded  112 Time(s) 

_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
augras

Joined: 11 Nov 2013
Posts: 1409
Location: france

PostPosted: Tue 03 Feb 2015, 03:26    Post subject:  

Bonjour,
Mon insistance sur replaceit signifiait juste que je ne comprenais pas à quoi il servait : j'ai trouvé, vous avez confirmé et j'ai installé le paquet mis à disposition par musher0.
Pour les explications sur les différences entre le script et lxtask c'est compris aussi.
Et ce soir je vais prendre la dernière version... et reviendrai avec mes questions ! Wink
Bonne journée,
Philippe
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Tue 03 Feb 2015, 14:59    Post subject:  

Salut, Philippe.

replaceit est une manière de "stream editor (sed)"*, en beaucoup moins
compliqué**. Je le trouve très commode, justement pour les cas où autres utilitaires
sont trop lents ou nécessitent trop de contorsions dans le script. il est tellement
petit qu'il devrait faire partie de tout Puppy, selon moi.

À+

musher0

* S.t.p. voir : https://fr.wikipedia.org/wiki/Stream_Editor

**
Quote:
replaceit - v1.0.0 - PLD Software (C) - http://pldaniels.com/replaceit 2001
Usage: replaceit --input=<filename> [--wholeline] "<replace>" "<with>" [["[+-]<string to be present>" | "<-string to be non-present>"] ...]

--input : Name of file to apply the replacements to
--wholeline : Replace the entire line with <with>, rather than partial replacement
<replace> : String we're searching for
<with> : What we wish to replace <replace> with
<[+-]string> : A string which should be also detected on the line
-<string> : A string which we DO NOT want detected in the line
<}string> : This string must appear AFTER the section to replace
<{string> : This string must appear BEFORE the section to replace

example: ./replaceit --input=myfile.c "_MY_DEFINE" "_YOUR_DEFINE" "-#define" "};"

... et c'est tout ! Smile

_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Wed 04 Feb 2015, 07:14    Post subject:  

Bonjour, le monde !

Un exercice amusant basé sur /proc/meminfo : Smile
Code:
# En "one-liner"
clear;echo;A="`grep wap /proc/meminfo | tr -s ' ' | tr '\n' ' '`";echo -e "$A" | awk '{ print "                     "$4"   "$7"    "$1"\n                     "$5" "$6" - "$8" "$9" = "$2" "$3  }';echo

# En code lisible !
clear
echo;A="`grep wap /proc/meminfo | tr -s ' ' | tr '\n' ' '`" # Et ch'te mous !
echo -e "$A" | awk '{ print "                     "$4"   "$7"    "$1"\n                     "$5" "$6" - "$8" "$9" = "$2" "$3  }' # Et ch'te pétris !
echo

Morale de l'histoire : awk gobe les fichiers par derrière et les chaînes par devant !!!
Comprenne qui pourra !!! Very Happy

Bye !

musher0
~~~~~~~~
Et pendant qu'on y est, pourquoi ne pas essayer :
Code:
echo;cat /proc/meminfo | head -n 4 | tr -s ' ' | tr '\n' ' ';echo;echo
Les-chaînes-par-devant.jpg
 Description   La malléabilité de l'information nécessite du travail ! :)
 Filesize   14.91 KB
 Viewed   139 Time(s)

Les-chaînes-par-devant.jpg


_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Wed 04 Feb 2015, 14:33    Post subject:  

Rebonjour.

On trouvera ici une application, à un menu pekwm, de la formule de découverte de mmoire vive disponible avec /proc/meminfo :
http://murga-linux.com/puppy/viewtopic.php?p=826067&sort=lastpost#826067

Je joins aussi ci-dessous une dernière mouture (sont-elles jamais définitives ?!) du script
cleanup_memory que vous m'avez aidé à récrire.

Au plaisir.

musher0
cleanup_memory3a.zip
Description  Remanié en utilisant davantage le potentiel des chaînes et en faisant appel à
/proc/meminfo dans des calculs. Ainsi, la vitesse d'exécution du script diminue encore,
de 3 s à ± 2,7s (rubrique "real" dans <time -p cleanup_memory3>).
zip

 Download 
Filename  cleanup_memory3a.zip 
Filesize  1.38 KB 
Downloaded  115 Time(s) 

_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
jplt


Joined: 12 Nov 2010
Posts: 282
Location: Terre

PostPosted: Thu 05 Feb 2015, 13:45    Post subject:  

Je viens de lancer cleanup_memory3a :

Code:
./cleanup_memory3: line 31: can't create /root/my-applications/Systeme/mem_libr.txt: nonexistent directory
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
./cleanup_memory3: line 40: can't create /root/my-applications/Systeme/mem_libr.txt: nonexistent directory
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)


La fenetre se ferme instantanement.

J'ai testé sous tahrpup 6.0.

_________________
Precise , Tahr
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Thu 05 Feb 2015, 16:31    Post subject:  

jplt wrote:
Je viens de lancer cleanup_memory3a :

Code:
./cleanup_memory3: line 31: can't create /root/my-applications/Systeme/mem_libr.txt: nonexistent directory
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
./cleanup_memory3: line 40: can't create /root/my-applications/Systeme/mem_libr.txt: nonexistent directory
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)


La fenetre se ferme instantanement.

J'ai testé sous tahrpup 6.0.


Oups, Évidemment, chercher un fichier dans un dossier qui n'existe pas...
Mon oubli, désolé. Je reviens dans quelques minutes.,..

Voilà !

musher0
cleanup_memory3b.zip
Description  Ceci devrait bien marcher. J'ai enlevé la référence au dossier non existant chez vous.
zip

 Download 
Filename  cleanup_memory3b.zip 
Filesize  1.38 KB 
Downloaded  115 Time(s) 

_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
jplt


Joined: 12 Nov 2010
Posts: 282
Location: Terre

PostPosted: Fri 06 Feb 2015, 13:17    Post subject:  

Toujours pas apparement :

Code:
./cleanup_memory3
./cleanup_memory3: line 31: can't create /root/my-applications/Systeme/mem_libr.txt: nonexistent directory
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
./cleanup_memory3: line 40: can't create /root/my-applications/Systeme/mem_libr.txt: nonexistent directory
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
awk: fatal: cannot open file `/root/my-applications/Systeme/mem_libr.txt' for reading (No such file or directory)
Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory)Error: Cannot open /root/my-applications/Systeme/mem_libr.txt (No such file or directory

_________________
Precise , Tahr
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Fri 06 Feb 2015, 16:15    Post subject:  

Bonjour, jplt.

Désolé. Éliminé soigneusement la référence, ça ne devrait plus se reproduire.
Mais attention à bien lancer le script cleanup_memery3b ? (À tout hasard !)

Voici le script en clair :
Code:
#!/bin/ash
# /root/my-applications/bin/cleanup_memory3b
#
# D'après : 'Simple tool for puppy linux to clean caches',
# par Joe Arose, alias "big_bass", créé pour son "Puppy Slaxer-4.12".
#
# Mise en forme et ajouts par musher0, 20 mai 2013;
# rév. 30 janv. et 02-06 févr. 2015.
# Merci à jplt et à Médor de leurs suggestions sur le forum Puppy.
#
# V. 3a : L'usage accru des chaînes en mémoire économise 1,4 secondes. musher0
# V. 3b : Enlevé référence au dossier "~/my-applications/Systeme" (merci à
# jplt), et adopté une mise en forme plus claire pour ces lignes-ci. musher0
#
#################

# variables
MAPPS="/root/my-applications";MMLBR="$MAPPS/mem_libr.txt";Z=""
RMPL="replaceit --input=$MMLBR";LIGN=".-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-."

case ${LANG:0:2} in # param. pour less
   fr)MEV="'q' pour quitter             =-=-=-=           Mémoire vive libérée";AV="Avant";AP="Après"
   Prem="(En Mo)      total        utilisé      libre        partagé    tampons" ;;
   *)MEV="'q' to quit                   =-=-=-=                        Freed RAM";AV="Before";AP="After"
   Prem"(In Mb)      total         used         free       shared      buffers" ;;
esac # langues, 1

FreeMem ()
{
COUP="$Prem
`free -m | tail -n 3`
"
}

FreeMem # L'avant
COUP="$LIGN $AV $LIGN
$COUP"
a="`grep mFree /proc/meminfo | awk '{print $2}'`"
BEAU="$COUP"

sync ; echo 3 > /proc/sys/vm/drop_caches;wait # Action

FreeMem # L'après
COUP="$LIGN $AP $LIGN
$COUP"
b="`grep mFree /proc/meminfo | awk '{print $2}'`"
echo -e "$BEAU$COUP." > $MMLBR;

# Param. urxvt
c="`expr $b - $a`";c="`expr $c / 1000`" # calculs
d="`grep wapC /proc/meminfo | awk '{print $2}'`" # État du fichier d'échange

case ${LANG:0:2} in # Titre
   fr)[ $d -eq 0 ] && INCHANG="fichier d'échange non utilisé" || INCHANG="fichier d'échange UTILISÉ";TITR="MEV libérée : ± $c Mo ; $INCHANG."
# Traduction
   $RMPL "-/+ buffers:" " ± tampons :";$RMPL Swap Éch.;$RMPL "Mem:" Mém. ;;
   *)[ $d -eq 0 ] && INCHANG="swap file not in use" || INCHANG="swap file IN USE";TITR="Freed RAM: ± $c Mb; $INCHANG." ;;
esac # langues, 2

Geom="g 73x12-250+300";BL="white";CLR="fg $BL -bg AntiqueWhite4 -cr $BL"
TRNSP="tr -tint grey79 -sh 99";FNT="fn xft:Monaco:pixelsize=13:autohint=true"

urxvt -$Geom -$CLR -$TRNSP -$FNT -T "$TITR" -b 12 +sb &>/dev/null -e less -L -~ -P "$MEV" $MMLBR # Afficher

rm -f $MMLBR # Nettoyer

[ "`pidof -s aepanel`" ] && Z="aepanel" && kill -s 15 "`pidof -s $Z`" && sleep 0.1s && $MAPPS/ae/aepanel-menu.sh & # si aepanel actif.
### 30 ###


Le même script est joint ci-dessous sous forme d'archive zip.

En passant, la fonte Monaco pour Linux utilisée dans le script se télécharge via :
http://superuser.com/questions/597086/how-to-get-the-monaco-font-for-linux

Chez moi, ça fonctionne, mais tiens-moi au courant, s.t.p.
Merci d'avance et à bientôt !

musher0
cleanup_memory3b(1).zip
Description  Comprend une nouvelle révision.
zip

 Download 
Filename  cleanup_memory3b(1).zip 
Filesize  1.5 KB 
Downloaded  110 Time(s) 

_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
augras

Joined: 11 Nov 2013
Posts: 1409
Location: france

PostPosted: Sat 07 Feb 2015, 05:27    Post subject:  

Bonjour,
Il fonctionne sur tahrpup, mais avec un soucis de dimensionnement de fenêtre qui n'est pas assez haute alors que ce point là était bon auparavant (pas dans les deux versions précédentes mais avant).
Alors que ma machine est allumée depuis peu il m'affiche 419Mo de libéré : je me demande s'il ne serait pas bien de faire tourner ce script toutes les 15 ou 20mn, sans affichage dans un terminal mais avec enregistrement des données dans un fichier log qui serait effacé à l'arrêt de la machine et recréé à la première utilisation du script après allumage ?
Philippe
Back to top
View user's profile Send private message 
musher0


Joined: 04 Jan 2009
Posts: 10169
Location: Gatineau (Qc), Canada

PostPosted: Sat 07 Feb 2015, 09:08    Post subject:  

Salut, augras.

Je prends note. Excellente idée. Au départ, je l'ai conçu pour être lancé à partir d'un
menu dynamique dans pekwm. Mais rien m'empêche qu'on en fasse une variante
chronométrée.

Le "souci de dimensionnement"... serait-il réglé en jouant un peu avec les flèches
"haut" et "bas" ? Ou encore, si c'est différent sur TahrPup, c'est peut-être que le
réglage d'urxvt dans .Xresources est différent? Ou bien la police MONACO n'est pas là,
et urxvt attrappe "la première police qu'i' trouve" ? Je vois rien d'autre.

À+.

musher0

_________________
musher0
~~~~~~~~~~
« Un insensé sur le trône n'est qu'un singe sur le haut d'un toit. » / "A madman
on the throne is just a monkey on top of a roof." (Bernard de Clervaux)
Back to top
View user's profile Send private message 
Display posts from previous:   Sort by:   
Page 3 of 8 [106 Posts]   Goto page: Previous 1, 2, 3, 4, 5, 6, 7, 8 Next
Post new topic   Reply to topic View previous topic :: View next topic
 Forum index » House Training » Users ( For the regulars ) » Pour les francophones
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.0977s ][ Queries: 14 (0.0123s) ][ GZIP on ]