Provided by: alliance_5.0-20120515-6_amd64
NAME
addrdsrecwindow - adds a rectangle in the windowing of rds structure.
SYNOPSYS
#include "rwinnn.h" void addrdsrecwindow( Rectangle, RdsWindow ) rdsrec_list ∗Rectangle; rdswindow ∗RdsWindow;
PARAMETER
Rectangle The rectangle to add to the windowing. RdsWindow The head of the windowing which has to contain the rectangle.
DESCRIPTION
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 windows which contains the rectangle. So, the field ´USER´ has to be saved in an added structure 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.
RETURN VALUE
none
ERRORS
"Rds202: rdsalloc error, can't continue !" it's impossible to allocate the memory size desired
EXAMPLE
#include "mutnnn.h" #include "rdsnnn.h" #include "rwinnn.h" #include "rtlnnn.h" # define POINTER_LINKREC(R) \ \ (((UserStruct ∗)((char ∗)(R)+sizeof(rdsrec_list)))->LINKREC ) typedef struct UserStruct { void ∗LINKREC; } UserStruct; main() { rdsfig_list ∗Figure; rdsrec_list ∗Rectangle; rdswindow ∗RdsWindow; rdswin_list ∗ScanWin; rdsrecwin_list ∗ScanRecWin; mbkenv(); rdsenv(); loadrdsparam(); Figure = addrdsfig( "core",sizeof ( UserStruct ) ); Rectangle = addrdsfigrec(Figure,"Alu1",RDS_ALU1,2,4,5,1); /∗ 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; } else { ScanRecWin = Rectangle->USER; while ( ScanRecWin != NULL ) { ScanWin = (rdswin_list ∗) (ScanRecWin)->WINDOW; ScanRecWin = ScanRecWin->NEXT; } } . . . }
SEE ALSO
librwi, delrdsrecwindow