Backup of the source code and contents from a few years ago

This commit is contained in:
Suzanne Soy 2021-06-13 02:29:42 +01:00
commit f92f8f7853
214 changed files with 3980 additions and 0 deletions

17
.htaccess Normal file
View File

@ -0,0 +1,17 @@
RewriteEngine On
RewriteBase /
RewriteRule ^$ ./site/page/Accueil.html [PT,L]
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule (.*) /site/$1 [NC]
RewriteCond %{REQUEST_URI} !^/site/page/
RewriteCond %{REQUEST_URI} !^/diff/
RewriteCond %{REQUEST_URI} !^/editer/
RewriteCond %{REQUEST_URI} !^/historique/
RewriteCond %{REQUEST_URI} !^/image/
RewriteCond %{REQUEST_URI} !^/login/
RewriteCond %{REQUEST_URI} !^/style/
RewriteCond %{REQUEST_URI} !^/utilisateur/
RewriteRule /site/(.*) /site/page/$1 [L]

8
config.php Normal file
View File

@ -0,0 +1,8 @@
<?php
cfg("localisation", "langue", "fr");
cfg("url", "base", "http://gruntnetwork.com/");
cfg("url", "accueil", get_cfg("url", "base") . "Accueil.html");
cfg("url", "licence", get_cfg("url", "base") . "Licence.html");
cfg("url", "page", "ne:" . get_cfg("url", "base") . "{nom}.html");
?>

11
fastiki/langues/en.php Normal file
View File

@ -0,0 +1,11 @@
<?php
nouvelle_langue("en");
traduction("en", "_code langue", "en");
traduction("en", "Accueil", "Home");
traduction("en", "Éditer", "Edit");
traduction("en", "Édition de la page", "Editing the page");
traduction("en", "Appliquer", "Apply");
traduction("en", "Apperçu", "Preview");
?>

11
fastiki/langues/fr.php Normal file
View File

@ -0,0 +1,11 @@
<?php
nouvelle_langue("fr");
traduction("fr", "_code langue", "fr");
traduction("fr", "Accueil", "Accueil");
traduction("fr", "Éditer", "Éditer");
traduction("fr", "Édition de la page", "Édition de la page");
traduction("fr", "Appliquer", "Appliquer");
traduction("fr", "Apperçu", "Apperçu");
?>

View File

@ -0,0 +1,4 @@
<h1>{{{lang:Apperçu}}}</h1>
${contenu}
<h1>{{{lang:Edition de la page}}} ${he:nom page}</h1>
${formulaire_edition}

View File

@ -0,0 +1,2 @@
<h1>{{{lang:Edition de la page}}} ${he:nom page}</h1>
${formulaire_edition}

View File

@ -0,0 +1,12 @@
<form action="{{{url:editer:${nom page}:}}}" method="post" enctype="multipart/form-data">
<p>
<input type="text" name="titre" value="${he:nouveau nom page}" />
</p>
<p>
<textarea name="source" cols="70" rows="22">${he:source}</textarea>
</p>
<p>
<input type="submit" name="appliquer" value="{{{lang:Appliquer}}}" />
<input type="submit" name="appercu" value="{{{lang:Apperçu}}}" />
</p>
</form>

29
fastiki/modeles/site.html Normal file
View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{{lang:_code langue}}}">
<head>
<title>${he:nom page}</title>
<link rel="stylesheet" href="{{{url:style:style.css:}}}" type="text/css" />
<script type="text/javascript" src="{{{url:style:logo.js:}}}"></script>
</head>
<body>
<p id="entete">
<img alt="Gruntnetwork " src="{{{url:image:${logo}:}}}" id="logo-grunt" />
<span id="liens">
<a href="{{{url:accueil::}}}" id="lien-accueil">{{{lang:Accueil}}}</a>
<a href="{{{url:editer:${nom page}:}}}" id="lien-editer">{{{lang:Éditer}}}</a>
</span>
</p>
<hr />
<div id="contenu">
${contenu}
</div>
<hr />
<p id="pied">
<span id="hebergeur">Hébergé par <a href="http://tuxfamily.org/" id="lien-tuxfamily">tuxfamily</a>.</span>
<a href="{{{url:licence::}}}" id="lien-licence">{{{lang:Licence}}}</a>
<span id="maj"><abbr title="Mise à jour">Màj&nbsp;</abbr>:&nbsp;${he:datenbsp}</span>
<span class="barriere-float"></span>
</p>
</body>
</html>

View File

@ -0,0 +1 @@
${contenu}

View File

@ -0,0 +1,7 @@
<h1>Tâche : ${titre}</h1>
<dl>
<dt>Dependances :</dt>
<dd>${dependances}</dd>
</dl>
<h2 id="tache-description">Description</h2>
${contenu}

View File

@ -0,0 +1,9 @@
<?php
function auth_get_user() {
return "js";
}
function auth_has_privilege($action, $page) {
return true;
}
?>

15
fastiki/php/cache.php Normal file
View File

@ -0,0 +1,15 @@
<?php
function get_nom_fichier_cache($type_cache, $nom_page) {
return get_cfg("dossier cache", $type_cache) . "/" . securiser_chaine($nom_page) . ".html";
}
// TODO : Il faudrait mettre en cache tous les tags / seulement certains, selon le type de cache.
// TODO : Pour l'instant, le cache des sources compilées n'est pas utilisé (ni utilisable).
function mettre_a_jour_cache($type_cache, $nom_page, $nouveau_nom_page, $tags) {
if ($nom_page != $nouveau_nom_page)
unlink(get_nom_fichier_cache($type_cache, $nom_page)); // TODO : mettre en place une redirection
if (! file_put_contents(get_nom_fichier_cache($type_cache, $nouveau_nom_page), $tags["contenu"], LOCK_EX))
die("N'a pas pu mettre à jour le cache $type_cache pour $page");
}
?>

View File

@ -0,0 +1,42 @@
<?php
cfg("localisation", "langue", "fr");
/* Dossiers */
cfg("dossier", "base", "../..");
cfg("dossier", "source page", get_cfg("dossier", "base") . "/source_pages");
cfg("dossier", "modeles", get_cfg("dossier", "base") . "/fastiki/modeles");
cfg("dossier", "plugins", get_cfg("dossier", "base") . "/fastiki/plugins");
cfg("dossier", "langues", get_cfg("dossier", "base") . "/fastiki/langues");
cfg("dossier", "historique", get_cfg("dossier", "base") . "/historique");
cfg("dossier", "historique", get_cfg("dossier", "base") . "/historique");
cfg("fichier", "log", get_cfg("dossier", "base") . "/historique/log.txt");
/* cfg("dossier", "page", get_cfg("dossier", "base") . "/pages");
cfg("dossier", "cache", get_cfg("dossier", "base") . "/cache");
cfg("dossier", "historique", get_cfg("dossier", "base") . "/historique");
cfg("dossier", "langue", get_cfg("dossier", "base") . "/langues");
cfg("dossier", "php", get_cfg("dossier", "base") . "/php");
cfg("dossier", "utilisateur", get_cfg("dossier", "base") . "/utilisateurs"); */
/* Dossiers de cache */
// cfg("dossier cache", "source compilee", get_cfg("dossier", "cache") . "/source_compilee");
cfg("dossier cache", "page", get_cfg("dossier", "base") . "/site/page");
// cfg("dossier cache", "historique", get_cfg("dossier", "cache") . "/historique");
// cfg("dossier cache", "diff", get_cfg("dossier", "cache") . "/diff");
/* Mise en cache */
cfg("cache", "source compilee", TRUE);
cfg("cache", "page", TRUE);
cfg("cache", "historique", FALSE);
cfg("cache", "diff", FALSE);
/* URLs */
cfg("url", "base", "http://www.example.com/site/");
cfg("url", "accueil", "ne:" . get_cfg("url", "base") . "page/Accueil.html");
cfg("url", "licence", "ne:" . get_cfg("url", "base") . "page/Licence.html");
cfg("url", "editer", "ue:" . get_cfg("url", "base") . "editer/?page={nom}");
cfg("url", "page", "ne:" . get_cfg("url", "base") . "page/{nom}.html");
cfg("url", "style", "ne:" . get_cfg("url", "base") . "style/{nom}");
cfg("url", "image", "ne:" . get_cfg("url", "base") . "image/{nom}");
?>

