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

extern FILE * ffp;
extern int ovreq, ovreq2, ovsub, ovsub2;
extern char Argbuf[128];

/*
* This function performs the details of file
* writing. Sadly, it looks inside a LINE; Most of the grief is error
* checking of some sort.
* fopen() is in overlay 33! Too big!
*/
ovmain()
{
       register WINDOW * wp;
       register int    s;
       register LINE   *lp;
       register int    nline;
       char backname[NFILEN];

       s = TRUE;
       if ( ffp == NULL) return (ctrlg());

       lp = lforw(curbp->b_linep);             /* First line.          */
       nline = 0;                              /* Number of lines.     */
       while (lp != curbp->b_linep)
       {       if ( fwrite( &lp->l_text[0], 1,
                       llength(lp), ffp) != llength(lp)
               || putc( '\r', ffp ) == EOF
               || putc( '\n', ffp ) == EOF )
               {       s = FALSE;
                       mlwrite("Write I/O error");
                       break;
               }
               ++nline;
               lp = lforw(lp);
       }
       putc( ('z'&0x1f), ffp );
       fclose( ffp );
       if (s == TRUE)
       {       /* No write error. */
               mlwrite("[Wrote %d lines]", nline);
               curbp->b_flag &= ~BFCHG;
               wp = wheadp;                    /* Update mode lines.   */
               while (wp != NULL)
               {       if (wp->w_bufp == curbp)
                               wp->w_flag |= WFMODE;
                       wp = wp->w_wndp;
               }
       }
       return ( s );
}