// Presentation unigiciel, 2000
#include "graph.h"
#include "tledit.h"
#include "schema.h"
static void api1()
{
("Les APIs système");
(mode,node);
drawparagraph (mode,node,"Les APIs système");
(mode,node,true);
drawrect (mode,node,20,20,"","Entrées/Sorties");
drawparagraph (mode,node,"Synchrone\nAsyncrhone");
(mode,node,true);
drawrect (mode,node,20,20,"","Système de fichiers");
drawparagraph (mode,node,"Volumes\nRépertoires et fichiers\nFichiers spéciaux");
(mode,node,true);
drawrect (mode,node,20,20,"","Communications");
drawparagraph (mode,node,"Réseaux\nInternes\nAnonyme");
(mode,node,true);
drawrect (mode,node,20,20,"","Ressources");
drawparagraph (mode,node,"Mémoire\nProcessus\n/proc");
(mode,node,true);
drawrect (mode,node,20,20,"","Sécurité");
drawparagraph (mode,node,"Accès\nSetuid");
}
static void api2()
{
("Les APIs système");
(mode,node);
drawparagraph (mode,node,"Les APIs système");
(mode,node);
drawparagraph (mode,node,"Entrées/Sorties");
(mode,node,true);
drawrect (mode,node,20,20,"","Entrées/Sorties");
drawparagraph (mode,node,"Synchrone\nAsyncrhone");
(mode,node,true);
drawrect (mode,node,20,20,"","Système de fichiers");
drawparagraph (mode,node,"Volumes\nRépertoires et fichiers\nFichiers spéciaux");
drawrect (mode,node,20,20,"","Communications");
drawparagraph (mode,node,"Réseaux\nInternes\nAnonyme");
(mode,node);
drawparagraph (mode,node,"Divers");
(mode,node,true);
drawrect (mode,node,20,20,"","Ressources");
drawparagraph (mode,node,"Mémoire\nProcessus\n/proc");
(mode,node,true);
drawrect (mode,node,20,20,"","Sécurité");
drawparagraph (mode,node,"Accès\nSetuid");
}
static void api3()
{
("Entrées sorties");
(mode,node);
drawparagraph (mode,node,"Entrées/Sorties");
(mode,node,false);
drawrect (mode,node,20,20,"","Synchrone");
drawparagraph (mode,node,
"select\n"
"read,write,pread,pwrite\n"
"readv,writev\n"
"mmap\n"
"pause\n"
"flock");
(mode,node,false);
drawrect (mode,node,20,20,"","Asynchrone");
drawparagraph (mode,node,
"kill\n");
}
static void api4()
{
("Fichiers et répertoires");
(mode,node);
drawparagraph (mode,node,"Système de fichiers");
drawparagraph (mode,node,
"Volumes\n"
"\tstatfs\n"
"Répertoires et fichiers\n"
"\tstat\n"
"\topendir,readdir,closedir\n"
"fichiers spéciaux\n"
"\tsymlink,readlink\n"
"\tmknod\n"
"\tlink\n"
"\tlstat");
}
static void api5()
{
("Communications");
(mode,node);
drawparagraph (mode,node,"Communications");
(mode,node,false);
drawrect (mode,node,20,20,"","Réseaux");
drawparagraph (mode,node,
"bind\n"
"connect\n"
"socket\n"
"listen\n"
"accept\n"
"getpeername\n"
"getsockname");
(mode,node,false);
drawrect (mode,node,20,20,"","Locales");
drawparagraph (mode,node,
"named pipe\n"
"mknod\n"
"Unix domain socket");
drawparagraph (mode,node,
"anonyme\n"
"pipe");
}
static void api6()
{
("Ressources");
(mode,node);
drawparagraph (mode,node,"Ressources");
(mode,node,false);
drawrect (mode,node,20,20,"","Mémoire");
drawparagraph (mode,node,
"Mémoire partagé\n"
"mmap anonyme");
(mode,node,false);
drawrect (mode,node,20,20,"","Processus");
drawparagraph (mode,node,
"fork\n"
"pthread\n"
"system\n"
"exec\n"
"sleep\n"
"nanosleep");
drawparagraph (mode,node,
"/proc\n"
"uname");
}
static void api7()
{
("Sécurité");
(mode,node);
drawparagraph (mode,node,"Sécurité");
(mode,node,false);
drawrect (mode,node,20,20,"","Accès");
drawparagraph (mode,node,
"access\n"
"chroot");
(mode,node,false);
drawrect (mode,node,20,20,"","Setuid");
drawparagraph (mode,node,
"getuid\n"
"geteuid");
}
static const char *float_get(int val)
{
static char line[100];
char cmd[100];
sprintf (cmd,"echo \"2^-%d\" | /usr/bin/bc -l",val);
POPEN pop (cmd);
line[0] = '\0';
if (pop.isok()){
pop.wait(10);
pop.readout (line,sizeof(line));
}
return line;
}
static void dofloat ()
{
int i;
("intro float","float00");
(mode,node);
drawparagraph (mode,node,"Point flottant 101");
drawparagraph (mode,node
,"Representation d'un nombre point flottant\n"
"\n"
"1010101010101... * 2**N"
);
for (glocal.i=1; glocal.i<56; glocal.i+=5){
SSTRING s;
s.setfromf ("float%02d",glocal.i);
("Sécurité",s.get());
(mode,node,false);
drawparagraph (mode,node,float_get(glocal.i));
drawparagraph (mode,node,float_get(glocal.i+1));
drawparagraph (mode,node,float_get(glocal.i+2));
drawparagraph (mode,node,float_get(glocal.i+3));
drawparagraph (mode,node,float_get(glocal.i+4));
}
}
static void unix1()
{
UNIFORM_OBJECT *subject;
();
drawellipse (mode,node,w,h,title,desc);
glocal.subject = &subject;
("unix 1");
(mode,node);
drawellipse (mode,node,20,20,"","Les APIs");
(mode,node);
drawrect (mode,node,node.depth,node.width,"Programmation mondaine","");
(mode,node,false);
(mode,node);
glocal.subject->draw (mode,node,"Interfaces usager");
drawellipse (mode,node,20,20,"","Gnome/GTK");
drawellipse (mode,node,20,20,"","KDE/Qt");
drawellipse (mode,node,20,20,"","Motif/Xt/TclTk/...");
(mode,node);
glocal.subject->draw (mode,node,"Base de données");
drawellipse (mode,node,20,20,"","SQL");
drawellipse (mode,node,20,20,"","DB");
drawellipse (mode,node,20,20,"","Fichier texte");
(mode,node);
drawrect (mode,node,node.depth,node.width,"Programmation système","");
(mode,node,false);
(mode,node);
glocal.subject->draw (mode,node,"Entrées/Sorties");
drawellipse (mode,node,20,20,"","Synchrone");
drawellipse (mode,node,20,20,"","Asynchrone");
(mode,node);
glocal.subject->draw (mode,node,"Système de fichiers");
drawellipse (mode,node,20,20,"","Volumes");
drawellipse (mode,node,20,20,"","Répertoires et fichiers");
drawellipse (mode,node,20,20,"","Fichiers spéciaux");
(mode,node);
glocal.subject->draw (mode,node,"Communications");
drawellipse (mode,node,20,20,"","Réseaux");
drawellipse (mode,node,20,20,"","Locales");
drawellipse (mode,node,20,20,"","Anonymes");
(mode,node);
glocal.subject->draw (mode,node,"Ressources");
drawellipse (mode,node,20,20,"","Mémoire");
drawellipse (mode,node,20,20,"","Processus");
drawellipse (mode,node,20,20,"","/proc");
(mode,node);
glocal.subject->draw (mode,node,"Sécurité");
drawellipse (mode,node,20,20,"","Accès");
drawellipse (mode,node,20,20,"","Setuid");
drawellipse (mode,node,20,20,"","");
(mode,node);
drawrect (mode,node,node.depth,node.width,"Outils","");
(mode,node,false);
glocal.subject->draw (mode,node,"DLLs");
glocal.subject->draw (mode,node,"Performance");
glocal.subject->draw (mode,node,"Debug");
}
static void unix2()
{
("Entrées/Sorties");
(mode,node,false);
(mode,node);
drawellipse (mode,node,20,20,"","Synchrone");
(mode,node,true);
drawrect (mode,node,50,50,"","");
drawrect (mode,node,50,50,"","");
drawellipse (mode,node,20,20,"","Asynchrone");
}
static void unix3()
{
("unix 3");
(mode,node);
}
static void unix4()
{
("unix 4");
(mode,node);
}
static SCHEMA_REGISTER rapi1 ("api1",api1);
static SCHEMA_REGISTER rapi2 ("api2",api2);
static SCHEMA_REGISTER rapi3 ("api3",api3);
static SCHEMA_REGISTER rapi4 ("api4",api4);
static SCHEMA_REGISTER rapi5 ("api5",api5);
static SCHEMA_REGISTER rapi6 ("api6",api6);
static SCHEMA_REGISTER rapi7 ("api7",api7);
static SCHEMA_REGISTER rfloat ("float",dofloat);
static SCHEMA_REGISTER runix1 ("unix1",unix1);
static SCHEMA_REGISTER runix2 ("unix2",unix2);
static SCHEMA_REGISTER runix3 ("unix3",unix3);
static SCHEMA_REGISTER runix4 ("unix4",unix4);