SCR/AL1 - TOME III. Les librairies utilitaires
La structure SCROLL est définie ci-dessous et comporte 3 types d'éléments:
Structure SCROLL
typedef struct _scroll {
/* Eléments modifiables par l'utilisateur */
char *sc_pcl; /* Data permettant d'identifier la structure */
UCHAR *sc_cmt; /* Comment */
YYKEYS *sc_scmts; /* Commentaires structurés (null term. list)*/
UCHAR *sc_help; /* Topic du help */
int sc_ipl, /* Ligne supérieure de la fenêtre dans l'écran*/
sc_ipc; /* Colonne gauche de la fenêtre dans l'écran */
int sc_inlc, /* Nombre de lignes total de la fenêtre */
sc_incc; /* Nombre de colonnes total de la fenêtre */
int sc_iattr, /* Attribut d'affichage */
sc_irattr, /* Attribut inversé (cellule courante) */
sc_ilc0, /* Longueur de la colonne de titres */
sc_irlen; /* Longueur des colonnes en rotate */
int sc_norot; /* Rotate possible ? !!! 0 = oui, 1 = non ! */
int sc_nohsb; /* Horiz. scroll bar ? !!! 0 = oui, 1 = non ! */
int sc_ir; /* Indicateur de rotation de la fenêtre */
int sc_noltit; /* Pas de titre de lignes */
int sc_noctit; /* Pas de titre de colonnes (2 lignes gagnées)*/
/* Eléments modifiés par le programme */
IMAGE *sc_im; /* Image de l'écran */
int sc_icl, /* ligne courante dans l'écran */
sc_icc; /* colonne courante dans l'écran */
int sc_icl0, /* ligne de la première cellule dans l'écran */
sc_icc0; /* colonne de la première cellule dans l'écran*/
int sc_inl, /* nbre de lignes visibles */
sc_inc; /* nbre de colonnes visibles */
int sc_iml, /* ligne maximum */
sc_imc; /* colonne maximum */
int sc_ins; /* nombre de lignes sélectionnée */
int *sc_ias; /* tableau des lignes sélectionnées */
S_BAR sc_vbar; /* Scrollbar horizontal */
S_BAR sc_hbar; /* Scrollbar vertical */
int sc_max; /* Scroll Maximized ? */
int sc_ocl, /* Précédente line courante (old current line)*/
sc_occ, /* Précédente col courante (old current col )*/
sc_onl, /* Précédent nb lines (old nl) */
sc_onc; /* Précédent nb cols (old nc) */
/* Fonctions à définir par l'utilisateur */
char *(*sc_ftitle)(), /* Fn retournant le titre général */
*(*sc_fctitle)(), /* Fn retournant le titre d'un colonne*/
*(*sc_fltitle)(), /* Fn retournant le titre d'une ligne */
*(*sc_ftext)(); /* Fn retournant le texte d'une cell */
int (*sc_fnl)(), /* Fn retournant le nombre de lignes */
(*sc_fnc)(), /* Fn retournant le nombre de colonnes*/
(*sc_flen)(); /* Fn retournant la largeur d'une col */
int (*sc_fedit)(), /* Fn d'édition d'une cellule */
(*sc_fdel)(), /* Fn de destruction d'une cellule */
(*sc_fins)(); /* Fn de création d'une cellule */
int (*sc_ffn)(), /* Fn exécutée pour une touche fn */
(*sc_fbeg)(), /* Fn de début d'édition */
(*sc_fend)(), /* Fn de fin d'édition */
(*sc_fattr)(), /* Attribut (SCR_BLUE, ..) cellule */
(*sc_flattr)(), /* Attribut (SCR_BLUE, ..) tit ligne */
(*sc_fcattr)(), /* Attribut (SCR_BLUE, ..) tit col */
(*sc_fdisp)(); /* Fn avant display cellule */
char reserved[16]; /* reservé */
} SCROLL;
Variables de la structure à assigner ou à consulter
YYKEYS OSCRL_TABSCMTS[] = {
"Help", SCR_F1,
"Test table", SCR_F7,
"Graphic", SCR_F8,
"Modify", SCR_ENTER,
"Delete", SCR_DELETE,
"New", SCR_INSERT,
" ", 0,
"Maximize", SCR_C_X,
"Move", SCR_C_O,
"Resize", SCR_C_Z,
" ", 0,
"Quit", SCR_ESCAPE,
0, 0
};
Pointeurs vers fonctions
Toutes les fonctions utilisées par SCRL_edit() sont définies ci-dessous. Le pointeur vers la structure SCROLL est passé comme premier argument de toutes les fonctions poiur permettre aux fonctions de déterminer quel tableau est en cours d'édition (il suffit pour cela d'assigner à l'initialisation de la structure l'élément data de la structure SCROLL).
Titre général
Retourne le titre général de la fenêtre, affiché sur la ligne supérieure.
Syntax
char *sc_ftitle(SCROLL *scrl)
Exemple
char *SW_title(scrl)
SCROLL *scrl;
{
return("Tables de multiplication");
}
Titre des lignes et des colonnes
Retourne le titre de la ligne (colonne) i, affiché dans la première colonne (ligne) de la fenêtre.
Syntax
char *sc_fltitle(SCROLL *scrl, int line)
char *sc_fctitle(SCROLL *scrl, int col)
Exemple
char *SW_ltitle(scrl, i)
SCROLL *scrl;
int i;
{
static char buf[20];
sprintf(buf, "%-6d", i + 1);
return(buf);
}
Texte des cellules
Retourne le texte de la cellule (i, j). Si ce texte est trop long pour être affiché dans l'écran, seuls les premiers caractères sont conservés et le signe > est placé en dernière position, indiquant qu'une partie du texte n'apparaît pas.
Syntax
char *sc_ftext(SCROLL *scrl, int line, int col)
Exemple
char *SW_text(scrl, i, j)
SCROLL *scrl;
int i, j;
{
static char buf[20];
sprintf(buf, "%6d", (i + 1) * (j + 1));
return(buf);
}
Nombre total de lignes et de colonnes du tableau
Retourne le nombre de lignes (colonnes) total du tableau.
Syntax
int sc_fnl(SCROLL *scrl)
int sc_fnc(SCROLL *scrl)
Exemple
int SW_nl(scrl)
SCROLL *scrl;
{
return(((DATA *)(scrl->sc_pcl))->nb_lines);
}
Largeur d'une colonne
Retourne le nombre de caractères d'une colonne.
Syntax
int sc_flen(SCROLL *scrl, int col)
Exemple
int SW_len(scrl, col)
SCROLL *scrl;
int col;
{
return(6);
}
Fonction d'édition d'une cellule
Edite la cellule (i, j). Cette fonction est appelée lorsque la touche ENTER est utilisée sur la cellule (i, j). Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.
Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.
Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.
Syntax
int sc_fedit(SCROLL *scrl, int line, int col)
Exemple
SW_edit(scrl, i, j)
SCROLL *scrl;
int i, j;
{
SCR_set_double(p_edit_val, table[i][j]);
PG_edit_window(p_edit);
if(SCR_LKEY == SCR_ESCAPE) return(-1);
table[i][j] = SCR_get_double(p_edit_val);
return(-1);
}
Fonction de destruction de ligne
Détruit la cellule (i, j). Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.
Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.
Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.
Cette fonction est appelée lorsque la touche DEL est pressée.
Syntax
int sc_fdel(SCROLL *scrl, int line, int col)
Exemple
SW_del(scrl, i, j)
SCROLL *scrl;
int i, j;
{
DeleteLine(scrl->sc_pcl, i);
return(-1);
}
Fonction de création de ligne
Crée une nouvelle cellule après la cellule (i, j). Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.
Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.
Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.
Cette fonction est appelée lorsque la touche INS est pressée.
Syntax
int sc_fins(SCROLL *scrl, int line, int col)
Exemple
SW_ins(scrl, i, j)
SCROLL *scrl;
int i, j;
{
CreateLine(scrl->sc_pcl, i);
return(-1);
}
Utilisation des touches fonctions
Exécute une action utilisateur sur base d'une touche fonction. Le contrôle est passé au programme qui peut effectuer n'importe quelle opération, y compris sur le tableau et ses dimensions. En sortie de cette fonction, toute la fenêtre de scroll est redessinée.
Cette fonction retourne la nouvelle ligne courante. Si cette valeur est -1, la ligne courante reste inchagée.
Si la fonction n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.
Cette fonction est appelée lorsqu'une touche fonction est pressée.
Syntax
int sc_ffn(SCROLL *scrl, int key, int line, int col)
Exemple
SW_ffn(scrl, key, i, j)
SCROLL *scrl;
int key, i, j;
{
switch(key) {
case A_F1 : PG_edit_window(p_parms); break;
case A_F2 : PrintLine(scrl->sc_pcl, i); break;
default : SCR_beep(); break;
}
return(-1);
}
Fonctions de début et de fin
Ces fonctions s'exécutent avant le début de l'édition et après l'édition respectivement.
La fonction de fin (sc_fend) doit retourner une valeur > 0 pour que l'édition se termine. Sinon l'édition continue.
Si une de ces fonctions n'est pas définie, il faut mettre un pointeur null dans la structure SCROLL.
Syntax
int sc_fbeg(SCROLL *scrl)
int sc_fend(SCROLL *scrl)
Fonctions de définition de couleurs
Ces fonctions permettent de changer la couleur des cellules affichées. Trois fonctions sont prévues: titre de ligne, de colonne et cellule.
Syntax
int sc_fattr(SCROLL *scrl, int i, int j) : cellule i, j
int sc_flattr(SCROLL *scrl, int i) : titre ligne i
int sc_fcattr(SCROLL *scrl, int j) : titre colonne j
Fonction à exécuter avant affichage
Cette fonctions s'exécute avant l'affichage d'une cellule.
Syntax
int sc_fdisp(SCROLL *scrl, int i, int j)
Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be