int tset_axis_date_rep (strid, num_grad_rep, cal_grad_rep, times_period)
Pint strid; Pint num_grad_rep; char **cal_grad_rep; char *times_period;
soit [delta] la durée entre date1 et date2 (dates origine et extrémité de l'axe d'identificateur strid), et soit Di (0<=i<num_grad_rep-1) l'ensemble de toutes les durées définies par le paramètre times_period. Le choix du numéro de la représentation s'effectue comme suit :
si [delta] < D0 l'axe est construit avec la réprésentation cal_grad_rep[0]
si Di <= [delta] < Di+1 l'axe est construit avec la représentation cal_grad_rep[i+1]
si Dnum_grad_rep-2 < [delta] l'axe est construit avec la représentation cal_grad_rep[num_grad_rep-1]
Si la liste des durées n'est pas précisée (pointeur nul ou chaine vide), le numéro de la réprésentation n'est pas choisit en fonction de [delta]. Il est choisit en fonction des pas calendaires indiqués dans chaque représentation.
Syntaxe de la chaine times_period définissant l'ensemble des durées. C'est un langage rationnel défini par :
times_period = ([r]U)*
où <U> est l'unité de temps au choix entre SEC, MIN, HOU, DAY, YEA
où <[r]> est un réél positif optionnel précisant le nombre d'unités (=1 si r n'est pas précisé)
([r]U)* signifie que la séquence [r]U peut être répétée 0 ou plusieurs fois
les caractères "espace" sont systématiquement ignorés
exemples
times_period = "10SEC 20MIN HOU"
spécifie 3 durées : 10 secondes, 20 minutes et 1 heures
times_period = "0.2SEC 30MIN 10DAY 2YEA"
spécifie 4 durées : 0.2 secondes, 30 minutes, 10 jours et 2 ans
remarque : pour toute unité différente de SEC seule la partie entière de <r> est utilisée. Il est donc inutile de préciser une partie décimale.
Une représentation de graduations calendaires permet
le nombre de niveaux de graduations
pour chaque niveau
le pas de graduations (nombre de secondes, de minutes, d'heures, de jours, de mois ou d'années)
une éventuelle chaine de caractères précédant le premier indicateur
une suite d'indicateurs de présentation d'une des composantes de date, suivi d'une éventuelle chaine de caractères
Les différents niveaux de graduations sont présentés les uns en dessous des autres si l'axe est horizontal et les uns à gauche des autres si l'axe est vertical. Le premier niveau est le plus prés du trait principal de l'axe, le dernier niveau étant le plus éloigné. Les composantes d'une date sont les secondes, les minutes, les heures, les jours, les mois et les années.
Syntaxe de la chaine cal_grad_rep[i] définissant la i-ième représentation de date. C'est un langage rationnel défini par :
cal_grad_rep[i] = R(/R)*
où </> représente le caractère saut de ligne courant (cf tset_new_line_ctrl) (il précède la description d'un niveau supplémentaire)
où <R> est la représentation des dates d'un niveau. C'est aussi un langage rationnel définit par
R = [[r]U] ['string'] ([n]C['string'])*
où [[r]U] (optionnel) représente le pas entre 2 graduations calendaires consécutives du niveau
où ['string'] (optionnel) est une chaine de caractères quelconques entre quote
où [n]C spécifie la façon d'afficher une des composantes calendaires de la date
[n]C = <s> pour afficher le nombre de secondes (0 à 59.999...)
= <m> pour afficher le nombre de minutes (0 à 59)
= <H> pour afficher le nombre d'heures (0 à 23)
= <D> pour afficher le numéro du jour dans le mois (1 à 31)
= <nD> pour afficher les n premières lettres du jour de la semaine
= <M> pour afficher le numéro du mois (1 à 12)
= <nM> pour afficher les n premières lettres du mois de l'année
= <Y> ou <2Y>pour afficher les 2 derniers chiffres de l'année
= <4Y>pour afficher tous les chiffres de l'année
les lettres du jour dans le mois ou du mois de l'année sont affichées dans la langue couramment définie par le dernier appel à la fonction tset_language
n est un entier positif
Attention : Pour insérer le caractère quote <'> dans la chaine ['string'], il doit être doublé. Par conséquent si la chaine ne doit contenir que ce caractère <'> on doit écrire ''''. Pour insérer le caractère <"> dans la chaine string il faut le précéder d'un <\>
Exemples 1:
cal_grad_rep[i] = "20 SEC 'à'm''''s'sec' / 1MIN D 3M Y' ' H'h' m'''' "
définit 2 niveaux de graduations :
à11'50sec à12'10sec à12'30sec à12'50sec à13'10sec à13'30sec
3MAR94 18h12' 3MAR94 18h13'
Exemples 2:
cal_grad_rep[i] = "5 MIN H'h'm'''' / DAY D'-'3M / YEA 4Y"
définit 3 niveaux de graduations :
On obtient comme présentation des graduations par exemple :
11h15' 11h20' 11h25' 11h30' 11h35' 11h40'
3-MAR
1995
Remarque 1:
Avec un pas en minute, chaque graduation est affichée à 0 seconde
Avec un pas en heure, chaque graduation est affichée à 0 minute, 0 seconde
Avec un pas en jour, chaque graduation est affichée à 0 heure, 0 minute, 0 seconde
Avec un pas en mois, chaque graduation est affichée au 1er du mois à 0 heure, 0 minute, 0 seconde
Avec un pas en année, chaque graduation est affichée au 1er janvier à 0 heure, 0 minute, 0 seconde
Lorsque pour un niveau toutes les graduations sont au dela des dates extrèmes de l'axe, alors une graduation est affichée au milieu de l'axe. L'exemple précédant le montre avec la graduation au niveau 2 <3-MARS> et la graduation au niveau 3 <1995>
Remarque 2:
Si num_grad_rep est nul, ou si le pointeur cal_grad_rep est nul, PHIGURE représente les graduations calendaires avec un nombre de niveaux et un pas le plus adequate possible. Le choix du nombre de niveaux et du pas est effectué uniquement en fonction de la durée [delta] entre les 2 dates extrèmes de l'axe. Le paramètre times_period est complétement ignoré.
Remarque 3:
Lorsque la représentation choisie ne précise pas la nature du pas au premier niveau (c'est à dire si le champ [[r]U] n'est pas spécifié), alors PHIGURE calcule ce pas en fonction de la durée [delta] entre les 2 dates extrèmes de l'axe. De plus une composante calendaire (type [n]C) est automatiquement choisie par PHIGURE et les composantes précisées dans la représentation, d'unité inférieure à celle choisie sont ignorées. Par exemple si la représentation choisie est " 3D'-'D':'H'h'm''''s / 3M 4Y", et si PHIGURE effectue le choix d'un pas horaire, les composantes minutes et secondes du 1er niveau ne seront pas affichées, c'est à dire que seules les composantes "3D'-'D':'H'h'" seront utilisées.
Si la représentation choisie précise l'unité du pas mais pas le nombre d'unité, (seul [r] n'est pas donné), PHIGURE calcule aussi ce nombre d'unités en fonction de [delta], mais toutes les composantes calendaires de la représentation sont utilisées.
Remarque 4:
Lorsque la représentation choisie ne précise pas la nature du pas aux niveaux 2, 3, ... (c'est à dire si le champ [[r]U] n'est pas spécifié), alors PHIGURE choisit l'unité du pas en fonction de l'unité du pas précédent. Si au niveau 1 le pas est en minutes alors au niveau 2 le pas est choisi en heures, etc. Le choix des composantes calendaires étant effectué conformément à la remarque 3 :
Par exemple si la représentation choisie est "5MIN 3D'-'D':'H'h'm'''' / m'min'H'h '3D'-'D", alors PHIGURE choisit un pas en heure au 2ième niveau et seule les composantes "'H'h '3D'-'D" sont utilisées pour ce niveau.
Remarque 5:
Donner plusieurs représentations des graduations associées à une liste de durées sert à construire correctement un axe calendaire dont les dates extrèmes varient au cours de l'exécution du programme. Dans le cas contraire (les dates extrèmes sont constantes), il suffit de définir une seule représentation de graduation sans préciser de liste de durées. On pourra par exemple programmer :
static char *grad_rep[] = {"5MIN H'h'm'''' / DAY D'-'3M 4Y" };
tset_axis_date_rep (strid, 1, grad_rep, 0);
pour un axe ayant un intervalle de date inférieur à une heure.