DCAL Tools -- Selection Sets Fixes
MODULE bss;
{substitute selection set routines}
PROCEDURE bssadd(ssnum: integer; ent: IN OUT entity); PUBLIC;
VAR
atr             : attrib;
atval           : integer;
BEGIN
        IF NOT atr_entfind (ent, 'xxx', atr) THEN
                atval := atr_int;
                atr_init (atr,atval);
                strassign (atr.name,'xxx');
                atr_setint (atr, 0);
                atr_add2ent (ent, atr);
        END;
END bssadd;
PROCEDURE bssclear(ssnum: integer); PUBLIC;
VAR
mode            : mode_type;
addr            : entaddr;
ent             : entity;
aname   : str8; 
atr             : attrib;
BEGIN
        aname := 'xxx';
        mode_init (mode);
        mode_lyr(mode, lyr_all);
        addr:=ent_first(mode);
        WHILE ent_get(ent, addr) DO
                addr:=ent_next(ent, mode);
                IF atr_entfind (ent, aname, atr) THEN
                        atr_delent (ent, atr);
                END;
        END;
END bssclear;
FUNCTION bssdel(ssnum: integer; ent: IN OUT entity): boolean;
PUBLIC;
VAR
atr_deleted     : boolean;
atr             : attrib;
aname   : str8; 
BEGIN
        aname := 'xxx';
        atr_deleted := false;
        IF atr_entfind (ent, aname, atr) THEN
                atr_delent (ent, atr);
                atr_deleted := true;
        END;
        RETURN atr_deleted;
END bssdel;
FUNCTION bsslength(ssnum: integer): integer; PUBLIC;
VAR
mode            : mode_type;
addr            : entaddr;
ent             : entity;
aname   : str8; 
n_of_atr        : integer;
atr             : attrib;
BEGIN
        n_of_atr := 0;
        aname := 'xxx';
        mode_init (mode);
        mode_lyr(mode, lyr_all);
        addr:=ent_first(mode);
        WHILE ent_get(ent, addr)DO
                addr:=ent_next(ent, mode);
                IF atr_entfind (ent, aname, atr) THEN
                        n_of_atr := n_of_atr + 1;
                END;
        END;
        RETURN n_of_atr;
END bsslength;
FUNCTION bssmember(ssnum: integer; ent: IN OUT entity ): boolean;
PUBLIC;
VAR
is_member       : boolean;
atr             : attrib;
aname   : str8; 
BEGIN
        is_member := false;
        Strassign (aname, 'xxx');
        IF atr_entfind (ent, aname, atr) THEN
                is_member := true;
        END;
        RETURN is_member;
END bssmember;
END bss.
Declaration snippet:
PROCEDURE bssadd(ssnum: integer; ent: IN OUT entity); EXTERNAL;
PROCEDURE bssclear(ssnum: integer); EXTERNAL;
FUNCTION bssdel(ssnum: integer; ent: IN OUT entity): boolean;
EXTERNAL;
FUNCTION bsslength(ssnum: integer): integer; EXTERNAL;
FUNCTION bssmember(ssnum: integer; ent: IN OUT entity ): boolean;
EXTERNAL;

DDN Home

Revised: Monday, 18 January 2010
©2010 by DATACAD LLC. All rights reserved.
Please send all questions and comments
regarding this site to webmaster@datacad.com.
General Disclaimer