TD X-Window numero 2: graphe.h
/*****************************************************************************\
* *
* mini-afficheur de graphes *
* *
\*****************************************************************************/
/*****************************************************************************\
* graph file structure *
\*****************************************************************************/
/* Syntaxe:
* Une entite par ligne, chaque champ separe par un blanc.
* Syntaxe volontairement rigide pour simplifier le parsing
* Title: T string
* Node: N id x y label
* Edge: E id from_id to_id
*/
/*****************************************************************************\
* data types *
\*****************************************************************************/
/* La structure d'un noeud */
typedef struct _Node {
int id; /* unique identifier (number) */
int x; /* position */
int y;
int width; /* to be calculated */
int height; /* to be calculated */
char *label; /* text to be displayed */
int baseline_x;
int baseline_y;
struct _Node *next; /* next node in graph */
} *Node;
/* la structure d'un arc */
typedef struct _Edge {
int id; /* unique identifier (number) */
int from_id; /* nodes connected by id */
int to_id;
Node from; /* the nodes themselves */
Node to;
struct _Edge *next; /* next edge in graph */
} *Edge;
/* un graphe */
typedef struct _Graph {
char *title; /* symbolic */
Node nodes; /* null-terminated list */
Edge edges; /* null-terminated list */
} *Graph;
/*****************************************************************************\
* provided functions *
\*****************************************************************************/
/* read a graph from file */
Graph ReadGraph(/*
FILE *stream;
*/);
/* writes textual representation */
void PrintGraph(/*
Graph graph;
FILE *stream;
*/);
/* retourne la liste des edges liees au node donne */
Edge RelatedEdges(/*
Graph graph;
Node node;
*/);
/* free une liste de edges */
FreeEdges(/*
Edge edge;
*/);
/* affiche une liste de nodes */
DisplayNodes(/*
Node nodes;
Display *dpy;
Window window;
GC draw_gc;
GC fill_gc;
*/);
/* affiche une liste de edges */
DisplayEdges(/*
edges, dpy, window, gc)
Edge edges;
Display *dpy;
Window window;
GC gc;
*/);
/*****************************************************************************\
* functions to be coded *
\*****************************************************************************/
/* affiche un graph */
void DisplayGraph(/*
Display *dpy;
Window window;
Graph graph;
GC draw_gc; foreground: black
GC fill_gc; background: white
*/);
/* affiche un node */
DisplayNode(/*
Node node;
Display *dpy;
Window window;
GC draw_gc;
GC fill_gc;
*/);
/* affiche une edge */
DisplayEdge(/*
Edge edge;
Display *dpy;
Window window;
GC gc;
*/);
/* retourne le premier node dont la bounding box contient le point (x,y) */
Node FindNode(/*
Graph graph;
int x;
int y;
*/);
/* a appeller apres avoir lu le graphe pour calculer les tailles des boites */
void FixGraphLabelDimensions(/*
Graph graph;
Font font;
*/);
michel.buffa@essi.fr