View File

@ -0,0 +1,41 @@
<?php
$CONFIG = array();
function cfg($cat, $var, $val) {
global $CONFIG;
if (! has_cfg_cat($cat))
$CONFIG[$cat] = array();
if (! has_cfg($cat, $var))
$CONFIG[$cat][$var] = $val;
}
function get_cfg($cat, $var, $alt = NULL) {
global $CONFIG;
if (has_cfg($cat, $var))
return $CONFIG[$cat][$var];
else if (!is_null($alt))
return $alt;
else
die("La variable de configuration n'est pas définie : $cat : $var");
}
function has_cfg($cat, $var) {
global $CONFIG;
return has_cfg_cat($cat) && isset($CONFIG[$cat][$var]);
}
function has_cfg_cat($cat) {
global $CONFIG;
return isset($CONFIG[$cat]);
}
function charger_config() {
include_once("../../config.php");
require_once("config_defaut.php");
}
?>

56
fastiki/php/editer.php Normal file
View File

@ -0,0 +1,56 @@
<?php
require_once("require.php");
function generer_formulaire_edition($nom_page, $nouveau_nom_page, $source, $nom_resultat) {
$tags_source = array(
"utilisateur" => auth_get_user(),
"date" => date("r"),
"datenbsp" => preg_replace("| |", " ", date("r")), // space -> no-break space
"logo" => "editer.png",
"source" => $source,
"nom page" => $nom_page,
"nouveau nom page" => $nouveau_nom_page
);
return compiler_page_modele("formulaire_edition.htmlf", $tags_source, $nom_resultat);
}
function editer($nom_page, $nouveau_nom_page) {
$nom_page = desecuriser_chaine($nom_page);
$nouveau_nom_page = desecuriser_chaine($nouveau_nom_page);
if (post_has("appliquer")) {
$source = dos2unix($_POST["source"]);
$tags_contenu = compiler_source($nouveau_nom_page, $source, "contenu");
$tags_site = compiler_page_modele("site.html", $tags_contenu, "contenu");
// TODO : Homogénéiser les noms.
// mettre_a_jour_cache("source compilee", $nom_page, $nouveau_nom_page, $tags_contenu);
mettre_a_jour_cache("page", $nom_page, $nouveau_nom_page, $tags_site);
historique_modifier_source(auth_get_user(), $nom_page, $nouveau_nom_page, $source);
header("HTTP/1.0 302 Redirect");
header("Location: " . url("page", $nouveau_nom_page));
return "";
} else if (post_has("appercu")) {
$source = dos2unix($_POST["source"]);
$tags_formulaire_edition = generer_formulaire_edition($nom_page, $nouveau_nom_page, $source, "formulaire_edition");
$tags_contenu = compiler_source($nouveau_nom_page, $source, "contenu");
$tags_appercu = compiler_page_modele("appercu.htmlf", array_merge($tags_contenu, $tags_formulaire_edition), "contenu");
$tags_site = compiler_page_modele("site.html", $tags_appercu, "contenu");
return $tags_site["contenu"];
} else {
$source = lire_source($nom_page, "page\n\n= $nom_page =");
$tags_formulaire_edition = generer_formulaire_edition($nom_page, $nom_page, $source, "formulaire_edition");
$tags_editer = compiler_page_modele("editer.htmlf", $tags_formulaire_edition, "contenu");
$tags_site = compiler_page_modele("site.html", $tags_editer, "contenu");
return $tags_site["contenu"];
}
}
?>

35
fastiki/php/fichiers.php Normal file
View File

@ -0,0 +1,35 @@
<?php
function lire_source($nom_page, $si_absent = NULL, $version = NULL) {
return dos2unix(lire_fichier(get_nom_fichier_source($nom_page, $version), $si_absent));
}
function lire_fichier($nom_fichier, $si_absent = NULL) {
if (! file_exists($nom_fichier) && !is_null($si_absent))
return $si_absent;
if (! $fichier = @fopen($nom_fichier, "r"))
die ("N'a pas pu ouvrir '$nom_fichier' en lecture.");
$donnees = fread ($fichier, filesize($nom_fichier));
fclose($fichier);
return $donnees;
}
function ecrire_fichier($nom_fichier, $donnees) {
if (! $fichier = @fopen($nom_fichier, "w"))
die ("N'a pas pu ouvrir '$nom_fichier' en écriture.");
if ($donnees != "")
if (fwrite($fichier, $donnees) == FALSE)
die ("N'a pas pu écrire dans '$nom_fichier'.");
fclose($fichier);
}
function mkdir_if_not_exists($nom_dossier) {
if (! file_exists($nom_dossier))
if (! mkdir($nom_dossier, 0777, true))
die ("N'a pas pu créer le dossier '$nom_dossier'.");
}
?>

65
fastiki/php/fonctions.php Normal file
View File

@ -0,0 +1,65 @@
<?php
function isset_in($tab, $var, $alt = NULL, $callback = NULL, $callback_arg = NULL) {
if (isset($tab[$var])) {
if (function_exists($callback)) {
return $callback($tab[$var], $callback_arg);
} else {
return $tab[$var];
}
} else {
if (is_null($alt)) {
return "&lt;NON TROUVÉ : $var&gt;";
} else {
return $alt;
}
}
}
function post_has($champ) {
return array_key_exists($champ, $_POST);
}
function dos2unix($donnees) {
$donnees = preg_replace("/\\015\\012/", "\012", $donnees);
$donnees = preg_replace("/\\015/", "\012", $donnees);
return $donnees;
}
function unquote($donnees) {
return preg_replace('/\\\\"/', '"', $donnees);
}
function __replacevars($val) {
return htmlentities($val, ENT_QUOTES, "UTF-8");
}
function _replacevars($var, $vars) {
if (preg_match("|^he:|", $var))
return isset_in($vars, preg_replace("|^he:|", "", $var), NULL, "__replacevars");
else
return isset_in($vars, $var);
}
function replacevars($donnees, $vars) {
return preg_replace("/\\\${([^{}]+)}/e",
"_replacevars(unquote('\\1'), \$vars)",
$donnees);
}
function subarrays($a, $index) {
foreach ($a as $k => $v)
$a[$k] = $a[$k][$index];
return $a;
}
function preg_find_delete($regexp, &$donnees, $match = NULL, $submatch = NULL, $limit = -1) {
preg_match_all($regexp, $donnees, $matches);
if (!is_null($match))
$matches = subarrays($matches, $match);
if (!is_null($submatch))
$matches = $matches[$submatch];
$donnees = preg_replace($regexp, "", $donnees, $limit);
return $matches;
}
?>

153
fastiki/php/historique.php Normal file
View File

