home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / rainbow / cpm / emacs / emacssrc.lzh / ovread27.c < prev    next >
C/C++ Source or Header  |  1992-03-11  |  2KB  |  98 lines

  1. #include "stdio.h"
  2. #include "ed.h"
  3.  
  4. /* readin.c, continued in another overlay. */
  5.  
  6. extern FILE * ffp;
  7. extern char Argbuf[128];
  8.  
  9. ovmain( flag )
  10. {
  11.     register LINE    *lp1;
  12.     register LINE    *lp2;
  13.     register int    i;
  14.     register WINDOW    *wp;
  15.     register int    s;
  16.     register int    nbytes;
  17.     register int    nline = 0;
  18.     char        line[NLINE+1];
  19.  
  20. #ifdef NEVER
  21.     if (flag < 0) { flag += 2; goto out; }
  22. #else
  23.     if ( ffp == NULL )
  24.     {    mlwrite( "[New file]" );
  25.         goto out;
  26.     }
  27.     mlwrite("[Reading]");
  28. #endif
  29.     if ( ! flag )
  30.     {    if ( curwp->w_doto )
  31.         {    lnewline();
  32.             curwp->w_doto = 0;
  33.         }
  34.         curwp->w_dotp = curwp->w_dotp->l_bp;
  35.         curbp->b_flag |= BFCHG;
  36.     }
  37.     while ( fgets( line, NLINE, ffp) != NULL )
  38.     {    nbytes = strlen(line);
  39.         if ( line[ --nbytes ] != '\n' )
  40.         {    mlwrite( "Long Line" );
  41.             nbytes++;
  42.         }
  43.         
  44.         if ((lp1=xlalloc(nbytes)) == NULL)
  45.         {    goto closer;
  46.         }
  47.         lp2 = (flag) ? lback(curbp->b_linep) :
  48.             curwp->w_dotp;
  49.         (lp1->l_fp = lp2->l_fp)->l_bp = lp1;
  50.         curwp->w_dotp = (lp1->l_bp = lp2)->l_fp = lp1;
  51.  
  52.         blockmv( &lp1->l_text[0], &line[0], nbytes );
  53.  
  54.         ++nline;
  55.     }
  56.     mlwrite("[Read %d lines]", nline);
  57.     if ( ! flag ) curwp->w_dotp = curwp->w_dotp->l_fp;
  58. closer:
  59.     fclose(ffp);        /* Ignore errors.    */
  60. out:
  61.     for (wp=wheadp; wp!=NULL; wp=wp->w_wndp)
  62.     {    if (wp->w_bufp == curbp)
  63.         {    wp->w_linep = lforw(curbp->b_linep);
  64.             wp->w_dotp  = ( flag )
  65.                 ? lforw(curbp->b_linep)
  66.                 : curwp->w_dotp;
  67.             wp->w_doto  = 
  68.             wp->w_markp = 
  69.             wp->w_marko = 0;
  70.             wp->w_flag |= WFMODE|WFHARD;
  71.         }
  72.     }
  73.     return (TRUE);
  74. }
  75.  
  76. /*
  77.  * This routine allocates a block
  78.  * of memory large enough to hold a LINE
  79.  * containing "used" characters. The block is
  80.  * always rounded up a bit. Return a pointer
  81.  * to the new block, or NULL if there isn't
  82.  * any memory left. Print a message in the
  83.  * message line if no space.
  84.  */
  85. LINE    *
  86. xlalloc(size)
  87. int    size;
  88. {
  89.     register LINE    *lp;
  90.  
  91.     if ((lp = (LINE *) malloc(( sizeof(LINE)-1 ) +size)) == NULL)
  92.     {    mlwrite("No memory");
  93.         return (NULL);
  94.     }
  95.     lp->l_size = lp->l_used = size;
  96.     return (lp);
  97. }
  98.