[comp.sources.bugs] Minor problem with quick-exit in microEMACS 3.8i

greg@xios.XIOS.UUCP (Greg Franks) (06/30/87)

Here is a context diff of a minor irratant in the quick-exit function in
microEMACS 3.8i.  Normally, if quick-exit fails (mainly because a buffer
does not have an associated file), microEMACS will print out an error
message and remain in the original buffer (with some peculiar side
effects if I recall).  This change will cause microEMACS to switch to
the buffer that caused the fault. 

*** /ss/greg/tmp/main.c	Tue Jun 30 09:04:29 1987
--- main.c	Tue Jun 30 09:05:38 1987
***************
*** 1082,1087
  {
  	register BUFFER *bp;	/* scanning pointer to buffers */
  	register int status;
  
  	bp = bheadp;
  	while (bp != NULL) {

--- 1082,1088 -----
  {
  	register BUFFER *bp;	/* scanning pointer to buffers */
  	register int status;
+ 	register BUFFER *old;	/* original buffer		*/	/*rgf*/
  
  	old = curbp;							/*rgf*/
  	bp = bheadp;
***************
*** 1083,1088
  	register BUFFER *bp;	/* scanning pointer to buffers */
  	register int status;
  
  	bp = bheadp;
  	while (bp != NULL) {
  	        if ((bp->b_flag&BFCHG) != 0	/* Changed.             */

--- 1084,1090 -----
  	register int status;
  	register BUFFER *old;	/* original buffer		*/	/*rgf*/
  
+ 	old = curbp;							/*rgf*/
  	bp = bheadp;
  	while (bp != NULL) {
  	        if ((bp->b_flag&BFCHG) != 0	/* Changed.             */
***************
*** 1089,1095
          	&& (bp->b_flag&BFINVS) == 0) {	/* Real.                */
  			curbp = bp;		/* make that buffer cur	*/
  			mlwrite("[Saving %s]\n",bp->b_fname);
!                 	if ((status = filesave(f, n)) != TRUE)
                  		return(status);
  		}
  	bp = bp->b_bufp;			/* on to the next buffer */

--- 1091,1099 -----
          	&& (bp->b_flag&BFINVS) == 0) {	/* Real.                */
  			curbp = bp;		/* make that buffer cur	*/
  			mlwrite("[Saving %s]\n",bp->b_fname);
!                 	if ((status = filesave(f, n)) != TRUE) {
! 				curbp = old;	/* Switch to bogus */	/*rgf*/
! 				swbuffer( bp );	/* buffer. */		/*rgf*/
                  		return(status);
  			}
  		}
***************
*** 1091,1096
  			mlwrite("[Saving %s]\n",bp->b_fname);
                  	if ((status = filesave(f, n)) != TRUE)
                  		return(status);
  		}
  	bp = bp->b_bufp;			/* on to the next buffer */
  	}

--- 1095,1101 -----
  				curbp = old;	/* Switch to bogus */	/*rgf*/
  				swbuffer( bp );	/* buffer. */		/*rgf*/
                  		return(status);
+ 			}
  		}
  	bp = bp->b_bufp;			/* on to the next buffer */
  	}
-- 
Greg Franks     (613) 725-5411          "Vermont ain't flat"
{net-land}!utzoo!dciem!nrcaer!xios!greg
(Other paths will undoubtably work too - your mileage will vary)