@ -0,0 +1,153 @@
<?php
function historique_get_current_version($nom_page) {
$nom_fichier_version = get_nom_fichier_version($nom_page);
if (! file_exists($nom_fichier_version))
return -1;
if (! $fichier_version = @fopen($nom_fichier_version, "r"))
die ("N'a pas pu ouvrir '$nom_fichier_version' en lecture.");
if (! flock($fichier_version, LOCK_SH))
die ("N'a pas pu vérouiller '$nom_fichier_version'.");
$version = fread($fichier_version, filesize($nom_fichier_version));
flock($fichier_version, LOCK_UN);
$version = explode("\n", $version);
$version = $version[0];
if (is_numeric($version)) {
$version = intval($version);
} else {
$version = -1;
}
return $version;
}
function historique_nouvelle_version($nom_page) {
$dossier_hist = get_dossier_hist($nom_page);
mkdir_if_not_exists($dossier_hist);
/* Ouverture et verrouillage du compteur de versions */
$nom_fichier_version = get_nom_fichier_version($nom_page);
touch($nom_fichier_version); // Pour être sûr que le fichier existe déjà.
if (! $fichier_version = @fopen($nom_fichier_version, "r+"))
die ("N'a pas pu ouvrir '$nom_fichier_version' en ajout/écriture.");
if (! flock($fichier_version, LOCK_EX))
die ("N'a pas pu vérouiller '$nom_fichier_version'.");
/* Lecture et incrémentation du compteur de versions */
$version = "";
if (($filesz = filesize($nom_fichier_version)) != 0)
$version = fread($fichier_version, $filesz);
$version = explode("\n", $version);
$version = $version[0];
if (is_numeric($version)) {
$version = intval($version) + 1;
} else {
$version = 0;
}
/* Écriture du compteur de versions */
if (! ftruncate($fichier_version, 0))
die ("N'a pas pu tronquer '$nom_fichier_version'.");
if (! rewind($fichier_version))
die ("N'a pas pu rembobiner '$nom_fichier_version'.");
if (! fwrite($fichier_version, $version))
die ("N'a pas pu écrire dans '$nom_fichier_version'.");
/* Déverrouillage et fermeture */
flock($fichier_version, LOCK_UN);
fclose($fichier_version);
mkdir(get_dossier_hist_version($nom_page, $version), 0777, true);
return $version;
}
function get_dossier_hist($nom_page) {
return get_cfg("dossier", "historique") . "/page/" . securiser_chaine_slashes($nom_page);
}
function get_dossier_hist_version($nom_page, $version = NULL) {
if (is_null($version))
$version = historique_get_current_version($nom_page);
return get_dossier_hist($nom_page) . "/" . $version;
}
function get_nom_fichier_version($nom_page) {
return get_dossier_hist($nom_page) . "/version.txt";
}
function get_nom_fichier_source($nom_page, $version = NULL) {
return get_dossier_hist_version($nom_page, $version) . "/source.txt";
}
function get_nom_fichier_log($nom_page, $version = NULL) {
return get_dossier_hist_version($nom_page, $version) . "/log.txt";
}
function page_existe($nom_page, $version = NULL) {
return file_exists(get_nom_fichier_source);
}
function ecrire_log($temps, $nom_utilisateur, $action, $nom_page, $version, $depuis_page, $depuis_version) {
$donnees = securiser_chaine_espaces($temps)
. " " . securiser_chaine_espaces($nom_utilisateur)
. " " . securiser_chaine_espaces($action)
. " " . securiser_chaine_espaces($nom_page)
. " " . securiser_chaine_espaces($version)
. " " . securiser_chaine_espaces($depuis_page)
. " " . securiser_chaine_espaces($depuis_version)
. "\n";
if (! file_put_contents(get_nom_fichier_log($nom_page, $version), $donnees, FILE_APPEND | LOCK_EX))
die("Impossible de mettre à jour le log");
if (! file_put_contents(get_cfg("fichier", "log"), $donnees, FILE_APPEND | LOCK_EX))
die("Impossible de mettre à jour le log général");
}
function historique_modifier_source($nom_utilisateur, $nom_page, $nouveau_nom_page, $source) {
if ($nom_page != $nouveau_nom_page) {
historique_renommer_page($nom_utilisateur, $nom_page, $nouveau_nom_page, $source);
} else if (! page_existe($nom_page)) {
historique_creer_page($nom_utilisateur, $nom_page, $source);
} else {
$version = historique_nouvelle_version($nom_page);
ecrire_fichier(get_nom_fichier_source($nom_page, $version), $source);
ecrire_log(time(), $nom_utilisateur, "Modifier", $nom_page, $version, "", "");
}
}
function historique_renommer_page($nom_utilisateur, $depuis_page, $nom_page, $source = NULL) {
$version_depuis = historique_nouvelle_version($depuis_page);
$version = historique_nouvelle_version($nom_page);
if (is_null($source))
$source = lire_source($depuis_page, "", $depuis_version);
ecrire_fichier(get_nom_fichier_source($nom_page, $version), $source);
$t = time();
ecrire_log($t, $nom_utilisateur, "RenomerDepuis", $nom_page, $version, $depuis_page, $version_depuis - 1);
ecrire_log($t, $nom_utilisateur, "RenomerVers", $depuis_page, $version_depuis, $nom_page, $version);
return $version;
}
function historique_creer_page($nom_utilisateur, $nom_page, $source = "") {
$version = historique_nouvelle_version($nom_page);
ecrire_fichier(get_nom_fichier_source($nom_page, $version), $source);
ecrire_log(time(), $nom_utilisateur, "Creer", $nom_page, $version, "", "");
return $version;
}
function historique_supprimer_page($nom_utilisateur, $nom_page) {
}
?>

48
fastiki/php/langues.php Normal file
View File

@ -0,0 +1,48 @@
<?php
$LANGUES = array();
function nouvelle_langue($langue, $langue_base = NULL) {
global $LANGUES;
if (isset($LANGUES[$langue])) {
die ("Langue déjà définie : $langue");
} else {
if (is_null($langue_base)) {
$LANGUES[$langue] = array();
} else {
/* TODO : Il faut cloner le tableau, là on fait une référence seulement */
$LANGUES[$langue] = $LANGUES[$langue_base];
}
}
}
function traduction($langue, $orig, $trad) {
global $LANGUES;
if (! isset($LANGUES[$langue]))
die ("Langue inexistante : $langue");
else if (! isset($LANGUES[$langue][$orig]))
$LANGUES[$langue][$orig] = $trad;
}
function traduire($orig, $langue = NULL) {
global $LANGUES;
if (is_null($langue))
$langue = get_cfg("localisation", "langue");
if (! isset($LANGUES[$langue]))
die ("Langue inexistante : $langue");
return isset_in($LANGUES[$langue], $orig, $orig);
}
function charger_langues() {
if (! $dossier = @opendir(get_cfg("dossier", "langues")))
die ("N'a pas pu ouvrir '" . get_cfg("dossier", "langues") . "'.");
while ($fichier = readdir($dossier))
if (preg_match("/\.php$/", $fichier) != 0)
include_once(get_cfg("dossier", "langues") . "/" . $fichier);
}
?>

20
fastiki/php/modele.php Normal file
View File

