home *** CD-ROM | disk | FTP | other *** search
- #include "stdio.h"
- #include "ed.h"
-
- /* readin.c, continued in another overlay. */
-
- extern FILE * ffp;
- extern char Argbuf[128];
-
- ovmain( flag )
- {
- register LINE *lp1;
- register LINE *lp2;
- register int i;
- register WINDOW *wp;
- register int s;
- register int nbytes;
- register int nline = 0;
- char line[NLINE+1];
-
- #ifdef NEVER
- if (flag < 0) { flag += 2; goto out; }
- #else
- if ( ffp == NULL )
- { mlwrite( "[New file]" );
- goto out;
- }
- mlwrite("[Reading]");
- #endif
- if ( ! flag )
- { if ( curwp->w_doto )
- { lnewline();
- curwp->w_doto = 0;
- }
- curwp->w_dotp = curwp->w_dotp->l_bp;
- curbp->b_flag |= BFCHG;
- }
- while ( fgets( line, NLINE, ffp) != NULL )
- { nbytes = strlen(line);
- if ( line[ --nbytes ] != '\n' )
- { mlwrite( "Long Line" );
- nbytes++;
- }
-
- if ((lp1=xlalloc(nbytes)) == NULL)
- { goto closer;
- }
- lp2 = (flag) ? lback(curbp->b_linep) :
- curwp->w_dotp;
- (lp1->l_fp = lp2->l_fp)->l_bp = lp1;
- curwp->w_dotp = (lp1->l_bp = lp2)->l_fp = lp1;
-
- blockmv( &lp1->l_text[0], &line[0], nbytes );
-
- ++nline;
- }
- mlwrite("[Read %d lines]", nline);
- if ( ! flag ) curwp->w_dotp = curwp->w_dotp->l_fp;
- closer:
- fclose(ffp); /* Ignore errors. */
- out:
- for (wp=wheadp; wp!=NULL; wp=wp->w_wndp)
- { if (wp->w_bufp == curbp)
- { wp->w_linep = lforw(curbp->b_linep);
- wp->w_dotp = ( flag )
- ? lforw(curbp->b_linep)
- : curwp->w_dotp;
- wp->w_doto =
- wp->w_markp =
- wp->w_marko = 0;
- wp->w_flag |= WFMODE|WFHARD;
- }
- }
- return (TRUE);
- }
-
- /*
- * This routine allocates a block
- * of memory large enough to hold a LINE
- * containing "used" characters. The block is
- * always rounded up a bit. Return a pointer
- * to the new block, or NULL if there isn't
- * any memory left. Print a message in the
- * message line if no space.
- */
- LINE *
- xlalloc(size)
- int size;
- {
- register LINE *lp;
-
- if ((lp = (LINE *) malloc(( sizeof(LINE)-1 ) +size)) == NULL)
- { mlwrite("No memory");
- return (NULL);
- }
- lp->l_size = lp->l_used = size;
- return (lp);
- }