github.com/zach-klippenstein/go@v0.0.0-20150108044943-fcfbeb3adf58/src/lib9/fmt/fmtrune.c (about)

     1  /*
     2   * The authors of this software are Rob Pike and Ken Thompson,
     3   * with contributions from Mike Burrows and Sean Dorward.
     4   *
     5   *     Copyright (c) 2002-2006 by Lucent Technologies.
     6   *     Portions Copyright (c) 2004 Google Inc.
     7   * 
     8   * Permission to use, copy, modify, and distribute this software for any
     9   * purpose without fee is hereby granted, provided that this entire notice
    10   * is included in all copies of any software which is or includes a copy
    11   * or modification of this software and in all copies of the supporting
    12   * documentation for such software.
    13   * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    14   * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES 
    15   * NOR GOOGLE INC MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING 
    16   * THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    17   */
    18  
    19  #include <u.h>
    20  #include <libc.h>
    21  #include "fmtdef.h"
    22  
    23  int
    24  fmtrune(Fmt *f, int r)
    25  {
    26  	Rune *rt;
    27  	char *t;
    28  	int n;
    29  
    30  	if(f->runes){
    31  		rt = (Rune*)f->to;
    32  		FMTRCHAR(f, rt, f->stop, r);
    33  		f->to = rt;
    34  		n = 1;
    35  	}else{
    36  		t = (char*)f->to;
    37  		FMTRUNE(f, t, f->stop, (Rune)r);
    38  		n = (int)(t - (char*)f->to);
    39  		f->to = t;
    40  	}
    41  	f->nfmt += n;
    42  	return 0;
    43  }