@ -0,0 +1,20 @@
<?php
require_once("require.php");
function compiler_page_modele($nom_modele, $tags, $nom_resultat) {
$donnees = lire_fichier(get_cfg("dossier", "modeles") . "/" . securiser_chaine($nom_modele));
$tags_modele = $tags;
$tags_modele[$nom_resultat] = $donnees;
//echo $donnees;
$tags_modele = appliquer_plugins("pre_modele", $tags_modele, $nom_resultat);
//echo $tags_modele[$nom_resultat];
$donnees = replacevars($tags_modele[$nom_resultat], $tags);
$tags_modele[$nom_resultat] = $donnees;
appliquer_plugins("post_modele", $tags_modele, $nom_resultat);
return $tags_modele;
}
?>

51
fastiki/php/plugin.php Normal file
View File

@ -0,0 +1,51 @@
<?php
$PLUGIN = array();
function enregisterPlugin($nom) {
global $PLUGIN;
$PLUGIN[] = $nom;
}
function appliquer_plugins($methode, $tags, $nom_resultat) {
global $PLUGIN;
foreach ($PLUGIN as $plg) {
$nom_fn = $plg . "_" . $methode;
if (function_exists($nom_fn))
$tags = $nom_fn($tags, $nom_resultat);
}
return $tags;
}
function compiler_source($nom_page, $source, $nom_resultat) {
preg_match("|^(.*?)\n\n(.*)$|s", $source, $matches);
$typedoc = ($matches[1] == "") ? "page" : $matches[1];
$tags = array(
"utilisateur" => auth_get_user(),
"date" => date("r"),
"datenbsp" => preg_replace("| |", " ", date("r")), // space -> no-break space
"logo" => "logo.png",
"source" => $source,
"nom page" => $nom_page,
"typedoc" => $typedoc,
$nom_resultat => $matches[2]
);
$tags = appliquer_plugins("typedoc_".$tags["typedoc"], $tags, $nom_resultat);
$tags = appliquer_plugins("base", $tags, $nom_resultat);
$tags = compiler_page_modele("typedoc/".$tags["typedoc"].".htmlf", $tags, $nom_resultat);
return $tags;
}
function charger_plugins() {
if (! $dossier = @opendir(get_cfg("dossier", "plugins")))
die ("N'a pas pu ouvrir '" . get_cfg("dossier", "plugins") . "'.");
while ($fichier = readdir($dossier))
if (preg_match("/\.php$/", $fichier) != 0)
include_once(get_cfg("dossier", "plugins") . "/" . $fichier);
}
?>

16
fastiki/php/require.php Normal file
View File

@ -0,0 +1,16 @@
<?php
require_once("securite.php");
require_once("configuration.php");
require_once("fonctions.php");
require_once("fichiers.php");
require_once("cache.php");
require_once("modele.php");
require_once("plugin.php");
require_once("historique.php");
require_once("authentification.php");
require_once("langues.php");
charger_config();
charger_plugins();
charger_langues();
?>

51
fastiki/php/securite.php Normal file
View File

@ -0,0 +1,51 @@
<?php
/* SECURITE */
function securiser_chaine($chaine) {
/* Ce serait plus simple d'utiliser urlencode, mais les / seraient échappés (pas pratique pour taches/...). */
$chaine = preg_replace("|-|", "-2d", $chaine);
$chaine = preg_replace("|^/*|e", "str_repeat('-2f', strlen('\\0'))", $chaine);
$chaine = preg_replace("|\.\./|", "-2e-2e/", $chaine);
$chaine = preg_replace("|~|", "-7e", $chaine);
$chaine = preg_replace("|\\000|", "-00", $chaine);
$chaine = preg_replace("|\n|", "-0a", $chaine); // TODO : Verifier !!!
$chaine = preg_replace("|^$|", "-vide", $chaine);
return $chaine;
}
function securiser_chaine_espaces($chaine) {
$chaine = securiser_chaine($chaine);
$chaine = preg_replace("| |", "-20", $chaine);
return $chaine;
}
function desecuriser_chaine_espaces($chaine) {
$chaine = preg_replace("|-20|", " ", $chaine);
$chaine = securiser_chaine($chaine);
return $chaine;
}
function securiser_chaine_slashes($chaine) {
$chaine = securiser_chaine($chaine);
$chaine = preg_replace("|/|", "-2f", $chaine);
return $chaine;
}
function desecuriser_chaine_slashes($chaine) {
$chaine = preg_replace("|-2f|", "/", $chaine);
$chaine = securiser_chaine($chaine);
return $chaine;
}
/* SECURITE */
function desecuriser_chaine($chaine) {
$chaine = preg_replace("|^-vide$|", "", $chaine);
$chaine = preg_replace("|-0a|", "\n", $chaine); // TODO : Verifier !!!
$chaine = preg_replace("|-00|", "\\000", $chaine);
$chaine = preg_replace("|-7e|", "~", $chaine);
$chaine = preg_replace("|-2e-2e/|", "../", $chaine);
$chaine = preg_replace("|-2f|", "/", $chaine);
$chaine = preg_replace("|-2d|", "-", $chaine);
return $chaine;
}
?>

View File

@ -0,0 +1,18 @@
<?php
function langue_base($tags, $nom_resultat) {
$donnees = $tags[$nom_resultat];
$donnees = preg_replace("/{{{lang:(.+)}}}/Ue",
"traduire('\\1')",
$donnees);
$tags[$nom_resultat] = $donnees;
return $tags;
}
function langue_pre_modele($tags, $nom_resultat) {
return langue_base($tags, $nom_resultat);
}
enregisterPlugin("langue");
?>

44
fastiki/plugins/tache.php Normal file
View File

@ -0,0 +1,44 @@
<?php
function tache_formater_tache_inline($donnees) {
return '</p><div class="tache">'
. '<img alt="tâche" src="{{{url:image:tache.png:}}}" class="logo-tache" />'
. '<p>'
. $donnees
. '</p></div><p>';
}
function tache_base($tags, $nom_resultat) {
$donnees = $tags[$nom_resultat];
$donnees = preg_replace('/{{{TACHE:(.*)}}}/Ume',
"'<a href=\"' . url_page(unquote('taches/\\1')) . unquote('\">$1</a>')",
$donnees);
$donnees = preg_replace('/<tache>(.*)<\/tache>/Use',
"taches_formater_tache_inline(unquote('$1'))",
$donnees);
$donnees = preg_replace('/<p>\s*<\/p>/m', '', $donnees);
$tags[$nom_resultat] = $donnees;
return $tags;
}
function tache_typedoc_tache($tags, $nom_resultat) {
$donnees = $tags[$nom_resultat];
$tags["logo"] = "tache.png";
$tags["niveau entetes"] = 1;
$tags["titre"] = preg_find_delete("|^=\s*(.*?)\s*=$|m", $donnees, 0, 1, 1);
$dependances = preg_find_delete("|^<depends>(.*?)</depends>$|m", $donnees, NULL, 1);
$dependances = preg_replace("|^.*$|e", "'<a href=\"' . url('page', unquote('$0')) . unquote('\">$0</a>')", $dependances);
$tags["dependances"] = implode(", ", $dependances);
$tags[$nom_resultat] = $donnees;
return $tags;
}
enregisterPlugin("tache");
?>

28
fastiki/plugins/url.php Normal file
View File

@ -0,0 +1,28 @@
<?php
function url($type, $nom) {
preg_match("|^([^:]*):(.*)$|", get_cfg("url", $type), $modele);
$nom = securiser_chaine($nom);
if ($modele[1] == "ue")
$nom = urlencode($nom);
return htmlentities(preg_replace("/{nom}/", $nom, $modele[2]), ENT_QUOTES, "UTF-8");
}
function url_base($tags, $nom_resultat) {
$donnees = $tags[$nom_resultat];
$donnees = preg_replace("/{{{url:(.+):(.*):}}}/Ue",
"url('\\1', replacevars('\\2', \$tags))",
$donnees);
$tags[$nom_resultat] = $donnees;
return $tags;
}
function url_pre_modele($tags, $nom_resultat) {
return url_base($tags, $nom_resultat);
}
enregisterPlugin("url");
?>

