function ligbit(lfmt,ibs)
integer lfmt(9),ibs
#include <inrimage/image.h>
Fort_int ligbit_(lfmt,ibs)
Fort_int lfmt[9],*ibs;
int buffer_size(lfmt,nlig)
Fort_int *lfmt;int nlig;
int buffer_pgsize(lfmt,nlig)
Fort_int *lfmt;int nlig;
int buffer_align(buf)
char *buf;
int buffer_split(size,nb)
int size, nb;
int buffer_pgsplit(size,nb)
int size, nb;
buffer_size, buffer_pgsize
renvoient la taille en octets du buffer contenant nlig lignes d'une
image de format donné par lfmt.
Cette taille, arrondie par excès, est multiple d'une quantité qui est
sizeof(t_aligned) pour buffer_size et la constante
SUBPG_SIZE pour buffer_pgsize
(SUBPG_SIZE vaut 128 sur KSR).
La valeur de sizeof(t_aligned) est 4 sur les machines 32 bits, et
8 sur les machines 64 bits (ALPHA, KSR1).
La valeur de SUBPG_SIZE est égale à sizeof(t_aligned),
sauf sur KSR1 où elle est égale à la taille de la sous-page (128).
buffer_align donne le nombre d'octets à rajouter au pointeur char * buf pour obtenir une adresse alignée sur une frontière d'objet de type t_aligned (de taille 4 ou 8 octets selons les systèmes).
buffer_split, buffer_pgsplit renvoient la taille en octets des buffers obtenus en partageant un tableau de size octets en nb parties égales. La taille calculée (avec arrondi par défaut) est multiple d'une quantité qui est sizeof(t_aligned) pour buffer_split et la constante SUBPG_SIZE pour buffer_pgsplit.
buffer_split, buffer_size peuvent être utilisés
pour calculer les adresses de début des blocs de lignes
lors de l'utilisation de lectpl, ecrpl. Par exemple :
Si on suppose que nbytes est la taille totale en octets
de buf, on pourra ecrire :
char *buf; n = buffer_split(nbytes,nplan); /* on suppose lfmt[I_BSIZE] > 0 */ nligne = n / (lfmt[I_DIMX] * lfmt[I_BSIZE]); c_lectpl(nf,iy,iz,nplan,nligne,buf); /* diviser incr par sizeof(...) selon le type de buf */ incr = n; for(i=0;i<nplan;i++) calcul(buf,...); buf += incr; }