dorfmt.c - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       dorfmt.c (985B)
       ---
            1 /* Copyright (c) 2002-2006 Lucent Technologies; see LICENSE */
            2 #include <stdarg.h>
            3 #include <string.h>
            4 #include "plan9.h"
            5 #include "fmt.h"
            6 #include "fmtdef.h"
            7 
            8 /* format the output into f->to and return the number of characters fmted  */
            9 
           10 /* BUG: THIS FILE IS NOT UPDATED TO THE  NEW SPEC */
           11 int
           12 dorfmt(Fmt *f, const Rune *fmt)
           13 {
           14         Rune *rt, *rs;
           15         int r;
           16         char *t, *s;
           17         int nfmt;
           18 
           19         nfmt = f->nfmt;
           20         for(;;){
           21                 if(f->runes){
           22                         rt = (Rune*)f->to;
           23                         rs = (Rune*)f->stop;
           24                         while((r = *fmt++) && r != '%'){
           25                                 FMTRCHAR(f, rt, rs, r);
           26                         }
           27                         f->nfmt += rt - (Rune *)f->to;
           28                         f->to = rt;
           29                         if(!r)
           30                                 return f->nfmt - nfmt;
           31                         f->stop = rs;
           32                 }else{
           33                         t = (char*)f->to;
           34                         s = (char*)f->stop;
           35                         while((r = *fmt++) && r != '%'){
           36                                 FMTRUNE(f, t, f->stop, r);
           37                         }
           38                         f->nfmt += t - (char *)f->to;
           39                         f->to = t;
           40                         if(!r)
           41                                 return f->nfmt - nfmt;
           42                         f->stop = s;
           43                 }
           44 
           45                 fmt = (Rune*)__fmtdispatch(f, (Rune*)fmt, 1);
           46                 if(fmt == nil)
           47                         return -1;
           48         }
           49         return 0;                /* not reached */
           50 }