text: #include	<u.h>
  #include	<libc.h>
  #include	<bio.h>
  
  long
  Bgetrune(Biobufhdr *bp)
  {
  	int c, i;
  	Rune rune;
  	char str[4];
  
  	c = Bgetc(bp);
  	if(c < Runeself) {		/* one char */
  		bp->runesize = 1;
  		return c;
  	}
  	str[0] = c;
  
  	for(i=1;;) {
  		c = Bgetc(bp);
  		if(c < 0)
  			return c;
  		str[i++] = c;
  
  		if(fullrune(str, i)) {
  			chartorune(&rune, str);
  			bp->runesize = i;
  			return rune;
  		}
  	}
  }
  
  int
  Bungetrune(Biobufhdr *bp)
  {
  
  	if(bp->state == Bracteof)
  		bp->state = Bractive;
  	if(bp->state != Bractive)
  		return Beof;
  	bp->icount -= bp->runesize;
  	bp->runesize = 0;
  	return 1;
  }
  