home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume5 / uemacs3 / misc.c next >
C/C++ Source or Header  |  1986-11-30  |  2KB  |  64 lines

  1. /*
  2.  * Name:    MicroEMACS
  3.  *        Miscellaneous extensions
  4.  * Version:    30+
  5.  * Last edit:    30-Apr-86
  6.  * By:        oz
  7.  *        decvax!utzoo!yetti!oz
  8.  */
  9. #include    "def.h"
  10.  
  11. /*
  12.  * Insert a file at the dot a la yank. This is not
  13.  * terribly difficult. Insert routines handle
  14.  * it all. All we have to do is to ask for a
  15.  * filename, make sure it exists, and loop through
  16.  * the entire file. Just like yank, we try to
  17.  * handle the cosmetic bug, so that when entire
  18.  * text lands off screen, we will not look silly.
  19.  * This is usually bound to C-X C-I.
  20.  */
  21. fileinsert(f, n, k)
  22. {
  23.     register int     s;
  24.     register char    *p;
  25.     register LINE    *lp;
  26.     char        fname[NFILEN];
  27.     char        line[NLINE];
  28.     register int    nline;
  29.  
  30.     if ((s=ereply("Insert file: ", fname, NFILEN)) != TRUE)
  31.         return (s);
  32.     adjustcase(fname);
  33.     if ((s=ffropen(fname)) == FIOFNF) {    /* hard file open    */
  34.         if (kbdmop == NULL)
  35.             eprintf("Cannot open %s", fname);
  36.         return(FALSE);
  37.     }
  38.     nline = 0;                /* newline counting..    */
  39.     while ((s=ffgetline(line, NLINE)) == FIOSUC) {
  40.         for (p = line; *p; p++)
  41.             if (linsert(1, *p) == FALSE)
  42.                 return(FALSE);
  43.                         /* eol: fake newline..    */
  44.         if(newline(FALSE, 1, KRANDOM) == FALSE)
  45.             return(FALSE);
  46.         ++nline;
  47.     }
  48.     ffclose();                /* ignore errors here    */
  49.     if (s==FIOEOF && kbdmop==NULL) {    /* do not zap anything  */
  50.         if (nline == 1)
  51.             eprintf("[Inserted 1 line]");
  52.         else
  53.             eprintf("[Inserted %d lines]", nline);
  54.     }
  55.     lp = curwp->w_linep;            /* Cosmetic adjustment    */
  56.     if (curwp->w_dotp == lp) {        /* if offscreen insert.    */
  57.         while (nline-- && lback(lp)!=curbp->b_linep)
  58.             lp = lback(lp);
  59.         curwp->w_linep = lp;        /* Adjust framing.    */
  60.         curwp->w_flag |= WFHARD;
  61.     }
  62.     return (TRUE);
  63. }
  64.