+construct(Rect) (Rect self, int x1, int y1, int x2, int y2)
+{
+ self->desc = "rectangle";
+ interface_of(self)->count++;
+ _(reset, self, x1, y1, x2, y2, 0, 0);
+
+ return self;
+}
+
+construct(Circ) (Circ self, int x1, int y1, int r)
+{
+ self->comment = "Circle";
+ interface_of(self)->count++;
+ _(reset, self, x1, y1, r, 0, 0, 0);
+
+ return self;
+}
+
+/* registration of implemented methods to three interfaces of the same type */
+
+Interface triInterface(void)
+{
+ Get_mem(this, Interface);
+
+ this->draw = drawTri;
+ this->move = moveTri;
+ this->desc = descTri;
+ this->rename = NULL;
+ this->reset = setTri;
+ this->area = calcAreaTri;
+ this->count = 0;
+
+ return this;
+}
+
+Interface rectInterface(void)
+{
+ Get_mem(this, Interface);
+
+ this->draw = drawRect;
+ this->move = moveRect;
+ this->desc = descRect;
+ this->rename = nameRect;
+ this->reset = setRect;
+ this->area = calcAreaRect;
+ this->count = 0;
+
+ return this;
+}
+
+Interface circInterface(void)
+{
+ Get_mem(this, Interface);
+
+ this->draw = drawCirc;
+ this->move = moveCirc;
+ this->desc = descCirc;
+ this->rename = NULL;
+ this->reset = setCirc;
+ this->area = calcAreaCirc;
+ this->count = 0;
+
+ return this;
+}
+
+/* usage of objects inside C<<1 program */
+