98
fastiki/plugins/wiki.php Normal file
View File

@ -0,0 +1,98 @@
<?php
function wiki_formater_liste($donnees) {
$donnees = preg_split('/\n/', $donnees);
$resultat = '';
$niveau_precedent = 0;
foreach ($donnees as $ligne) {
$matches = array();
preg_match('/^(\s*\*\s*)+/', $ligne, $matches);
$niveau = count(explode("*", $matches[0])) - 1;
$ligne = preg_replace('/^(\s*\*\s*)+/', "", $ligne);
if ($niveau > $niveau_precedent) {
$resultat .= str_repeat("<ul>\n<li>\n", $niveau - $niveau_precedent);
$resultat .= $ligne . "\n";
} else {
$resultat .= str_repeat("</li>\n</ul>\n", $niveau_precedent - $niveau);
if ($niveau > 0 && $ligne != "")
$resultat .= "</li>\n<li>\n$ligne\n";
}
$niveau_precedent = $niveau;
}
$resultat .= str_repeat("</li>\n</ul>\n", $niveau_precedent);
return $resultat;
}
function wiki_formater_lien($lien_externe, $lien) {
preg_match("/^([^#|]*)#?([^|]*)\|?(.*)$/", $lien, $matches);
$nom_page = $matches[1];
$nom_ancre = $matches[2];
$texte_lien = $matches[3];
if ($nom_page == "" && $nom_ancre == "")
return $texte_lien;
if ($texte_lien == "") {
if ($nom_page != "")
$texte_lien = $nom_page;
else
$texte_lien = $nom_ancre;
}
if ($nom_page != "") {
if ($lien_externe == "") {
$url_lien = url("page", $nom_page);
} else {
$url_lien = htmlentities($nom_page, ENT_QUOTES, "UTF-8");
}
}
if ($nom_ancre != "")
$url_lien .= "#" . htmlentities(urlencode($nom_ancre), ENT_QUOTES, "UTF-8");
return "<a href=\"" . $url_lien . "\">" . $texte_lien . "</a>";
}
function wiki_base($tags, $nom_resultat) {
$donnees = $tags[$nom_resultat];
$tags["niveau entetes"] = ($tags["niveau entetes"] != "") ? $tags["niveau entetes"] : 0;
$niveau_entetes = $tags["niveau entetes"];
/* === Titres === */
$donnees = preg_replace('/^(={1,6})\s*(.*?)\s*\1$/me',
'"\n</p>\n<h" . min(6, $niveau_entetes + strlen(\'$1\')) . \'>$2</h\' . strlen(\'$1\') . ">\n<p>"',
$donnees);
/* '''Emphases''' */
$donnees = preg_replace("/'''''(.*)'''''/Um", '<strong><em>$1</em></strong>', $donnees); /* À éviter */
$donnees = preg_replace("/'''(.*)'''/Um", '<strong>$1</strong>', $donnees);
$donnees = preg_replace("/''(.*)''/Um", '<em>$1</em>', $donnees);
/* [Liens internes] et [[liens externes]] */
// TODO : capture : [xyz]], le 2e ] ne devrait être capturé que s'il y en a deux au début.
$donnees = preg_replace('/\[(\[?)([^]]*?)\]\]?/me', "wiki_formater_lien('$1', unquote('$2'))", $donnees);
/* * Listes */
$donnees = preg_replace('/^([ \t]*\*[ \t*]+.*\n?)+/me',
"'\n</p>\n' . wiki_formater_liste(unquote('$0')) . '<p>\n'",
$donnees);
/* Paragraphes (les lignes vides séparent les paragraphes) */
$donnees = preg_replace('/^/', "<p>\n", $donnees);
$donnees = preg_replace('/$/D', "\n</p>", $donnees);
$donnees = preg_replace('/^\n/m', "\n</p>\n<p>\n", $donnees);
$donnees = preg_replace('/<p>\s*<\/p>/m', '', $donnees);
/* Nettoyage du code xhtml */
$donnees = preg_replace('/^\n/m', '', $donnees);
$donnees = preg_replace('/(<p>)([^\n])/m', "$1\n$2", $donnees);
$tags[$nom_resultat] = $donnees;
return $tags;
}
enregisterPlugin("wiki");
?>

81
historique/log.txt Normal file
View File

@ -0,0 +1,81 @@
1259271912 js RenomerDepuis Accueil 0 Nouvelle-20page -2d1
1259271912 js RenomerVers Nouvelle-20page 0 Accueil 0
1259271949 js Creer Accueil 1 -vide -vide
1259271985 js Creer Accueil 2 -vide -vide
1259278974 js Creer Langage 0 -vide -vide
1259280194 js Creer Langage 1 -vide -vide
1259299917 js Creer Langage 2 -vide -vide
1259299944 js Creer Accueil 3 -vide -vide
1259300616 js Creer Accueil 4 -vide -vide
1259300699 js Creer Langage 3 -vide -vide
1259309964 js Creer Accueil 5 -vide -vide
1259310464 js Creer Accueil 6 -vide -vide
1259310683 js Creer Accueil 7 -vide -vide
1259311081 js Creer Langage 4 -vide -vide
1259313898 js Creer Accueil 8 -vide -vide
1259314263 js Creer Langage 5 -vide -vide
1259314280 js Creer Langage 6 -vide -vide
1259323247 js Creer Accueil 9 -vide -vide
1259323264 js Creer Langage 7 -vide -vide
1259323845 js Creer Accueil 10 -vide -vide
1259323861 js Creer Accueil 11 -vide -vide
1259323919 js Creer Accueil 12 -vide -vide
1259323971 js Creer Accueil 13 -vide -vide
1259521261 js Creer Langage 8 -vide -vide
1259521286 js Creer Accueil 14 -vide -vide
1259603152 js Creer Langage 9 -vide -vide
1259755329 js Creer Accueil 15 -vide -vide
1259755367 js Creer Langage 10 -vide -vide
1259767145 js Creer Langage 11 -vide -vide
1259770272 js Creer Langage 12 -vide -vide
1259784652 js Creer Langage 13 -vide -vide
1259784950 js Creer Langage 14 -vide -vide
1259785546 js Creer Langage 15 -vide -vide
1259792637 js Creer Langage 16 -vide -vide
1259837196 js Creer Langage 17 -vide -vide
1259839115 js Creer Langage 18 -vide -vide
1259839143 js Creer Langage 19 -vide -vide
1259841424 js Creer Interface-20Homme-2dMachine 0 -vide -vide
1259841472 js Creer Accueil 16 -vide -vide
1259841488 js Creer Interface-20Homme-2dMachine 1 -vide -vide
1259846394 js Creer Interface-20Homme-2dMachine 2 -vide -vide
1259846709 js Creer Interface-20Homme-2dMachine 3 -vide -vide
1259853267 js Creer Interface-20Homme-2dMachine 4 -vide -vide
1259853400 js Creer Accueil 17 -vide -vide
1259853421 js Creer Accueil 18 -vide -vide
1259863232 js Creer Systeme-20de-20fichiers.html 0 -vide -vide
1259863251 js Creer Systeme-20de-20fichiers.html 1 -vide -vide
1259867335 js Creer Systeme-20de-20fichiers.html 2 -vide -vide
1259869519 js Creer Systeme-20de-20fichiers.html 3 -vide -vide
1259869533 js RenomerDepuis Système-20de-20fichiers.html 0 Systeme-20de-20fichiers.html 3
1259869533 js RenomerVers Systeme-20de-20fichiers.html 4 Système-20de-20fichiers.html 0
1259869730 js RenomerDepuis Système-20de-20fichiers 0 Système-20de-20fichiers.html 0
1259869730 js RenomerVers Système-20de-20fichiers.html 1 Système-20de-20fichiers 0
1259869760 js Creer Système-20de-20fichiers 1 -vide -vide
1259870498 js Creer Gestion-20des-20ressources 0 -vide -vide
1259966078 js Creer Système-20de-20fichiers 2 -vide -vide
1259966204 js Creer Accueil 19 -vide -vide
1259966234 js Creer commentaires 0 -vide -vide
1260009715 js Creer Licence 0 -vide -vide
1260009733 js Creer Accueil 20 -vide -vide
1260009744 js Creer Langage 20 -vide -vide
1260009754 js Creer Interface-20Homme-2dMachine 5 -vide -vide
1260009780 js Creer Système-20de-20fichiers 3 -vide -vide
1260009798 js Creer Gestion-20des-20ressources 1 -vide -vide
1260009853 js Creer commentaires 1 -vide -vide
1260025956 js Creer Licence 1 -vide -vide
1260026797 js Creer Licence 2 -vide -vide
1260026929 js Creer Licence 3 -vide -vide
1260027054 js Creer Licence 4 -vide -vide
1260027296 js Creer Licence 5 -vide -vide
1260466408 js Creer Accueil 21 -vide -vide
1260466430 js Creer Langage 21 -vide -vide
1260466435 js Creer Interface-20Homme-2dMachine 6 -vide -vide
1260466445 js Creer Système-20de-20fichiers 4 -vide -vide
1260466460 js Creer Gestion-20des-20ressources 2 -vide -vide
1260466465 js Creer commentaires 2 -vide -vide
1260637053 js Creer Système-20de-20fichiers 5 -vide -vide
1260637302 js Creer Système-20de-20fichiers 6 -vide -vide
1261649474 js Creer Accueil 22 -vide -vide
1264309582 js Creer Accueil 23 -vide -vide
1264533981 js Creer Accueil 24 -vide -vide

