#include        "stdio.h"
#include        "ed.h"

/*
* Delete line "lp". Fix all of the
* links that might point at it (they are
* moved to offset 0 of the next line.
* Unlink the line from whatever buffer it
* might be in. Release the memory. The
* buffers are updated too; the magic conditions
* described in the above comments don't hold
* here.
*/
lfree(lp)
LINE    *lp;
{
       register BUFFER *bp;
       register WINDOW *wp;
#define wp ((WINDOW *)bp)
#define llfp (*(LINE **)0xac)
       register LINE * lp1;

       bp = wheadp;
       llfp = ( lp1 = lp )->l_fp;
       while (wp != NULL)
       {       if ( wp->w_linep == lp1 )
                       wp->w_linep = llfp;
               if ( wp->w_dotp  == lp1 )
               {       wp->w_dotp  = llfp;
                       wp->w_doto  = 0;
               }
               if ( wp->w_markp == lp1 )
               {       wp->w_markp = llfp;
                       wp->w_marko = 0;
               }
               wp = wp->w_wndp;
       }
       bp = bheadp;
       while (bp != NULL)
       {       /* if ( bp->b_nwnd == 0 ) */
               /* { */ if ( bp->b_dotp  == lp1 )
                       {       bp->b_dotp = llfp;
                               bp->b_doto = 0;
                       }
                       if ( bp->b_markp == lp1 )
                       {       bp->b_markp = llfp;
                               bp->b_marko = 0;
                       }
               /* } */
               bp = bp->b_bufp;
       }
       lp1->l_bp->l_fp = llfp;
       llfp->l_bp = lp->l_bp;
       free((char *) lp1);
}