ADDRDSRECWINDOW(3) RDS PHYSICAL FUNCTIONS ADDRDSRECWINDOW(3)
addrdsrecwindow - adds a rectangle in the windowing of rds structure.
void addrdsrecwindow( Rectangle, RdsWindow )
Rectangle The rectangle to add to the windowing.
RdsWindow The head of the windowing which has to contain the rectangle.
The addrdsrecwindow function inserts a rdsrec_list rectangle structure in the windowing of
the rds structure. The rectangle is added in one or many windows of the table (it depends
on his dimensions). The field ´USER´ of the rectangle is used to point to the list of win‐
dows which contains the rectangle. So, the field ´USER´ has to be saved in an added struc‐
ture to the rdsrec_list structure if librfm functions are used because somes use the field
´USER´ to link rectangles (see librds about field ´USER´).
Note If the rectangle is contained in only one window, then the field ´USER´ points to a
"rdswin_list" window structure.
If the rectangle is contained in many windows, the field ´USER´ points to a
"rdsrecwin_list" structure which is a list which contains windows.
To know if a rectangle belongs to one or many windows, use the macro IsRdsOneWindow
defined in librwi.
"Rds202: rdsalloc error, can't continue !"
it's impossible to allocate the memory size desired
# define POINTER_LINKREC(R) \
(((UserStruct ∗)((char ∗)(R)+sizeof(rdsrec_list)))->LINKREC )
typedef struct UserStruct
Figure = addrdsfig( "core",sizeof ( UserStruct ) );
/∗ Using the field ´USER´ ∗/
Rectangle->USER = Rectangle;
. . . .
RdsWindow = allocrdswindow();
RdsWindow->XMIN = -200;
RdsWindow->YMIN = -200;
RdsWindow->XMAX = 200;
RdsWindow->YMAX = 200;
RdsWindow->DX = 4;
RdsWindow->DY = 4;
RdsWindow->SIDE = 100;
RdsWindow->SIZE = RdsWindow->DX ∗ RdsWindow->DY ;
RdsWindow->WINTAB = allocrdswin( RdsWindow->SIZE );
/∗ Save the field ´USER´ of the rectangle ∗/
POINTER_LINKREC(Rectangle) = Rectangle->USER;
/∗ ∗/ addrdsrecwindow( Rectangle, RdsWindow );
/∗ windows associated to a rectangle are pointed by the
field ´USER´ of the rectangle ∗/
/∗ getting windows (pointer ∗ScanWin) of a rectangle ∗/
if ( IsRdsOneWindow(Rectangle) )
ScanWin = (rdswin_list ∗) Rectangle->USER;
ScanRecWin = Rectangle->USER;
while ( ScanRecWin != NULL )
ScanWin = (rdswin_list ∗) (ScanRecWin)->WINDOW;
ScanRecWin = ScanRecWin->NEXT;
. . .
ASIM/LIP6 October 1, 1997 ADDRDSRECWINDOW(3)