View File

@ -0,0 +1 @@
1259271912 js RenomerDepuis Accueil 0 Nouvelle-20page -2d1

View File

@ -0,0 +1,5 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation construit (et programmable) avec un langage de programmation graphique.

View File

@ -0,0 +1 @@
1259271949 js Creer Accueil 1 -vide -vide

View File

@ -0,0 +1,5 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation construit (et programmable) avec un langage de programmation graphique.

View File

@ -0,0 +1 @@
1259323845 js Creer Accueil 10 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259323861 js Creer Accueil 11 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259323919 js Creer Accueil 12 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259323971 js Creer Accueil 13 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259521286 js Creer Accueil 14 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259755329 js Creer Accueil 15 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Orienté document|orientée document], et non processus, est [Génération semi-automatique d'IHM|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259841472 js Creer Accueil 16 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259853400 js Creer Accueil 17 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259853421 js Creer Accueil 18 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes,&nbsp;… De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259966204 js Creer Accueil 19 -vide -vide

View File

@ -0,0 +1,11 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes,&nbsp;… De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.
Vous pouvez laisser des [commentaires] si vous en avez.

View File

@ -0,0 +1 @@
1259271985 js Creer Accueil 2 -vide -vide

View File

@ -0,0 +1,5 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation construit (et programmable) avec un langage de programmation graphique.

View File

@ -0,0 +1 @@
1260009733 js Creer Accueil 20 -vide -vide

View File

@ -0,0 +1,11 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes,&nbsp;… De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.
Vous pouvez laisser des [commentaires] si vous en avez.

View File

@ -0,0 +1 @@
1260466408 js Creer Accueil 21 -vide -vide

View File

@ -0,0 +1,11 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes,&nbsp;… De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.
Vous pouvez laisser des [commentaires] si vous en avez.

View File

@ -0,0 +1 @@
1261649474 js Creer Accueil 22 -vide -vide

View File

@ -0,0 +1,11 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisamment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes,&nbsp;… De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.
Vous pouvez laisser des [commentaires] si vous en avez.

View File

@ -0,0 +1 @@
1264309582 js Creer Accueil 23 -vide -vide

View File

@ -0,0 +1 @@
cfZXLF <a href="http://nctpsqlxetsn.com/">nctpsqlxetsn</a>, [url=http://dfzcmrhhkbee.com/]dfzcmrhhkbee[/url], [link=http://xkaqpslgpmeu.com/]xkaqpslgpmeu[/link], http://ebnlhzwdljim.com/

View File

@ -0,0 +1 @@
1264533981 js Creer Accueil 24 -vide -vide

View File

@ -0,0 +1,11 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* L'interface homme-machine [Interface Homme-Machine#Interface orientée document|orientée document], et non processus, est [Interface Homme-Machine#Génération semi-automatique|générée semi-automatiquement] ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisamment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes,&nbsp;… De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.
Vous pouvez laisser des [commentaires] si vous en avez.

View File

@ -0,0 +1 @@
1259299944 js Creer Accueil 3 -vide -vide

View File

@ -0,0 +1,5 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation construit (et programmable) avec un [langage|langage de programmation graphique].

View File

@ -0,0 +1 @@
1259300616 js Creer Accueil 4 -vide -vide

View File

@ -0,0 +1,5 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation construit (et programmable) avec un [Langage|langage de programmation graphique]. Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles. Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, ... De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259309964 js Creer Accueil 5 -vide -vide

View File

@ -0,0 +1,5 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation construit (et programmable) avec un [Langage|langage de programmation graphique]. Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles. Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259310464 js Creer Accueil 6 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259310683 js Creer Accueil 7 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259313898 js Creer Accueil 8 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
1259323247 js Creer Accueil 9 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Gruntnetwork =
'''Gruntnetwork''' est un projet de système d'expoitation, avec les particularités suivantes :
* Il est construit (et programmable) avec un [Langage|langage de programmation graphique] ;
* Le modèle d'exécution est [Orienté document|orienté document], et non processus ;
* Son [Système de fichiers|système de fichiers] est une base de données, et la gestion des fichiers rend des tâches telles que l'archivage ou la recherche particulièrement faciles ;
* Sa [Gestion des ressources|gestion des ressources] matérielles est suffisemment souple pour permettre à des programmes ''en cours d'exécution'' d'être sauvegardés dans leur état courant, déplacés sur une autre machine avec des ressources matérielles différentes, … De plus la mise en veille devient triviale à implémenter, et fonctionne à tous les coups.

View File

@ -0,0 +1 @@
24

View File

@ -0,0 +1 @@
1259870498 js Creer Gestion-20des-20ressources 0 -vide -vide

View File

@ -0,0 +1,14 @@
page
= Gestion des ressources =
Les programmes fonctionnant sous le système d'exploitation gruntnetwork doivent faire une demmande d'allocation de ressource auprès du système d'exploitation lorsqu'ils ont besoin de mémoire, d'une sortie sonore, d'une portion d'affichage graphique, voire de temps de calcul.
Cette ressource n'est pas allouée définitivement par le système et l'accès à celle-ci peut être révoqué à tout moment. Un signal est alors envoyé à l'application qui peut traiter cette disparition de ressource.
La ressource peut être reprise de plusieurs manières (l'application en est informé) :
* Accès temporairement désactivé, lors de la mise en veille par exemple. La ressource sera ré-allouée au réveil ;
* Accès révoqué de manière permanente, lors de l'arrêt de la machine, ou lors de la déconnexion d'un périphérique ;
Cette gestion des ressources permet des choses étonemment pratiques, comme la mise en hibernation d'un processus (accès temporairement désactivé), puis son réveil sur une autre machine (accès restitué, mais avec une ressource légèrement différente). Cela permet de déplacer des processus en cours d'exécution d'une machine à l'autre, ou de les enregistrer en vue de les relancer plus tard, …

View File

@ -0,0 +1 @@
1260009798 js Creer Gestion-20des-20ressources 1 -vide -vide

View File

@ -0,0 +1,14 @@
page
= Gestion des ressources =
Les programmes fonctionnant sous le système d'exploitation gruntnetwork doivent faire une demmande d'allocation de ressource auprès du système d'exploitation lorsqu'ils ont besoin de mémoire, d'une sortie sonore, d'une portion d'affichage graphique, voire de temps de calcul.
Cette ressource n'est pas allouée définitivement par le système et l'accès à celle-ci peut être révoqué à tout moment. Un signal est alors envoyé à l'application qui peut traiter cette disparition de ressource.
La ressource peut être reprise de plusieurs manières (l'application en est informé) :
* Accès temporairement désactivé, lors de la mise en veille par exemple. La ressource sera ré-allouée au réveil ;
* Accès révoqué de manière permanente, lors de l'arrêt de la machine, ou lors de la déconnexion d'un périphérique ;
Cette gestion des ressources permet des choses étonemment pratiques, comme la mise en hibernation d'un processus (accès temporairement désactivé), puis son réveil sur une autre machine (accès restitué, mais avec une ressource légèrement différente). Cela permet de déplacer des processus en cours d'exécution d'une machine à l'autre, ou de les enregistrer en vue de les relancer plus tard, …

View File

@ -0,0 +1 @@
1260466460 js Creer Gestion-20des-20ressources 2 -vide -vide

View File

@ -0,0 +1,14 @@
page
= Gestion des ressources =
Les programmes fonctionnant sous le système d'exploitation gruntnetwork doivent faire une demmande d'allocation de ressource auprès du système d'exploitation lorsqu'ils ont besoin de mémoire, d'une sortie sonore, d'une portion d'affichage graphique, voire de temps de calcul.
Cette ressource n'est pas allouée définitivement par le système et l'accès à celle-ci peut être révoqué à tout moment. Un signal est alors envoyé à l'application qui peut traiter cette disparition de ressource.
La ressource peut être reprise de plusieurs manières (l'application en est informé) :
* Accès temporairement désactivé, lors de la mise en veille par exemple. La ressource sera ré-allouée au réveil ;
* Accès révoqué de manière permanente, lors de l'arrêt de la machine, ou lors de la déconnexion d'un périphérique ;
Cette gestion des ressources permet des choses étonemment pratiques, comme la mise en hibernation d'un processus (accès temporairement désactivé), puis son réveil sur une autre machine (accès restitué, mais avec une ressource légèrement différente). Cela permet de déplacer des processus en cours d'exécution d'une machine à l'autre, ou de les enregistrer en vue de les relancer plus tard, …

View File

@ -0,0 +1 @@
2

View File

@ -0,0 +1 @@
1259841424 js Creer Interface-20Homme-2dMachine 0 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Interface orientée document =
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier).
= Génération semi-automatique =

View File

@ -0,0 +1 @@
1259841488 js Creer Interface-20Homme-2dMachine 1 -vide -vide

View File

@ -0,0 +1,9 @@
page
= Interface orientée document =
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier).
= Génération semi-automatique =

View File

@ -0,0 +1 @@
1259846394 js Creer Interface-20Homme-2dMachine 2 -vide -vide

View File

@ -0,0 +1,19 @@
page
= Interface Homme-Machine =
== Interface orientée document ==
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier). Cette approche présente plusieurs défauts :
* Lorsque le processus plante, tous ses documents sont perdus ;
* Intuitivement, l'utilisateur a l'impression d'avoir ouvert un document, alors qu'en réalité il vient de démarrer une application. L'utilisateur a donc une vision erronnée du système, ce qui est en général mauvais, car moins il comprend le système, moins il est efficace ;
* Des mécanismes complexes de dialogue entre applications sont nécessaires pour l'édition de documents composite (OLE, Kpart, …) ;
* Si l'application ne sait pas gérer un certain protocole (http, ouverture de fichiers à l'intérieur de fichiers compressés, …), elle ne pourra pas ouvrir les documents accessibles via ce protocole. L'environnement de bureau KDE apporte une solution en permettant le partage de ces protocoles via les KIOSlaves.
Une approche orientée document apporte des solutions à ces problèmes :
* Lorsqu'un des outils greffés autour du document plante, il suffi
== Génération semi-automatique ==

View File

@ -0,0 +1 @@
1259846709 js Creer Interface-20Homme-2dMachine 3 -vide -vide

View File

@ -0,0 +1,21 @@
page
= Interface Homme-Machine =
== Interface orientée document ==
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier). Cette approche présente plusieurs défauts :
* Lorsque le processus plante, tous ses documents sont perdus ;
* Intuitivement, l'utilisateur a l'impression d'avoir ouvert un document, alors qu'en réalité il vient de démarrer une application. L'utilisateur a donc une vision erronnée du système, ce qui est en général mauvais, car moins il comprend le système, moins il est efficace ;
* Des mécanismes complexes de dialogue entre applications sont nécessaires pour l'édition de documents composite (OLE, Kpart, …) ;
* Si l'application ne sait pas gérer un certain protocole (http, ouverture de fichiers à l'intérieur de fichiers compressés, …), elle ne pourra pas ouvrir les documents accessibles via ce protocole. L'environnement de bureau KDE apporte une solution en permettant le partage de ces protocoles via les KIOSlaves.
Une approche orientée document apporte des solutions à ces problèmes :
* Lorsqu'un des outils greffés autour du document plante, il suffit de le redémarrer. Et quand bien même cela serait impossible, ou si c'est le programme chargé de l'affichage du document qui plante, il est toujours possible de proposer à l'utilisateur d'enregistrer son document pour éviter des pertes de données.
* L'édition de documents composites se fait sans encombre : selon la portion du document considérée, les outils qui viennent se greffer changent.
* Les outils ne gèrent pas l'ouverture du document, on a des blocs différents pour le chargement en mémoire, le décodage, la visualisation, la modification, l'encodage et l'enregistrement, chacun fonctionnant indépendemment des autres.
== Génération semi-automatique ==

