diff --git a/.gitattributes b/.gitattributes
index bb512fdd9dbb6666fd11e9c451efbc5491bc25ac..5a07f2ed4be114d27a1b999a28d8f24c7121e297 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,76 +1,5 @@
 * text=auto !eol
-IMG/icones/ai-dist.png -text
-IMG/icones/aiff-dist.png -text
-IMG/icones/asf-dist.png -text
-IMG/icones/avi-dist.png -text
-IMG/icones/bmp-dist.png -text
-IMG/icones/bz2-dist.png -text
-IMG/icones/css-dist.png -text
-IMG/icones/deb-dist.png -text
-IMG/icones/defaut-dist.png -text
-IMG/icones/doc-dist.png -text
-IMG/icones/dvi-dist.png -text
-IMG/icones/eps-dist.png -text
-IMG/icones/gif-dist.png -text
-IMG/icones/gz-dist.png -text
-IMG/icones/html-dist.png -text
-IMG/icones/jpg-dist.png -text
-IMG/icones/mid-dist.png -text
-IMG/icones/mov-dist.png -text
-IMG/icones/mp3-dist.png -text
-IMG/icones/mpg-dist.png -text
-IMG/icones/ogg-dist.png -text
-IMG/icones/pdf-dist.png -text
-IMG/icones/pgn-dist.gif svneol=native#unset
-IMG/icones/png-dist.png -text
-IMG/icones/ppt-dist.png -text
-IMG/icones/ps-dist.png -text
-IMG/icones/psd-dist.png -text
-IMG/icones/qt-dist.png -text
-IMG/icones/ra-dist.png -text
-IMG/icones/ram-dist.png -text
-IMG/icones/rm-dist.png -text
-IMG/icones/rpm-dist.png -text
-IMG/icones/rtf-dist.png -text
-IMG/icones/sdd-dist.png -text
-IMG/icones/sdw-dist.png -text
-IMG/icones/sit-dist.png -text
-IMG/icones/sxc-dist.png -text
-IMG/icones/sxi-dist.png -text
-IMG/icones/sxw-dist.png -text
-IMG/icones/tex-dist.png -text
-IMG/icones/tgz-dist.png -text
-IMG/icones/tif-dist.png -text
-IMG/icones/torrent-dist.png -text
-IMG/icones/txt-dist.png -text
-IMG/icones/wav-dist.png -text
-IMG/icones/xcf-dist.png -text
-IMG/icones/xls-dist.png -text
-IMG/icones/xml-dist.png -text
-IMG/icones/zip-dist.png -text
-IMG/icones_barre/agrave-maj.png -text
-IMG/icones_barre/blanc.png -text
-IMG/icones_barre/eacute-maj.png -text
-IMG/icones_barre/espace.png -text
-IMG/icones_barre/euro.png -text
-IMG/icones_barre/gras.png -text
-IMG/icones_barre/guillemets-de.png -text
-IMG/icones_barre/guillemets-simples.png -text
-IMG/icones_barre/guillemets-uniques-de.png -text
-IMG/icones_barre/guillemets-uniques.png -text
-IMG/icones_barre/guillemets.png -text
-IMG/icones_barre/intertitre.png -text
-IMG/icones_barre/italique.png -text
-IMG/icones_barre/lien.png -text
-IMG/icones_barre/notes.png -text
-IMG/icones_barre/oelig-maj.png -text
-IMG/icones_barre/oelig.png -text
-IMG/icones_barre/quote.png -text
 IMG/logo_spip.jpg -text
-IMG/test.gif -text
-IMG/test.jpg -text
-IMG/test.png -text
-IMG/test_image.jpg -text
 dist/style.html -text
 ecrire/charsets/cp1251.php -text
 ecrire/charsets/cp1256.php -text
@@ -217,6 +146,73 @@ ecrire/img_pack/heures-am.png -text
 ecrire/img_pack/heures-pm.png -text
 ecrire/img_pack/heures-tout.png -text
 ecrire/img_pack/historique-24.gif -text
+ecrire/img_pack/icones/ai-dist.png -text
+ecrire/img_pack/icones/aiff-dist.png -text
+ecrire/img_pack/icones/asf-dist.png -text
+ecrire/img_pack/icones/avi-dist.png -text
+ecrire/img_pack/icones/bmp-dist.png -text
+ecrire/img_pack/icones/bz2-dist.png -text
+ecrire/img_pack/icones/css-dist.png -text
+ecrire/img_pack/icones/deb-dist.png -text
+ecrire/img_pack/icones/defaut-dist.png -text
+ecrire/img_pack/icones/doc-dist.png -text
+ecrire/img_pack/icones/dvi-dist.png -text
+ecrire/img_pack/icones/eps-dist.png -text
+ecrire/img_pack/icones/gif-dist.png -text
+ecrire/img_pack/icones/gz-dist.png -text
+ecrire/img_pack/icones/html-dist.png -text
+ecrire/img_pack/icones/jpg-dist.png -text
+ecrire/img_pack/icones/mid-dist.png -text
+ecrire/img_pack/icones/mov-dist.png -text
+ecrire/img_pack/icones/mp3-dist.png -text
+ecrire/img_pack/icones/mpg-dist.png -text
+ecrire/img_pack/icones/ogg-dist.png -text
+ecrire/img_pack/icones/pdf-dist.png -text
+ecrire/img_pack/icones/pgn-dist.png -text
+ecrire/img_pack/icones/png-dist.png -text
+ecrire/img_pack/icones/ppt-dist.png -text
+ecrire/img_pack/icones/ps-dist.png -text
+ecrire/img_pack/icones/psd-dist.png -text
+ecrire/img_pack/icones/qt-dist.png -text
+ecrire/img_pack/icones/ra-dist.png -text
+ecrire/img_pack/icones/ram-dist.png -text
+ecrire/img_pack/icones/rm-dist.png -text
+ecrire/img_pack/icones/rpm-dist.png -text
+ecrire/img_pack/icones/rtf-dist.png -text
+ecrire/img_pack/icones/sdd-dist.png -text
+ecrire/img_pack/icones/sdw-dist.png -text
+ecrire/img_pack/icones/sit-dist.png -text
+ecrire/img_pack/icones/sxc-dist.png -text
+ecrire/img_pack/icones/sxi-dist.png -text
+ecrire/img_pack/icones/sxw-dist.png -text
+ecrire/img_pack/icones/tex-dist.png -text
+ecrire/img_pack/icones/tgz-dist.png -text
+ecrire/img_pack/icones/tif-dist.png -text
+ecrire/img_pack/icones/torrent-dist.png -text
+ecrire/img_pack/icones/txt-dist.png -text
+ecrire/img_pack/icones/wav-dist.png -text
+ecrire/img_pack/icones/xcf-dist.png -text
+ecrire/img_pack/icones/xls-dist.png -text
+ecrire/img_pack/icones/xml-dist.png -text
+ecrire/img_pack/icones/zip-dist.png -text
+ecrire/img_pack/icones_barre/agrave-maj.png -text
+ecrire/img_pack/icones_barre/blanc.png -text
+ecrire/img_pack/icones_barre/eacute-maj.png -text
+ecrire/img_pack/icones_barre/espace.png -text
+ecrire/img_pack/icones_barre/euro.png -text
+ecrire/img_pack/icones_barre/gras.png -text
+ecrire/img_pack/icones_barre/guillemets-de.png -text
+ecrire/img_pack/icones_barre/guillemets-simples.png -text
+ecrire/img_pack/icones_barre/guillemets-uniques-de.png -text
+ecrire/img_pack/icones_barre/guillemets-uniques.png -text
+ecrire/img_pack/icones_barre/guillemets.png -text
+ecrire/img_pack/icones_barre/intertitre.png -text
+ecrire/img_pack/icones_barre/italique.png -text
+ecrire/img_pack/icones_barre/lien.png -text
+ecrire/img_pack/icones_barre/notes.png -text
+ecrire/img_pack/icones_barre/oelig-maj.png -text
+ecrire/img_pack/icones_barre/oelig.png -text
+ecrire/img_pack/icones_barre/quote.png -text
 ecrire/img_pack/image-24.gif -text
 ecrire/img_pack/interface-display-comp.png -text
 ecrire/img_pack/interface-display.png -text
@@ -265,6 +261,8 @@ ecrire/img_pack/puce-rouge.gif -text
 ecrire/img_pack/puce-verte-anim.gif -text
 ecrire/img_pack/puce-verte-breve.gif -text
 ecrire/img_pack/puce-verte.gif -text
+ecrire/img_pack/puce.gif -text
+ecrire/img_pack/puce_rtl.gif -text
 ecrire/img_pack/racine-24.gif -text
 ecrire/img_pack/racine-site-12.gif -text
 ecrire/img_pack/racine-site-24.gif -text
@@ -306,6 +304,10 @@ ecrire/img_pack/suivi-forum-24.gif -text
 ecrire/img_pack/suivi-petition-24.gif -text
 ecrire/img_pack/supprimer.gif -text
 ecrire/img_pack/synchro-24.gif -text
+ecrire/img_pack/test.gif -text
+ecrire/img_pack/test.jpg -text
+ecrire/img_pack/test.png -text
+ecrire/img_pack/test_image.jpg -text
 ecrire/img_pack/tirets-separation.gif -text
 ecrire/img_pack/tourner-180.gif -text
 ecrire/img_pack/tourner-droite.gif -text
@@ -336,7 +338,6 @@ ecrire/inc_cookie.php -text
 ecrire/inc_distant.php -text
 ecrire/inc_headers.php -text
 ecrire/inc_lang_liste.php -text
-ecrire/inc_magicquotes.php -text
 ecrire/inc_mini_nav.php -text
 ecrire/inc_minipres.php -text
 ecrire/inc_plugin.php -text
@@ -358,9 +359,6 @@ ecrire/lang/spip_ru.php3 -text
 ecrire/polices/dustismo-license.txt -text svneol=unset#application/octet-stream
 ecrire/polices/dustismo.ttf -text
 ecrire/polices/dustismo_bold.ttf -text
-ecrire/puce.gif -text
-ecrire/puce_rtl.gif -text
-ecrire/rien.gif -text
 ecrire/safehtml/classes/HTMLSax3.php -text
 ecrire/safehtml/classes/HTMLSax3/Decorators.php -text
 ecrire/safehtml/classes/HTMLSax3/States.php -text
@@ -368,6 +366,7 @@ ecrire/safehtml/classes/safehtml.php -text
 ecrire/safehtml/license.txt -text
 ecrire/safehtml/readme-SPIP.txt -text
 ecrire/safehtml/readme.txt -text
+/inc-urls-page.php3 -text
 /inc-urls-propres-qs.php3 -text
 /puce.gif -text
 /puce_rtl.gif -text
