addrdsrecwindow - adds a rectangle in the windowing of rds
structure.
See the file man1/alc_origin.1.
#include "rwinnn.h"
void addrdsrecwindow( Rectangle, RdsWindow )
rdsrec_list ∗Rectangle;
rdswindow ∗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 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 some 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
#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;
}
}
. . .
}
librwi, delrdsrecwindow
See the file man1/alc_bug_report.1.