home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / emacs / src / filevisi.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-07  |  2.3 KB  |  95 lines

  1. #include    "stdio.h"
  2. #include    "ed.h"
  3.  
  4. /*
  5.  * Select a file for editing.
  6.  * Look around to see if you can find the
  7.  * fine in another buffer; if you can find it
  8.  * just switch to the buffer. If you cannot find
  9.  * the file, create a new buffer, read in the
  10.  * text, and switch to the new buffer.
  11.  * Bound to C-X C-V.
  12.  */
  13. ovmain( x, f, n )
  14. {
  15.     register BUFFER    *bp;
  16.     register WINDOW    *wp;
  17.     register LINE    *lp;
  18.     register int    i;
  19.     register int    s;
  20.     char        bname[NBUFN];
  21.     char        fname[NFILEN];
  22.  
  23.     if ((s=mlreply("Find file: ", fname, NFILEN)) != TRUE)
  24.         return (s);
  25.     for ( bp = bheadp; bp != NULL; bp = bp->b_bufp )
  26.     {    if ((bp->b_flag&BFTEMP)==0 && strcmp(bp->b_fname, fname)==0)
  27.         {    if (--curbp->b_nwnd == 0)
  28.             {    blockmv( curbp, curwp, 8 );
  29.             }
  30.             curbp =
  31.             curwp->w_bufp  = bp;
  32.             if (bp->b_nwnd++ == 0)
  33.             {    blockmv( curwp, bp, 8 );
  34.             } else
  35.             {    wp = wheadp;
  36.                 while ( wp != NULL )
  37.                 {    if ( wp != curwp && wp->w_bufp==bp)
  38.                     {    blockmv( curwp, wp, 8 );
  39.                         break;
  40.                     }
  41.                     wp = wp->w_wndp;
  42.                 }
  43.             }
  44.             lp = curwp->w_dotp;
  45.             /* i = curwp->w_ntrows >> 1; */
  46.             /* while ( i-- && lback(lp) != curbp->b_linep ) */
  47.                 /* lp = lback(lp); */
  48.             curwp->w_linep = lp;
  49.             curwp->w_flag |= WFMODE|WFHARD;
  50.             mlwrite("[Old buffer]");
  51.             return (TRUE);
  52.         }
  53.     }
  54.     makename(bname, fname);            /* New buffer name.    */
  55.     while (( bp = bfind( bname, FALSE, 0 )) != NULL )
  56.     {    if ( ( s = mlreply( "Buffer name: ", bname, NBUFN )) == ABORT)
  57.             return (s);    /* ^G to just quit    */
  58.         if (s == FALSE)        /* CR to clobber it    */
  59.         {    makename( bname, fname );
  60.             break;
  61.         }
  62.     }
  63.     if ( bp == NULL && ( bp = bfind( bname, TRUE, 0 )) == NULL )
  64.     {    mlwrite("No buffer");
  65.         return (FALSE);
  66.     }
  67.     if (--curbp->b_nwnd == 0)        /* Undisplay.    */
  68.     {    blockmv( curbp, curwp, 8 );
  69.     }
  70.     ( curbp =                /* Switch to it.    */
  71.         curwp->w_bufp = bp)->
  72.             b_nwnd++;
  73.     return ( readin( fname, 1 ));        /* Read it in.        */
  74. }
  75.  
  76. makename(bname, fname)
  77. char    *bname;
  78. char    *fname;
  79. {
  80.     register char * cp1;
  81.  
  82.     cp1 = fname;
  83.     while ( *cp1 != ':' )
  84.     {    if ( ! *cp1 )
  85.         {    cp1 = fname;
  86.             break;
  87.         }
  88.         cp1++;
  89.     }
  90.     if ( *cp1 == ':' ) cp1++;
  91.     strcpy( bname, cp1 );
  92. }
  93.  
  94. #include "readin.c"
  95.