public void ekle_para_cekme(nod yeni)
        {
            nod aktif = liste.son;

            while (aktif.ileri != liste.bitis)
            {
                aktif = aktif.ileri;
            }
            yeni.ileri  = aktif.ileri;
            aktif.ileri = yeni;
            liste.size++;
            islem_toplam_sure           += yeni.islem_sure;
            yeni.anlik_islem_toplam_sure = islem_toplam_sure;
            yenile();
        }
        public void ekle_havale(nod yeni)
        {
            nod aktif = liste.bas;

            while (aktif.ileri != liste.orta)
            {
                aktif = aktif.ileri;
            }
            aktif.ileri = yeni;
            yeni.ileri  = liste.orta;
            liste.size++;
            islem_toplam_sure           += yeni.islem_sure;
            yeni.anlik_islem_toplam_sure = islem_toplam_sure;
            yenile();
        }
        public void ekle_para_yatirma(nod yeni)
        {
            nod aktif = liste.orta;

            while (aktif.ileri != liste.son)
            {
                aktif = aktif.ileri;
            }
            aktif.ileri = yeni;
            yeni.ileri  = liste.son;
            liste.size++;
            islem_toplam_sure           += yeni.islem_sure;
            yeni.anlik_islem_toplam_sure = islem_toplam_sure;
            yenile();
        }
    int in_elem(nod n)
    {
        int e;

        for (e = 0; e < Ne; e++) /* This must search through all elements ?? */
        {
            if (area(n, node[elem[e].i], node[elem[e].j]) >= 0.0 &&
                area(n, node[elem[e].j], node[elem[e].k]) >= 0.0 &&
                area(n, node[elem[e].k], node[elem[e].i]) >= 0.0)
            {
                break;
            }
        }
        return(e);
    }
    void bowyer(int n, int spac)
    {
        int e, s, swap;  //i,
        nod vor = new nod();

        do
        {
            swap = 0;
            for (s = 0; s < Ns; s++)
            {
                if (side[s].mark == 0)

                /* if( !( (node[side[s].c].inserted>1 && node[side[s].d].bound==OFF && side[s].s<(node[side[s].c].F+node[side[s].d].F) ) ||
                 *        (node[side[s].d].inserted>1 && node[side[s].c].bound==OFF && side[s].s<(node[side[s].c].F+node[side[s].d].F) ) ) ) */
                {
                    if (side[s].a == n)
                    {
                        e = side[s].eb;
                        if (e != OFF)
                        {
                            vor.x = elem[e].xv;
                            vor.y = elem[e].yv;
                            if (dist(vor, node[n]) < elem[e].R)
                            {
                                swap_side(s); swap = 1;
                            }
                        }
                    }

                    else if (side[s].b == n)
                    {
                        e = side[s].ea;
                        if (e != OFF)
                        {
                            vor.x = elem[e].xv;
                            vor.y = elem[e].yv;
                            if (dist(vor, node[n]) < elem[e].R)
                            {
                                swap_side(s); swap = 1;
                            }
                        }
                    }
                }
            }
        }while(swap == 1);
    }
 //public void azalt(int a)
 //{
 //    nod ilk = liste.bas;
 //    while (ilk != liste.bitis) {
 //        ilk.anlik_islem_toplam_sure -= a;
 //        ilk = ilk.ileri;
 //    }
 //    islem_toplam_sure -= a;
 //}
 private void Button4_Click(object sender, EventArgs e)
 {
     if (liste.bas.ileri != liste.orta)
     {
         //nod yenicik = liste.bas;
         //while (yenicik.ileri != liste.bitis) {
         //    if (yenicik == liste.bas)
         //    {
         //        yenicik = yenicik.ileri;
         //    }else{
         //        yenicik.anlik_islem_toplam_sure -= 3;
         //        yenicik = yenicik.ileri;
         //    }
         //}
         ////azalt(3);
         nod aktif = liste.bas;
         aktif.ileri = aktif.ileri.ileri;
     }
     else if (liste.orta.ileri != liste.son)
     {
         //nod yenicik = liste.orta;
         //while (yenicik.ileri != liste.bitis)
         //{
         //    if (yenicik == liste.orta)
         //    {
         //        yenicik = yenicik.ileri;
         //    }
         //    else
         //    {
         //        yenicik.anlik_islem_toplam_sure -= 2;
         //        yenicik = yenicik.ileri;
         //    }
         //}
         ////azalt(2);
         nod aktif = liste.orta;
         aktif.ileri = aktif.ileri.ileri;
     }
     else if (liste.son.ileri != liste.bitis)
     {
         //nod yenicik = liste.son;
         //while (yenicik.ileri != liste.bitis)
         //{
         //    if (yenicik == liste.son)
         //    {
         //        yenicik = yenicik.ileri;
         //    }
         //    else
         //    {
         //        yenicik.anlik_islem_toplam_sure -= 1;
         //        yenicik = yenicik.ileri;
         //    }
         //}
         ////azalt(1);
         nod aktif = liste.son;
         aktif.ileri = aktif.ileri.ileri;
     }
     //nod aktif = liste.bas.ileri;
     //if (aktif != liste.orta || aktif != liste.son) {
     //    aktif.ileri = aktif.ileri.ileri;
     //} else {
     //    if (aktif == liste.orta) {aktif = liste.orta.ileri; }
     //    else if (aktif == liste.son) { aktif = liste.son.ileri; }
     //}
     yenile();
 }
        private void Button3_Click(object sender, EventArgs e)
        {
            nod yeni = new nod(textBox3.Text, 1);

            ekle_para_cekme(yeni);
        }
        private void Button2_Click(object sender, EventArgs e)
        {
            nod yeni = new nod(textBox2.Text, 2);

            ekle_para_yatirma(yeni);
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            nod yeni = new nod(textBox1.Text, 3);

            ekle_havale(yeni);
        }
    int ugly;                       /* mora li biti globalna ??? */

    double area(nod na, nod nb, nod nc)
    {
        return(0.5d * (((nb).x - (na).x) * ((nc).y - (na).y)
                       - ((nb).y - (na).y) * ((nc).x - (na).x)));
    }
    void new_node()

    /*---------------------------------------------------+
    |  This function is very important.                  |
    |  It determines the position of the inserted node.  |
    +---------------------------------------------------*/
    {
        int   s = OFF, e;
        int   n = 0;
        float xM, yM, xCa, yCa, p, px, py, q, qx, qy, rhoM, rho_M, d;

        nod Ca = new nod();

        /*-------------------------------------------------------------------------+
        |  It's obvious that elements which are near the boundary, will come into  |
        |  play first.                                                             |
        |                                                                          |
        |  However, some attention has to be payed for the case when two accepted  |
        |  elements surround the ugly one                                          |
        |                                                                          |
        |  What if new points falls outside the domain                             |
        +-------------------------------------------------------------------------*/
        if (elem[elem[ugly].ei].state == D)
        {
            s = elem[ugly].si; n = elem[ugly].i;
        }
        if (elem[elem[ugly].ej].state == D)
        {
            s = elem[ugly].sj; n = elem[ugly].j;
        }
        if (elem[elem[ugly].ek].state == D)
        {
            s = elem[ugly].sk; n = elem[ugly].k;
        }
        if (side[elem[ugly].si].mark > 0)
        {
            s = elem[ugly].si; n = elem[ugly].i;
        }
        if (side[elem[ugly].sj].mark > 0)
        {
            s = elem[ugly].sj; n = elem[ugly].j;
        }
        if (side[elem[ugly].sk].mark > 0)
        {
            s = elem[ugly].sk; n = elem[ugly].k;
        }
        if (s == OFF)
        {
            return;
        }

        xM = 0.5f * (node[side[s].c].x + node[side[s].d].x);
        yM = 0.5f * (node[side[s].c].y + node[side[s].d].y);

        Ca.x = elem[ugly].xv;
        Ca.y = elem[ugly].yv;

        p = 0.5f * side[s].s; /* not checked */

        qx = Ca.x - xM;
        qy = Ca.y - yM;
        q  = Mathf.Sqrt(qx * qx + qy * qy);

        rhoM = 0.577f * 0.5f * (node[side[s].c].F + node[side[s].d].F);

        rho_M = Mathf.Min(Mathf.Max(rhoM, p), 0.5f * (p * p + q * q) / q);

        if (rho_M < p)
        {
            d = rho_M;
        }
        else
        {
            d = rho_M + Mathf.Sqrt(rho_M * rho_M - p * p);
        }

        /*---------------------------------------------------------------------+
        |  The following line check can the new point fall outside the domain. |
        |  However, I can't remember how it works, but I believe that it is    |
        |  still a weak point of the code, particulary when there are lines    |
        |  inside the domain                                                   |
        +---------------------------------------------------------------------*/

        if (area(node[side[s].c], node[side[s].d], Ca) *
            area(node[side[s].c], node[side[s].d], node[n]) > 0.0f)
        {
            insert_node(xM + d * qx / q, yM + d * qy / q, ON, OFF, 0, 0, 0, OFF);
        }

        /*
         * else
         * {
         * node[n].x = xM - d*qx/q;
         * node[n].y = yM - d*qy/q;
         * node[n].mark=6;
         * for(e=0; e<Ne; e++)
         *   if(elem[e].i==n || elem[e].j==n || elem[e].k==n)
         *     circles(e);
         * }
         */
        return;
    }
 double dist(nod na, nod nb)
 {
     return(Mathf.Sqrt(((nb).x - (na).x) * ((nb).x - (na).x) + ((nb).y - (na).y) * ((nb).y - (na).y)));
 }