View File

@ -0,0 +1 @@
1259853267 js Creer Interface-20Homme-2dMachine 4 -vide -vide

View File

@ -0,0 +1,27 @@
page
= Interface Homme-Machine =
== Interface orientée document ==
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier). Cette approche présente plusieurs défauts :
* Lorsque le processus plante, tous ses documents sont perdus ;
* Intuitivement, l'utilisateur a l'impression d'avoir ouvert un document, alors qu'en réalité il vient de démarrer une application. L'utilisateur a donc une vision erronnée du système, ce qui est en général mauvais, car moins il comprend le système, moins il est efficace ;
* Des mécanismes complexes de dialogue entre applications sont nécessaires pour l'édition de documents composite (OLE, Kpart, …) ;
* Si l'application ne sait pas gérer un certain protocole (http, ouverture de fichiers à l'intérieur de fichiers compressés, …), elle ne pourra pas ouvrir les documents accessibles via ce protocole. L'environnement de bureau KDE apporte une solution en permettant le partage de ces protocoles via les KIOSlaves.
Une approche orientée document apporte des solutions à ces problèmes :
* Lorsqu'un des outils greffés autour du document plante, il suffit de le redémarrer. Et quand bien même cela serait impossible, ou si c'est le programme chargé de l'affichage du document qui plante, il est toujours possible de proposer à l'utilisateur d'enregistrer son document pour éviter des pertes de données.
* L'édition de documents composites se fait sans encombre : selon la portion du document considérée, les outils qui viennent se greffer changent.
* Les outils ne gèrent pas l'ouverture du document, on a des blocs différents pour le chargement en mémoire, le décodage, la visualisation, la modification, l'encodage et l'enregistrement, chacun fonctionnant indépendemment des autres.
== Génération semi-automatique ==
L'Interface Homme-Machine (IHM) de gruntnetwork est générée semi-automatiquement à partir d'une spécification déclarative. Cette spécification indique au système quelles sont les informations qui sont les plus importantes (et donc devraient être affichées à l'écran), quelles sont les informations secondaires (accessibles par exemple au travers d'une boîte de dialogue de propriétés), etc.
De même, cette spécification liste les actions qu'il est possible d'effectuer, les plus importantes s'affichant sous forme d'icône par exemple, les autres étant rangées dans des menus ou bien accessibles via des raccourcis clavier.
Plusieurs spécifications peuvent coexister, ce qui permet d'avoir très facilement des interfaces différentes pour les utilisateurs expérimentés et les novices. On peut aussi imaginer une spécification d'interface actualisée dynamiquement en fonction des actions les plus fréquentes de l'utilisateur.

