1 /*----------------------------------------------------------------------*/
2 /* asg.c --- Glue code between xcircuit and SPAR */
3 /*----------------------------------------------------------------------*/
8 #include "externs.h" /* Local ASG definitions */
10 extern void spar_destructor();
11 extern void spar_constructor();
13 /*--------------------------------------------------------------------- */
15 int xc_print_sym(XCWindowData
*areastruct
, char *sym
, char*name
,
16 int x
, int y
, int x_dis
, int y_dis
, int rot
)
18 asg_make_instance(areastruct
, sym
, x
, y
, x_dis
, y_dis
);
19 asg_make_label(areastruct
, NORMAL
, x
, y
, name
);
25 /*----------------------------------------------------------------------*/
26 /* This function is used to draw an ASG module as an xcircuit object */
28 /*----------------------------------------------------------------------*/
30 int asg_make_instance(XCWindowData
*clientData
, char *keyword
, int x
,
31 int y
, int x_size
, int y_size
)
34 objinstptr pinst
, *newinst
;
37 // Set Position for newly created object
38 newpos
.x
= (short)(x
* 15.0);
39 newpos
.y
= (short)(y
* 15.0);
41 // Create Space for Object Instances...
42 NEW_OBJINST(newinst
, clientData
->topinstance
->thisobject
);
44 // Find Object instance in the library...
45 pobj
= NameToObject(keyword
, &pinst
, FALSE
);
47 // If object specified by keyword, it must exist in a loaded library.
48 // (need to develop this code)
51 /* sprintf(_STR, "Cannot Find %s in any existing library.", keyword); */
56 // Copy values from the library instance into the new instance
57 instcopy(*newinst
, pinst
);
58 (*newinst
)->scale
= 1.0;
60 // Rotated objects should be using the rotated instances.
61 // Instances at rotation = 0 in the asg_spice.lps library should
62 // match the orientations of devices in the original SPAR
63 // definitions, or vice versa.
65 if (!strcmp(keyword
, "arrow")) (*newinst
)->rotation
+= 90;
66 else if (!strcmp(keyword
, "RESTR")) (*newinst
)->rotation
+= 270;
67 else if (!strcmp(keyword
, "INDR")) (*newinst
)->rotation
+= 270;
68 else if (!strcmp(keyword
, "CAPC")) (*newinst
)->rotation
+= 270;
69 else if (!strcmp(keyword
, "IAMP")) (*newinst
)->rotation
+= 270;
71 // Eventually all drawing parameters need to be overridden.
72 // Assign just position for now
74 (*newinst
)->position
= newpos
;
78 /*----------------------------------------------------------------------*/
79 /* This function draws the path connecting the object on the screen */
80 /*----------------------------------------------------------------------*/
82 void asg_make_polygon(XCWindowData
*clientData
, int npoints
, int x
[], int y
[])
87 NEW_POLY(newpoly
, clientData
->topinstance
->thisobject
);
88 polydefaults(*newpoly
, npoints
, 0, 0);
89 (*newpoly
)->style
= UNCLOSED
;
90 for (j
= 0; j
< npoints
; j
++) {
91 (*newpoly
)->points
[j
].x
= x
[j
];
92 (*newpoly
)->points
[j
].y
= y
[j
];
94 /* singlebbox((genericptr *)newpoly); */
95 incr_changes(clientData
->topinstance
->thisobject
);
98 /*----------------------------------------------------------------------*/
99 /* This function helps print the label of the object on the screen */
100 /*----------------------------------------------------------------------*/
102 void asg_make_label(XCWindowData
*clientData
, u_char dopin
, int x
, int y
, char *data
)
107 NEW_LABEL(newlab
, clientData
->topinstance
->thisobject
);
108 labeldefaults(*newlab
, dopin
, x
- 20, y
- 30);
110 // (*newlab)->justify = PINVISIBLE;
111 strptr
= makesegment(&((*newlab
)->string
), NULL
);
112 strptr
->type
= TEXT_STRING
;
113 strptr
->data
.string
= data
;
114 singlebbox((genericptr
*)newlab
);
115 incr_changes(clientData
->topinstance
->thisobject
);
118 /*----------------------------------------------------------------------*/
119 /* Free memory for SPAR structures */
120 /*----------------------------------------------------------------------*/
122 void spar_destructor()
128 /*----------------------------------------------------------------------*/
129 /* Generate SPAR structures */
130 /*----------------------------------------------------------------------*/
132 void spar_constructor()
136 newnode("_DUMMY_SIGNAL_");