addrdsrecwindow

ADDRDSRECWINDOW(3)          RDS PHYSICAL FUNCTIONS          ADDRDSRECWINDOW(3)



NAME
       addrdsrecwindow - adds a rectangle in the windowing of rds structure.


ORIGIN
       This software belongs to the  ALLIANCE CAD SYSTEM developed by the ASIM
       team at LIP6 laboratory of Université Pierre et Marie CURIE, in Paris,
       France.

       Web : http://asim.lip6.fr/recherche/alliance/
       E-mail : alliance-users@asim.lip6.fr


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




BUG REPORT
       This tool is under development at the ASIM department of the LIP6
       laboratory.
       We need your feedback to improve documentation and tools.






ASIM/LIP6                       October 1, 1997             ADDRDSRECWINDOW(3)