View File

@ -0,0 +1 @@
1260009754 js Creer Interface-20Homme-2dMachine 5 -vide -vide

View File

@ -0,0 +1,27 @@
page
= Interface Homme-Machine =
== Interface orientée document ==
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier). Cette approche présente plusieurs défauts :
* Lorsque le processus plante, tous ses documents sont perdus ;
* Intuitivement, l'utilisateur a l'impression d'avoir ouvert un document, alors qu'en réalité il vient de démarrer une application. L'utilisateur a donc une vision erronnée du système, ce qui est en général mauvais, car moins il comprend le système, moins il est efficace ;
* Des mécanismes complexes de dialogue entre applications sont nécessaires pour l'édition de documents composite (OLE, Kpart, …) ;
* Si l'application ne sait pas gérer un certain protocole (http, ouverture de fichiers à l'intérieur de fichiers compressés, …), elle ne pourra pas ouvrir les documents accessibles via ce protocole. L'environnement de bureau KDE apporte une solution en permettant le partage de ces protocoles via les KIOSlaves.
Une approche orientée document apporte des solutions à ces problèmes :
* Lorsqu'un des outils greffés autour du document plante, il suffit de le redémarrer. Et quand bien même cela serait impossible, ou si c'est le programme chargé de l'affichage du document qui plante, il est toujours possible de proposer à l'utilisateur d'enregistrer son document pour éviter des pertes de données.
* L'édition de documents composites se fait sans encombre : selon la portion du document considérée, les outils qui viennent se greffer changent.
* Les outils ne gèrent pas l'ouverture du document, on a des blocs différents pour le chargement en mémoire, le décodage, la visualisation, la modification, l'encodage et l'enregistrement, chacun fonctionnant indépendemment des autres.
== Génération semi-automatique ==
L'Interface Homme-Machine (IHM) de gruntnetwork est générée semi-automatiquement à partir d'une spécification déclarative. Cette spécification indique au système quelles sont les informations qui sont les plus importantes (et donc devraient être affichées à l'écran), quelles sont les informations secondaires (accessibles par exemple au travers d'une boîte de dialogue de propriétés), etc.
De même, cette spécification liste les actions qu'il est possible d'effectuer, les plus importantes s'affichant sous forme d'icône par exemple, les autres étant rangées dans des menus ou bien accessibles via des raccourcis clavier.
Plusieurs spécifications peuvent coexister, ce qui permet d'avoir très facilement des interfaces différentes pour les utilisateurs expérimentés et les novices. On peut aussi imaginer une spécification d'interface actualisée dynamiquement en fonction des actions les plus fréquentes de l'utilisateur.

View File

@ -0,0 +1 @@
1260466435 js Creer Interface-20Homme-2dMachine 6 -vide -vide

View File

@ -0,0 +1,27 @@
page
= Interface Homme-Machine =
== Interface orientée document ==
L'Interface Homme-Machine (IHM) de gruntnetwork est orientée document. Cela signifie que l'élément principal présenté à l'utilisateur est le document, autour duquel viennent se greffer des outils.
Dans la plupart des sytèmes actuels, on présente à l'utilisateur la possibilité de lancer divers processus directement (via un menu d'applications), ou bien de lancer ces mêmes processus avec une certaine donnée en entrée (l'ouverture d'un fichier via son icône passe obligatoirement par le démarrage d'un processus, qui décide que faire de ce fichier). Cette approche présente plusieurs défauts :
* Lorsque le processus plante, tous ses documents sont perdus ;
* Intuitivement, l'utilisateur a l'impression d'avoir ouvert un document, alors qu'en réalité il vient de démarrer une application. L'utilisateur a donc une vision erronnée du système, ce qui est en général mauvais, car moins il comprend le système, moins il est efficace ;
* Des mécanismes complexes de dialogue entre applications sont nécessaires pour l'édition de documents composite (OLE, Kpart, …) ;
* Si l'application ne sait pas gérer un certain protocole (http, ouverture de fichiers à l'intérieur de fichiers compressés, …), elle ne pourra pas ouvrir les documents accessibles via ce protocole. L'environnement de bureau KDE apporte une solution en permettant le partage de ces protocoles via les KIOSlaves.
Une approche orientée document apporte des solutions à ces problèmes :
* Lorsqu'un des outils greffés autour du document plante, il suffit de le redémarrer. Et quand bien même cela serait impossible, ou si c'est le programme chargé de l'affichage du document qui plante, il est toujours possible de proposer à l'utilisateur d'enregistrer son document pour éviter des pertes de données.
* L'édition de documents composites se fait sans encombre : selon la portion du document considérée, les outils qui viennent se greffer changent.
* Les outils ne gèrent pas l'ouverture du document, on a des blocs différents pour le chargement en mémoire, le décodage, la visualisation, la modification, l'encodage et l'enregistrement, chacun fonctionnant indépendemment des autres.
== Génération semi-automatique ==
L'Interface Homme-Machine (IHM) de gruntnetwork est générée semi-automatiquement à partir d'une spécification déclarative. Cette spécification indique au système quelles sont les informations qui sont les plus importantes (et donc devraient être affichées à l'écran), quelles sont les informations secondaires (accessibles par exemple au travers d'une boîte de dialogue de propriétés), etc.
De même, cette spécification liste les actions qu'il est possible d'effectuer, les plus importantes s'affichant sous forme d'icône par exemple, les autres étant rangées dans des menus ou bien accessibles via des raccourcis clavier.
Plusieurs spécifications peuvent coexister, ce qui permet d'avoir très facilement des interfaces différentes pour les utilisateurs expérimentés et les novices. On peut aussi imaginer une spécification d'interface actualisée dynamiquement en fonction des actions les plus fréquentes de l'utilisateur.

Some files were not shown because too many files have changed in this diff Show More