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 / filename.c < prev    next >
C/C++ Source or Header  |  1992-03-11  |  2KB  |  78 lines

  1. #include    "stdio.h"
  2. #include    "ed.h"
  3.  
  4. /*
  5.  * The command allows the user
  6.  * to modify the file name associated with
  7.  * the current buffer. It is like the "f" command
  8.  * in UNIX "ed". The operation is simple; just zap
  9.  * the name in the BUFFER structure, and mark the windows
  10.  * as needing an update. You can type a blank line at the
  11.  * prompt if you wish.
  12.  */
  13. ovmain(x, f, n)
  14. {
  15.     register WINDOW    *wp;
  16.     register int    s;
  17.     char         fname[NFILEN];
  18.     char        bname[NBUFN];
  19.  
  20.     if ( x == 1 ) return ( quote( f, n ));
  21.     if ( n > 0 ) goto dobufname;
  22.     if ((s=mlreply("File Name: ", fname, NFILEN)) == ABORT)
  23.         return (s);
  24.     if (s == FALSE)
  25.         strcpy(curbp->b_fname, "");
  26.     else
  27.         strcpy(curbp->b_fname, fname);
  28.     wp = wheadp;                /* Update mode lines.    */
  29.     while (wp != NULL) {
  30.         if (wp->w_bufp == curbp)
  31.             wp->w_flag |= WFMODE;
  32.         wp = wp->w_wndp;
  33.     }
  34.     return (TRUE);
  35. dobufname:
  36.     if ((s=mlreply("Buffer Name: ", bname, NBUFN)) == ABORT)
  37.         return (s);
  38.     if (s == FALSE)
  39.         return (s);
  40.     else
  41.         strcpy(curbp->b_bname, bname);
  42.     wp = wheadp;                /* Update mode lines.    */
  43.     while (wp != NULL) {
  44.         if (wp->w_bufp == curbp)
  45.             wp->w_flag |= WFMODE;
  46.         wp = wp->w_wndp;
  47.     }
  48.     return (TRUE);
  49. }
  50.  
  51. /*
  52.  * Quote the next character, and
  53.  * insert it into the buffer. All the characters
  54.  * are taken literally, with the exception of the newline,
  55.  * which always has its line splitting meaning. The character
  56.  * is always read, even if it is inserted 0 times, for
  57.  * regularity. Bound to "M-Q" (for me) and "C-Q" (for Rich,
  58.  * and only on terminals that don't need XON-XOFF).
  59.  */
  60. quote(f, n)
  61. {
  62.     register int    s;
  63.     register int    c;
  64.  
  65.     c = getstroke();
  66.     if (n < 0)
  67.         return (FALSE);
  68.     if (n == 0)
  69.         return (TRUE);
  70.     if (c == '\n') {
  71.         do {
  72.             s = lnewline();
  73.         } while (s==TRUE && --n);
  74.         return (s);
  75.     }
  76.     return (linsert(n, c));
  77. }
  78.