diff --git a/IMG/icones/pgn-dist.gif b/IMG/icones/pgn-dist.gif
deleted file mode 100644
index 9a6f40e4a6ade836dc32f5853a3ecfb6b622c86e..0000000000000000000000000000000000000000
Binary files a/IMG/icones/pgn-dist.gif and /dev/null differ
diff --git a/article.php3 b/article.php3
deleted file mode 100644
index 743516a7afd7fb374a4a3972d9b62e887e0f0304..0000000000000000000000000000000000000000
--- a/article.php3
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-$fond = "article";
-$delais = 24 * 3600;
-
-include ("inc-public.php3");
-
-?>
diff --git a/auteur.php3 b/auteur.php3
deleted file mode 100644
index 52cf22902b31ea73047b54323d4da469bd562e03..0000000000000000000000000000000000000000
--- a/auteur.php3
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-$fond = "auteur";
-$delais = 24 * 3600;
-
-include ("inc-public.php3");
-
-?>
diff --git a/breve.php3 b/breve.php3
deleted file mode 100644
index 8df2adf87c61fb39ed434f6ce066d67755f034c3..0000000000000000000000000000000000000000
--- a/breve.php3
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$fond = "breve";
-$delais = 12 * 3600;
-
-include ("inc-public.php3");
-
-
-?>
diff --git a/dist/style.html b/dist/style.html
index 79d1aa5556e0d351a63be7fb7080775cbedce844..a56ed234d0acccbe4fa72998049d381261257d00 100644
--- a/dist/style.html
+++ b/dist/style.html
@@ -38,7 +38,7 @@ td {
 	border: 1px solid ##ENV{couleur_claire,edf3fe}; 
 	background-position: center bottom; 
 	float: none;
-	behavior: url(win_width.htc);
+	behavior: url(#EVAL{_DIR_IMG_PACK}win_width.htc);
  	font-size: 12px;
 	font-family: Verdana,Arial,Sans,sans-serif; 
 }
@@ -49,7 +49,7 @@ td {
 	background-color: white; 
 	border: 1px solid ##ENV{couleur_claire,edf3fe}; 
 	background-position: center bottom; float: none; 
-	behavior: url(win_width.htc);
+	behavior: url(#EVAL{_DIR_IMG_PACK}win_width.htc);
  	font-size: 12px;
 	font-family: Verdana,Arial,Sans,sans-serif; 
 }
@@ -116,7 +116,7 @@ select.fondl {
 	width: 11px;
 	padding: 0px;
 	margin: 0px;
-	background: url(#ENV{dir}tirets-separation.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}tirets-separation.gif);
 	background-position: 5px 0px;
 }
 .bandeau_couleur {
@@ -169,7 +169,7 @@ a.bandeau_rub {
 	border-bottom: 1px solid #cccccc;
 	background-repeat: no-repeat;
 	background-position: [(#ENV{ltr}|choixsiegal{left,1,99})%] center;
-	background-image: url(#ENV{dir}rubrique-12.gif);
+	background-image: url(#EVAL{_DIR_IMG_PACK}rubrique-12.gif);
 }
 a.bandeau_rub:hover {
 	background-color: white;
@@ -190,7 +190,7 @@ div.bandeau_rub {
 }
 
 div.brt {
-	background: url(#ENV{dir}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
+	background: url(#EVAL{_DIR_IMG_PACK}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
 }
 div.pos_r {
 	position: relative;
@@ -198,7 +198,7 @@ div.pos_r {
 
 option.selec_rub {
 	background-position: [(#ENV{ltr}|choixsiegal{left,left,right})] center;
-	background-image: url(#ENV{dir}rubrique-12.gif);
+	background-image: url(#EVAL{_DIR_IMG_PACK}rubrique-12.gif);
 	background-repeat: no-repeat;
 	padding-[(#ENV{ltr}|choixsiegal{left,left,right})]: 16px;
 }
@@ -232,7 +232,7 @@ a.icone26 img {
 	background-color: ##ENV{couleur_foncee,3874b0};
 }
 a.icone26:hover img {
-	background: url(#ENV{dir}fond-gris-anim.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}fond-gris-anim.gif);
 }
 
 
@@ -354,7 +354,7 @@ a.icone26:hover img {
 	margin: 4px;
 	padding: 0px;
 	border: 0px;
-	background: url(#ENV{dir}fond-gris-anim.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}fond-gris-anim.gif);
 }
 
 
@@ -379,7 +379,7 @@ a.icone26:hover img {
 	display: inline;
 	padding: 3px;
 	background-color: #e4e4e4;
-	background: url(#ENV{dir}fond-gris-anim.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}fond-gris-anim.gif);
 	border: 1px solid ##ENV{couleur_foncee,3874b0};
 	-moz-border-radius: 5px;
 }
@@ -486,7 +486,7 @@ a.cellule-h div.cell-i {
 a.cellule-h:hover div.cell-i {
 	padding: 0px;
 	border: 1px solid ##ENV{couleur_foncee,3874b0};
-	background: url(#ENV{dir}fond-gris-anim.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}fond-gris-anim.gif);
 	-moz-border-radius: 5px;
 	margin: 0px;
 	margin-[(#ENV{ltr}|choixsiegal{left,right,left})]: 3px;
@@ -529,7 +529,7 @@ a.cellule-h-texte {
 }
 .danger a.cellule-h-texte {
 	border: 1px dashed black;
-	background: url(#ENV{dir}rayures-sup.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}rayures-sup.gif);
 }
 a.cellule-h-texte:hover {
 	text-decoration: none;
@@ -623,10 +623,10 @@ div.onglet_off {
 
 
 .reliefblanc {
-	 background-image: url(#ENV{dir}barre-blanc.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}barre-blanc.gif);
 }
 .reliefgris { 
-	 background-image: url(#ENV{dir}barre-noir.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}barre-noir.gif);
 }
 .iconeoff {
 	padding: 3px; margin: 1px; border: 1px dashed #aaaaaa; background-color: #f0f0f0;
@@ -635,7 +635,7 @@ div.onglet_off {
 	cursor: pointer; padding: 3px; margin: 1px;  border-right: solid 1px white; border-bottom: solid 1px white; border-left: solid 1px #666666; border-top: solid 1px #666666; background-color: #eeeeee;
 }
 .iconedanger { padding: 3px; margin: 1px; border: 1px dashed black;
-	background: url(#ENV{dir}rayures-sup.gif);
+	background: url(#EVAL{_DIR_IMG_PACK}rayures-sup.gif);
 }
 
 /* Raccourcis pour les polices (utile pour les tableaux) */
@@ -714,7 +714,7 @@ a.ortho-dico:hover {
 	z-index: 0;
 }
 .suggest-actif .detail ul, .suggest-inactif .detail ul {
-	 list-style-image: url(#ENV{dir}puce.gif);
+	 list-style-image: url(#EVAL{_DIR_IMG_PACK}puce.gif);
 	background: #f3f2f3;
 	margin: 0px;
 	padding: 0px;
@@ -1007,19 +1007,19 @@ a.bouton_rotation:hover img {
 	text-decoration: none;
 }
 .plan-articles .publie {
-	 background-image: url(#ENV{dir}puce-verte.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}puce-verte.gif);
 }
 .plan-articles .prepa {
-	 background-image: url(#ENV{dir}puce-blanche.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}puce-blanche.gif);
 }
 .plan-articles .prop {
-	 background-image: url(#ENV{dir}puce-orange.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}puce-orange.gif);
 }
 .plan-articles .refuse {
-	 background-image: url(#ENV{dir}puce-rouge.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}puce-rouge.gif);
 }
 .plan-articles .poubelle {
-	 background-image: url(#ENV{dir}puce-poubelle.gif);
+	 background-image: url(#EVAL{_DIR_IMG_PACK}puce-poubelle.gif);
 }
 
 a.foncee, a.foncee:hover, a.claire, a.claire:hover, span.creer, span.lang_base {
@@ -1069,7 +1069,7 @@ div.liste {
 }
 
 a.liste-mot {
-	background: url(#ENV{dir}petite-cle.gif) [(#ENV{ltr}|choixsiegal{left,left,right})] center no-repeat; 
+	background: url(#EVAL{_DIR_IMG_PACK}petite-cle.gif) [(#ENV{ltr}|choixsiegal{left,left,right})] center no-repeat; 
 	padding-[(#ENV{ltr}|choixsiegal{left,left,right})]: 30px;
 }
 
@@ -1140,7 +1140,7 @@ div.brouteur_rubrique {
 	border-bottom: 1px solid ##ENV{couleur_foncee,3874b0};
 	border-left: 1px solid ##ENV{couleur_foncee,3874b0};
 	border-right: 1px solid ##ENV{couleur_foncee,3874b0};
-	background: url(#ENV{dir}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif)[(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
+	background: url(#EVAL{_DIR_IMG_PACK}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif)[(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
 	background-color: white;
 }
 
@@ -1152,7 +1152,7 @@ div.brouteur_rubrique_on {
 	border-bottom: 1px solid ##ENV{couleur_foncee,3874b0};
 	border-left: 1px solid ##ENV{couleur_foncee,3874b0};
 	border-right: 1px solid ##ENV{couleur_foncee,3874b0};
-	background: url(#ENV{dir}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
+	background: url(#EVAL{_DIR_IMG_PACK}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
 	background-color: #e0e0e0;
 }
 
@@ -1205,7 +1205,7 @@ a.spip_in {
 	border-bottom: 1px dashed;
 }
 a.spip_out {
-	background: url(#ENV{dir}spip_out.gif)[(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
+	background: url(#EVAL{_DIR_IMG_PACK}spip_out.gif)[(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
 	padding-[(#ENV{ltr}|choixsiegal{left,right,left})]: 10px;
 	border-bottom: 1px solid;
 }
@@ -1231,7 +1231,7 @@ a.spip_glossaire:hover {
 	margin-top: 10px;
 	padding: 5px;
 	border: 1px solid #666666;
-	behavior: url(win_width.htc);
+	behavior: url(#EVAL{_DIR_IMG_PACK}win_width.htc);
 }
 blockquote.spip {
 	margin-[(#ENV{ltr}|choixsiegal{left,left,right})]: 40px;
@@ -1297,7 +1297,7 @@ a.triangle_block:hover {
 }
 
 .fond-agenda {
-	background: url(#ENV{dir}fond-agenda.gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
+	background: url(#EVAL{_DIR_IMG_PACK}fond-agenda.gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
 	float: [(#ENV{ltr}|choixsiegal{left,left,right})]; 
 	margin-[(#ENV{ltr}|choixsiegal{left,right,left})]: 3px;
 	padding-[(#ENV{ltr}|choixsiegal{left,right,left})]: 4px;
@@ -1320,10 +1320,10 @@ a.triangle_block:hover {
 
 div.petite-rubrique {
 	background: [(#ENV{ltr}|choixsiegal{left,1,99})%] no-repeat;
-	background-image: url(#ENV{dir}rubrique-12.gif);
+	background-image: url(#EVAL{_DIR_IMG_PACK}rubrique-12.gif);
 	padding-[(#ENV{ltr}|choixsiegal{left,left,right})]: 15px;
 }
 div.rub-ouverte {
 	padding-[(#ENV{ltr}|choixsiegal{left,right,left})]: 10px;
-	background: url(#ENV{dir}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
+	background: url(#EVAL{_DIR_IMG_PACK}triangle-droite[(#ENV{ltr}|choixsiegal{left,'',_rtl})].gif) [(#ENV{ltr}|choixsiegal{left,right,left})] center no-repeat;
 }
diff --git a/ecrire/exec_brouteur_frame.php b/ecrire/exec_brouteur_frame.php
index 59beed2a6aaf385adc27408e652e00bdc2715490..1647191f7574da209cb7449c9274fe0549337bf0 100644
--- a/ecrire/exec_brouteur_frame.php
+++ b/ecrire/exec_brouteur_frame.php
@@ -219,7 +219,7 @@ echo "</body></html>";
 function frame_background_image($f)
 {
 	return "background-image: url(" . 
-		generer_url_ecrire(_DIR_IMG_PACK . $f) .
+		_DIR_IMG_PACK . $f .
 		")";
 }
 ?>
diff --git a/ecrire/exec_sites.php b/ecrire/exec_sites.php
index b74af47756ba8dbc3be62c2436e7a38f92f4bc2a..06fc0518bcf28fa39a3ef44dc1092b361458d040 100644
--- a/ecrire/exec_sites.php
+++ b/ecrire/exec_sites.php
@@ -25,6 +25,7 @@ function sites_dist()
 {
 global 
   $analyser_site,
+  $ajouter_lien,
   $annee,
   $champs_extra,
   $cherche_mot,
@@ -51,6 +52,7 @@ global
   $spip_lang_left,
   $spip_lang_right,
   $supp_mot,
+  $supprimer_lien,
   $syndication,
   $syndication_old,
   $url,
@@ -67,12 +69,14 @@ $id_syndic = intval($id_syndic);
 $flag_administrable = ($connect_statut == '0minirezo' AND acces_rubrique($id_rubrique));
 
 
-if ($flag_administrable && !_DIR_RESTREINT) {
-		if ($supprimer_lien = intval($GLOBALS["supprimer_lien"]))
-			spip_query("UPDATE spip_syndic_articles SET statut='refuse' WHERE id_syndic_article='$supprimer_lien'");
-		if ($ajouter_lien = intval($GLOBALS["ajouter_lien"]))
-			spip_query("UPDATE spip_syndic_articles SET statut='publie' WHERE id_syndic_article='$ajouter_lien'");
- }
+	if ($flag_administrable) {
+		if ($supprimer_lien = intval($supprimer_lien))
+			spip_query("UPDATE spip_syndic_articles SET statut='refuse'
+			WHERE id_syndic_article='$supprimer_lien'");
+		if ($ajouter_lien = intval($ajouter_lien))
+			spip_query("UPDATE spip_syndic_articles SET statut='publie'
+			WHERE id_syndic_article='$ajouter_lien'");
+	}
 
 if ($new == 'oui') {
 	$flag_editable = ($flag_administrable OR ($GLOBALS['meta']["proposer_sites"] > 0));
diff --git a/ecrire/exec_sites_tous.php b/ecrire/exec_sites_tous.php
index ee926cd4cccc52c6d57f125abe12a616edad64fe..f80a3dcd2a9dbb84d2f50ea9024223f33bac2326 100644
--- a/ecrire/exec_sites_tous.php
+++ b/ecrire/exec_sites_tous.php
@@ -19,19 +19,19 @@ function sites_tous_dist()
 {
   global $connect_statut, $supp_syndic, $options;
 
-  if ($connect_statut == '0minirezo') {
-	if ($supp_syndic)
-		spip_query("DELETE FROM spip_syndic WHERE id_syndic=".intval($supp_syndic));
+	if ($connect_statut == '0minirezo') {
+		if ($supp_syndic)
+			spip_query("DELETE FROM spip_syndic WHERE
+			id_syndic=".intval($supp_syndic));
 
-   // Moderation manuelle des liens
-
-	if (!_DIR_RESTREINT) {
+		// Moderation manuelle des liens
 		if ($supprimer_lien = intval($GLOBALS["supprimer_lien"]))
-			spip_query("UPDATE spip_syndic_articles SET statut='refuse' WHERE id_syndic_article='$supprimer_lien'");
+			spip_query("UPDATE spip_syndic_articles SET statut='refuse'
+			WHERE id_syndic_article='$supprimer_lien'");
 		if ($ajouter_lien = intval($GLOBALS["ajouter_lien"]))
-			spip_query("UPDATE spip_syndic_articles SET statut='publie' WHERE id_syndic_article='$ajouter_lien'");
+			spip_query("UPDATE spip_syndic_articles SET statut='publie'
+			WHERE id_syndic_article='$ajouter_lien'");
 	}
-  }
 
 debut_page(_T('titre_page_sites_tous'),"documents","sites");
 debut_gauche();
diff --git a/ecrire/exec_spip_action_tester.php b/ecrire/exec_spip_action_tester.php
index 1f8ab0574fde766731095122e8a41696608aae41..9a964b94363491122ad9454b93937ebfee9dcbc3 100644
--- a/ecrire/exec_spip_action_tester.php
+++ b/ecrire/exec_spip_action_tester.php
@@ -27,7 +27,7 @@ function spip_action_tester_dist() {
 			} else {
 				# Attention GD sait lire le gif mais pas forcement l'ecrire
 				if (function_exists('ImageCreateFromGIF')) {
-					$srcImage = @ImageCreateFromGIF(_DIR_IMG . "test.gif");
+					$srcImage = @ImageCreateFromGIF(_ROOT_IMG_PACK."test.gif");
 					if ($srcImage) {
 						$gd_formats_read_gif = ",gif";
 						ImageDestroy( $srcImage );
@@ -48,21 +48,21 @@ function spip_action_tester_dist() {
 		
 			$gd_formats = Array();
 			if (function_exists('ImageCreateFromJPEG')) {
-				$srcImage = @ImageCreateFromJPEG(_DIR_IMG . "test.jpg");
+				$srcImage = @ImageCreateFromJPEG(_ROOT_IMG_PACK."test.jpg");
 				if ($srcImage) {
 					$gd_formats[] = "jpg";
 					ImageDestroy( $srcImage );
 				}
 			}
 			if (function_exists('ImageCreateFromGIF')) {
-				$srcImage = @ImageCreateFromGIF(_DIR_IMG . "test.gif");
+				$srcImage = @ImageCreateFromGIF(_ROOT_IMG_PACK."test.gif");
 				if ($srcImage) {
 					$gd_formats[] = "gif";
 					ImageDestroy( $srcImage );
 				}
 			}
 			if (function_exists('ImageCreateFromPNG')) {
-				$srcImage = @ImageCreateFromPNG(_DIR_IMG . "test.png");
+				$srcImage = @ImageCreateFromPNG(_ROOT_IMG_PACK."test.png");
 				if ($srcImage) {
 					$gd_formats[] = "png";
 					ImageDestroy( $srcImage );
@@ -86,7 +86,7 @@ function spip_action_tester_dist() {
 		$pnmtojpeg_command = str_replace("pnmscale",
 			"pnmtojpeg", $pnmscale_command);
 
-		$vignette = _DIR_IMG . "test.jpg";
+		$vignette = _ROOT_IMG_PACK."test.jpg";
 		$dest = _DIR_IMG . "test-jpg.jpg";
 		$commande = "$jpegtopnm_command $vignette | $pnmscale_command -width 10 | $pnmtojpeg_command > $dest";
 		spip_log($commande);
@@ -96,7 +96,7 @@ function spip_action_tester_dist() {
 		}
 		$giftopnm_command = ereg_replace("pnmscale", "giftopnm", $pnmscale_command);
 		$pnmtojpeg_command = ereg_replace("pnmscale", "pnmtojpeg", $pnmscale_command);
-		$vignette = _DIR_IMG . "test.gif";
+		$vignette = _ROOT_IMG_PACK."test.gif";
 		$dest = _DIR_IMG . "test-gif.jpg";
 		$commande = "$giftopnm_command $vignette | $pnmscale_command -width 10 | $pnmtojpeg_command > $dest";
 		spip_log($commande);
@@ -106,7 +106,7 @@ function spip_action_tester_dist() {
 		}
 
 		$pngtopnm_command = ereg_replace("pnmscale", "pngtopnm", $pnmscale_command);
-		$vignette = _DIR_IMG . "test.png";
+		$vignette = _ROOT_IMG_PACK."test.png";
 		$dest = _DIR_IMG . "test-gif.jpg";
 		$commande = "$pngtopnm_command $vignette | $pnmscale_command -width 10 | $pnmtojpeg_command > $dest";
 		spip_log($commande);
@@ -129,8 +129,10 @@ function spip_action_tester_dist() {
 		include_ecrire('inc_logos');
 		//$taille_preview = $GLOBALS['meta']["taille_preview"];
 		if ($taille_preview < 10) $taille_preview = 150;
-		if ($preview = creer_vignette(_DIR_IMG . 'test_image.jpg', $taille_preview, $taille_preview, 'jpg', '', "test_$arg", $arg, true))
-
+		if ($preview = creer_vignette(
+		_ROOT_IMG_PACK.'test_image.jpg',
+		$taille_preview, $taille_preview, 'jpg', '', "test_$arg", $arg, true)
+		AND ($preview['width'] * $preview['height'] > 0))
 			redirige_par_entete($preview['fichier']);
 	}
 
diff --git a/ecrire/calendrier.css b/ecrire/img_pack/calendrier.css
similarity index 100%
rename from ecrire/calendrier.css
rename to ecrire/img_pack/calendrier.css
diff --git a/IMG/icones/ai-dist.png b/ecrire/img_pack/icones/ai-dist.png
similarity index 100%
rename from IMG/icones/ai-dist.png
rename to ecrire/img_pack/icones/ai-dist.png
diff --git a/IMG/icones/aiff-dist.png b/ecrire/img_pack/icones/aiff-dist.png
similarity index 100%
rename from IMG/icones/aiff-dist.png
rename to ecrire/img_pack/icones/aiff-dist.png
diff --git a/IMG/icones/asf-dist.png b/ecrire/img_pack/icones/asf-dist.png
similarity index 100%
rename from IMG/icones/asf-dist.png
rename to ecrire/img_pack/icones/asf-dist.png
diff --git a/IMG/icones/avi-dist.png b/ecrire/img_pack/icones/avi-dist.png
similarity index 100%
rename from IMG/icones/avi-dist.png
rename to ecrire/img_pack/icones/avi-dist.png
diff --git a/IMG/icones/bmp-dist.png b/ecrire/img_pack/icones/bmp-dist.png
similarity index 100%
rename from IMG/icones/bmp-dist.png
rename to ecrire/img_pack/icones/bmp-dist.png
diff --git a/IMG/icones/bz2-dist.png b/ecrire/img_pack/icones/bz2-dist.png
similarity index 100%
rename from IMG/icones/bz2-dist.png
rename to ecrire/img_pack/icones/bz2-dist.png
diff --git a/IMG/icones/css-dist.png b/ecrire/img_pack/icones/css-dist.png
similarity index 100%
rename from IMG/icones/css-dist.png
rename to ecrire/img_pack/icones/css-dist.png
diff --git a/IMG/icones/deb-dist.png b/ecrire/img_pack/icones/deb-dist.png
similarity index 100%
rename from IMG/icones/deb-dist.png
rename to ecrire/img_pack/icones/deb-dist.png
diff --git a/IMG/icones/defaut-dist.png b/ecrire/img_pack/icones/defaut-dist.png
similarity index 100%
rename from IMG/icones/defaut-dist.png
rename to ecrire/img_pack/icones/defaut-dist.png
diff --git a/IMG/icones/doc-dist.png b/ecrire/img_pack/icones/doc-dist.png
similarity index 100%
rename from IMG/icones/doc-dist.png
rename to ecrire/img_pack/icones/doc-dist.png
diff --git a/IMG/icones/dvi-dist.png b/ecrire/img_pack/icones/dvi-dist.png
similarity index 100%
rename from IMG/icones/dvi-dist.png
rename to ecrire/img_pack/icones/dvi-dist.png
diff --git a/IMG/icones/eps-dist.png b/ecrire/img_pack/icones/eps-dist.png
similarity index 100%
rename from IMG/icones/eps-dist.png
rename to ecrire/img_pack/icones/eps-dist.png
diff --git a/IMG/icones/gif-dist.png b/ecrire/img_pack/icones/gif-dist.png
similarity index 100%
rename from IMG/icones/gif-dist.png
rename to ecrire/img_pack/icones/gif-dist.png
diff --git a/IMG/icones/gz-dist.png b/ecrire/img_pack/icones/gz-dist.png
similarity index 100%
rename from IMG/icones/gz-dist.png
rename to ecrire/img_pack/icones/gz-dist.png
diff --git a/IMG/icones/html-dist.png b/ecrire/img_pack/icones/html-dist.png
similarity index 100%
rename from IMG/icones/html-dist.png
rename to ecrire/img_pack/icones/html-dist.png
diff --git a/IMG/icones/jpg-dist.png b/ecrire/img_pack/icones/jpg-dist.png
similarity index 100%
rename from IMG/icones/jpg-dist.png
rename to ecrire/img_pack/icones/jpg-dist.png
diff --git a/IMG/icones/mid-dist.png b/ecrire/img_pack/icones/mid-dist.png
similarity index 100%
rename from IMG/icones/mid-dist.png
rename to ecrire/img_pack/icones/mid-dist.png
diff --git a/IMG/icones/mov-dist.png b/ecrire/img_pack/icones/mov-dist.png
similarity index 100%
rename from IMG/icones/mov-dist.png
rename to ecrire/img_pack/icones/mov-dist.png
diff --git a/IMG/icones/mp3-dist.png b/ecrire/img_pack/icones/mp3-dist.png
similarity index 100%
rename from IMG/icones/mp3-dist.png
rename to ecrire/img_pack/icones/mp3-dist.png
diff --git a/IMG/icones/mpg-dist.png b/ecrire/img_pack/icones/mpg-dist.png
similarity index 100%
rename from IMG/icones/mpg-dist.png
rename to ecrire/img_pack/icones/mpg-dist.png
diff --git a/IMG/icones/ogg-dist.png b/ecrire/img_pack/icones/ogg-dist.png
similarity index 100%
rename from IMG/icones/ogg-dist.png
rename to ecrire/img_pack/icones/ogg-dist.png
diff --git a/IMG/icones/pdf-dist.png b/ecrire/img_pack/icones/pdf-dist.png
similarity index 100%
rename from IMG/icones/pdf-dist.png
rename to ecrire/img_pack/icones/pdf-dist.png
diff --git a/ecrire/img_pack/icones/pgn-dist.png b/ecrire/img_pack/icones/pgn-dist.png
new file mode 100644
index 0000000000000000000000000000000000000000..23234929dbdd1bc5fdd0405332f74e11fd7087b3
Binary files /dev/null and b/ecrire/img_pack/icones/pgn-dist.png differ
diff --git a/IMG/icones/png-dist.png b/ecrire/img_pack/icones/png-dist.png
similarity index 100%
rename from IMG/icones/png-dist.png
rename to ecrire/img_pack/icones/png-dist.png
diff --git a/IMG/icones/ppt-dist.png b/ecrire/img_pack/icones/ppt-dist.png
similarity index 100%
rename from IMG/icones/ppt-dist.png
rename to ecrire/img_pack/icones/ppt-dist.png
diff --git a/IMG/icones/ps-dist.png b/ecrire/img_pack/icones/ps-dist.png
similarity index 100%
rename from IMG/icones/ps-dist.png
rename to ecrire/img_pack/icones/ps-dist.png
diff --git a/IMG/icones/psd-dist.png b/ecrire/img_pack/icones/psd-dist.png
similarity index 100%
rename from IMG/icones/psd-dist.png
rename to ecrire/img_pack/icones/psd-dist.png
diff --git a/IMG/icones/qt-dist.png b/ecrire/img_pack/icones/qt-dist.png
similarity index 100%
rename from IMG/icones/qt-dist.png
rename to ecrire/img_pack/icones/qt-dist.png
diff --git a/IMG/icones/ra-dist.png b/ecrire/img_pack/icones/ra-dist.png
similarity index 100%
rename from IMG/icones/ra-dist.png
rename to ecrire/img_pack/icones/ra-dist.png
diff --git a/IMG/icones/ram-dist.png b/ecrire/img_pack/icones/ram-dist.png
similarity index 100%
rename from IMG/icones/ram-dist.png
rename to ecrire/img_pack/icones/ram-dist.png
diff --git a/IMG/icones/rm-dist.png b/ecrire/img_pack/icones/rm-dist.png
similarity index 100%
rename from IMG/icones/rm-dist.png
rename to ecrire/img_pack/icones/rm-dist.png
diff --git a/IMG/icones/rpm-dist.png b/ecrire/img_pack/icones/rpm-dist.png
similarity index 100%
rename from IMG/icones/rpm-dist.png
rename to ecrire/img_pack/icones/rpm-dist.png
diff --git a/IMG/icones/rtf-dist.png b/ecrire/img_pack/icones/rtf-dist.png
similarity index 100%
rename from IMG/icones/rtf-dist.png
rename to ecrire/img_pack/icones/rtf-dist.png
diff --git a/IMG/icones/sdd-dist.png b/ecrire/img_pack/icones/sdd-dist.png
similarity index 100%
rename from IMG/icones/sdd-dist.png
rename to ecrire/img_pack/icones/sdd-dist.png
diff --git a/IMG/icones/sdw-dist.png b/ecrire/img_pack/icones/sdw-dist.png
similarity index 100%
rename from IMG/icones/sdw-dist.png
rename to ecrire/img_pack/icones/sdw-dist.png
diff --git a/IMG/icones/sit-dist.png b/ecrire/img_pack/icones/sit-dist.png
similarity index 100%
rename from IMG/icones/sit-dist.png
rename to ecrire/img_pack/icones/sit-dist.png
diff --git a/IMG/icones/sxc-dist.png b/ecrire/img_pack/icones/sxc-dist.png
similarity index 100%
rename from IMG/icones/sxc-dist.png
rename to ecrire/img_pack/icones/sxc-dist.png
diff --git a/IMG/icones/sxi-dist.png b/ecrire/img_pack/icones/sxi-dist.png
similarity index 100%
rename from IMG/icones/sxi-dist.png
rename to ecrire/img_pack/icones/sxi-dist.png
diff --git a/IMG/icones/sxw-dist.png b/ecrire/img_pack/icones/sxw-dist.png
similarity index 100%
rename from IMG/icones/sxw-dist.png
rename to ecrire/img_pack/icones/sxw-dist.png
diff --git a/IMG/icones/tex-dist.png b/ecrire/img_pack/icones/tex-dist.png
similarity index 100%
rename from IMG/icones/tex-dist.png
rename to ecrire/img_pack/icones/tex-dist.png
diff --git a/IMG/icones/tgz-dist.png b/ecrire/img_pack/icones/tgz-dist.png
similarity index 100%
rename from IMG/icones/tgz-dist.png
rename to ecrire/img_pack/icones/tgz-dist.png
diff --git a/IMG/icones/tif-dist.png b/ecrire/img_pack/icones/tif-dist.png
similarity index 100%
rename from IMG/icones/tif-dist.png
rename to ecrire/img_pack/icones/tif-dist.png
diff --git a/IMG/icones/torrent-dist.png b/ecrire/img_pack/icones/torrent-dist.png
similarity index 100%
rename from IMG/icones/torrent-dist.png
rename to ecrire/img_pack/icones/torrent-dist.png
diff --git a/IMG/icones/txt-dist.png b/ecrire/img_pack/icones/txt-dist.png
similarity index 100%
rename from IMG/icones/txt-dist.png
rename to ecrire/img_pack/icones/txt-dist.png
diff --git a/IMG/icones/wav-dist.png b/ecrire/img_pack/icones/wav-dist.png
similarity index 100%
rename from IMG/icones/wav-dist.png
rename to ecrire/img_pack/icones/wav-dist.png
diff --git a/IMG/icones/xcf-dist.png b/ecrire/img_pack/icones/xcf-dist.png
similarity index 100%
rename from IMG/icones/xcf-dist.png
rename to ecrire/img_pack/icones/xcf-dist.png
diff --git a/IMG/icones/xls-dist.png b/ecrire/img_pack/icones/xls-dist.png
similarity index 100%
rename from IMG/icones/xls-dist.png
rename to ecrire/img_pack/icones/xls-dist.png
diff --git a/IMG/icones/xml-dist.png b/ecrire/img_pack/icones/xml-dist.png
similarity index 100%
rename from IMG/icones/xml-dist.png
rename to ecrire/img_pack/icones/xml-dist.png
diff --git a/IMG/icones/zip-dist.png b/ecrire/img_pack/icones/zip-dist.png
similarity index 100%
rename from IMG/icones/zip-dist.png
rename to ecrire/img_pack/icones/zip-dist.png
diff --git a/IMG/icones_barre/agrave-maj.png b/ecrire/img_pack/icones_barre/agrave-maj.png
similarity index 100%
rename from IMG/icones_barre/agrave-maj.png
rename to ecrire/img_pack/icones_barre/agrave-maj.png
diff --git a/IMG/icones_barre/blanc.png b/ecrire/img_pack/icones_barre/blanc.png
similarity index 100%
rename from IMG/icones_barre/blanc.png
rename to ecrire/img_pack/icones_barre/blanc.png
diff --git a/IMG/icones_barre/eacute-maj.png b/ecrire/img_pack/icones_barre/eacute-maj.png
similarity index 100%
rename from IMG/icones_barre/eacute-maj.png
rename to ecrire/img_pack/icones_barre/eacute-maj.png
diff --git a/IMG/icones_barre/espace.png b/ecrire/img_pack/icones_barre/espace.png
similarity index 100%
rename from IMG/icones_barre/espace.png
rename to ecrire/img_pack/icones_barre/espace.png
diff --git a/IMG/icones_barre/euro.png b/ecrire/img_pack/icones_barre/euro.png
similarity index 100%
rename from IMG/icones_barre/euro.png
rename to ecrire/img_pack/icones_barre/euro.png
diff --git a/IMG/icones_barre/gras.png b/ecrire/img_pack/icones_barre/gras.png
similarity index 100%
rename from IMG/icones_barre/gras.png
rename to ecrire/img_pack/icones_barre/gras.png
diff --git a/IMG/icones_barre/guillemets-de.png b/ecrire/img_pack/icones_barre/guillemets-de.png
similarity index 100%
rename from IMG/icones_barre/guillemets-de.png
rename to ecrire/img_pack/icones_barre/guillemets-de.png
diff --git a/IMG/icones_barre/guillemets-simples.png b/ecrire/img_pack/icones_barre/guillemets-simples.png
similarity index 100%
rename from IMG/icones_barre/guillemets-simples.png
rename to ecrire/img_pack/icones_barre/guillemets-simples.png
diff --git a/IMG/icones_barre/guillemets-uniques-de.png b/ecrire/img_pack/icones_barre/guillemets-uniques-de.png
similarity index 100%
rename from IMG/icones_barre/guillemets-uniques-de.png
rename to ecrire/img_pack/icones_barre/guillemets-uniques-de.png
diff --git a/IMG/icones_barre/guillemets-uniques.png b/ecrire/img_pack/icones_barre/guillemets-uniques.png
similarity index 100%
rename from IMG/icones_barre/guillemets-uniques.png
rename to ecrire/img_pack/icones_barre/guillemets-uniques.png
diff --git a/IMG/icones_barre/guillemets.png b/ecrire/img_pack/icones_barre/guillemets.png
similarity index 100%
rename from IMG/icones_barre/guillemets.png
rename to ecrire/img_pack/icones_barre/guillemets.png
diff --git a/IMG/icones_barre/intertitre.png b/ecrire/img_pack/icones_barre/intertitre.png
similarity index 100%
rename from IMG/icones_barre/intertitre.png
rename to ecrire/img_pack/icones_barre/intertitre.png
diff --git a/IMG/icones_barre/italique.png b/ecrire/img_pack/icones_barre/italique.png
similarity index 100%
rename from IMG/icones_barre/italique.png
rename to ecrire/img_pack/icones_barre/italique.png
diff --git a/IMG/icones_barre/lien.png b/ecrire/img_pack/icones_barre/lien.png
similarity index 100%
rename from IMG/icones_barre/lien.png
rename to ecrire/img_pack/icones_barre/lien.png
diff --git a/IMG/icones_barre/notes.png b/ecrire/img_pack/icones_barre/notes.png
similarity index 100%
rename from IMG/icones_barre/notes.png
rename to ecrire/img_pack/icones_barre/notes.png
diff --git a/IMG/icones_barre/oelig-maj.png b/ecrire/img_pack/icones_barre/oelig-maj.png
similarity index 100%
rename from IMG/icones_barre/oelig-maj.png
rename to ecrire/img_pack/icones_barre/oelig-maj.png
diff --git a/IMG/icones_barre/oelig.png b/ecrire/img_pack/icones_barre/oelig.png
similarity index 100%
rename from IMG/icones_barre/oelig.png
rename to ecrire/img_pack/icones_barre/oelig.png
diff --git a/IMG/icones_barre/quote.png b/ecrire/img_pack/icones_barre/quote.png
similarity index 100%
rename from IMG/icones_barre/quote.png
rename to ecrire/img_pack/icones_barre/quote.png
diff --git a/ecrire/layer.js b/ecrire/img_pack/layer.js
similarity index 100%
rename from ecrire/layer.js
rename to ecrire/img_pack/layer.js
diff --git a/ecrire/md5.js b/ecrire/img_pack/md5.js
similarity index 100%
rename from ecrire/md5.js
rename to ecrire/img_pack/md5.js
diff --git a/ecrire/presentation.js b/ecrire/img_pack/presentation.js
similarity index 100%
rename from ecrire/presentation.js
rename to ecrire/img_pack/presentation.js
diff --git a/ecrire/puce.gif b/ecrire/img_pack/puce.gif
similarity index 100%
rename from ecrire/puce.gif
rename to ecrire/img_pack/puce.gif
diff --git a/ecrire/puce_rtl.gif b/ecrire/img_pack/puce_rtl.gif
similarity index 100%
rename from ecrire/puce_rtl.gif
rename to ecrire/img_pack/puce_rtl.gif
diff --git a/ecrire/spip_style_invisible.css b/ecrire/img_pack/spip_style_invisible.css
similarity index 100%
rename from ecrire/spip_style_invisible.css
rename to ecrire/img_pack/spip_style_invisible.css
diff --git a/ecrire/spip_style_print.css b/ecrire/img_pack/spip_style_print.css
similarity index 100%
rename from ecrire/spip_style_print.css
rename to ecrire/img_pack/spip_style_print.css
diff --git a/ecrire/spip_style_visible.css b/ecrire/img_pack/spip_style_visible.css
similarity index 100%
rename from ecrire/spip_style_visible.css
rename to ecrire/img_pack/spip_style_visible.css
diff --git a/IMG/test.gif b/ecrire/img_pack/test.gif
similarity index 100%
rename from IMG/test.gif
rename to ecrire/img_pack/test.gif
diff --git a/IMG/test.jpg b/ecrire/img_pack/test.jpg
similarity index 100%
rename from IMG/test.jpg
rename to ecrire/img_pack/test.jpg
diff --git a/IMG/test.png b/ecrire/img_pack/test.png
similarity index 100%
rename from IMG/test.png
rename to ecrire/img_pack/test.png
diff --git a/IMG/test_image.jpg b/ecrire/img_pack/test_image.jpg
similarity index 100%
rename from IMG/test_image.jpg
rename to ecrire/img_pack/test_image.jpg
diff --git a/ecrire/win_width.htc b/ecrire/img_pack/win_width.htc
similarity index 100%
rename from ecrire/win_width.htc
rename to ecrire/img_pack/win_width.htc
diff --git a/ecrire/inc_abstract_sql.php b/ecrire/inc_abstract_sql.php
index 7a804a20d7c1e9528f27d33988ec0f5607d9b3ee..5ccedae6e0619c2128564c40807559cdb394279c 100644
--- a/ecrire/inc_abstract_sql.php
+++ b/ecrire/inc_abstract_sql.php
@@ -46,7 +46,7 @@ function spip_abstract_select (
 		$f = 'spip_' . $serveur . '_select';
 		if (!function_exists($f)) {
 		  // non, il est decrit dans le fichier ad hoc
-			$d = _DIR_RESTREINT . 'inc_connect-' . $serveur ._EXTENSION_PHP;
+			$d = dirname(_FILE_CONNECT) . 'inc_connect-' . $serveur ._EXTENSION_PHP;
 			if (@file_exists($d)) include($d);
 			$f = spip_abstract_serveur($f, $serveur);
 		}
diff --git a/ecrire/inc_cron.php b/ecrire/inc_cron.php
index f4fa8d566a109773c2b74327dec65bb072ae855e..048c46fa87ab68c657932316e2b218f1a01da60c 100644
--- a/ecrire/inc_cron.php
+++ b/ecrire/inc_cron.php
@@ -114,7 +114,7 @@ function spip_cron($taches = array()) {
 			spip_log("cron: $tache (" . spip_timer('tache') . ")");
 			// eventuellement modifier la date du fichier
 			if ($code_de_retour < 0) @touch($lock, (0 - $code_de_retour));
-		} else spip_log("cron $tache a reprendre");
+		}# else spip_log("cron $tache a reprendre");
 	}
 
 	// relacher le lock mysql
@@ -137,12 +137,11 @@ function taches_generales() {
 	$taches_generales['optimiser'] = 3600*48;
 
 	// cache
-	if (_DIR_RESTREINT)
-		$taches_generales['invalideur'] = 3600;
+	$taches_generales['invalideur'] = 3600;
 
 	// nouveautes
 	if ($GLOBALS['meta']['adresse_neuf'] AND $GLOBALS['meta']['jours_neuf']
-	AND ($GLOBALS['meta']['quoi_de_neuf'] == 'oui') AND _DIR_RESTREINT)
+	AND ($GLOBALS['meta']['quoi_de_neuf'] == 'oui'))
 		$taches_generales['mail']= 3600 * 24 * $GLOBALS['meta']['jours_neuf'];
 
 	// stats : toutes les 5 minutes on peut vider un panier de visites
diff --git a/ecrire/inc_documents.php b/ecrire/inc_documents.php
index 9eec37c73264a56d5df966dd41ea34d0051f2f68..dfc5565233757743f44e6fb1555858b91ae22eef 100644
--- a/ecrire/inc_documents.php
+++ b/ecrire/inc_documents.php
@@ -19,23 +19,24 @@ include_ecrire ("inc_date");
 // Vignette pour les documents lies
 //
 
-function vignette_par_defaut($type_extension, $size=true) {
+function vignette_par_defaut($ext, $size=true, $loop = true) {
 
-	if (!$type_extension)
-		$type_extension = 'txt';
-
-	$filename = _DIR_IMG_ICONES . $type_extension;
+	if (!$ext)
+		$ext = 'txt';
 
 	// Chercher la vignette correspondant a ce type de document
-	if (!@file_exists($v = $filename.'.png'))
-	if (!@file_exists($v = $filename.'.gif'))
-	if (!@file_exists($v = $filename.'-dist.png'))
-	if (!@file_exists($v = $filename.'-dist.gif'))
-	if (!@file_exists($v = _DIR_IMG_ICONES . "defaut.png")) 
-	if (!@file_exists($v = _DIR_IMG_ICONES . "defaut.gif")) 
-	if (!@file_exists($v = _DIR_IMG_ICONES . "defaut-dist.png")) 
-	if (!@file_exists($v = _DIR_IMG_ICONES . "defaut-dist.gif")) 
-	$v = _DIR_IMG_ICONES . "defaut-dist.gif";
+	// dans les vignettes persos, ou dans les vignettes standard
+	if (!@file_exists($v = _DIR_IMG_ICONES . $ext.'.png')
+	AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.gif')
+	# icones standard
+	AND !@file_exists($v = _DIR_IMG_ICONES_DIST . $ext.'-dist.png')
+	# cas d'une install dans un repertoire "applicatif"...
+	AND !@file_exists(_ROOT_IMG_ICONES_DIST . $v)
+	)
+		if ($loop)
+			$v = vignette_par_defaut('defaut', false, $loop=false);
+		else
+			$v = false; # pas trouve l'icone de base
 
 	if (!$size) return $v;
 
diff --git a/ecrire/inc_layer.php b/ecrire/inc_layer.php
index a538ed62fe00e266d307e95b4d6f72470668a79a..4743e5af1b2209379ca38036dd73855cf8c41913 100644
--- a/ecrire/inc_layer.php
+++ b/ecrire/inc_layer.php
@@ -120,24 +120,24 @@ function verif_butineur() {
 		eregi("Opera ([^\ ]*)", $browser_description, $match);
 		$browser_name = "Opera";
 		$browser_version = $match[1];
-		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_RESTREINT . 'layer.js',''));
+		$browser_layer = (($browser_version < 7) ? '' :  http_script('', _DIR_IMG_PACK . 'layer.js',''));
 		$browser_barre = ($browser_version >= 8.5); 
 	}
 	else if (eregi("msie", $browser_description)) {
 		eregi("MSIE ([^;]*)", $browser_description, $match);
 		$browser_name = "MSIE";
 		$browser_version = $match[1];
-		$browser_layer = (($browser_version < 5) ? '' :  http_script('', _DIR_RESTREINT . 'layer.js',''));
+		$browser_layer = (($browser_version < 5) ? '' :  http_script('', _DIR_IMG_PACK . 'layer.js',''));
 		$browser_barre = ($browser_version >= 5.5);
 	}
 	else if (eregi("KHTML", $browser_description) &&
 		eregi("Safari/([^;]*)", $browser_description, $match)) {
 		$browser_name = "Safari";
 		$browser_version = $match[1];
-		$browser_layer = http_script('', _DIR_RESTREINT . 'layer.js','');
+		$browser_layer = http_script('', _DIR_IMG_PACK . 'layer.js','');
 	}
 	else if (eregi("mozilla", $browser_name) AND $browser_version >= 5) {
-		$browser_layer = http_script('', _DIR_RESTREINT . 'layer.js','');
+		$browser_layer = http_script('', _DIR_IMG_PACK . 'layer.js','');
 		// Numero de version pour Mozilla "authentique"
 		if (ereg("rv:([0-9]+\.[0-9]+)", $browser_description, $match))
 			$browser_rev = doubleval($match[1]);
diff --git a/ecrire/inc_logos.php b/ecrire/inc_logos.php
index 2036d2928c7f9f5e63f367216c0778dacfb61c76..1c5c01a1532667f5aec8895e5c9b29a3d6898e11 100644
--- a/ecrire/inc_logos.php
+++ b/ecrire/inc_logos.php
@@ -239,7 +239,7 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 		else if ($process == 'convert') {
 			$format = $formats_sortie[0];
 			$vignette = $destination.".".$format;
-			$commande = "$convert_command -size ${destWidth}x${destHeight} ./$image -geometry ${destWidth}x${destHeight} +profile \"*\" ./".escapeshellcmd($vignette);
+			$commande = "$convert_command -size ${destWidth}x${destHeight} $image -geometry ${destWidth}x${destHeight} +profile \"*\" ./".escapeshellcmd($vignette);
 			spip_log($commande);
 			exec($commande);
 			if (!@file_exists($vignette)) {
@@ -492,6 +492,9 @@ function reduire_image_logo($img, $taille = -1, $taille_y = -1) {
 					$destHeight = $preview['height'];
 				}
 
+				// dans l'espace prive mettre un timestamp sur l'adresse 
+				// de l'image, de facon a tromper le cache du navigateur
+				// quand on fait supprimer/reuploader un logo
 				if (!_DIR_RESTREINT)
 					$date = '?date='.filemtime($logo);
 				return "<img src='$logo$date' width='$destWidth' height='$destHeight'$attributs />";
diff --git a/ecrire/inc_magicquotes.php b/ecrire/inc_magicquotes.php
deleted file mode 100644
index 842616c538d432d1453ea5c9c530e27f65496189..0000000000000000000000000000000000000000
--- a/ecrire/inc_magicquotes.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-/***************************************************************************\
- *  SPIP, Systeme de publication pour l'internet                           *
- *                                                                         *
- *  Copyright (c) 2001-2006                                                *
- *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
- *                                                                         *
- *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
- *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
-\***************************************************************************/
-
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-// Dirty hack contre le register_globals a 'Off' (PHP 4.1.x)
-// A remplacer (un jour!) par une gestion propre des variables admissibles ;-)
-// Attention pour compatibilite max $_GET n'est pas superglobale
-// NB: c'est une fonction de maniere a ne pas pourrir $GLOBALS
-function spip_register_globals() {
-
-	// Liste des variables dont on refuse qu'elles puissent provenir du client
-	$refuse_gpc = array (
-		# inc-public
-		'fond', 'delais',
-
-		# ecrire/inc_auth
-		'REMOTE_USER',
-		'PHP_AUTH_USER', 'PHP_AUTH_PW',
-
-		# ecrire/inc_texte
-		'debut_intertitre', 'fin_intertitre', 'ligne_horizontale',
-		'ouvre_ref', 'ferme_ref', 'ouvre_note', 'ferme_note',
-		'les_notes', 'compt_note', 'nombre_surligne',
-		'url_glossaire_externe', 'puce', 'puce_rtl'
-	);
-
-	// Liste des variables (contexte) dont on refuse qu'elles soient cookie
-	// (histoire que personne ne vienne fausser le cache)
-	$refuse_c = array (
-		# inc-calcul
-		'id_parent', 'id_rubrique', 'id_article',
-		'id_auteur', 'id_breve', 'id_forum', 'id_secteur',
-		'id_syndic', 'id_syndic_article', 'id_mot', 'id_groupe',
-		'id_document', 'date', 'lang'
-	);
-
-
-	// Si les variables sont passees en global par le serveur, il faut
-	// faire quelques verifications de base
-	if (@ini_get('register_globals')) {
-		foreach ($refuse_gpc as $var) {
-			if (isset($GLOBALS[$var])) {
-				foreach (array('_GET', '_POST', '_COOKIE') as $_table) {
-					if (
-					// demande par le client
-					isset ($GLOBALS[$_table][$var])
-					// et pas modifie par les fichiers d'appel
-					AND $GLOBALS[$_table][$var] == $GLOBALS[$var]
-					) // On ne sait pas si c'est un hack
-					{
-						# REMOTE_USER ou fond, c'est grave ;
-						# pour le reste (cookie 'lang', par exemple), simplement
-						# interdire la mise en cache de la page produite
-						switch ($var) {
-							case 'REMOTE_USER':
-								die ("$var interdite");
-								break;
-							case 'fond':
-								if (!defined('_SPIP_PAGE'))
-									die ("$var interdite");
-								break;
-							default:
-								define ('spip_interdire_cache', true);
-						}
-					}
-				}
-			}
-		}
-		foreach ($refuse_c as $var) {
-			if (isset($GLOBALS[$var])) {
-				foreach (array('_COOKIE') as $_table) {
-					if (
-					// demande par le client
-					isset ($GLOBALS[$_table][$var])
-					// et pas modifie par les fichiers d'appel
-					AND $GLOBALS[$_table][$var] == $GLOBALS[$var]
-					)
-						define ('spip_interdire_cache', true);
-				}
-			}
-		}
-	}
-
-	// sinon il faut les passer nous-memes, a l'exception des interdites.
-	// (A changer en une liste des variables admissibles...)
-	else {
-		foreach (array('_SERVER', '_COOKIE', '_POST', '_GET') as $_table) {
-			foreach ($GLOBALS[$_table] as $var => $val) {
-				if (!isset($GLOBALS[$var])
-				AND isset($GLOBALS[$_table][$var])
-				AND ($_table == '_SERVER' OR !in_array($var, $refuse_gpc))
-				AND ($_table <> '_COOKIE' OR !in_array($var, $refuse_c)))
-					$GLOBALS[$var] = $val;
-			}
-		}
-	}
-}
-
-
-// Magic quotes : on n'en veut pas
-function magic_unquote(&$t) {
-	if (is_array($t)) {
-		foreach ($t as $key => $val) {
-			if (!is_array($val)
-			OR !($t['spip_recursions']++)) # interdire les recursions
-				magic_unquote($t[$key], $key);
-		}
-	} else
-		$t = stripslashes($t);
-}
-
-
-// Annuler les magic quotes Sur GET/POST/COOKIE et GLOBALS, s'il y en a
-function spip_magic_unquote() {
-	global $_GET, $_POST, $_COOKIE;
-	magic_unquote($_GET);
-	magic_unquote($_POST);
-	magic_unquote($_COOKIE);
-	#	if (@ini_get('register_globals')) // pas fiable
-	magic_unquote($GLOBALS);
-
-	# et a la fin supprimer la variable anti-recursion devenue inutile
-	# (et memenuisible, notamment si on teste $_POST)
-	unset($_GET['spip_recursions']);
-	unset($_POST['spip_recursions']);
-	unset($_COOKIE['spip_recursions']);
-	unset($GLOBALS['spip_recursions']);
-}
-
-?>
diff --git a/ecrire/inc_minipres.php b/ecrire/inc_minipres.php
index 3fc5de049948d08b708d5551d53bda3a86d2cc5a..cadc6afac48425cee4d2db9ec3a431beb63b9624 100644
--- a/ecrire/inc_minipres.php
+++ b/ecrire/inc_minipres.php
@@ -28,9 +28,7 @@ function install_debut_html($titre = 'AUTO') {
 
 	http_no_cache();
 	$args =  "couleur_claire=FFCC66&couleur_foncee=000000&left=" . 
-		$GLOBALS['spip_lang_left']
-	  	. '&dir='
-		. _DIR_IMG_PACK;
+		$GLOBALS['spip_lang_left'];
 ;
 	echo  _DOCTYPE_ECRIRE ,
 	  "<html lang='",$GLOBALS['spip_lang'],
diff --git a/ecrire/inc_plugin.php b/ecrire/inc_plugin.php
index 8e7a930cc18acdae7e1d129f2fc112cfb2793e07..6faeec8a4ec3255a38425b79742fa6412adf2066 100644
--- a/ecrire/inc_plugin.php
+++ b/ecrire/inc_plugin.php
@@ -14,7 +14,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // librairie pour parametrage plugin
 //
-define_once('_FILE_PLUGIN_CONFIG', "plugin.xml");
+define('_FILE_PLUGIN_CONFIG', "plugin.xml");
 
 // besoin de inc_meta (et aussi de version mais on suppose qu'il est cahrgé par ailleurs ...)
 include_ecrire ("inc_db_mysql");
diff --git a/ecrire/inc_presentation.php b/ecrire/inc_presentation.php
index 3726599f5f5112786871bf262c7fab7741b67687..87622329794cdee3af17eaf4f5c4f3973a1feb7d 100644
--- a/ecrire/inc_presentation.php
+++ b/ecrire/inc_presentation.php
@@ -1784,26 +1784,30 @@ function envoi_link($nom_site_spip, $rubrique="") {
 		'&couleur_foncee=' .
 		substr($couleur_foncee,1) .
 		'&ltr=' . 
-		$GLOBALS['spip_lang_left'] .
-	  	'&dir=' .
-		_DIR_RESTREINT_ABS . _DIR_IMG_PACK;
-	
-	$res = '<link rel="stylesheet" type="text/css" href="' . generer_url_public('page', $args) .'" />
+		$GLOBALS['spip_lang_left'];
+
+	// CSS par defaut /spip_style.css
+	$res = '<link rel="stylesheet" type="text/css" href="'
+	. _DIR_RACINE . 'spip_style.css'.'" />'
+
+	// CSS espace prive
+	. '<link rel="stylesheet" type="text/css" href="'
+	. generer_url_public('page', $args) .'" />
 '
 	// CSS calendrier
-	. '<link rel="stylesheet" type="text/css" href="' . _DIR_RESTREINT
+	. '<link rel="stylesheet" type="text/css" href="' . _DIR_IMG_PACK
 	. 'calendrier.css"  />' . "\n"
 
 	// CSS imprimante (masque des trucs, a completer)
-	. '<link rel="stylesheet" type="text/css" href="' . _DIR_RESTREINT
+	. '<link rel="stylesheet" type="text/css" href="' . _DIR_IMG_PACK
 	. 'spip_style_print.css" media="print" />' . "\n"
 
 	// CSS "visible au chargement", hack necessaire pour garder un depliement
 	// sympathique meme sans javascript (on exagere ?)
 	// Pour l'explication voir http://www.alistapart.com/articles/alternate/
-	. '<link rel="alternate stylesheet" type="text/css" href="' . _DIR_RESTREINT
+	. '<link rel="alternate stylesheet" type="text/css" href="' . _DIR_IMG_PACK
 	. 'spip_style_invisible.css" title="invisible" />' . "\n"
-	. '<link rel="stylesheet" href="' . _DIR_RESTREINT
+	. '<link rel="stylesheet" href="' . _DIR_IMG_PACK
 	. 'spip_style_visible.css"  title="visible" />' . "\n"
 
 	// favicon.ico
@@ -1865,7 +1869,7 @@ function debut_javascript($admin, $stat)
 			"\nvar confirm_changer_statut = '" .
 			unicode_to_javascript(addslashes(html2unicode(_T("confirm_changer_statut")))) . 
 			"';\n") .
-		http_script('',_DIR_RESTREINT . 'presentation.js');
+		http_script('',_DIR_IMG_PACK . 'presentation.js');
 }
 
 // Fonctions onglets
diff --git a/ecrire/inc_syndic.php b/ecrire/inc_syndic.php
index 805a22a55f9549f5539e5b8706524d8f083b2401..1db1140dda964144f1658700481229b61a104066 100644
--- a/ecrire/inc_syndic.php
+++ b/ecrire/inc_syndic.php
@@ -21,8 +21,8 @@ function executer_une_syndication() {
 
 	## valeurs modifiables dans mes_options
 	## attention il est tres mal vu de prendre une periode < 20 minutes
-	define_once('_PERIODE_SYNDICATION', 2*60);
-	define_once('_PERIODE_SYNDICATION_SUSPENDUE', 24*60);
+	define('_PERIODE_SYNDICATION', 2*60);
+	define('_PERIODE_SYNDICATION_SUSPENDUE', 24*60);
 
 	// On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off'
 	// s'il echoue
diff --git a/ecrire/inc_texte.php b/ecrire/inc_texte.php
index b493c4b13c0f6d21656cf9d890f451bbd3bee9e1..d91f6cee797058da309d3e242540e7e3a6cece2e 100644
--- a/ecrire/inc_texte.php
+++ b/ecrire/inc_texte.php
@@ -46,8 +46,12 @@ tester_variable('url_glossaire_externe', "http://@lang@.wikipedia.org/wiki/");
 // On ne prend la $puce_rtl par defaut que si $puce n'a pas ete redefinie
 
 //if (!tester_variable('puce', "<li class='spip_puce' style='list-style-image: url(puce.gif)'>")) {
-if (!tester_variable('puce', "<img class='spip_puce' src='puce.gif' alt='-' />&nbsp;")) {
-	tester_variable('puce_rtl', "<img class='spip_puce' src='puce_rtl.gif' alt='-' />&nbsp;");
+$puce = _DIR_RESTREINT ?
+	find_in_path('puce.gif'): _DIR_IMG_PACK.'puce.gif';
+$puce_rtl = _DIR_RESTREINT ?
+	find_in_path('puce_rtl.gif'): _DIR_IMG_PACK.'puce_rtl.gif';
+if (!tester_variable('puce', "<img class='spip_puce' src='$puce' alt='-' />&nbsp;")) {
+	tester_variable('puce_rtl', "<img class='spip_puce' src='$puce_rtl' alt='-' />&nbsp;");
 }
 
 
@@ -335,7 +339,7 @@ function safehtml($t) {
 		return str_replace("\x00", '', $t);
 
 	if (!$test) {
-		define_once('XML_HTMLSAX3', _DIR_RESTREINT."safehtml/classes/");
+		define('XML_HTMLSAX3', _DIR_INCLUDE."safehtml/classes/");
 		if (@file_exists(XML_HTMLSAX3.'safehtml.php')) {
 			include_local(XML_HTMLSAX3.'safehtml');
 			$process = new safehtml();
@@ -713,10 +717,13 @@ function traiter_tableau($bloc) {
 	}
 
 	// maintenant qu'on a toutes les cellules
-	// on prepare une liste de rowspan par défaut
-	$rowspans= array_fill(0, count($lignes[0]), 1);
+	// on prepare une liste de rowspan par defaut, a partir
+	// du nombre de colonnes dans la premiere ligne
+	$rowspans = array();
+	for ($i=0; $i<count($lignes[0]); $i++)
+		$rowspans[] = 1;
 
-	// et on parcours le tableau a l'envers pour ramasser les
+	// et on parcourt le tableau a l'envers pour ramasser les
 	// colspan et rowspan en passant
 	for($l=count($lignes)-1; $l>=0; $l--) {
 		$cols= $lignes[$l];
diff --git a/ecrire/inc_utils.php b/ecrire/inc_utils.php
index a2135614dd536bcaf6f64f86dbb9b19bee2edde5..ceef28caa3f8acf18e91cd06ddd76ee31b3694af 100644
--- a/ecrire/inc_utils.php
+++ b/ecrire/inc_utils.php
@@ -31,7 +31,7 @@ function include_local($file, $silence=false) {
 
 function include_ecrire($file) {
 # Hack pour etre compatible avec les mes_options qui appellent cette fonction
-	define_once('_DIR_INCLUDE', _DIR_RESTREINT);
+	define('_DIR_INCLUDE', _DIR_RESTREINT);
 	include_local(_DIR_INCLUDE . $file);
 }
 
@@ -43,7 +43,7 @@ function include_fonction($nom) {
 	$f = find_in_path($inc);
 	if ($f) {
 		if (!$GLOBALS['included_files'][$f]++) include($f);
-		spip_log("surcharge de $nom trouvee dans $f");
+		#spip_log("surcharge de $nom trouvee dans $f");
 	} else {
 		$f = (defined(' _DIR_INCLUDE') ? _DIR_INCLUDE : _DIR_RESTREINT)
 			. $inc;
@@ -453,9 +453,7 @@ function generer_spip_cron() {
 }
 
 // envoi de l'image demandee dans le code ci-dessus
-
-function spip_action_cron() {
-
+function envoie_image_vide() {
 	$image = pack("H*", "47494638396118001800800000ffffff00000021f90401000000002c0000000018001800000216848fa9cbed0fa39cb4da8bb3debcfb0f86e248965301003b");
 	header("Content-Type: image/gif");
 	header("Content-Length: ".strlen($image));
@@ -464,6 +462,9 @@ function spip_action_cron() {
 	header("Connection: close");
 	echo $image;
 	flush();
+}
+function spip_action_cron() {
+	envoie_image_vide();
 	cron (1);
 }
 
@@ -706,4 +707,131 @@ function generer_url_action($script, $args="", $no_entities=false) {
 				  $no_entities);
 	
 }
+
+
+// Dirty hack contre le register_globals a 'Off' (PHP 4.1.x)
+// A remplacer (un jour!) par une gestion propre des variables admissibles ;-)
+// Attention pour compatibilite max $_GET n'est pas superglobale
+// NB: c'est une fonction de maniere a ne pas pourrir $GLOBALS
+function spip_register_globals() {
+
+	// Liste des variables dont on refuse qu'elles puissent provenir du client
+	$refuse_gpc = array (
+		# inc-public
+		'fond', 'delais',
+
+		# ecrire/inc_auth
+		'REMOTE_USER',
+		'PHP_AUTH_USER', 'PHP_AUTH_PW',
+
+		# ecrire/inc_texte
+		'debut_intertitre', 'fin_intertitre', 'ligne_horizontale',
+		'ouvre_ref', 'ferme_ref', 'ouvre_note', 'ferme_note',
+		'les_notes', 'compt_note', 'nombre_surligne',
+		'url_glossaire_externe', 'puce', 'puce_rtl'
+	);
+
+	// Liste des variables (contexte) dont on refuse qu'elles soient cookie
+	// (histoire que personne ne vienne fausser le cache)
+	$refuse_c = array (
+		# inc-calcul
+		'id_parent', 'id_rubrique', 'id_article',
+		'id_auteur', 'id_breve', 'id_forum', 'id_secteur',
+		'id_syndic', 'id_syndic_article', 'id_mot', 'id_groupe',
+		'id_document', 'date', 'lang'
+	);
+
+
+	// Si les variables sont passees en global par le serveur, il faut
+	// faire quelques verifications de base
+	if (@ini_get('register_globals')) {
+		foreach ($refuse_gpc as $var) {
+			if (isset($GLOBALS[$var])) {
+				foreach (array('_GET', '_POST', '_COOKIE') as $_table) {
+					if (
+					// demande par le client
+					isset ($GLOBALS[$_table][$var])
+					// et pas modifie par les fichiers d'appel
+					AND $GLOBALS[$_table][$var] == $GLOBALS[$var]
+					) // On ne sait pas si c'est un hack
+					{
+						# REMOTE_USER ou fond, c'est grave ;
+						# pour le reste (cookie 'lang', par exemple), simplement
+						# interdire la mise en cache de la page produite
+						switch ($var) {
+							case 'REMOTE_USER':
+								die ("$var interdite");
+								break;
+							case 'fond':
+								if (!defined('_SPIP_PAGE'))
+									die ("$var interdite");
+								break;
+							default:
+								define ('spip_interdire_cache', true);
+						}
+					}
+				}
+			}
+		}
+		foreach ($refuse_c as $var) {
+			if (isset($GLOBALS[$var])) {
+				foreach (array('_COOKIE') as $_table) {
+					if (
+					// demande par le client
+					isset ($GLOBALS[$_table][$var])
+					// et pas modifie par les fichiers d'appel
+					AND $GLOBALS[$_table][$var] == $GLOBALS[$var]
+					)
+						define ('spip_interdire_cache', true);
+				}
+			}
+		}
+	}
+
+	// sinon il faut les passer nous-memes, a l'exception des interdites.
+	// (A changer en une liste des variables admissibles...)
+	else {
+		foreach (array('_SERVER', '_COOKIE', '_POST', '_GET') as $_table) {
+			foreach ($GLOBALS[$_table] as $var => $val) {
+				if (!isset($GLOBALS[$var])
+				AND isset($GLOBALS[$_table][$var])
+				AND ($_table == '_SERVER' OR !in_array($var, $refuse_gpc))
+				AND ($_table <> '_COOKIE' OR !in_array($var, $refuse_c)))
+					$GLOBALS[$var] = $val;
+			}
+		}
+	}
+}
+
+
+// Magic quotes : on n'en veut pas
+function magic_unquote(&$t) {
+	if (is_array($t)) {
+		foreach ($t as $key => $val) {
+			if (!is_array($val)
+			OR !($t['spip_recursions']++)) # interdire les recursions
+				magic_unquote($t[$key], $key);
+		}
+	} else
+		$t = stripslashes($t);
+}
+
+
+// Annuler les magic quotes Sur GET/POST/COOKIE et GLOBALS, s'il y en a
+function spip_magic_unquote() {
+	global $_GET, $_POST, $_COOKIE;
+	magic_unquote($_GET);
+	magic_unquote($_POST);
+	magic_unquote($_COOKIE);
+	#	if (@ini_get('register_globals')) // pas fiable
+	magic_unquote($GLOBALS);
+
+	# et a la fin supprimer la variable anti-recursion devenue inutile
+	# (et memenuisible, notamment si on teste $_POST)
+	unset($_GET['spip_recursions']);
+	unset($_POST['spip_recursions']);
+	unset($_COOKIE['spip_recursions']);
+	unset($GLOBALS['spip_recursions']);
+}
+
 ?>
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 189c47d830e832d70916d2c3c05dbc5992083273..39de460aab56579bcbc7372ea4edb8076128dc7e 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -14,43 +14,19 @@
 if (defined("_ECRIRE_INC_VERSION")) return;
 define("_ECRIRE_INC_VERSION", "1");
 
-// 6 constantes incontournables et prioritaires
 
 define('_EXTENSION_PHP', '.php3');
+
+# le nom du repertoire ecrire/
 define('_DIR_RESTREINT_ABS', 'ecrire/');
-define('_DIR_RESTREINT', (!@is_dir(_DIR_RESTREINT_ABS) ? "" : _DIR_RESTREINT_ABS));
+# sommes-nous dans ecrire/ ?
+define('_DIR_RESTREINT',
+ (!@is_dir(_DIR_RESTREINT_ABS) ? "" : _DIR_RESTREINT_ABS));
+# ou inversement ?
 define('_DIR_RACINE', _DIR_RESTREINT ? '' : '../');
-define('_FILE_OPTIONS', _DIR_RESTREINT . 'mes_options' . _EXTENSION_PHP);
-
-// *********** traiter les variables ************
 
-// Recuperer les superglobales $_GET si non definies
-// (en theorie c'est impossible depuis PHP 4.0.3, cf. track_vars)
-// et les identifier aux $HTTP_XX_VARS
-foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_table) {
-	$http_table_vars = 'HTTP'.$_table.'_VARS';
-	if (!is_array($GLOBALS[$_table])) {
-		$GLOBALS[$_table] = array();
-		if (is_array($GLOBALS[$http_table_vars]))
-			$GLOBALS[$_table] = & $GLOBALS[$http_table_vars];
-	}
-		$GLOBALS[$http_table_vars] = & $GLOBALS[$_table];
-}
-
-include(_DIR_RESTREINT . 'inc_magicquotes.php');
-
-@set_magic_quotes_runtime(0);
-if (@get_magic_quotes_gpc()
-AND strstr(
-	serialize($_GET).serialize($_POST).serialize($_COOKIE),
-	'\\')
-) {
-	spip_magic_unquote();
-}
-
-// Remplir $GLOBALS avec $_GET et $_POST (methode a revoir pour fonctionner
-// completement en respectant register_globals = off)
-spip_register_globals();
+# le fichier ecrire/mes_options
+define('_FILE_OPTIONS', _DIR_RESTREINT . 'mes_options' . _EXTENSION_PHP);
 
 
 //
@@ -203,9 +179,22 @@ $extension_squelette = 'html';
 // Droits d'acces maximum par defaut
 @umask(0);
 
-function define_once ($constant, $valeur) {
-	if (!defined($constant)) define($constant, $valeur);
-}
+// Version courante de SPIP
+// Stockee sous forme de nombre decimal afin de faciliter les comparaisons
+// (utilise pour les modifs de la base de donnees)
+
+// version de la base
+$spip_version = 1.906;
+
+// version de spip
+$spip_version_affichee = "1.9 alpha 3";
+
+// ** Securite **
+$auteur_session = '';
+$connect_statut = '';
+$hash_recherche = '';
+$hash_recherche_strict = '';
+
 
 
 //
@@ -216,47 +205,54 @@ if (@file_exists(_FILE_OPTIONS)) {
 }
 
 //
-// Definition des repertoires standards
+// Definitions standards
 //
 
 // la taille maxi des logos (0 : pas de limite)
-define_once('_LOGO_MAX_SIZE', 0); # poids en ko
-define_once('_LOGO_MAX_WIDTH', 0); # largeur en pixels
-define_once('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
+define('_LOGO_MAX_SIZE', 0); # poids en ko
+define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
+define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
 
 // Le fichier de connexion a la base de donnees
-define_once('_FILE_CONNECT_INS', (_DIR_RESTREINT . "inc_connect"));
-define_once('_FILE_CONNECT',
+define('_FILE_CONNECT_INS', (_DIR_RESTREINT . "inc_connect"));
+define('_FILE_CONNECT',
 	(@is_readable(_FILE_CONNECT_INS . _EXTENSION_PHP) ?
 		(_FILE_CONNECT_INS . _EXTENSION_PHP)
 	 : false));
 
 // les repertoires annexes
-define_once('_DIR_INCLUDE', _DIR_RESTREINT);
-define_once('_DIR_IMG', _DIR_RACINE ."IMG/");
-define_once('_DIR_DOC', _DIR_RACINE ."IMG/");
-define_once('_DIR_CACHE', _DIR_RACINE ."CACHE/");
-define_once('_DIR_SESSIONS', _DIR_RESTREINT . "data/");
-define_once('_DIR_TRANSFERT', _DIR_RESTREINT . "upload/");
-define_once('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
-
-// les fichiers qu'on y met, entre autres,
-
-define_once('_FILE_CRON_LOCK', _DIR_SESSIONS . 'cron.lock');
-define_once('_FILE_MYSQL_OUT', _DIR_SESSIONS . 'mysql_out');
-define_once('_FILE_GARBAGE', _DIR_SESSIONS . '.poubelle');
-define_once('_FILE_META', _DIR_SESSIONS . 'meta_cache.txt');
+define('_DIR_INCLUDE', _DIR_RESTREINT);
+define('_DIR_IMG', _DIR_RACINE ."IMG/");
+define('_DIR_DOC', _DIR_RACINE ."IMG/");
+define('_DIR_CACHE', _DIR_RACINE ."CACHE/");
+define('_DIR_SESSIONS', _DIR_RESTREINT . "data/");
+define('_DIR_TRANSFERT', _DIR_RESTREINT . "upload/");
+define('_DIR_PLUGINS', _DIR_RACINE . "plugins/");
+
+// les fichiers qu'on y met, entre autres
+define('_FILE_CRON_LOCK', _DIR_SESSIONS . 'cron.lock');
+define('_FILE_MYSQL_OUT', _DIR_SESSIONS . 'mysql_out');
+define('_FILE_GARBAGE', _DIR_SESSIONS . '.poubelle');
+define('_FILE_META', _DIR_SESSIONS . 'meta_cache.txt');
 
 // sous-repertoires d'images 
+define('_DIR_TeX', _DIR_IMG . "cache-TeX/");
 
-define_once('_DIR_IMG_ICONES', _DIR_IMG . "icones/");
-define_once('_DIR_IMG_ICONES_BARRE', _DIR_IMG . "icones_barre/");
-define_once('_DIR_TeX', _DIR_IMG . "cache-TeX/");
+// Icones
+# le chemin http (relatif) vers les images standard
+define('_DIR_IMG_PACK', (_DIR_RESTREINT . 'img_pack/'));
+# vers les logos de type de document, standard & perso
+define('_DIR_IMG_ICONES_DIST', _DIR_IMG_PACK . "icones/");
+define('_DIR_IMG_ICONES', _DIR_IMG . "icones/");
+# les icones de la barre d'edition des formulaires
+define('_DIR_IMG_ICONES_BARRE', _DIR_IMG_PACK . "icones_barre/");
 
-// pour ceux qui n'aiment pas nos icones et notre vocabulaire, tout est prevu
+# le chemin php (absolu) vers les images standard (pour hebergement centralise)
+define('_ROOT_IMG_PACK', (dirname(__FILE__) . '/img_pack/'));
+define('_ROOT_IMG_ICONES_DIST', (dirname(__FILE__) . '/img_pack/icones/'));
 
-define_once('_DIR_IMG_PACK', (_DIR_RESTREINT . 'img_pack/'));
-define_once('_DIR_LANG', (_DIR_RESTREINT . 'lang/'));
+// Fichiers de langue
+define('_DIR_LANG', (_DIR_RESTREINT . 'lang/'));
 
 // les repertoires devant etre TOUJOURS accessibles en ecriture
 
@@ -264,26 +260,45 @@ $test_dirs = array(_DIR_CACHE, _DIR_IMG, _DIR_SESSIONS);
 
 // qq chaines standard
 
-define_once('_ACCESS_FILE_NAME', '.htaccess');
-define_once('_AUTH_USER_FILE', '.htpasswd');
+define('_ACCESS_FILE_NAME', '.htaccess');
+define('_AUTH_USER_FILE', '.htpasswd');
 
-define_once('_DOCTYPE_ECRIRE', "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
+define('_DOCTYPE_ECRIRE', "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
 
-define_once('_SPIP_PATH', './:squelettes/:dist/:formulaires/:ecrire/');
+define('_SPIP_PATH', './:squelettes/:dist/:formulaires/:ecrire/');
 
-// charge les fonctions indispensables, 
 
+// charge les fonctions indispensables
 include(_DIR_INCLUDE . 'inc_utils.php');
 
-// Version courante de SPIP
-// Stockee sous forme de nombre decimal afin de faciliter les comparaisons
-// (utilise pour les modifs de la base de donnees)
 
-// version de la base
-$spip_version = 1.906;
+// *********** traiter les variables ************
 
-// version de spip
-$spip_version_affichee = "1.9 alpha 3";
+// Recuperer les superglobales $_GET si non definies
+// (en theorie c'est impossible depuis PHP 4.0.3, cf. track_vars)
+// et les identifier aux $HTTP_XX_VARS
+foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_table) {
+	$http_table_vars = 'HTTP'.$_table.'_VARS';
+	if (!is_array($GLOBALS[$_table])) {
+		$GLOBALS[$_table] = array();
+		if (is_array($GLOBALS[$http_table_vars]))
+			$GLOBALS[$_table] = & $GLOBALS[$http_table_vars];
+	}
+		$GLOBALS[$http_table_vars] = & $GLOBALS[$_table];
+}
+
+@set_magic_quotes_runtime(0);
+if (@get_magic_quotes_gpc()
+AND strstr(
+	serialize($_GET).serialize($_POST).serialize($_COOKIE),
+	'\\')
+) {
+	spip_magic_unquote();
+}
+
+// Remplir $GLOBALS avec $_GET et $_POST (methode a revoir pour fonctionner
+// completement en respectant register_globals = off)
+spip_register_globals();
 
 // appliquer le cookie_prefix
 if ($cookie_prefix != 'spip') {
@@ -292,12 +307,6 @@ if ($cookie_prefix != 'spip') {
 }
 
 
-// ** Securite **
-$auteur_session = '';
-$connect_statut = '';
-$hash_recherche = '';
-$hash_recherche_strict = '';
-
 //
 // Capacites php (en fonction de la version)
 //
@@ -335,7 +344,7 @@ if (!$REQUEST_URI) {
 // tidy en ligne de commande (si on ne l'a pas en module php,
 // ou si le module php ne marche pas)
 // '/bin/tidy' ou '/usr/local/bin/tidy' ou tout simplement 'tidy'
-#define_once('_TIDY_COMMAND', 'tidy');
+#define('_TIDY_COMMAND', 'tidy');
 
 //
 // Module de lecture/ecriture/suppression de fichiers utilisant flock()
diff --git a/ecrire/js_detectplugins.js b/ecrire/js_detectplugins.js
deleted file mode 100644
index 0b148208a09bf2e3d0b71b947c3c41fece0572ff..0000000000000000000000000000000000000000
--- a/ecrire/js_detectplugins.js
+++ /dev/null
@@ -1,55 +0,0 @@
-var agt=navigator.userAgent.toLowerCase();
-var ie = (agt.indexOf("msie") != -1);
-var ns = (navigator.appName.indexOf("Netscape") != -1);
-var win = ((agt.indexOf("win")!=-1) || (agt.indexOf("32bit")!=-1));
-var mac = (agt.indexOf("mac")!=-1);
-
-function detectIE(ClassID,name) { 
-	result = false; 
-	document.write('<SCRIPT LANGUAGE=VBScript>\n on error resume next \n result = IsObject(CreateObject("' + ClassID + '"))</SCRIPT>\n'); 
-	if (result) return name+','; 
-	else return ''; 
-}
-
-function detectNS(ClassID,name) { 
-	n = ""; 
-	if (nse.indexOf(ClassID) != -1) 
-		if (navigator.mimeTypes[ClassID].enabledPlugin != null) 
-			n = name+","; 
-	return n; 
-}
-
-if (ie && win) { 
-	pluginlist = detectIE("Adobe.SVGCtl","SVG Viewer") 
-	+ detectIE("SWCtl.SWCtl.1","Shockwave Director") 
-	+ detectIE("ShockwaveFlash.ShockwaveFlash.1","Shockwave Flash") 
-	+ detectIE("rmocx.RealPlayer G2 Control.1","RealPlayer") 
-	+ detectIE("QuickTimeCheckObject.QuickTimeCheck.1","QuickTime") 
-	+ detectIE("MediaPlayer.MediaPlayer.1","Windows Media Player") 
-	+ detectIE("PDF.PdfCtrl.5","Acrobat Reader"); }
-
-if (ns || !win) {
-	nse = ""; 
-	for (var i=0; i<navigator.mimeTypes.length; i++) 
-		nse += navigator.mimeTypes[i].type.toLowerCase();
-		
-	pluginlist = detectNS("image/svg-xml","SVG Viewer") 
-		+ detectNS("application/x-director","Shockwave Director") 
-		+ detectNS("application/x-shockwave-flash","Shockwave Flash") 
-		+ detectNS("audio/x-pn-realaudio-plugin","RealPlayer") 
-		+ detectNS("video/quicktime","QuickTime") 
-		+ detectNS("application/x-mplayer2","Windows Media Player") 
-		+ detectNS("application/pdf","Acrobat Reader");
-
-}
-
-
-
-
-pluginlist += navigator.javaEnabled() ? "Java," : "";
-if (pluginlist.length > 0) pluginlist = pluginlist.substring(0,pluginlist.length-1);
-
-
-//SAMPLE USAGE- detect "Flash"
-//if (pluginlist.indexOf("SVG")!=-1)
-	//alert(pluginlist) ;
\ No newline at end of file
diff --git a/ecrire/rien.gif b/ecrire/rien.gif
deleted file mode 100755
index 73130b9919664ec9d423accc4952083c2cfbddef..0000000000000000000000000000000000000000
Binary files a/ecrire/rien.gif and /dev/null differ
diff --git a/formulaires/formulaire_login.html b/formulaires/formulaire_login.html
index cc9eae4c68301bf5d20954aa68629cef19a5e19e..f564faae7bbdf568ddaacbe639e2cc816807cb56 100644
--- a/formulaires/formulaire_login.html
+++ b/formulaires/formulaire_login.html
@@ -5,7 +5,7 @@
 ]
 
 <div style="font-family: Verdana,arial,helvetica,sans-serif; font-size: 12px;">
-	<script type="text/javascript" src="ecrire/md5.js"></script>
+	<script type="text/javascript" src="#EVAL{_DIR_IMG_PACK}md5.js"></script>
 	<form	id="login[_(#ENV{login})]"
 		action="[(#ENV{action2})]"
 		method="post"[(#ENV{source}|=={spip}|?{' ',''})
diff --git a/htaccess.txt b/htaccess.txt
index 1465ccd805920ea7eb48529160ec0473d12d66d5..854e364c5f784b4f68c23884f74e4d16a8766877 100644
--- a/htaccess.txt
+++ b/htaccess.txt
@@ -69,12 +69,14 @@ RewriteRule "." - [skip=100]
 ###
 # Compatibilite avec les URLS "html" (pour transition sympa)
 # voir fichier inc-urls-html.php3
-RewriteRule ^rubrique([0-9]+)\.html$	rubrique.php3?id_rubrique=$1 [QSA,L]
-RewriteRule ^article([0-9]+)\.html$		article.php3?id_article=$1 [QSA,L]
-RewriteRule ^breve([0-9]+)\.html$		breve.php3?id_breve=$1 [QSA,L]
-RewriteRule ^mot([0-9]+)\.html$			mot.php3?id_mot=$1 [QSA,L]
-RewriteRule ^auteur([0-9]+)\.html$		auteur.php3?id_auteur=$1 [QSA,L]
-RewriteRule ^site([0-9]+)\.html$		site.php3?id_syndic=$1 [QSA,L]
+RewriteRule ^rubrique([0-9]+)\.html$	page.php3?fond=rubrique&id_rubrique=$1 [QSA,L]
+RewriteRule ^article([0-9]+)\.html$	page.php3?fond=article&id_article=$1 [QSA,L]
+RewriteRule ^breve([0-9]+)\.html$	page.php3?fond=breve&id_breve=$1 [QSA,L]
+RewriteRule ^mot([0-9]+)\.html$		page.php3?fond=mot&id_mot=$1 [QSA,L]
+RewriteRule ^auteur([0-9]+)\.html$	page.php3?fond=auteur&id_auteur=$1 [QSA,L]
+RewriteRule ^site([0-9]+)\.html$	page.php3?fond=site&id_syndic=$1 [QSA,L]
+# Note = la compatibilite avec les URLS "standard" : assuree par les fichiers
+# article.php3 etc (s'ils n'ont pas ete effaces)
 # Fin compatibilite
 ###
 
@@ -85,22 +87,22 @@ RewriteRule ^site([0-9]+)\.html$		site.php3?id_syndic=$1 [QSA,L]
 # (fichier associe : inc-urls-propres.php3)
 
 # Les mots-cles
-RewriteRule ^\+-[^/\.]+(-\+)?(\.html)?$ mot.php3 [QSA,E=url_propre:$0,L]
+RewriteRule ^\+-[^/\.]+(-\+)?(\.html)?$	page.php3?fond=mot [QSA,E=url_propre:$0,L]
 
 # Les breves
-RewriteRule ^\+[^/\.]+\+?(\.html)?$ breve.php3 [QSA,E=url_propre:$0,L]
+RewriteRule ^\+[^/\.]+\+?(\.html)?$ 	page.php3?fond=breve [QSA,E=url_propre:$0,L]
 
 # Les rubriques
-RewriteRule ^-[^/\.]+-?(\.html)?$ rubrique.php3 [QSA,E=url_propre:$0,L]
+RewriteRule ^-[^/\.]+-?(\.html)?$	page.php3?fond=rubrique [QSA,E=url_propre:$0,L]
 
 # les auteurs
-RewriteRule ^_[^/\.]+_?(\.html)?$ auteur.php3 [QSA,E=url_propre:$0,L]
+RewriteRule ^_[^/\.]+_?(\.html)?$	page.php3?fond=auteur [QSA,E=url_propre:$0,L]
 
 # Les sites
-RewriteRule ^@[^/\.]+@?(\.html)?$ site.php3 [QSA,E=url_propre:$0,L]
+RewriteRule ^@[^/\.]+@?(\.html)?$	page.php3?fond=site [QSA,E=url_propre:$0,L]
 
 # Les articles (en dernier car expression plus "large")
-RewriteRule ^[^/\.]+(\.html)?$ article.php3 [QSA,E=url_propre:$0,L]
+RewriteRule ^[^/\.]+(\.html)?$		page.php3?fond=article [QSA,E=url_propre:$0,L]
 
 # Fin URLs "propres" et "propres2"
 ###
diff --git a/inc-balises.php3 b/inc-balises.php3
index fa48ee1058f9316c76be7eacaea3159eb0297999..7fed30febf81efa7e65ea142c9b5224c7976802b 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -768,6 +768,36 @@ function balise_ENV_dist($p) {
 	return $p;
 }
 
+//
+// #EVAL{...}
+// evalue un code php ; a utiliser avec precaution :-)
+//
+// #EVAL*{code} fait exactement eval('code')
+// mais #EVAL{code} fait eval('return code;')
+// ce qui permet de faire #EVAL{6*50} ou #EVAL{_DIR_IMG_PACK}
+function balise_EVAL_dist($p) {
+	if ($p->param && !$p->param[0][0]) {
+		$php = array_shift( $p->param );
+		array_shift($php);
+		$php = calculer_liste($php[0],
+					$p->descr,
+					$p->boucles,
+					$p->id_boucle);
+	}
+
+	if ($php) {
+		if ($p->etoile)
+			$p->code = "eval($php)";
+		else
+			$p->code = "eval('return '.$php.';')";
+	} else
+		$p->code = '';
+
+	$p->interdire_scripts = false;
+
+	return $p;
+}
+
 //
 // #REM
 // pour les remarques : renvoie toujours ''
diff --git a/inc-urls-page.php3 b/inc-urls-page.php3
new file mode 100644
index 0000000000000000000000000000000000000000..69319ea6dbaaed480374b6fe20dc914688f378ed
--- /dev/null
+++ b/inc-urls-page.php3
@@ -0,0 +1,87 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return; // securiser
+if (!function_exists('generer_url_article')) { // si la place n'est pas prise
+
+function generer_url_article($id_article) {
+	return "page.php3?fond=article&id_article=$id_article";
+}
+
+function generer_url_rubrique($id_rubrique) {
+	return "page.php3?fond=rubrique&id_rubrique=$id_rubrique";
+}
+
+function generer_url_breve($id_breve) {
+	return "page.php3?fond=breve&id_breve=$id_breve";
+}
+
+function generer_url_mot($id_mot) {
+	return "page.php3?fond=mot&id_mot=$id_mot";
+}
+
+function generer_url_site($id_syndic) {
+	return "page.php3?fond=site&id_syndic=$id_syndic";
+}
+
+function generer_url_auteur($id_auteur) {
+	return "page.php3?fond=auteur&id_auteur=$id_auteur";
+}
+
+function generer_url_document($id_document) {
+	if (intval($id_document) <= 0)
+		return '';
+	if (($GLOBALS['meta']["creer_htaccess"]) == 'oui')
+		return generer_url_action('autoriser',"arg=$id_document");
+	if ($row = @spip_fetch_array(spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document")))
+		return ($row['fichier']);
+	return '';
+}
+
+function recuperer_parametres_url($fond, $url) {
+	global $contexte;
+
+
+	/*
+	 * Le bloc qui suit sert a faciliter les transitions depuis
+	 * le mode 'urls-propres' vers les modes 'urls-standard' et 'url-html'
+	 * Il est inutile de le recopier si vous personnalisez vos URLs
+	 * et votre .htaccess
+	 */
+	// Si on est revenu en mode page, mais c'est une ancienne url_propre
+	// on ne redirige pas, on assume le nouveau contexte (si possible)
+	if ($url_propre = $GLOBALS['_SERVER']['REDIRECT_url_propre']
+	OR $url_propre = $GLOBALS['HTTP_ENV_VARS']['url_propre']
+	AND preg_match(',^(article|breve|rubrique|mot|auteur|site)$,', $fond)) {
+		$url_propre = preg_replace('/^[_+-]{0,2}(.*?)[_+-]{0,2}(\.html)?$/',
+			'$1', $url_propre);
+		if ($r = spip_query("SELECT ".id_table_objet($fond)." AS id
+		FROM spip_".table_objet($fond)."
+		WHERE url_propre = '".addslashes($url_propre)."'")
+		AND $t = spip_fetch_array($r))
+			$contexte[id_table_objet($fond)] = $t['id'];
+	}
+	/* Fin du bloc compatibilite url-propres */
+
+	return;
+}
+
+//
+// URLs des forums
+//
+
+function generer_url_forum($id_forum, $show_thread=false) {
+	include_ecrire('inc_forum');
+	return generer_url_forum_dist($id_forum, $show_thread);
+}
+ }
+?>
diff --git a/inc-urls-propres.php3 b/inc-urls-propres.php3
index 76132529edecef0997567f3cb2abfbdfe5bf359a..a25b5af2e94768a82f722a4de6d0ab6ba4663a60 100644
--- a/inc-urls-propres.php3
+++ b/inc-urls-propres.php3
@@ -200,8 +200,13 @@ function recuperer_parametres_url(&$fond, $url) {
 	global $contexte;
 
 	// Migration depuis anciennes URLs ?
-	if ($GLOBALS['_SERVER']['REQUEST_METHOD'] != 'POST' &&
-preg_match(',(^|/)((article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html)([?&].*)?)$,', $url, $regs)) {
+	if ($GLOBALS['_SERVER']['REQUEST_METHOD'] != 'POST' AND
+	(preg_match(
+	',(^|/)(article|breve|rubrique|mot|auteur|site)(\.php3?|[0-9]+\.html)'
+	.'([?&].*)?$,', $url, $regs)
+	OR preg_match(
+	',(^|/)page\.php3?[?]fond=(article|breve|rubrique|mot|auteur|site)'
+	.'&id_(\2|syndic)=[0-9]+([&].*)?$,', $url, $regs))) {
 		$type = $regs[3];
 		$id_objet = intval($GLOBALS[$id_table_objet = id_table_objet($type)]);
 		if ($id_objet) {
diff --git a/mot.php3 b/mot.php3
deleted file mode 100644
index d98ba424daa193eb6f601bce1205b3231d49e486..0000000000000000000000000000000000000000
--- a/mot.php3
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-$fond = "mot";
-$delais = 24 * 3600;
-
-
-include ("inc-public.php3");
-
-
-?>
diff --git a/rubrique.php3 b/rubrique.php3
deleted file mode 100644
index 05cd9c0150c9882e9e5cb0438492fe87e70af3e1..0000000000000000000000000000000000000000
--- a/rubrique.php3
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-$fond = "rubrique";
-$delais = 2 * 3600;
-
-
-include ("inc-public.php3");
-
-?>
diff --git a/site.php3 b/site.php3
deleted file mode 100644
index bddde3e5c463ec27b7987646d880d8077e7162e5..0000000000000000000000000000000000000000
--- a/site.php3
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-$fond = "site";
-$delais = 24 * 3600;
-
-
-include ("inc-public.php3");
-
-
-?>
diff --git a/spip_cookie.php3 b/spip_cookie.php3
index 6332e938bd137c7d8287c608b80c7b1bb9da1a96..7cb8b6327b938302c89a067dea50d0e6e23476b5 100644
--- a/spip_cookie.php3
+++ b/spip_cookie.php3
@@ -81,12 +81,7 @@ if ($change_session == 'oui') {
 		else
 			spip_log("session non rejouee, changement d'IP ?");
 	}
-	@header('Content-Type: image/gif');
-	@header('Expires: 0');
-	@header("Cache-Control: no-store, no-cache, must-revalidate");
-	@header('Pragma: no-cache');
-	@header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
-	@readfile(_DIR_IMG_PACK . 'rien.gif');
+	envoie_image_vide();
 	exit;
 }