Hex Artifact Content
Not logged in

Artifact cefba92273da8b36d22682402f45dda2fa2049ce:

File src/printf.c part of check-in [8c3ec00311] - On the printf extension converters (ex: %T, %w) the "alternate form flag" (ex: %#T, %#w) means first read an integer from the argument list and then only process that number of characters from the string or blob that is read next from the argument list. by drh on 2008-02-04 19:07:58.

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 36 20 44 2e 20 52 69 63 68  (c) 2006 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62   GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76  lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c  ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65  ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73  s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  tributed in the 
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c  hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20  l be useful,.** 
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20  but WITHOUT ANY 
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69  t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a  ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54  * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52  Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55   A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20  RPOSE.  See the 
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50  GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f  ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a  r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c  ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20  d have received 
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e  a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63  U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e  .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72  g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69  ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65  te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20  ation, Inc., 59 
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53  Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73  uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31  ton, MA  02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20  307, USA..**.** 
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69  Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20  nformation:.**  
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a   drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68  *   http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a  waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0360: 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6d 70 6c 65 6d  .**.** An implem
0370: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 70 72 69 6e  entation of prin
0380: 74 66 28 29 20 77 69 74 68 20 65 78 74 72 61 20  tf() with extra 
0390: 63 6f 6e 76 65 72 73 69 6f 6e 20 66 69 65 6c 64  conversion field
03a0: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
03b0: 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75  config.h".#inclu
03c0: 64 65 20 22 70 72 69 6e 74 66 2e 68 22 0a 0a 2f  de "printf.h"../
03d0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20  *.** Conversion 
03e0: 74 79 70 65 73 20 66 61 6c 6c 20 69 6e 74 6f 20  types fall into 
03f0: 76 61 72 69 6f 75 73 20 63 61 74 65 67 6f 72 69  various categori
0400: 65 73 20 61 73 20 64 65 66 69 6e 65 64 20 62 79  es as defined by
0410: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
0420: 67 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 0a 2a  g enumeration..*
0430: 2f 0a 23 64 65 66 69 6e 65 20 65 74 52 41 44 49  /.#define etRADI
0440: 58 20 20 20 20 20 20 20 31 20 2f 2a 20 49 6e 74  X       1 /* Int
0450: 65 67 65 72 20 74 79 70 65 73 2e 20 20 25 64 2c  eger types.  %d,
0460: 20 25 78 2c 20 25 6f 2c 20 61 6e 64 20 73 6f 20   %x, %o, and so 
0470: 66 6f 72 74 68 20 2a 2f 0a 23 64 65 66 69 6e 65  forth */.#define
0480: 20 65 74 46 4c 4f 41 54 20 20 20 20 20 20 20 32   etFLOAT       2
0490: 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 70 6f 69   /* Floating poi
04a0: 6e 74 2e 20 20 25 66 20 2a 2f 0a 23 64 65 66 69  nt.  %f */.#defi
04b0: 6e 65 20 65 74 45 58 50 20 20 20 20 20 20 20 20  ne etEXP        
04c0: 20 33 20 2f 2a 20 45 78 70 6f 6e 65 6e 74 69 6f   3 /* Exponentio
04d0: 6e 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 20 25 65  nal notation. %e
04e0: 20 61 6e 64 20 25 45 20 2a 2f 0a 23 64 65 66 69   and %E */.#defi
04f0: 6e 65 20 65 74 47 45 4e 45 52 49 43 20 20 20 20  ne etGENERIC    
0500: 20 34 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 6f   4 /* Floating o
0510: 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 2c 20 64  r exponential, d
0520: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 65 78 70 6f  epending on expo
0530: 6e 65 6e 74 2e 20 25 67 20 2a 2f 0a 23 64 65 66  nent. %g */.#def
0540: 69 6e 65 20 65 74 53 49 5a 45 20 20 20 20 20 20  ine etSIZE      
0550: 20 20 35 20 2f 2a 20 52 65 74 75 72 6e 20 6e 75    5 /* Return nu
0560: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
0570: 72 73 20 70 72 6f 63 65 73 73 65 64 20 73 6f 20  rs processed so 
0580: 66 61 72 2e 20 25 6e 20 2a 2f 0a 23 64 65 66 69  far. %n */.#defi
0590: 6e 65 20 65 74 53 54 52 49 4e 47 20 20 20 20 20  ne etSTRING     
05a0: 20 36 20 2f 2a 20 53 74 72 69 6e 67 73 2e 20 25   6 /* Strings. %
05b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 44  s */.#define etD
05c0: 59 4e 53 54 52 49 4e 47 20 20 20 37 20 2f 2a 20  YNSTRING   7 /* 
05d0: 44 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  Dynamically allo
05e0: 63 61 74 65 64 20 73 74 72 69 6e 67 73 2e 20 25  cated strings. %
05f0: 7a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 50  z */.#define etP
0600: 45 52 43 45 4e 54 20 20 20 20 20 38 20 2f 2a 20  ERCENT     8 /* 
0610: 50 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2e 20  Percent symbol. 
0620: 25 25 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74  %% */.#define et
0630: 43 48 41 52 58 20 20 20 20 20 20 20 39 20 2f 2a  CHARX       9 /*
0640: 20 43 68 61 72 61 63 74 65 72 73 2e 20 25 63 20   Characters. %c 
0650: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 52 52  */.#define etERR
0660: 4f 52 20 20 20 20 20 20 31 30 20 2f 2a 20 55 73  OR      10 /* Us
0670: 65 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e  ed to indicate n
0680: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
0690: 6e 20 74 79 70 65 20 2a 2f 0a 2f 2a 20 54 68 65  n type */./* The
06a0: 20 72 65 73 74 20 61 72 65 20 65 78 74 65 6e 73   rest are extens
06b0: 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d 61 6c  ions, not normal
06c0: 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 69 6e  ly found in prin
06d0: 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tf() */.#define 
06e0: 65 74 42 4c 4f 42 20 20 20 20 20 20 20 31 31 20  etBLOB       11 
06f0: 2f 2a 20 42 6c 6f 62 20 6f 62 6a 65 63 74 73 2e  /* Blob objects.
0700: 20 20 25 62 20 2a 2f 0a 23 64 65 66 69 6e 65 20    %b */.#define 
0710: 65 74 42 4c 4f 42 53 51 4c 20 20 20 20 31 32 20  etBLOBSQL    12 
0720: 2f 2a 20 42 6c 6f 62 20 6f 62 6a 65 63 74 73 20  /* Blob objects 
0730: 71 75 6f 74 65 64 20 66 6f 72 20 53 51 4c 2e 20  quoted for SQL. 
0740: 20 25 42 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %B */.#define e
0750: 74 53 51 4c 45 53 43 41 50 45 20 20 31 33 20 2f  tSQLESCAPE  13 /
0760: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
0770: 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20 20 25 71  \'' doubled.  %q
0780: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51   */.#define etSQ
0790: 4c 45 53 43 41 50 45 32 20 31 34 20 2f 2a 20 53  LESCAPE2 14 /* S
07a0: 74 72 69 6e 67 73 20 77 69 74 68 20 27 5c 27 27  trings with '\''
07b0: 20 64 6f 75 62 6c 65 64 20 61 6e 64 20 65 6e 63   doubled and enc
07c0: 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a 20 20 20  losed in '',.   
07d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07e0: 20 20 20 20 20 20 20 4e 55 4c 4c 20 70 6f 69 6e         NULL poin
07f0: 74 65 72 73 20 72 65 70 6c 61 63 65 64 20 62 79  ters replaced by
0800: 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25 51 20 2a   SQL NULL.  %Q *
0810: 2f 0a 23 64 65 66 69 6e 65 20 65 74 50 4f 49 4e  /.#define etPOIN
0820: 54 45 52 20 20 20 20 31 35 20 2f 2a 20 54 68 65  TER    15 /* The
0830: 20 25 70 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a   %p conversion *
0840: 2f 0a 23 64 65 66 69 6e 65 20 65 74 48 54 4d 4c  /.#define etHTML
0850: 49 5a 45 20 20 20 20 31 36 20 2f 2a 20 4d 61 6b  IZE    16 /* Mak
0860: 65 20 74 65 78 74 20 73 61 66 65 20 66 6f 72 20  e text safe for 
0870: 48 54 4d 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  HTML */.#define 
0880: 65 74 48 54 54 50 49 5a 45 20 20 20 20 31 37 20  etHTTPIZE    17 
0890: 2f 2a 20 4d 61 6b 65 20 74 65 78 74 20 73 61 66  /* Make text saf
08a0: 65 20 66 6f 72 20 48 54 54 50 2e 20 20 22 2f 22  e for HTTP.  "/"
08b0: 20 65 6e 63 6f 64 65 64 20 61 73 20 25 32 66 20   encoded as %2f 
08c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 55 52 4c  */.#define etURL
08d0: 49 5a 45 20 20 20 20 20 31 38 20 2f 2a 20 4d 61  IZE     18 /* Ma
08e0: 6b 65 20 74 65 78 74 20 73 61 66 65 20 66 6f 72  ke text safe for
08f0: 20 48 54 54 50 2e 20 20 22 2f 22 20 6e 6f 74 20   HTTP.  "/" not 
0900: 65 6e 63 6f 64 65 64 20 2a 2f 0a 23 64 65 66 69  encoded */.#defi
0910: 6e 65 20 65 74 46 4f 53 53 49 4c 49 5a 45 20 20  ne etFOSSILIZE  
0920: 31 39 20 2f 2a 20 54 68 65 20 66 6f 73 73 69 6c  19 /* The fossil
0930: 20 68 65 61 64 65 72 20 65 6e 63 6f 64 69 6e 67   header encoding
0940: 20 66 6f 72 6d 61 74 2e 20 2a 2f 0a 23 64 65 66   format. */.#def
0950: 69 6e 65 20 65 74 50 41 54 48 20 20 20 20 20 20  ine etPATH      
0960: 20 32 30 20 2f 2a 20 50 61 74 68 20 74 79 70 65   20 /* Path type
0970: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 57 49   */.#define etWI
0980: 4b 49 53 54 52 20 20 20 20 32 31 20 2f 2a 20 57  KISTR    21 /* W
0990: 69 6b 69 20 74 65 78 74 20 72 65 6e 64 65 72 65  iki text rendere
09a0: 64 20 66 72 6f 6d 20 61 20 63 68 61 72 2a 20 2a  d from a char* *
09b0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 57 49 4b 49  /.#define etWIKI
09c0: 42 4c 4f 42 20 20 20 32 32 20 2f 2a 20 57 69 6b  BLOB   22 /* Wik
09d0: 69 20 74 65 78 74 20 72 65 6e 64 65 72 65 64 20  i text rendered 
09e0: 66 72 6f 6d 20 61 20 42 6c 6f 62 2a 20 2a 2f 0a  from a Blob* */.
09f0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79  ../*.** An "etBy
0a00: 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 20  te" is an 8-bit 
0a10: 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a  unsigned value..
0a20: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
0a30: 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 3b  ned char etByte;
0a40: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69  ../*.** Each bui
0a50: 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ltin conversion 
0a60: 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 74  character (ex: t
0a70: 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 20  he 'd' in "%d") 
0a80: 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  is described.** 
0a90: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
0aa0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0ab0: 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70  structure.*/.typ
0ac0: 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f 69  edef struct et_i
0ad0: 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72  nfo {   /* Infor
0ae0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
0af0: 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a  h format field *
0b00: 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 65  /.  char fmttype
0b10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
0b20: 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c 64  The format field
0b30: 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a   code letter */.
0b40: 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 20    etByte base;  
0b50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0b60: 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 78  e base for radix
0b70: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20   conversion */. 
0b80: 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 20   etByte flags;  
0b90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
0ba0: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47   or more of FLAG
0bb0: 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  _ constants belo
0bc0: 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 79  w */.  etByte ty
0bd0: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
0be0: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
0bf0: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79  radigm */.  etBy
0c00: 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 20  te charset;     
0c10: 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
0c20: 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f 66  nto aDigits[] of
0c30: 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 69   the digits stri
0c40: 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 70  ng */.  etByte p
0c50: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
0c60: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
0c70: 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 65  aPrefix[] of the
0c80: 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 2a   prefix string *
0c90: 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a  /.} et_info;../*
0ca0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
0cb0: 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66  es for et_info.f
0cc0: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
0cd0: 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 31 20 20  FLAG_SIGNED  1  
0ce0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
0cf0: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
0d00: 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a 2f 0a  rt is signed */.
0d10: 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 49 4e 54  #define FLAG_INT
0d20: 45 52 4e 20 20 32 20 20 20 20 20 2f 2a 20 54 72  ERN  2     /* Tr
0d30: 75 65 20 69 66 20 66 6f 72 20 69 6e 74 65 72 6e  ue if for intern
0d40: 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23  al use only */.#
0d50: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 54 52 49  define FLAG_STRI
0d60: 4e 47 20 20 34 20 20 20 20 20 2f 2a 20 41 6c 6c  NG  4     /* All
0d70: 6f 77 20 69 6e 66 69 6e 69 74 79 20 70 72 65 63  ow infinity prec
0d80: 69 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ision */.../*.**
0d90: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
0da0: 61 62 6c 65 20 69 73 20 73 65 61 72 63 68 65 64  able is searched
0db0: 20 6c 69 6e 65 61 72 6c 79 2c 20 73 6f 20 69 74   linearly, so it
0dc0: 20 69 73 20 67 6f 6f 64 20 74 6f 20 70 75 74 20   is good to put 
0dd0: 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 71  the.** most freq
0de0: 75 65 6e 74 6c 79 20 75 73 65 64 20 63 6f 6e 76  uently used conv
0df0: 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 69 72  ersion types fir
0e00: 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  st..*/.static co
0e10: 6e 73 74 20 63 68 61 72 20 61 44 69 67 69 74 73  nst char aDigits
0e20: 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  [] = "0123456789
0e30: 41 42 43 44 45 46 30 31 32 33 34 35 36 37 38 39  ABCDEF0123456789
0e40: 61 62 63 64 65 66 22 3b 0a 73 74 61 74 69 63 20  abcdef";.static 
0e50: 63 6f 6e 73 74 20 63 68 61 72 20 61 50 72 65 66  const char aPref
0e60: 69 78 5b 5d 20 3d 20 22 2d 78 30 5c 30 30 30 58  ix[] = "-x0\000X
0e70: 30 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  0";.static const
0e80: 20 65 74 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 6f   et_info fmtinfo
0e90: 5b 5d 20 3d 20 7b 0a 20 20 7b 20 20 27 64 27 2c  [] = {.  {  'd',
0ea0: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c   10, 1, etRADIX,
0eb0: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
0ec0: 20 7b 20 20 27 73 27 2c 20 20 30 2c 20 34 2c 20   {  's',  0, 4, 
0ed0: 65 74 53 54 52 49 4e 47 2c 20 20 20 20 20 30 2c  etSTRING,     0,
0ee0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 67 27 2c    0 },.  {  'g',
0ef0: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
0f00: 43 2c 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20  C,    30, 0 },. 
0f10: 20 7b 20 20 27 7a 27 2c 20 20 30 2c 20 36 2c 20   {  'z',  0, 6, 
0f20: 65 74 44 59 4e 53 54 52 49 4e 47 2c 20 20 30 2c  etDYNSTRING,  0,
0f30: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 71 27 2c    0 },.  {  'q',
0f40: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
0f50: 41 50 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  APE,  0,  0 },. 
0f60: 20 7b 20 20 27 51 27 2c 20 20 30 2c 20 34 2c 20   {  'Q',  0, 4, 
0f70: 65 74 53 51 4c 45 53 43 41 50 45 32 2c 20 30 2c  etSQLESCAPE2, 0,
0f80: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 62 27 2c    0 },.  {  'b',
0f90: 20 20 30 2c 20 32 2c 20 65 74 42 4c 4f 42 2c 20    0, 2, etBLOB, 
0fa0: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
0fb0: 20 7b 20 20 27 42 27 2c 20 20 30 2c 20 32 2c 20   {  'B',  0, 2, 
0fc0: 65 74 42 4c 4f 42 53 51 4c 2c 20 20 20 20 30 2c  etBLOBSQL,    0,
0fd0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 77 27 2c    0 },.  {  'w',
0fe0: 20 20 30 2c 20 32 2c 20 65 74 57 49 4b 49 53 54    0, 2, etWIKIST
0ff0: 52 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20  R,    0,  0 },. 
1000: 20 7b 20 20 27 57 27 2c 20 20 30 2c 20 32 2c 20   {  'W',  0, 2, 
1010: 65 74 57 49 4b 49 42 4c 4f 42 2c 20 20 20 30 2c  etWIKIBLOB,   0,
1020: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 68 27 2c    0 },.  {  'h',
1030: 20 20 30 2c 20 34 2c 20 65 74 48 54 4d 4c 49 5a    0, 4, etHTMLIZ
1040: 45 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20  E,    0,  0 },. 
1050: 20 7b 20 20 27 74 27 2c 20 20 30 2c 20 34 2c 20   {  't',  0, 4, 
1060: 65 74 48 54 54 50 49 5a 45 2c 20 20 20 20 30 2c  etHTTPIZE,    0,
1070: 20 20 30 20 7d 2c 20 20 2f 2a 20 22 2f 22 20 2d    0 },  /* "/" -
1080: 3e 20 22 25 32 46 22 20 2a 2f 0a 20 20 7b 20 20  > "%2F" */.  {  
1090: 27 54 27 2c 20 20 30 2c 20 34 2c 20 65 74 55 52  'T',  0, 4, etUR
10a0: 4c 49 5a 45 2c 20 20 20 20 20 30 2c 20 20 30 20  LIZE,     0,  0 
10b0: 7d 2c 20 20 2f 2a 20 22 2f 22 20 75 6e 63 68 61  },  /* "/" uncha
10c0: 6e 67 65 64 20 2a 2f 0a 20 20 7b 20 20 27 46 27  nged */.  {  'F'
10d0: 2c 20 20 30 2c 20 34 2c 20 65 74 46 4f 53 53 49  ,  0, 4, etFOSSI
10e0: 4c 49 5a 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a  LIZE,  0,  0 },.
10f0: 20 20 7b 20 20 27 63 27 2c 20 20 30 2c 20 30 2c    {  'c',  0, 0,
1100: 20 65 74 43 48 41 52 58 2c 20 20 20 20 20 20 30   etCHARX,      0
1110: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6f 27  ,  0 },.  {  'o'
1120: 2c 20 20 38 2c 20 30 2c 20 65 74 52 41 44 49 58  ,  8, 0, etRADIX
1130: 2c 20 20 20 20 20 20 30 2c 20 20 32 20 7d 2c 0a  ,      0,  2 },.
1140: 20 20 7b 20 20 27 75 27 2c 20 31 30 2c 20 30 2c    {  'u', 10, 0,
1150: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30   etRADIX,      0
1160: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 78 27  ,  0 },.  {  'x'
1170: 2c 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58  , 16, 0, etRADIX
1180: 2c 20 20 20 20 20 20 31 36 2c 20 31 20 7d 2c 0a  ,      16, 1 },.
1190: 20 20 7b 20 20 27 58 27 2c 20 31 36 2c 20 30 2c    {  'X', 16, 0,
11a0: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30   etRADIX,      0
11b0: 2c 20 20 34 20 7d 2c 0a 20 20 7b 20 20 27 66 27  ,  4 },.  {  'f'
11c0: 2c 20 20 30 2c 20 31 2c 20 65 74 46 4c 4f 41 54  ,  0, 1, etFLOAT
11d0: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
11e0: 20 20 7b 20 20 27 65 27 2c 20 20 30 2c 20 31 2c    {  'e',  0, 1,
11f0: 20 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 33   etEXP,        3
1200: 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 45 27  0, 0 },.  {  'E'
1210: 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20  ,  0, 1, etEXP, 
1220: 20 20 20 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a         14, 0 },.
1230: 20 20 7b 20 20 27 47 27 2c 20 20 30 2c 20 31 2c    {  'G',  0, 1,
1240: 20 65 74 47 45 4e 45 52 49 43 2c 20 20 20 20 31   etGENERIC,    1
1250: 34 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 69 27  4, 0 },.  {  'i'
1260: 2c 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58  , 10, 1, etRADIX
1270: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
1280: 20 20 7b 20 20 27 6e 27 2c 20 20 30 2c 20 30 2c    {  'n',  0, 0,
1290: 20 65 74 53 49 5a 45 2c 20 20 20 20 20 20 20 30   etSIZE,       0
12a0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 25 27  ,  0 },.  {  '%'
12b0: 2c 20 20 30 2c 20 30 2c 20 65 74 50 45 52 43 45  ,  0, 0, etPERCE
12c0: 4e 54 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  NT,    0,  0 },.
12d0: 20 20 7b 20 20 27 70 27 2c 20 31 36 2c 20 30 2c    {  'p', 16, 0,
12e0: 20 65 74 50 4f 49 4e 54 45 52 2c 20 20 20 20 30   etPOINTER,    0
12f0: 2c 20 20 31 20 7d 2c 0a 20 20 7b 20 20 27 2f 27  ,  1 },.  {  '/'
1300: 2c 20 20 30 2c 20 30 2c 20 65 74 50 41 54 48 2c  ,  0, 0, etPATH,
1310: 20 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a         0,  0 },.
1320: 7d 3b 0a 23 64 65 66 69 6e 65 20 65 74 4e 49 4e  };.#define etNIN
1330: 46 4f 20 20 28 73 69 7a 65 6f 66 28 66 6d 74 69  FO  (sizeof(fmti
1340: 6e 66 6f 29 2f 73 69 7a 65 6f 66 28 66 6d 74 69  nfo)/sizeof(fmti
1350: 6e 66 6f 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20  nfo[0]))../*.** 
1360: 22 2a 76 61 6c 22 20 69 73 20 61 20 64 6f 75 62  "*val" is a doub
1370: 6c 65 20 73 75 63 68 20 74 68 61 74 20 30 2e 31  le such that 0.1
1380: 20 3c 3d 20 2a 76 61 6c 20 3c 20 31 30 2e 30 0a   <= *val < 10.0.
1390: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 73  ** Return the as
13a0: 63 69 69 20 63 6f 64 65 20 66 6f 72 20 74 68 65  cii code for the
13b0: 20 6c 65 61 64 69 6e 67 20 64 69 67 69 74 20 6f   leading digit o
13c0: 66 20 2a 76 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20  f *val, then.** 
13d0: 6d 75 6c 74 69 70 6c 79 20 22 2a 76 61 6c 22 20  multiply "*val" 
13e0: 62 79 20 31 30 2e 30 20 74 6f 20 72 65 6e 6f 72  by 10.0 to renor
13f0: 6d 61 6c 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  malize..**.** Ex
1400: 61 6d 70 6c 65 3a 0a 2a 2a 20 20 20 20 20 69 6e  ample:.**     in
1410: 70 75 74 3a 20 20 20 20 20 2a 76 61 6c 20 3d 20  put:     *val = 
1420: 33 2e 31 34 31 35 39 0a 2a 2a 20 20 20 20 20 6f  3.14159.**     o
1430: 75 74 70 75 74 3a 20 20 20 20 2a 76 61 6c 20 3d  utput:    *val =
1440: 20 31 2e 34 31 35 39 20 20 20 20 66 75 6e 63 74   1.4159    funct
1450: 69 6f 6e 20 72 65 74 75 72 6e 20 3d 20 27 33 27  ion return = '3'
1460: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 75 6e 74  .**.** The count
1470: 65 72 20 2a 63 6e 74 20 69 73 20 69 6e 63 72 65  er *cnt is incre
1480: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
1490: 2e 20 20 41 66 74 65 72 20 63 6f 75 6e 74 65 72  .  After counter
14a0: 20 65 78 63 65 65 64 73 0a 2a 2a 20 31 36 20 28   exceeds.** 16 (
14b0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 69  the number of si
14c0: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
14d0: 20 69 6e 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   in a 64-bit flo
14e0: 61 74 29 20 27 30 27 20 69 73 0a 2a 2a 20 61 6c  at) '0' is.** al
14f0: 77 61 79 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  ways returned..*
1500: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 74 5f  /.static int et_
1510: 67 65 74 64 69 67 69 74 28 6c 6f 6e 67 20 64 6f  getdigit(long do
1520: 75 62 6c 65 20 2a 76 61 6c 2c 20 69 6e 74 20 2a  uble *val, int *
1530: 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69  cnt){.  int digi
1540: 74 3b 0a 20 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  t;.  long double
1550: 20 64 3b 0a 20 20 69 66 28 20 28 2a 63 6e 74 29   d;.  if( (*cnt)
1560: 2b 2b 20 3e 3d 20 31 36 20 29 20 72 65 74 75 72  ++ >= 16 ) retur
1570: 6e 20 27 30 27 3b 0a 20 20 64 69 67 69 74 20 3d  n '0';.  digit =
1580: 20 28 69 6e 74 29 2a 76 61 6c 3b 0a 20 20 64 20   (int)*val;.  d 
1590: 3d 20 64 69 67 69 74 3b 0a 20 20 64 69 67 69 74  = digit;.  digit
15a0: 20 2b 3d 20 27 30 27 3b 0a 20 20 2a 76 61 6c 20   += '0';.  *val 
15b0: 3d 20 28 2a 76 61 6c 20 2d 20 64 29 2a 31 30 2e  = (*val - d)*10.
15c0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 64 69 67 69  0;.  return digi
15d0: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  t;.}../*.** Size
15e0: 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 63 6f   of temporary co
15f0: 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 2e  nversion buffer.
1600: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 42 55  .*/.#define etBU
1610: 46 53 49 5a 45 20 35 30 30 0a 0a 2f 2a 0a 2a 2a  FSIZE 500../*.**
1620: 20 46 69 6e 64 20 74 68 65 20 6c 65 6e 67 74 68   Find the length
1630: 20 6f 66 20 61 20 73 74 72 69 6e 67 20 61 73 20   of a string as 
1640: 6c 6f 6e 67 20 61 73 20 74 68 61 74 20 6c 65 6e  long as that len
1650: 67 74 68 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  gth does not.** 
1660: 65 78 63 65 65 64 20 4e 20 62 79 74 65 73 2e 20  exceed N bytes. 
1670: 20 49 66 20 6e 6f 20 7a 65 72 6f 20 74 65 72 6d   If no zero term
1680: 69 6e 61 74 6f 72 20 69 73 20 73 65 65 6e 20 69  inator is seen i
1690: 6e 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 4e  n the first.** N
16a0: 20 62 79 74 65 73 20 74 68 65 6e 20 72 65 74 75   bytes then retu
16b0: 72 6e 20 4e 2e 20 20 49 66 20 4e 20 69 73 20 6e  rn N.  If N is n
16c0: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
16d0: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73  is routine.** is
16e0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 73 74   an alias for st
16f0: 72 6c 65 6e 28 29 2e 0a 2a 2f 0a 73 74 61 74 69  rlen()..*/.stati
1700: 63 20 69 6e 74 20 73 74 72 6e 6c 65 6e 28 63 6f  c int strnlen(co
1710: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
1720: 20 4e 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30   N){.  int n = 0
1730: 3b 0a 20 20 77 68 69 6c 65 28 20 28 4e 2d 2d 20  ;.  while( (N-- 
1740: 21 3d 20 30 29 20 26 26 20 2a 28 7a 2b 2b 29 21  != 0) && *(z++)!
1750: 3d 30 20 29 7b 20 6e 2b 2b 3b 20 7d 0a 20 20 72  =0 ){ n++; }.  r
1760: 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 0a 2f 2a 0a  eturn n;.}.../*.
1770: 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 72 6f 67  ** The root prog
1780: 72 61 6d 2e 20 20 41 6c 6c 20 76 61 72 69 61 74  ram.  All variat
1790: 69 6f 6e 73 20 63 61 6c 6c 20 74 68 69 73 20 63  ions call this c
17a0: 6f 72 65 2e 0a 2a 2a 0a 2a 2a 20 49 4e 50 55 54  ore..**.** INPUT
17b0: 53 3a 0a 2a 2a 20 20 20 66 75 6e 63 20 20 20 54  S:.**   func   T
17c0: 68 69 73 20 69 73 20 61 20 70 6f 69 6e 74 65 72  his is a pointer
17d0: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
17e0: 61 6b 69 6e 67 20 74 68 72 65 65 20 61 72 67 75  aking three argu
17f0: 6d 65 6e 74 73 0a 2a 2a 20 20 20 20 20 20 20 20  ments.**        
1800: 20 20 20 20 31 2e 20 41 20 70 6f 69 6e 74 65 72      1. A pointer
1810: 20 74 6f 20 61 6e 79 74 68 69 6e 67 2e 20 20 53   to anything.  S
1820: 61 6d 65 20 61 73 20 74 68 65 20 22 61 72 67 22  ame as the "arg"
1830: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2a 20 20   parameter..**  
1840: 20 20 20 20 20 20 20 20 20 20 32 2e 20 41 20 70            2. A p
1850: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 69  ointer to the li
1860: 73 74 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  st of characters
1870: 20 74 6f 20 62 65 20 6f 75 74 70 75 74 0a 2a 2a   to be output.**
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1890: 4e 6f 74 65 2c 20 74 68 69 73 20 6c 69 73 74 20  Note, this list 
18a0: 69 73 20 4e 4f 54 20 6e 75 6c 6c 20 74 65 72 6d  is NOT null term
18b0: 69 6e 61 74 65 64 2e 29 0a 2a 2a 20 20 20 20 20  inated.).**     
18c0: 20 20 20 20 20 20 20 33 2e 20 41 6e 20 69 6e 74         3. An int
18d0: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 63  eger number of c
18e0: 68 61 72 61 63 74 65 72 73 20 74 6f 20 62 65 20  haracters to be 
18f0: 6f 75 74 70 75 74 2e 0a 2a 2a 20 20 20 20 20 20  output..**      
1900: 20 20 20 20 20 20 20 20 20 28 4e 6f 74 65 3a 20           (Note: 
1910: 54 68 69 73 20 6e 75 6d 62 65 72 20 6d 69 67 68  This number migh
1920: 74 20 62 65 20 7a 65 72 6f 2e 29 0a 2a 2a 0a 2a  t be zero.).**.*
1930: 2a 20 20 20 61 72 67 20 20 20 20 54 68 69 73 20  *   arg    This 
1940: 69 73 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74  is the pointer t
1950: 6f 20 61 6e 79 74 68 69 6e 67 20 77 68 69 63 68  o anything which
1960: 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20   will be passed 
1970: 61 73 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20  as the.**       
1980: 20 20 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e     first argumen
1990: 74 20 74 6f 20 22 66 75 6e 63 22 2e 20 20 55 73  t to "func".  Us
19a0: 65 20 69 74 20 66 6f 72 20 77 68 61 74 65 76 65  e it for whateve
19b0: 72 20 79 6f 75 20 6c 69 6b 65 2e 0a 2a 2a 0a 2a  r you like..**.*
19c0: 2a 20 20 20 66 6d 74 20 20 20 20 54 68 69 73 20  *   fmt    This 
19d0: 69 73 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74  is the format st
19e0: 72 69 6e 67 2c 20 61 73 20 69 6e 20 74 68 65 20  ring, as in the 
19f0: 75 73 75 61 6c 20 70 72 69 6e 74 2e 0a 2a 2a 0a  usual print..**.
1a00: 2a 2a 20 20 20 61 70 20 20 20 20 20 54 68 69 73  **   ap     This
1a10: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1a20: 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
1a30: 65 6e 74 73 2e 20 20 53 61 6d 65 20 61 73 20 69  ents.  Same as i
1a40: 6e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 76 66  n.**          vf
1a50: 70 72 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 4f 55 54  print..**.** OUT
1a60: 50 55 54 53 3a 0a 2a 2a 20 20 20 20 20 20 20 20  PUTS:.**        
1a70: 20 20 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c    The return val
1a80: 75 65 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ue is the total 
1a90: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
1aa0: 74 65 72 73 20 73 65 6e 74 20 74 6f 0a 2a 2a 20  ters sent to.** 
1ab0: 20 20 20 20 20 20 20 20 20 74 68 65 20 66 75 6e           the fun
1ac0: 63 74 69 6f 6e 20 22 66 75 6e 63 22 2e 20 20 52  ction "func".  R
1ad0: 65 74 75 72 6e 73 20 2d 31 20 6f 6e 20 61 20 65  eturns -1 on a e
1ae0: 72 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  rror..**.** Note
1af0: 20 74 68 61 74 20 74 68 65 20 6f 72 64 65 72 20   that the order 
1b00: 69 6e 20 77 68 69 63 68 20 61 75 74 6f 6d 61 74  in which automat
1b10: 69 63 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ic variables are
1b20: 20 64 65 63 6c 61 72 65 64 20 62 65 6c 6f 77 0a   declared below.
1b30: 2a 2a 20 73 65 65 6d 73 20 74 6f 20 6d 61 6b 65  ** seems to make
1b40: 20 61 20 62 69 67 20 64 69 66 66 65 72 65 6e 63   a big differenc
1b50: 65 20 69 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67  e in determining
1b60: 20 68 6f 77 20 66 61 73 74 20 74 68 69 73 20 62   how fast this b
1b70: 65 61 73 74 0a 2a 2a 20 77 69 6c 6c 20 72 75 6e  east.** will run
1b80: 2e 0a 2a 2f 0a 69 6e 74 20 76 78 70 72 69 6e 74  ..*/.int vxprint
1b90: 66 28 0a 20 20 42 6c 6f 62 20 2a 70 42 6c 6f 62  f(.  Blob *pBlob
1ba0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1bb0: 20 20 20 20 20 20 20 20 2f 2a 20 41 70 70 65 6e          /* Appen
1bc0: 64 20 6f 75 74 70 75 74 20 74 6f 20 74 68 69 73  d output to this
1bd0: 20 62 6c 6f 62 20 2a 2f 0a 20 20 63 6f 6e 73 74   blob */.  const
1be0: 20 63 68 61 72 20 2a 66 6d 74 2c 20 20 20 20 20   char *fmt,     
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c00: 20 46 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a   Format string *
1c10: 2f 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 20 20  /.  va_list ap  
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 20 20 20 2f 2a 20 61 72 67 75 6d 65         /* argume
1c40: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  nts */.){.  int 
1c50: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1c60: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 63         /* Next c
1c70: 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 20  haracter in the 
1c80: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f  format string */
1c90: 0a 20 20 63 68 61 72 20 2a 62 75 66 70 74 3b 20  .  char *bufpt; 
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cb0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   Pointer to the 
1cc0: 63 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65  conversion buffe
1cd0: 72 20 2a 2f 0a 20 20 69 6e 74 20 70 72 65 63 69  r */.  int preci
1ce0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
1cf0: 20 20 2f 2a 20 50 72 65 63 69 73 69 6f 6e 20 6f    /* Precision o
1d00: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69  f the current fi
1d10: 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  eld */.  int len
1d20: 67 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  gth;            
1d30: 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
1d40: 20 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20   the field */.  
1d50: 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1d60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
1d70: 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20  general purpose 
1d80: 6c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  loop counter */.
1d90: 20 20 69 6e 74 20 63 6f 75 6e 74 3b 20 20 20 20    int count;    
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db0: 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
1dc0: 63 68 61 72 61 63 74 65 72 73 20 6f 75 74 70 75  characters outpu
1dd0: 74 20 2a 2f 0a 20 20 69 6e 74 20 77 69 64 74 68  t */.  int width
1de0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1df0: 20 20 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68    /* Width of th
1e00: 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20  e current field 
1e10: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
1e20: 5f 6c 65 66 74 6a 75 73 74 69 66 79 3b 20 20 20  _leftjustify;   
1e30: 2f 2a 20 54 72 75 65 20 69 66 20 22 2d 22 20 66  /* True if "-" f
1e40: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1e50: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1e60: 70 6c 75 73 73 69 67 6e 3b 20 20 20 20 20 20 2f  plussign;      /
1e70: 2a 20 54 72 75 65 20 69 66 20 22 2b 22 20 66 6c  * True if "+" fl
1e80: 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  ag is present */
1e90: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 62  .  etByte flag_b
1ea0: 6c 61 6e 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a  lanksign;     /*
1eb0: 20 54 72 75 65 20 69 66 20 22 20 22 20 66 6c 61   True if " " fla
1ec0: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  g is present */.
1ed0: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c    etByte flag_al
1ee0: 74 65 72 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20  ternateform; /* 
1ef0: 54 72 75 65 20 69 66 20 22 23 22 20 66 6c 61 67  True if "#" flag
1f00: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
1f10: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74   etByte flag_alt
1f20: 66 6f 72 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54  form2;      /* T
1f30: 72 75 65 20 69 66 20 22 21 22 20 66 6c 61 67 20  rue if "!" flag 
1f40: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1f50: 65 74 42 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f  etByte flag_zero
1f60: 70 61 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  pad;       /* Tr
1f70: 75 65 20 69 66 20 66 69 65 6c 64 20 77 69 64 74  ue if field widt
1f80: 68 20 63 6f 6e 73 74 61 6e 74 20 73 74 61 72 74  h constant start
1f90: 73 20 77 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20  s with zero */. 
1fa0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e   etByte flag_lon
1fb0: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  g;          /* T
1fc0: 72 75 65 20 69 66 20 22 6c 22 20 66 6c 61 67 20  rue if "l" flag 
1fd0: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1fe0: 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67  etByte flag_long
1ff0: 6c 6f 6e 67 3b 20 20 20 20 20 20 2f 2a 20 54 72  long;      /* Tr
2000: 75 65 20 69 66 20 74 68 65 20 22 6c 6c 22 20 66  ue if the "ll" f
2010: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
2020: 2f 0a 20 20 65 74 42 79 74 65 20 64 6f 6e 65 3b  /.  etByte done;
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2040: 2a 20 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69  * Loop terminati
2050: 6f 6e 20 66 6c 61 67 20 2a 2f 0a 20 20 75 36 34  on flag */.  u64
2060: 20 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 20 20   longvalue;     
2070: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
2080: 20 66 6f 72 20 69 6e 74 65 67 65 72 20 74 79 70   for integer typ
2090: 65 73 20 2a 2f 0a 20 20 6c 6f 6e 67 20 64 6f 75  es */.  long dou
20a0: 62 6c 65 20 72 65 61 6c 76 61 6c 75 65 3b 20 20  ble realvalue;  
20b0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20     /* Value for 
20c0: 72 65 61 6c 20 74 79 70 65 73 20 2a 2f 0a 20 20  real types */.  
20d0: 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20 2a 69  const et_info *i
20e0: 6e 66 6f 70 3b 20 20 20 20 20 20 2f 2a 20 50 6f  nfop;      /* Po
20f0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70 70  inter to the app
2100: 72 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74  ropriate info st
2110: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
2120: 72 20 62 75 66 5b 65 74 42 55 46 53 49 5a 45 5d  r buf[etBUFSIZE]
2130: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65  ;       /* Conve
2140: 72 73 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a  rsion buffer */.
2150: 20 20 63 68 61 72 20 70 72 65 66 69 78 3b 20 20    char prefix;  
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2170: 50 72 65 66 69 78 20 63 68 61 72 61 63 74 65 72  Prefix character
2180: 2e 20 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72  .  "+" or "-" or
2190: 20 22 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f   " " or '\0'. */
21a0: 0a 20 20 65 74 42 79 74 65 20 65 72 72 6f 72 66  .  etByte errorf
21b0: 6c 61 67 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  lag = 0;      /*
21c0: 20 54 72 75 65 20 69 66 20 61 6e 20 65 72 72 6f   True if an erro
21d0: 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
21e0: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 78 74 79   */.  etByte xty
21f0: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
2200: 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70   /* Conversion p
2210: 61 72 61 64 69 67 6d 20 2a 2f 0a 20 20 63 68 61  aradigm */.  cha
2220: 72 20 2a 7a 45 78 74 72 61 3b 20 20 20 20 20 20  r *zExtra;      
2230: 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
2240: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 66 6f 72   memory used for
2250: 20 65 74 54 43 4c 45 53 43 41 50 45 20 63 6f 6e   etTCLESCAPE con
2260: 76 65 72 73 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  versions */.  st
2270: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2280: 73 70 61 63 65 73 5b 5d 20 3d 0a 20 20 20 22 20  spaces[] =.   " 
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d0: 20 20 20 20 20 20 20 20 22 3b 0a 23 64 65 66 69          ";.#defi
22e0: 6e 65 20 65 74 53 50 41 43 45 53 49 5a 45 20 28  ne etSPACESIZE (
22f0: 73 69 7a 65 6f 66 28 73 70 61 63 65 73 29 2d 31  sizeof(spaces)-1
2300: 29 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32  ).  int  exp, e2
2310: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2320: 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65  * exponent of re
2330: 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  al numbers */.  
2340: 64 6f 75 62 6c 65 20 72 6f 75 6e 64 65 72 3b 20  double rounder; 
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2360: 65 64 20 66 6f 72 20 72 6f 75 6e 64 69 6e 67 20  ed for rounding 
2370: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
2380: 61 6c 75 65 73 20 2a 2f 0a 20 20 65 74 42 79 74  alues */.  etByt
2390: 65 20 66 6c 61 67 5f 64 70 3b 20 20 20 20 20 20  e flag_dp;      
23a0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
23b0: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 73   decimal point s
23c0: 68 6f 75 6c 64 20 62 65 20 73 68 6f 77 6e 20 2a  hould be shown *
23d0: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
23e0: 72 74 7a 3b 20 20 20 20 20 20 20 20 20 20 20 2f  rtz;           /
23f0: 2a 20 54 72 75 65 20 69 66 20 74 72 61 69 6c 69  * True if traili
2400: 6e 67 20 7a 65 72 6f 73 20 73 68 6f 75 6c 64 20  ng zeros should 
2410: 62 65 20 72 65 6d 6f 76 65 64 20 2a 2f 0a 20 20  be removed */.  
2420: 65 74 42 79 74 65 20 66 6c 61 67 5f 65 78 70 3b  etByte flag_exp;
2430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
2440: 75 65 20 74 6f 20 66 6f 72 63 65 20 64 69 73 70  ue to force disp
2450: 6c 61 79 20 6f 66 20 74 68 65 20 65 78 70 6f 6e  lay of the expon
2460: 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 73 64  ent */.  int nsd
2470: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2480: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2490: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   significant dig
24a0: 69 74 73 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a  its returned */.
24b0: 0a 20 20 63 6f 75 6e 74 20 3d 20 6c 65 6e 67 74  .  count = lengt
24c0: 68 20 3d 20 30 3b 0a 20 20 62 75 66 70 74 20 3d  h = 0;.  bufpt =
24d0: 20 30 3b 0a 20 20 66 6f 72 28 3b 20 28 63 3d 28   0;.  for(; (c=(
24e0: 2a 66 6d 74 29 29 21 3d 30 3b 20 2b 2b 66 6d 74  *fmt))!=0; ++fmt
24f0: 29 7b 0a 20 20 20 20 69 66 28 20 63 21 3d 27 25  ){.    if( c!='%
2500: 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 61  ' ){.      int a
2510: 6d 74 3b 0a 20 20 20 20 20 20 62 75 66 70 74 20  mt;.      bufpt 
2520: 3d 20 28 63 68 61 72 20 2a 29 66 6d 74 3b 0a 20  = (char *)fmt;. 
2530: 20 20 20 20 20 61 6d 74 20 3d 20 31 3b 0a 20 20       amt = 1;.  
2540: 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d 28 2a      while( (c=(*
2550: 2b 2b 66 6d 74 29 29 21 3d 27 25 27 20 26 26 20  ++fmt))!='%' && 
2560: 63 21 3d 30 20 29 20 61 6d 74 2b 2b 3b 0a 20 20  c!=0 ) amt++;.  
2570: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28      blob_append(
2580: 70 42 6c 6f 62 2c 62 75 66 70 74 2c 61 6d 74 29  pBlob,bufpt,amt)
2590: 3b 0a 20 20 20 20 20 20 63 6f 75 6e 74 20 2b 3d  ;.      count +=
25a0: 20 61 6d 74 3b 0a 20 20 20 20 20 20 69 66 28 20   amt;.      if( 
25b0: 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  c==0 ) break;.  
25c0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 63 3d 28    }.    if( (c=(
25d0: 2a 2b 2b 66 6d 74 29 29 3d 3d 30 20 29 7b 0a 20  *++fmt))==0 ){. 
25e0: 20 20 20 20 20 65 72 72 6f 72 66 6c 61 67 20 3d       errorflag =
25f0: 20 31 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61   1;.      blob_a
2600: 70 70 65 6e 64 28 70 42 6c 6f 62 2c 22 25 22 2c  ppend(pBlob,"%",
2610: 31 29 3b 0a 20 20 20 20 20 20 63 6f 75 6e 74 2b  1);.      count+
2620: 2b 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  +;.      break;.
2630: 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 69 6e      }.    /* Fin
2640: 64 20 6f 75 74 20 77 68 61 74 20 66 6c 61 67 73  d out what flags
2650: 20 61 72 65 20 70 72 65 73 65 6e 74 20 2a 2f 0a   are present */.
2660: 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73      flag_leftjus
2670: 74 69 66 79 20 3d 20 66 6c 61 67 5f 70 6c 75 73  tify = flag_plus
2680: 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62 6c 61 6e  sign = flag_blan
2690: 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20 20 66 6c  ksign = .     fl
26a0: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
26b0: 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32   = flag_altform2
26c0: 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20   = flag_zeropad 
26d0: 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20 3d 20  = 0;.    done = 
26e0: 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  0;.    do{.     
26f0: 20 73 77 69 74 63 68 28 20 63 20 29 7b 0a 20 20   switch( c ){.  
2700: 20 20 20 20 20 20 63 61 73 65 20 27 2d 27 3a 20        case '-': 
2710: 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69    flag_leftjusti
2720: 66 79 20 3d 20 31 3b 20 20 20 20 20 62 72 65 61  fy = 1;     brea
2730: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
2740: 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70 6c 75 73  '+':   flag_plus
2750: 73 69 67 6e 20 3d 20 31 3b 20 20 20 20 20 20 20  sign = 1;       
2760: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2770: 63 61 73 65 20 27 20 27 3a 20 20 20 66 6c 61 67  case ' ':   flag
2780: 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 31 3b 20  _blanksign = 1; 
2790: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
27a0: 20 20 20 20 20 63 61 73 65 20 27 23 27 3a 20 20       case '#':  
27b0: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
27c0: 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72 65 61 6b  orm = 1;   break
27d0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  ;.        case '
27e0: 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f  !':   flag_altfo
27f0: 72 6d 32 20 3d 20 31 3b 20 20 20 20 20 20 20 20  rm2 = 1;        
2800: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2810: 61 73 65 20 27 30 27 3a 20 20 20 66 6c 61 67 5f  ase '0':   flag_
2820: 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20 20 20 20  zeropad = 1;    
2830: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2840: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
2850: 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20 20 20 20  done = 1;       
2860: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68  .      }.    }wh
2880: 69 6c 65 28 20 21 64 6f 6e 65 20 26 26 20 28 63  ile( !done && (c
2890: 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30 20 29 3b  =(*++fmt))!=0 );
28a0: 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 20  .    /* Get the 
28b0: 66 69 65 6c 64 20 77 69 64 74 68 20 2a 2f 0a 20  field width */. 
28c0: 20 20 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20     width = 0;.  
28d0: 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a    if( c=='*' ){.
28e0: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 76 61        width = va
28f0: 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
2900: 20 20 20 20 69 66 28 20 77 69 64 74 68 3c 30 20      if( width<0 
2910: 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  ){.        flag_
2920: 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20 31 3b  leftjustify = 1;
2930: 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d  .        width =
2940: 20 2d 77 69 64 74 68 3b 0a 20 20 20 20 20 20 7d   -width;.      }
2950: 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d  .      c = *++fm
2960: 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
2970: 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30      while( c>='0
2980: 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20  ' && c<='9' ){. 
2990: 20 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 77         width = w
29a0: 69 64 74 68 2a 31 30 20 2b 20 63 20 2d 20 27 30  idth*10 + c - '0
29b0: 27 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a  ';.        c = *
29c0: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 0a 20  ++fmt;.      }. 
29d0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 77 69 64     }.    if( wid
29e0: 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45 2d 31  th > etBUFSIZE-1
29f0: 30 20 29 7b 0a 20 20 20 20 20 20 77 69 64 74 68  0 ){.      width
2a00: 20 3d 20 65 74 42 55 46 53 49 5a 45 2d 31 30 3b   = etBUFSIZE-10;
2a10: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65  .    }.    /* Ge
2a20: 74 20 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20  t the precision 
2a30: 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2e  */.    if( c=='.
2a40: 27 20 29 7b 0a 20 20 20 20 20 20 70 72 65 63 69  ' ){.      preci
2a50: 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  sion = 0;.      
2a60: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
2a70: 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a    if( c=='*' ){.
2a80: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
2a90: 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  n = va_arg(ap,in
2aa0: 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
2ab0: 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 20 70 72  precision<0 ) pr
2ac0: 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72 65 63 69  ecision = -preci
2ad0: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 63 20  sion;.        c 
2ae0: 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20  = *++fmt;.      
2af0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 77  }else{.        w
2b00: 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26 26 20  hile( c>='0' && 
2b10: 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20 20 20  c<='9' ){.      
2b20: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
2b30: 70 72 65 63 69 73 69 6f 6e 2a 31 30 20 2b 20 63  precision*10 + c
2b40: 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   - '0';.        
2b50: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2b60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
2b70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2b80: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 31 3b   precision = -1;
2b90: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65  .    }.    /* Ge
2ba0: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
2bb0: 20 74 79 70 65 20 6d 6f 64 69 66 69 65 72 20 2a   type modifier *
2bc0: 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27  /.    if( c=='l'
2bd0: 20 29 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c   ){.      flag_l
2be0: 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 63  ong = 1;.      c
2bf0: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
2c00: 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20   if( c=='l' ){. 
2c10: 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67         flag_long
2c20: 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  long = 1;.      
2c30: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2c40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2c50: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67     flag_longlong
2c60: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
2c70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66    }else{.      f
2c80: 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c 61 67 5f  lag_long = flag_
2c90: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20  longlong = 0;.  
2ca0: 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65 74 63 68    }.    /* Fetch
2cb0: 20 74 68 65 20 69 6e 66 6f 20 65 6e 74 72 79 20   the info entry 
2cc0: 66 6f 72 20 74 68 65 20 66 69 65 6c 64 20 2a 2f  for the field */
2cd0: 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20 30 3b 0a  .    infop = 0;.
2ce0: 20 20 20 20 78 74 79 70 65 20 3d 20 65 74 45 52      xtype = etER
2cf0: 52 4f 52 3b 0a 20 20 20 20 66 6f 72 28 69 64 78  ROR;.    for(idx
2d00: 3d 30 3b 20 69 64 78 3c 65 74 4e 49 4e 46 4f 3b  =0; idx<etNINFO;
2d10: 20 69 64 78 2b 2b 29 7b 0a 20 20 20 20 20 20 69   idx++){.      i
2d20: 66 28 20 63 3d 3d 66 6d 74 69 6e 66 6f 5b 69 64  f( c==fmtinfo[id
2d30: 78 5d 2e 66 6d 74 74 79 70 65 20 29 7b 0a 20 20  x].fmttype ){.  
2d40: 20 20 20 20 20 20 69 6e 66 6f 70 20 3d 20 26 66        infop = &f
2d50: 6d 74 69 6e 66 6f 5b 69 64 78 5d 3b 0a 20 20 20  mtinfo[idx];.   
2d60: 20 20 20 20 20 78 74 79 70 65 20 3d 20 69 6e 66       xtype = inf
2d70: 6f 70 2d 3e 74 79 70 65 3b 0a 20 20 20 20 20 20  op->type;.      
2d80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
2d90: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 78 74 72  .    }.    zExtr
2da0: 61 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 4c  a = 0;..    /* L
2db0: 69 6d 69 74 20 74 68 65 20 70 72 65 63 69 73 69  imit the precisi
2dc0: 6f 6e 20 74 6f 20 70 72 65 76 65 6e 74 20 6f 76  on to prevent ov
2dd0: 65 72 66 6c 6f 77 69 6e 67 20 62 75 66 5b 5d 20  erflowing buf[] 
2de0: 64 75 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f  during conversio
2df0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 72 65  n */.    if( pre
2e00: 63 69 73 69 6f 6e 3e 65 74 42 55 46 53 49 5a 45  cision>etBUFSIZE
2e10: 2d 34 30 20 26 26 20 28 69 6e 66 6f 70 2d 3e 66  -40 && (infop->f
2e20: 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 54 52 49  lags & FLAG_STRI
2e30: 4e 47 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  NG)==0 ){.      
2e40: 70 72 65 63 69 73 69 6f 6e 20 3d 20 65 74 42 55  precision = etBU
2e50: 46 53 49 5a 45 2d 34 30 3b 0a 20 20 20 20 7d 0a  FSIZE-40;.    }.
2e60: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 41  .    /*.    ** A
2e70: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 76 61  t this point, va
2e80: 72 69 61 62 6c 65 73 20 61 72 65 20 69 6e 69 74  riables are init
2e90: 69 61 6c 69 7a 65 64 20 61 73 20 66 6f 6c 6c 6f  ialized as follo
2ea0: 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ws:.    **.    *
2eb0: 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  *   flag_alterna
2ec0: 74 65 66 6f 72 6d 20 20 20 20 20 20 20 20 20 20  teform          
2ed0: 54 52 55 45 20 69 66 20 61 20 27 23 27 20 69 73  TRUE if a '#' is
2ee0: 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a   present..    **
2ef0: 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32     flag_altform2
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2f10: 52 55 45 20 69 66 20 61 20 27 21 27 20 69 73 20  RUE if a '!' is 
2f20: 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20  present..    ** 
2f30: 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20    flag_plussign 
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
2f50: 55 45 20 69 66 20 61 20 27 2b 27 20 69 73 20 70  UE if a '+' is p
2f60: 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20  resent..    **  
2f70: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
2f80: 79 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55  y            TRU
2f90: 45 20 69 66 20 61 20 27 2d 27 20 69 73 20 70 72  E if a '-' is pr
2fa0: 65 73 65 6e 74 20 6f 72 20 69 66 20 74 68 65 0a  esent or if the.
2fb0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd0: 20 20 20 20 20 66 69 65 6c 64 20 77 69 64 74 68       field width
2fe0: 20 77 61 73 20 6e 65 67 61 74 69 76 65 2e 0a 20   was negative.. 
2ff0: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 7a 65 72     **   flag_zer
3000: 6f 70 61 64 20 20 20 20 20 20 20 20 20 20 20 20  opad            
3010: 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20      TRUE if the 
3020: 77 69 64 74 68 20 62 65 67 61 6e 20 77 69 74 68  width began with
3030: 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61   0..    **   fla
3040: 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20  g_long          
3050: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3060: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 27 20   the letter 'l' 
3070: 28 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20  (ell) prefixed. 
3080: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69      the conversi
30b0: 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20  on character..  
30c0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e 67    **   flag_long
30d0: 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 20  long            
30e0: 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20 6c     TRUE if the l
30f0: 65 74 74 65 72 20 27 6c 6c 27 20 28 65 6c 6c 20  etter 'll' (ell 
3100: 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20 20  ell) prefixed.  
3110: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20    **            
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f     the conversio
3140: 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 20  n character..   
3150: 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c 61 6e 6b   **   flag_blank
3160: 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20 20  sign            
3170: 20 20 54 52 55 45 20 69 66 20 61 20 27 20 27 20    TRUE if a ' ' 
3180: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20  is present..    
3190: 2a 2a 20 20 20 77 69 64 74 68 20 20 20 20 20 20  **   width      
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b0: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 66   The specified f
31c0: 69 65 6c 64 20 77 69 64 74 68 2e 20 20 54 68 69  ield width.  Thi
31d0: 73 20 69 73 0a 20 20 20 20 2a 2a 20 20 20 20 20  s is.    **     
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f0: 20 20 20 20 20 20 20 20 20 20 61 6c 77 61 79 73            always
3200: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
3210: 5a 65 72 6f 20 69 73 20 74 68 65 20 64 65 66 61  Zero is the defa
3220: 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20 20 70 72  ult..    **   pr
3230: 65 63 69 73 69 6f 6e 20 20 20 20 20 20 20 20 20  ecision         
3240: 20 20 20 20 20 20 20 20 20 20 54 68 65 20 73 70            The sp
3250: 65 63 69 66 69 65 64 20 70 72 65 63 69 73 69 6f  ecified precisio
3260: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0a  n.  The default.
3270: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3290: 20 20 20 20 20 69 73 20 2d 31 2e 0a 20 20 20 20       is -1..    
32a0: 2a 2a 20 20 20 78 74 79 70 65 20 20 20 20 20 20  **   xtype      
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 20 54 68 65 20 63 6c 61 73 73 20 6f 66 20 74 68   The class of th
32d0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a 20 20  e conversion..  
32e0: 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20 20 20 20    **   infop    
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68     Pointer to th
3310: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
3320: 66 6f 20 73 74 72 75 63 74 2e 0a 20 20 20 20 2a  fo struct..    *
3330: 2f 0a 20 20 20 20 73 77 69 74 63 68 28 20 78 74  /.    switch( xt
3340: 79 70 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ype ){.      cas
3350: 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a 20 20 20  e etPOINTER:.   
3360: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f       flag_longlo
3370: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72  ng = sizeof(char
3380: 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36 34 29 3b  *)==sizeof(i64);
3390: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f  .        flag_lo
33a0: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72  ng = sizeof(char
33b0: 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f 6e 67 20  *)==sizeof(long 
33c0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  int);.        /*
33d0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
33e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
33f0: 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65   */.      case e
3400: 74 52 41 44 49 58 3a 0a 20 20 20 20 20 20 20 20  tRADIX:.        
3410: 69 66 28 20 69 6e 66 6f 70 2d 3e 66 6c 61 67 73  if( infop->flags
3420: 20 26 20 46 4c 41 47 5f 53 49 47 4e 45 44 20 29   & FLAG_SIGNED )
3430: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 36 34 20  {.          i64 
3440: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  v;.          if(
3450: 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29   flag_longlong )
3460: 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70     v = va_arg(ap
3470: 2c 69 36 34 29 3b 0a 20 20 20 20 20 20 20 20 20  ,i64);.         
3480: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 6c   else if( flag_l
3490: 6f 6e 67 20 29 20 20 76 20 3d 20 76 61 5f 61 72  ong )  v = va_ar
34a0: 67 28 61 70 2c 6c 6f 6e 67 20 69 6e 74 29 3b 0a  g(ap,long int);.
34b0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 20            else  
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d0: 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  v = va_arg(ap,in
34e0: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
34f0: 28 20 76 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  ( v<0 ){.       
3500: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3510: 20 2d 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20   -v;.           
3520: 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20   prefix = '-';. 
3530: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
3540: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
3550: 76 61 6c 75 65 20 3d 20 76 3b 0a 20 20 20 20 20  value = v;.     
3560: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
3570: 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20 20 20  plussign )      
3580: 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27 3b 0a    prefix = '+';.
3590: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
35a0: 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e 6b 73   if( flag_blanks
35b0: 69 67 6e 20 29 20 20 70 72 65 66 69 78 20 3d 20  ign )  prefix = 
35c0: 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ';.           
35d0: 20 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20   else           
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 66              pref
35f0: 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ix = 0;.        
3600: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
3610: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  e{.          if(
3620: 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29   flag_longlong )
3630: 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76     longvalue = v
3640: 61 5f 61 72 67 28 61 70 2c 75 36 34 29 3b 0a 20  a_arg(ap,u64);. 
3650: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
3660: 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 20 20 6c  ( flag_long )  l
3670: 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72  ongvalue = va_ar
3680: 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 6c 6f  g(ap,unsigned lo
3690: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ng int);.       
36a0: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
36b0: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
36c0: 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 75  ue = va_arg(ap,u
36d0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 20 20  nsigned int);.  
36e0: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
36f0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
3700: 20 20 20 20 20 20 69 66 28 20 6c 6f 6e 67 76 61        if( longva
3710: 6c 75 65 3d 3d 30 20 29 20 66 6c 61 67 5f 61 6c  lue==0 ) flag_al
3720: 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20 30 3b  ternateform = 0;
3730: 0a 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61  .        if( fla
3740: 67 5f 7a 65 72 6f 70 61 64 20 26 26 20 70 72 65  g_zeropad && pre
3750: 63 69 73 69 6f 6e 3c 77 69 64 74 68 2d 28 70 72  cision<width-(pr
3760: 65 66 69 78 21 3d 30 29 20 29 7b 0a 20 20 20 20  efix!=0) ){.    
3770: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
3780: 3d 20 77 69 64 74 68 2d 28 70 72 65 66 69 78 21  = width-(prefix!
3790: 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  =0);.        }. 
37a0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 26         bufpt = &
37b0: 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d 31 5d  buf[etBUFSIZE-1]
37c0: 3b 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ;.        {.    
37d0: 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20 63        register c
37e0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 73 65 74 3b  onst char *cset;
37f0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 72 65 67        /* Use reg
3800: 69 73 74 65 72 73 20 66 6f 72 20 73 70 65 65 64  isters for speed
3810: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65   */.          re
3820: 67 69 73 74 65 72 20 69 6e 74 20 62 61 73 65 3b  gister int base;
3830: 0a 20 20 20 20 20 20 20 20 20 20 63 73 65 74 20  .          cset 
3840: 3d 20 26 61 44 69 67 69 74 73 5b 69 6e 66 6f 70  = &aDigits[infop
3850: 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 20  ->charset];.    
3860: 20 20 20 20 20 20 62 61 73 65 20 3d 20 69 6e 66        base = inf
3870: 6f 70 2d 3e 62 61 73 65 3b 0a 20 20 20 20 20 20  op->base;.      
3880: 20 20 20 20 64 6f 7b 20 20 20 20 20 20 20 20 20      do{         
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38b0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 74 6f 20    /* Convert to 
38c0: 61 73 63 69 69 20 2a 2f 0a 20 20 20 20 20 20 20  ascii */.       
38d0: 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20       *(--bufpt) 
38e0: 3d 20 63 73 65 74 5b 6c 6f 6e 67 76 61 6c 75 65  = cset[longvalue
38f0: 25 62 61 73 65 5d 3b 0a 20 20 20 20 20 20 20 20  %base];.        
3900: 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20      longvalue = 
3910: 6c 6f 6e 67 76 61 6c 75 65 2f 62 61 73 65 3b 0a  longvalue/base;.
3920: 20 20 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65            }while
3930: 28 20 6c 6f 6e 67 76 61 6c 75 65 3e 30 20 29 3b  ( longvalue>0 );
3940: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
3950: 20 20 20 6c 65 6e 67 74 68 20 3d 20 26 62 75 66     length = &buf
3960: 5b 65 74 42 55 46 53 49 5a 45 2d 31 5d 2d 62 75  [etBUFSIZE-1]-bu
3970: 66 70 74 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  fpt;.        for
3980: 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2d 6c  (idx=precision-l
3990: 65 6e 67 74 68 3b 20 69 64 78 3e 30 3b 20 69 64  ength; idx>0; id
39a0: 78 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20  x--){.          
39b0: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27 30 27  *(--bufpt) = '0'
39c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
39e0: 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20 20 20   Zero pad */.   
39f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
3a00: 66 28 20 70 72 65 66 69 78 20 29 20 2a 28 2d 2d  f( prefix ) *(--
3a10: 62 75 66 70 74 29 20 3d 20 70 72 65 66 69 78 3b  bufpt) = prefix;
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3a30: 2a 20 41 64 64 20 73 69 67 6e 20 2a 2f 0a 20 20  * Add sign */.  
3a40: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 61        if( flag_a
3a50: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 26 26 20  lternateform && 
3a60: 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 20 29 7b  infop->prefix ){
3a70: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 22 30 22        /* Add "0"
3a80: 20 6f 72 20 22 30 78 22 20 2a 2f 0a 20 20 20 20   or "0x" */.    
3a90: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
3aa0: 20 2a 70 72 65 3b 0a 20 20 20 20 20 20 20 20 20   *pre;.         
3ab0: 20 63 68 61 72 20 78 3b 0a 20 20 20 20 20 20 20   char x;.       
3ac0: 20 20 20 70 72 65 20 3d 20 26 61 50 72 65 66 69     pre = &aPrefi
3ad0: 78 5b 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 5d  x[infop->prefix]
3ae0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
3af0: 2a 62 75 66 70 74 21 3d 70 72 65 5b 30 5d 20 29  *bufpt!=pre[0] )
3b00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  {.            fo
3b10: 72 28 3b 20 28 78 3d 28 2a 70 72 65 29 29 21 3d  r(; (x=(*pre))!=
3b20: 30 3b 20 70 72 65 2b 2b 29 20 2a 28 2d 2d 62 75  0; pre++) *(--bu
3b30: 66 70 74 29 20 3d 20 78 3b 0a 20 20 20 20 20 20  fpt) = x;.      
3b40: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
3b50: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
3b60: 20 26 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d   &buf[etBUFSIZE-
3b70: 31 5d 2d 62 75 66 70 74 3b 0a 20 20 20 20 20 20  1]-bufpt;.      
3b80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
3b90: 61 73 65 20 65 74 46 4c 4f 41 54 3a 0a 20 20 20  ase etFLOAT:.   
3ba0: 20 20 20 63 61 73 65 20 65 74 45 58 50 3a 0a 20     case etEXP:. 
3bb0: 20 20 20 20 20 63 61 73 65 20 65 74 47 45 4e 45       case etGENE
3bc0: 52 49 43 3a 0a 20 20 20 20 20 20 20 20 72 65 61  RIC:.        rea
3bd0: 6c 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28  lvalue = va_arg(
3be0: 61 70 2c 64 6f 75 62 6c 65 29 3b 0a 20 20 20 20  ap,double);.    
3bf0: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
3c00: 6e 3c 30 20 29 20 70 72 65 63 69 73 69 6f 6e 20  n<0 ) precision 
3c10: 3d 20 36 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 6;         /* 
3c20: 53 65 74 20 64 65 66 61 75 6c 74 20 70 72 65 63  Set default prec
3c30: 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20  ision */.       
3c40: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 65   if( precision>e
3c50: 74 42 55 46 53 49 5a 45 2f 32 2d 31 30 20 29 20  tBUFSIZE/2-10 ) 
3c60: 70 72 65 63 69 73 69 6f 6e 20 3d 20 65 74 42 55  precision = etBU
3c70: 46 53 49 5a 45 2f 32 2d 31 30 3b 0a 20 20 20 20  FSIZE/2-10;.    
3c80: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75      if( realvalu
3c90: 65 3c 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20  e<0.0 ){.       
3ca0: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d     realvalue = -
3cb0: 72 65 61 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20  realvalue;.     
3cc0: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d       prefix = '-
3cd0: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
3ce0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
3cf0: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20  flag_plussign ) 
3d00: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
3d10: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
3d20: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62   else if( flag_b
3d30: 6c 61 6e 6b 73 69 67 6e 20 29 20 20 20 20 70 72  lanksign )    pr
3d40: 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20  efix = ' ';.    
3d50: 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20        else      
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
3d80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3d90: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
3da0: 4e 45 52 49 43 20 26 26 20 70 72 65 63 69 73 69  NERIC && precisi
3db0: 6f 6e 3e 30 20 29 20 70 72 65 63 69 73 69 6f 6e  on>0 ) precision
3dc0: 2d 2d 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  --;.#if 0.      
3dd0: 20 20 2f 2a 20 52 6f 75 6e 64 69 6e 67 20 77 6f    /* Rounding wo
3de0: 72 6b 73 20 6c 69 6b 65 20 42 53 44 20 77 68 65  rks like BSD whe
3df0: 6e 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 30  n the constant 0
3e00: 2e 34 39 39 39 20 69 73 20 75 73 65 64 2e 20 20  .4999 is used.  
3e10: 57 69 65 72 64 21 20 2a 2f 0a 20 20 20 20 20 20  Wierd! */.      
3e20: 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73    for(idx=precis
3e30: 69 6f 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 34  ion, rounder=0.4
3e40: 39 39 39 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d  999; idx>0; idx-
3e50: 2d 2c 20 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29  -, rounder*=0.1)
3e60: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20 20  ;.#else.        
3e70: 2f 2a 20 49 74 20 6d 61 6b 65 73 20 6d 6f 72 65  /* It makes more
3e80: 20 73 65 6e 73 65 20 74 6f 20 75 73 65 20 30 2e   sense to use 0.
3e90: 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  5 */.        for
3ea0: 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20  (idx=precision, 
3eb0: 72 6f 75 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78  rounder=0.5; idx
3ec0: 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64  >0; idx--, round
3ed0: 65 72 2a 3d 30 2e 31 29 3b 0a 23 65 6e 64 69 66  er*=0.1);.#endif
3ee0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79  .        if( xty
3ef0: 70 65 3d 3d 65 74 46 4c 4f 41 54 20 29 20 72 65  pe==etFLOAT ) re
3f00: 61 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64  alvalue += round
3f10: 65 72 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e  er;.        /* N
3f20: 6f 72 6d 61 6c 69 7a 65 20 72 65 61 6c 76 61 6c  ormalize realval
3f30: 75 65 20 74 6f 20 77 69 74 68 69 6e 20 31 30 2e  ue to within 10.
3f40: 30 20 3e 20 72 65 61 6c 76 61 6c 75 65 20 3e 3d  0 > realvalue >=
3f50: 20 31 2e 30 20 2a 2f 0a 20 20 20 20 20 20 20 20   1.0 */.        
3f60: 65 78 70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  exp = 0;.       
3f70: 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65 3e 30   if( realvalue>0
3f80: 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  .0 ){.          
3f90: 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65  while( realvalue
3fa0: 3e 3d 31 65 33 32 20 26 26 20 65 78 70 3c 3d 33  >=1e32 && exp<=3
3fb0: 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20  50 ){ realvalue 
3fc0: 2a 3d 20 31 65 2d 33 32 3b 20 65 78 70 2b 3d 33  *= 1e-32; exp+=3
3fd0: 32 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77  2; }.          w
3fe0: 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e  hile( realvalue>
3ff0: 3d 31 65 38 20 26 26 20 65 78 70 3c 3d 33 35 30  =1e8 && exp<=350
4000: 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d   ){ realvalue *=
4010: 20 31 65 2d 38 3b 20 65 78 70 2b 3d 38 3b 20 7d   1e-8; exp+=8; }
4020: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65  .          while
4030: 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e  ( realvalue>=10.
4040: 30 20 26 26 20 65 78 70 3c 3d 33 35 30 20 29 7b  0 && exp<=350 ){
4050: 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 30 2e   realvalue *= 0.
4060: 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20  1; exp++; }.    
4070: 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61        while( rea
4080: 6c 76 61 6c 75 65 3c 31 65 2d 38 20 26 26 20 65  lvalue<1e-8 && e
4090: 78 70 3e 3d 2d 33 35 30 20 29 7b 20 72 65 61 6c  xp>=-350 ){ real
40a0: 76 61 6c 75 65 20 2a 3d 20 31 65 38 3b 20 65 78  value *= 1e8; ex
40b0: 70 2d 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20  p-=8; }.        
40c0: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
40d0: 75 65 3c 31 2e 30 20 26 26 20 65 78 70 3e 3d 2d  ue<1.0 && exp>=-
40e0: 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  350 ){ realvalue
40f0: 20 2a 3d 20 31 30 2e 30 3b 20 65 78 70 2d 2d 3b   *= 10.0; exp--;
4100: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
4110: 20 65 78 70 3e 33 35 30 20 7c 7c 20 65 78 70 3c   exp>350 || exp<
4120: 2d 33 35 30 20 29 7b 0a 20 20 20 20 20 20 20 20  -350 ){.        
4130: 20 20 20 20 62 75 66 70 74 20 3d 20 22 4e 61 4e      bufpt = "NaN
4140: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ";.            l
4150: 65 6e 67 74 68 20 3d 20 33 3b 0a 20 20 20 20 20  ength = 3;.     
4160: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4170: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4180: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70    }.        bufp
4190: 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20  t = buf;.       
41a0: 20 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 49   /*.        ** I
41b0: 66 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65  f the field type
41c0: 20 69 73 20 65 74 47 45 4e 45 52 49 43 2c 20 74   is etGENERIC, t
41d0: 68 65 6e 20 63 6f 6e 76 65 72 74 20 74 6f 20 65  hen convert to e
41e0: 69 74 68 65 72 20 65 74 45 58 50 0a 20 20 20 20  ither etEXP.    
41f0: 20 20 20 20 2a 2a 20 6f 72 20 65 74 46 4c 4f 41      ** or etFLOA
4200: 54 2c 20 61 73 20 61 70 70 72 6f 70 72 69 61 74  T, as appropriat
4210: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
4220: 20 20 20 20 20 20 66 6c 61 67 5f 65 78 70 20 3d        flag_exp =
4230: 20 78 74 79 70 65 3d 3d 65 74 45 58 50 3b 0a 20   xtype==etEXP;. 
4240: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
4250: 21 3d 65 74 46 4c 4f 41 54 20 29 7b 0a 20 20 20  !=etFLOAT ){.   
4260: 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65         realvalue
4270: 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20   += rounder;.   
4280: 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76         if( realv
4290: 61 6c 75 65 3e 3d 31 30 2e 30 20 29 7b 20 72 65  alue>=10.0 ){ re
42a0: 61 6c 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20  alvalue *= 0.1; 
42b0: 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  exp++; }.       
42c0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 78   }.        if( x
42d0: 74 79 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 20  type==etGENERIC 
42e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61  ){.          fla
42f0: 67 5f 72 74 7a 20 3d 20 21 66 6c 61 67 5f 61 6c  g_rtz = !flag_al
4300: 74 65 72 6e 61 74 65 66 6f 72 6d 3b 0a 20 20 20  ternateform;.   
4310: 20 20 20 20 20 20 20 69 66 28 20 65 78 70 3c 2d         if( exp<-
4320: 34 20 7c 7c 20 65 78 70 3e 70 72 65 63 69 73 69  4 || exp>precisi
4330: 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
4340: 20 20 78 74 79 70 65 20 3d 20 65 74 45 58 50 3b    xtype = etEXP;
4350: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
4360: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  {.            pr
4370: 65 63 69 73 69 6f 6e 20 3d 20 70 72 65 63 69 73  ecision = precis
4380: 69 6f 6e 20 2d 20 65 78 70 3b 0a 20 20 20 20 20  ion - exp;.     
4390: 20 20 20 20 20 20 20 78 74 79 70 65 20 3d 20 65         xtype = e
43a0: 74 46 4c 4f 41 54 3b 0a 20 20 20 20 20 20 20 20  tFLOAT;.        
43b0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
43c0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61  e{.          fla
43d0: 67 5f 72 74 7a 20 3d 20 30 3b 0a 20 20 20 20 20  g_rtz = 0;.     
43e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
43f0: 20 78 74 79 70 65 3d 3d 65 74 45 58 50 20 29 7b   xtype==etEXP ){
4400: 0a 20 20 20 20 20 20 20 20 20 20 65 32 20 3d 20  .          e2 = 
4410: 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  0;.        }else
4420: 7b 0a 20 20 20 20 20 20 20 20 20 20 65 32 20 3d  {.          e2 =
4430: 20 65 78 70 3b 0a 20 20 20 20 20 20 20 20 7d 0a   exp;.        }.
4440: 20 20 20 20 20 20 20 20 6e 73 64 20 3d 20 30 3b          nsd = 0;
4450: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 64 70  .        flag_dp
4460: 20 3d 20 28 70 72 65 63 69 73 69 6f 6e 3e 30 29   = (precision>0)
4470: 20 7c 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74   | flag_alternat
4480: 65 66 6f 72 6d 20 7c 20 66 6c 61 67 5f 61 6c 74  eform | flag_alt
4490: 66 6f 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 2f  form2;.        /
44a0: 2a 20 54 68 65 20 73 69 67 6e 20 69 6e 20 66 72  * The sign in fr
44b0: 6f 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  ont of the numbe
44c0: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
44d0: 20 70 72 65 66 69 78 20 29 7b 0a 20 20 20 20 20   prefix ){.     
44e0: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
44f0: 3d 20 70 72 65 66 69 78 3b 0a 20 20 20 20 20 20  = prefix;.      
4500: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 44    }.        /* D
4510: 69 67 69 74 73 20 70 72 69 6f 72 20 74 6f 20 74  igits prior to t
4520: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
4530: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
4540: 65 32 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e2<0 ){.        
4550: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27    *(bufpt++) = '
4560: 30 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  0';.        }els
4570: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  e{.          for
4580: 28 3b 20 65 32 3e 3d 30 3b 20 65 32 2d 2d 29 7b  (; e2>=0; e2--){
4590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62  .            *(b
45a0: 75 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 74  ufpt++) = et_get
45b0: 64 69 67 69 74 28 26 72 65 61 6c 76 61 6c 75 65  digit(&realvalue
45c0: 2c 26 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 20  ,&nsd);.        
45d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
45e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 63        /* The dec
45f0: 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20  imal point */.  
4600: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 64        if( flag_d
4610: 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a  p ){.          *
4620: 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 2e 27 3b  (bufpt++) = '.';
4630: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4640: 20 20 20 2f 2a 20 22 30 22 20 64 69 67 69 74 73     /* "0" digits
4650: 20 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d   after the decim
4660: 61 6c 20 70 6f 69 6e 74 20 62 75 74 20 62 65 66  al point but bef
4670: 6f 72 65 20 74 68 65 20 66 69 72 73 74 0a 20 20  ore the first.  
4680: 20 20 20 20 20 20 2a 2a 20 73 69 67 6e 69 66 69        ** signifi
4690: 63 61 6e 74 20 64 69 67 69 74 20 6f 66 20 74 68  cant digit of th
46a0: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
46b0: 20 20 20 20 66 6f 72 28 65 32 2b 2b 3b 20 65 32      for(e2++; e2
46c0: 3c 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3e  <0 && precision>
46d0: 30 3b 20 70 72 65 63 69 73 69 6f 6e 2d 2d 2c 20  0; precision--, 
46e0: 65 32 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  e2++){.         
46f0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30   *(bufpt++) = '0
4700: 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ';.        }.   
4710: 20 20 20 20 20 2f 2a 20 53 69 67 6e 69 66 69 63       /* Signific
4720: 61 6e 74 20 64 69 67 69 74 73 20 61 66 74 65 72  ant digits after
4730: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
4740: 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 77 68  nt */.        wh
4750: 69 6c 65 28 20 28 70 72 65 63 69 73 69 6f 6e 2d  ile( (precision-
4760: 2d 29 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  -)>0 ){.        
4770: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 65    *(bufpt++) = e
4780: 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61 6c  t_getdigit(&real
4790: 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20  value,&nsd);.   
47a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
47b0: 2a 20 52 65 6d 6f 76 65 20 74 72 61 69 6c 69 6e  * Remove trailin
47c0: 67 20 7a 65 72 6f 73 20 61 6e 64 20 74 68 65 20  g zeros and the 
47d0: 22 2e 22 20 69 66 20 6e 6f 20 64 69 67 69 74 73  "." if no digits
47e0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 22 2e 22 20   follow the "." 
47f0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  */.        if( f
4800: 6c 61 67 5f 72 74 7a 20 26 26 20 66 6c 61 67 5f  lag_rtz && flag_
4810: 64 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  dp ){.          
4820: 77 68 69 6c 65 28 20 62 75 66 70 74 5b 2d 31 5d  while( bufpt[-1]
4830: 3d 3d 27 30 27 20 29 20 2a 28 2d 2d 62 75 66 70  =='0' ) *(--bufp
4840: 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  t) = 0;.        
4850: 20 20 61 73 73 65 72 74 28 20 62 75 66 70 74 3e    assert( bufpt>
4860: 62 75 66 20 29 3b 0a 20 20 20 20 20 20 20 20 20  buf );.         
4870: 20 69 66 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d   if( bufpt[-1]==
4880: 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '.' ){.         
4890: 20 20 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 66     if( flag_altf
48a0: 6f 72 6d 32 20 29 7b 0a 20 20 20 20 20 20 20 20  orm2 ){.        
48b0: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
48c0: 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   = '0';.        
48d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
48e0: 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66           *(--buf
48f0: 70 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  pt) = 0;.       
4900: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4910: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4920: 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20       /* Add the 
4930: 22 65 4e 4e 4e 22 20 73 75 66 66 69 78 20 2a 2f  "eNNN" suffix */
4940: 0a 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61  .        if( fla
4950: 67 5f 65 78 70 20 7c 7c 20 28 78 74 79 70 65 3d  g_exp || (xtype=
4960: 3d 65 74 45 58 50 20 26 26 20 65 78 70 29 20 29  =etEXP && exp) )
4970: 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  {.          *(bu
4980: 66 70 74 2b 2b 29 20 3d 20 61 44 69 67 69 74 73  fpt++) = aDigits
4990: 5b 69 6e 66 6f 70 2d 3e 63 68 61 72 73 65 74 5d  [infop->charset]
49a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
49b0: 65 78 70 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  exp<0 ){.       
49c0: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
49d0: 3d 20 27 2d 27 3b 20 65 78 70 20 3d 20 2d 65 78  = '-'; exp = -ex
49e0: 70 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  p;.          }el
49f0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
4a00: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 2b 27  *(bufpt++) = '+'
4a10: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
4a20: 20 20 20 20 20 20 20 20 69 66 28 20 65 78 70 3e          if( exp>
4a30: 3d 31 30 30 20 29 7b 0a 20 20 20 20 20 20 20 20  =100 ){.        
4a40: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4a50: 20 28 65 78 70 2f 31 30 30 29 2b 27 30 27 3b 20   (exp/100)+'0'; 
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4a70: 2a 20 31 30 30 27 73 20 64 69 67 69 74 20 2a 2f  * 100's digit */
4a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70  .            exp
4a90: 20 25 3d 20 31 30 30 3b 0a 20 20 20 20 20 20 20   %= 100;.       
4aa0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2a     }.          *
4ab0: 28 62 75 66 70 74 2b 2b 29 20 3d 20 65 78 70 2f  (bufpt++) = exp/
4ac0: 31 30 2b 27 30 27 3b 20 20 20 20 20 20 20 20 20  10+'0';         
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
4ae0: 30 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20  0's digit */.   
4af0: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4b00: 29 20 3d 20 65 78 70 25 31 30 2b 27 30 27 3b 20  ) = exp%10+'0'; 
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 20 20 2f 2a 20 31 27 73 20 64 69 67 69 74      /* 1's digit
4b30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
4b40: 20 20 20 20 20 20 2a 62 75 66 70 74 20 3d 20 30        *bufpt = 0
4b50: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;..        /* Th
4b60: 65 20 63 6f 6e 76 65 72 74 65 64 20 6e 75 6d 62  e converted numb
4b70: 65 72 20 69 73 20 69 6e 20 62 75 66 5b 5d 20 61  er is in buf[] a
4b80: 6e 64 20 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74  nd zero terminat
4b90: 65 64 2e 20 4f 75 74 70 75 74 20 69 74 2e 0a 20  ed. Output it.. 
4ba0: 20 20 20 20 20 20 20 2a 2a 20 4e 6f 74 65 20 74         ** Note t
4bb0: 68 61 74 20 74 68 65 20 6e 75 6d 62 65 72 20 69  hat the number i
4bc0: 73 20 69 6e 20 74 68 65 20 75 73 75 61 6c 20 6f  s in the usual o
4bd0: 72 64 65 72 2c 20 6e 6f 74 20 72 65 76 65 72 73  rder, not revers
4be0: 65 64 20 61 73 20 77 69 74 68 0a 20 20 20 20 20  ed as with.     
4bf0: 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 20 63 6f     ** integer co
4c00: 6e 76 65 72 73 69 6f 6e 73 2e 20 2a 2f 0a 20 20  nversions. */.  
4c10: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 62        length = b
4c20: 75 66 70 74 2d 62 75 66 3b 0a 20 20 20 20 20 20  ufpt-buf;.      
4c30: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 0a    bufpt = buf;..
4c40: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 65 63 69          /* Speci
4c50: 61 6c 20 63 61 73 65 3a 20 20 41 64 64 20 6c 65  al case:  Add le
4c60: 61 64 69 6e 67 20 7a 65 72 6f 73 20 69 66 20 74  ading zeros if t
4c70: 68 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20  he flag_zeropad 
4c80: 66 6c 61 67 20 69 73 0a 20 20 20 20 20 20 20 20  flag is.        
4c90: 2a 2a 20 73 65 74 20 61 6e 64 20 77 65 20 61 72  ** set and we ar
4ca0: 65 20 6e 6f 74 20 6c 65 66 74 20 6a 75 73 74 69  e not left justi
4cb0: 66 69 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20  fied */.        
4cc0: 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  if( flag_zeropad
4cd0: 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75   && !flag_leftju
4ce0: 73 74 69 66 79 20 26 26 20 6c 65 6e 67 74 68 20  stify && length 
4cf0: 3c 20 77 69 64 74 68 29 7b 0a 20 20 20 20 20 20  < width){.      
4d00: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
4d10: 20 20 20 20 20 69 6e 74 20 6e 50 61 64 20 3d 20       int nPad = 
4d20: 77 69 64 74 68 20 2d 20 6c 65 6e 67 74 68 3b 0a  width - length;.
4d30: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d            for(i=
4d40: 77 69 64 74 68 3b 20 69 3e 3d 6e 50 61 64 3b 20  width; i>=nPad; 
4d50: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i--){.          
4d60: 20 20 62 75 66 70 74 5b 69 5d 20 3d 20 62 75 66    bufpt[i] = buf
4d70: 70 74 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 20 20  pt[i-nPad];.    
4d80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4d90: 20 20 69 20 3d 20 70 72 65 66 69 78 21 3d 30 3b    i = prefix!=0;
4da0: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65  .          while
4db0: 28 20 6e 50 61 64 2d 2d 20 29 20 62 75 66 70 74  ( nPad-- ) bufpt
4dc0: 5b 69 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 20 20  [i++] = '0';.   
4dd0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
4de0: 77 69 64 74 68 3b 0a 20 20 20 20 20 20 20 20 7d  width;.        }
4df0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
4e00: 20 20 20 20 20 20 63 61 73 65 20 65 74 53 49 5a        case etSIZ
4e10: 45 3a 0a 20 20 20 20 20 20 20 20 2a 28 76 61 5f  E:.        *(va_
4e20: 61 72 67 28 61 70 2c 69 6e 74 2a 29 29 20 3d 20  arg(ap,int*)) = 
4e30: 63 6f 75 6e 74 3b 0a 20 20 20 20 20 20 20 20 6c  count;.        l
4e40: 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20  ength = width = 
4e50: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
4e60: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 50  ;.      case etP
4e70: 45 52 43 45 4e 54 3a 0a 20 20 20 20 20 20 20 20  ERCENT:.        
4e80: 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20  buf[0] = '%';.  
4e90: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
4ea0: 66 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  f;.        lengt
4eb0: 68 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  h = 1;.        b
4ec0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
4ed0: 20 65 74 43 48 41 52 58 3a 0a 20 20 20 20 20 20   etCHARX:.      
4ee0: 20 20 63 20 3d 20 62 75 66 5b 30 5d 20 3d 20 28    c = buf[0] = (
4ef0: 78 74 79 70 65 3d 3d 65 74 43 48 41 52 58 20 3f  xtype==etCHARX ?
4f00: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 20   va_arg(ap,int) 
4f10: 3a 20 2a 2b 2b 66 6d 74 29 3b 0a 20 20 20 20 20  : *++fmt);.     
4f20: 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e     if( precision
4f30: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  >=0 ){.         
4f40: 20 66 6f 72 28 69 64 78 3d 31 3b 20 69 64 78 3c   for(idx=1; idx<
4f50: 70 72 65 63 69 73 69 6f 6e 3b 20 69 64 78 2b 2b  precision; idx++
4f60: 29 20 62 75 66 5b 69 64 78 5d 20 3d 20 63 3b 0a  ) buf[idx] = c;.
4f70: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68            length
4f80: 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20   = precision;.  
4f90: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4fa0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 31         length =1
4fb0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4fc0: 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b      bufpt = buf;
4fd0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
4fe0: 20 20 20 20 20 20 63 61 73 65 20 65 74 50 41 54        case etPAT
4ff0: 48 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  H: {.        int
5000: 20 69 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   i;.        int 
5010: 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f 61 6c 74  limit = flag_alt
5020: 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20 76 61 5f  ernateform ? va_
5030: 61 72 67 28 61 70 2c 69 6e 74 29 20 3a 20 2d 31  arg(ap,int) : -1
5040: 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  ;.        char *
5050: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68  e = va_arg(ap,ch
5060: 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ar*);.        if
5070: 28 20 65 3d 3d 30 20 29 7b 65 3d 22 22 3b 7d 0a  ( e==0 ){e="";}.
5080: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
5090: 20 73 74 72 6e 6c 65 6e 28 65 2c 20 6c 69 6d 69   strnlen(e, limi
50a0: 74 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 78 74  t);.        zExt
50b0: 72 61 20 3d 20 62 75 66 70 74 20 3d 20 6d 61 6c  ra = bufpt = mal
50c0: 6c 6f 63 28 6c 65 6e 67 74 68 2b 31 29 3b 0a 20  loc(length+1);. 
50d0: 20 20 20 20 20 20 20 66 6f 72 28 20 69 3d 30 3b         for( i=0;
50e0: 20 69 3c 6c 65 6e 67 74 68 3b 20 69 2b 2b 20 29   i<length; i++ )
50f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
5100: 65 5b 69 5d 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20  e[i]=='\\' ){.  
5110: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 5b            bufpt[
5120: 69 5d 3d 27 2f 27 3b 0a 20 20 20 20 20 20 20 20  i]='/';.        
5130: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
5140: 20 20 20 20 20 62 75 66 70 74 5b 69 5d 3d 65 5b       bufpt[i]=e[
5150: 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  i];.          }.
5160: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5170: 20 20 62 75 66 70 74 5b 6c 65 6e 67 74 68 5d 3d    bufpt[length]=
5180: 27 5c 30 27 3b 0a 20 20 20 20 20 20 20 20 62 72  '\0';.        br
5190: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
51a0: 20 20 20 63 61 73 65 20 65 74 53 54 52 49 4e 47     case etSTRING
51b0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 44  :.      case etD
51c0: 59 4e 53 54 52 49 4e 47 3a 20 7b 0a 20 20 20 20  YNSTRING: {.    
51d0: 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20      int limit = 
51e0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
51f0: 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 69  rm ? va_arg(ap,i
5200: 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20  nt) : -1;.      
5210: 20 20 62 75 66 70 74 20 3d 20 76 61 5f 61 72 67    bufpt = va_arg
5220: 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20  (ap,char*);.    
5230: 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30      if( bufpt==0
5240: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75   ){.          bu
5250: 66 70 74 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  fpt = "";.      
5260: 20 20 7d 65 6c 73 65 20 69 66 28 20 78 74 79 70    }else if( xtyp
5270: 65 3d 3d 65 74 44 59 4e 53 54 52 49 4e 47 20 29  e==etDYNSTRING )
5280: 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 45 78 74  {.          zExt
5290: 72 61 20 3d 20 62 75 66 70 74 3b 0a 20 20 20 20  ra = bufpt;.    
52a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65      }.        le
52b0: 6e 67 74 68 20 3d 20 73 74 72 6e 6c 65 6e 28 62  ngth = strnlen(b
52c0: 75 66 70 74 2c 20 6c 69 6d 69 74 29 3b 0a 20 20  ufpt, limit);.  
52d0: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
52e0: 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73  ion>=0 && precis
52f0: 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e  ion<length ) len
5300: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b  gth = precision;
5310: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5320: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
5330: 73 65 20 65 74 42 4c 4f 42 3a 20 7b 0a 20 20 20  se etBLOB: {.   
5340: 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
5350: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
5360: 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c  orm ? va_arg(ap,
5370: 20 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20   int) : -1;.    
5380: 20 20 20 20 42 6c 6f 62 20 2a 70 42 6c 6f 62 20      Blob *pBlob 
5390: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 42 6c 6f  = va_arg(ap, Blo
53a0: 62 2a 29 3b 0a 20 20 20 20 20 20 20 20 62 75 66  b*);.        buf
53b0: 70 74 20 3d 20 62 6c 6f 62 5f 62 75 66 66 65 72  pt = blob_buffer
53c0: 28 70 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20  (pBlob);.       
53d0: 20 6c 65 6e 67 74 68 20 3d 20 62 6c 6f 62 5f 73   length = blob_s
53e0: 69 7a 65 28 70 42 6c 6f 62 29 3b 0a 20 20 20 20  ize(pBlob);.    
53f0: 20 20 20 20 69 66 28 20 6c 69 6d 69 74 3e 3d 30      if( limit>=0
5400: 20 26 26 20 6c 69 6d 69 74 3c 6c 65 6e 67 74 68   && limit<length
5410: 20 29 20 6c 65 6e 67 74 68 20 3d 20 6c 69 6d 69   ) length = limi
5420: 74 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  t;.        break
5430: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5440: 63 61 73 65 20 65 74 42 4c 4f 42 53 51 4c 3a 20  case etBLOBSQL: 
5450: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69  {.        int li
5460: 6d 69 74 20 3d 20 66 6c 61 67 5f 61 6c 74 65 72  mit = flag_alter
5470: 6e 61 74 65 66 6f 72 6d 20 3f 20 76 61 5f 61 72  nateform ? va_ar
5480: 67 28 61 70 2c 20 69 6e 74 29 20 3a 20 2d 31 3b  g(ap, int) : -1;
5490: 0a 20 20 20 20 20 20 20 20 42 6c 6f 62 20 2a 70  .        Blob *p
54a0: 42 6c 6f 62 20 3d 20 76 61 5f 61 72 67 28 61 70  Blob = va_arg(ap
54b0: 2c 20 42 6c 6f 62 2a 29 3b 0a 20 20 20 20 20 20  , Blob*);.      
54c0: 20 20 63 68 61 72 20 2a 7a 4f 72 69 67 20 3d 20    char *zOrig = 
54d0: 62 6c 6f 62 5f 62 75 66 66 65 72 28 70 42 6c 6f  blob_buffer(pBlo
54e0: 62 29 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  b);.        int 
54f0: 69 2c 20 6a 2c 20 6e 2c 20 63 6e 74 3b 0a 20 20  i, j, n, cnt;.  
5500: 20 20 20 20 20 20 6e 20 3d 20 62 6c 6f 62 5f 73        n = blob_s
5510: 69 7a 65 28 70 42 6c 6f 62 29 3b 0a 20 20 20 20  ize(pBlob);.    
5520: 20 20 20 20 69 66 28 20 6c 69 6d 69 74 3e 3d 30      if( limit>=0
5530: 20 26 26 20 6c 69 6d 69 74 3c 6e 20 29 20 6e 20   && limit<n ) n 
5540: 3d 20 6c 69 6d 69 74 3b 0a 20 20 20 20 20 20 20  = limit;.       
5550: 20 66 6f 72 28 63 6e 74 3d 69 3d 30 3b 20 69 3c   for(cnt=i=0; i<
5560: 6e 3b 20 69 2b 2b 29 7b 20 69 66 28 20 7a 4f 72  n; i++){ if( zOr
5570: 69 67 5b 69 5d 3d 3d 27 5c 27 27 20 29 20 63 6e  ig[i]=='\'' ) cn
5580: 74 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 69  t++; }.        i
5590: 66 28 20 6e 2b 63 6e 74 2b 32 20 3e 20 65 74 42  f( n+cnt+2 > etB
55a0: 55 46 53 49 5a 45 20 29 7b 0a 20 20 20 20 20 20  UFSIZE ){.      
55b0: 20 20 20 20 62 75 66 70 74 20 3d 20 7a 45 78 74      bufpt = zExt
55c0: 72 61 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 2b  ra = malloc( n +
55d0: 20 63 6e 74 20 2b 20 32 20 29 3b 0a 20 20 20 20   cnt + 2 );.    
55e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
55f0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66       bufpt = buf
5600: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5610: 20 20 20 20 62 75 66 70 74 5b 30 5d 20 3d 20 27      bufpt[0] = '
5620: 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  \'';.        for
5630: 28 69 3d 30 2c 20 6a 3d 31 3b 20 69 3c 6e 3b 20  (i=0, j=1; i<n; 
5640: 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  i++, j++){.     
5650: 20 20 20 20 20 69 66 28 20 7a 4f 72 69 67 5b 69       if( zOrig[i
5660: 5d 3d 3d 27 5c 27 27 20 29 7b 20 62 75 66 70 74  ]=='\'' ){ bufpt
5670: 5b 6a 2b 2b 5d 20 3d 20 27 5c 27 27 3b 20 7d 0a  [j++] = '\''; }.
5680: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 5b            bufpt[
5690: 6a 5d 20 3d 20 7a 4f 72 69 67 5b 69 5d 3b 0a 20  j] = zOrig[i];. 
56a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
56b0: 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 27 5c   bufpt[j++] = '\
56c0: 27 27 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67  '';.        leng
56d0: 74 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20 20 20  th = j;.        
56e0: 61 73 73 65 72 74 28 20 6c 65 6e 67 74 68 3d 3d  assert( length==
56f0: 6e 2b 63 6e 74 2b 32 20 29 3b 0a 20 20 20 20 20  n+cnt+2 );.     
5700: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5710: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53  }.      case etS
5720: 51 4c 45 53 43 41 50 45 3a 0a 20 20 20 20 20 20  QLESCAPE:.      
5730: 63 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45  case etSQLESCAPE
5740: 32 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  2: {.        int
5750: 20 69 2c 20 6a 2c 20 6e 2c 20 63 68 2c 20 69 73   i, j, n, ch, is
5760: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 6e  null;.        in
5770: 74 20 6e 65 65 64 51 75 6f 74 65 3b 0a 20 20 20  t needQuote;.   
5780: 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
5790: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
57a0: 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c  orm ? va_arg(ap,
57b0: 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20  int) : -1;.     
57c0: 20 20 20 63 68 61 72 20 2a 65 73 63 61 72 67 20     char *escarg 
57d0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72  = va_arg(ap,char
57e0: 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 73 6e 75  *);.        isnu
57f0: 6c 6c 20 3d 20 65 73 63 61 72 67 3d 3d 30 3b 0a  ll = escarg==0;.
5800: 20 20 20 20 20 20 20 20 69 66 28 20 69 73 6e 75          if( isnu
5810: 6c 6c 20 29 20 65 73 63 61 72 67 20 3d 20 28 78  ll ) escarg = (x
5820: 74 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50  type==etSQLESCAP
5830: 45 32 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 22 28  E2 ? "NULL" : "(
5840: 4e 55 4c 4c 29 22 29 3b 0a 20 20 20 20 20 20 20  NULL)");.       
5850: 20 69 66 28 20 6c 69 6d 69 74 3c 30 20 29 20 6c   if( limit<0 ) l
5860: 69 6d 69 74 20 3d 20 73 74 72 6c 65 6e 28 65 73  imit = strlen(es
5870: 63 61 72 67 29 3b 0a 20 20 20 20 20 20 20 20 66  carg);.        f
5880: 6f 72 28 69 3d 6e 3d 30 3b 20 69 3c 6c 69 6d 69  or(i=n=0; i<limi
5890: 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t; i++){.       
58a0: 20 20 20 69 66 28 20 65 73 63 61 72 67 5b 69 5d     if( escarg[i]
58b0: 3d 3d 27 5c 27 27 20 29 20 20 6e 2b 2b 3b 0a 20  =='\'' )  n++;. 
58c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
58d0: 20 6e 65 65 64 51 75 6f 74 65 20 3d 20 21 69 73   needQuote = !is
58e0: 6e 75 6c 6c 20 26 26 20 78 74 79 70 65 3d 3d 65  null && xtype==e
58f0: 74 53 51 4c 45 53 43 41 50 45 32 3b 0a 20 20 20  tSQLESCAPE2;.   
5900: 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b 20 31 20       n += i + 1 
5910: 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32 3b 0a 20  + needQuote*2;. 
5920: 20 20 20 20 20 20 20 69 66 28 20 6e 3e 65 74 42         if( n>etB
5930: 55 46 53 49 5a 45 20 29 7b 0a 20 20 20 20 20 20  UFSIZE ){.      
5940: 20 20 20 20 62 75 66 70 74 20 3d 20 7a 45 78 74      bufpt = zExt
5950: 72 61 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 29  ra = malloc( n )
5960: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
5970: 62 75 66 70 74 3d 3d 30 20 29 20 72 65 74 75 72  bufpt==0 ) retur
5980: 6e 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 65  n -1;.        }e
5990: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62  lse{.          b
59a0: 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20  ufpt = buf;.    
59b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6a 20      }.        j 
59c0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 0;.        if(
59d0: 20 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66   needQuote ) buf
59e0: 70 74 5b 6a 2b 2b 5d 20 3d 20 27 5c 27 27 3b 0a  pt[j++] = '\'';.
59f0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
5a00: 20 69 3c 6c 69 6d 69 74 3b 20 69 2b 2b 29 7b 0a   i<limit; i++){.
5a10: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 5b            bufpt[
5a20: 6a 2b 2b 5d 20 3d 20 63 68 20 3d 20 65 73 63 61  j++] = ch = esca
5a30: 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  rg[i];.         
5a40: 20 69 66 28 20 63 68 3d 3d 27 5c 27 27 20 29 20   if( ch=='\'' ) 
5a50: 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68 3b  bufpt[j++] = ch;
5a60: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5a70: 20 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65     if( needQuote
5a80: 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20   ) bufpt[j++] = 
5a90: 27 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 62 75  '\'';.        bu
5aa0: 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20  fpt[j] = 0;.    
5ab0: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 6a 3b 0a      length = j;.
5ac0: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63          if( prec
5ad0: 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63  ision>=0 && prec
5ae0: 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c  ision<length ) l
5af0: 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f  ength = precisio
5b00: 6e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  n;.        break
5b10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5b20: 63 61 73 65 20 65 74 48 54 4d 4c 49 5a 45 3a 20  case etHTMLIZE: 
5b30: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69  {.        int li
5b40: 6d 69 74 20 3d 20 66 6c 61 67 5f 61 6c 74 65 72  mit = flag_alter
5b50: 6e 61 74 65 66 6f 72 6d 20 3f 20 76 61 5f 61 72  nateform ? va_ar
5b60: 67 28 61 70 2c 69 6e 74 29 20 3a 20 2d 31 3b 0a  g(ap,int) : -1;.
5b70: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4d          char *zM
5b80: 65 6d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 63  em = va_arg(ap,c
5b90: 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 69  har*);.        i
5ba0: 66 28 20 7a 4d 65 6d 3d 3d 30 20 29 20 7a 4d 65  f( zMem==0 ) zMe
5bb0: 6d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20  m = "";.        
5bc0: 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74 20 3d  zExtra = bufpt =
5bd0: 20 68 74 6d 6c 69 7a 65 28 7a 4d 65 6d 2c 20 6c   htmlize(zMem, l
5be0: 69 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 6c  imit);.        l
5bf0: 65 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e 28 62  ength = strlen(b
5c00: 75 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 69  ufpt);.        i
5c10: 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20  f( precision>=0 
5c20: 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 6c 65 6e  && precision<len
5c30: 67 74 68 20 29 20 6c 65 6e 67 74 68 20 3d 20 70  gth ) length = p
5c40: 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20  recision;.      
5c50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
5c60: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 48 54  .      case etHT
5c70: 54 50 49 5a 45 3a 20 7b 0a 20 20 20 20 20 20 20  TPIZE: {.       
5c80: 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61   int limit = fla
5c90: 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20  g_alternateform 
5ca0: 3f 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29  ? va_arg(ap,int)
5cb0: 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 63   : -1;.        c
5cc0: 68 61 72 20 2a 7a 4d 65 6d 20 3d 20 76 61 5f 61  har *zMem = va_a
5cd0: 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20  rg(ap,char*);.  
5ce0: 20 20 20 20 20 20 69 66 28 20 7a 4d 65 6d 3d 3d        if( zMem==
5cf0: 30 20 29 20 7a 4d 65 6d 20 3d 20 22 22 3b 0a 20  0 ) zMem = "";. 
5d00: 20 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20         zExtra = 
5d10: 62 75 66 70 74 20 3d 20 68 74 74 70 69 7a 65 28  bufpt = httpize(
5d20: 7a 4d 65 6d 2c 20 6c 69 6d 69 74 29 3b 0a 20 20  zMem, limit);.  
5d30: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73        length = s
5d40: 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a 20 20  trlen(bufpt);.  
5d50: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
5d60: 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73  ion>=0 && precis
5d70: 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e  ion<length ) len
5d80: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b  gth = precision;
5d90: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5da0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
5db0: 73 65 20 65 74 55 52 4c 49 5a 45 3a 20 7b 0a 20  se etURLIZE: {. 
5dc0: 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74         int limit
5dd0: 20 3d 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74   = flag_alternat
5de0: 65 66 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61  eform ? va_arg(a
5df0: 70 2c 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20  p,int) : -1;.   
5e00: 20 20 20 20 20 63 68 61 72 20 2a 7a 4d 65 6d 20       char *zMem 
5e10: 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72  = va_arg(ap,char
5e20: 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  *);.        if( 
5e30: 7a 4d 65 6d 3d 3d 30 20 29 20 7a 4d 65 6d 20 3d  zMem==0 ) zMem =
5e40: 20 22 22 3b 0a 20 20 20 20 20 20 20 20 7a 45 78   "";.        zEx
5e50: 74 72 61 20 3d 20 62 75 66 70 74 20 3d 20 75 72  tra = bufpt = ur
5e60: 6c 69 7a 65 28 7a 4d 65 6d 2c 20 6c 69 6d 69 74  lize(zMem, limit
5e70: 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  );.        lengt
5e80: 68 20 3d 20 73 74 72 6c 65 6e 28 62 75 66 70 74  h = strlen(bufpt
5e90: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
5ea0: 72 65 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70  recision>=0 && p
5eb0: 72 65 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20  recision<length 
5ec0: 29 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69  ) length = preci
5ed0: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 62 72  sion;.        br
5ee0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
5ef0: 20 20 20 63 61 73 65 20 65 74 46 4f 53 53 49 4c     case etFOSSIL
5f00: 49 5a 45 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  IZE: {.        i
5f10: 6e 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f  nt limit = flag_
5f20: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20  alternateform ? 
5f30: 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 20 3a  va_arg(ap,int) :
5f40: 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 63 68 61   -1;.        cha
5f50: 72 20 2a 7a 4d 65 6d 20 3d 20 76 61 5f 61 72 67  r *zMem = va_arg
5f60: 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20  (ap,char*);.    
5f70: 20 20 20 20 69 66 28 20 7a 4d 65 6d 3d 3d 30 20      if( zMem==0 
5f80: 29 20 7a 4d 65 6d 20 3d 20 22 22 3b 0a 20 20 20  ) zMem = "";.   
5f90: 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62 75       zExtra = bu
5fa0: 66 70 74 20 3d 20 66 6f 73 73 69 6c 69 7a 65 28  fpt = fossilize(
5fb0: 7a 4d 65 6d 2c 20 6c 69 6d 69 74 29 3b 0a 20 20  zMem, limit);.  
5fc0: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73        length = s
5fd0: 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a 20 20  trlen(bufpt);.  
5fe0: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
5ff0: 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73  ion>=0 && precis
6000: 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e  ion<length ) len
6010: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b  gth = precision;
6020: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
6030: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
6040: 73 65 20 65 74 57 49 4b 49 53 54 52 3a 20 7b 0a  se etWIKISTR: {.
6050: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69          int limi
6060: 74 20 3d 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  t = flag_alterna
6070: 74 65 66 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28  teform ? va_arg(
6080: 61 70 2c 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20  ap,int) : -1;.  
6090: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 57 69 6b        char *zWik
60a0: 69 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 63  i = va_arg(ap, c
60b0: 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 42  har*);.        B
60c0: 6c 6f 62 20 77 69 6b 69 3b 0a 20 20 20 20 20 20  lob wiki;.      
60d0: 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 77 69 6b    blob_init(&wik
60e0: 69 2c 20 7a 57 69 6b 69 2c 20 6c 69 6d 69 74 29  i, zWiki, limit)
60f0: 3b 0a 20 20 20 20 20 20 20 20 77 69 6b 69 5f 63  ;.        wiki_c
6100: 6f 6e 76 65 72 74 28 26 77 69 6b 69 2c 20 70 42  onvert(&wiki, pB
6110: 6c 6f 62 2c 20 57 49 4b 49 5f 49 4e 4c 49 4e 45  lob, WIKI_INLINE
6120: 29 3b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f  );.        blob_
6130: 72 65 73 65 74 28 26 77 69 6b 69 29 3b 0a 20 20  reset(&wiki);.  
6140: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77        length = w
6150: 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20  idth = 0;.      
6160: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
6170: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 57 49  .      case etWI
6180: 4b 49 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20  KIBLOB: {.      
6190: 20 20 42 6c 6f 62 20 2a 70 57 69 6b 69 20 3d 20    Blob *pWiki = 
61a0: 76 61 5f 61 72 67 28 61 70 2c 20 42 6c 6f 62 2a  va_arg(ap, Blob*
61b0: 29 3b 0a 20 20 20 20 20 20 20 20 77 69 6b 69 5f  );.        wiki_
61c0: 63 6f 6e 76 65 72 74 28 70 57 69 6b 69 2c 20 70  convert(pWiki, p
61d0: 42 6c 6f 62 2c 20 57 49 4b 49 5f 49 4e 4c 49 4e  Blob, WIKI_INLIN
61e0: 45 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67  E);.        leng
61f0: 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a  th = width = 0;.
6200: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
6210: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
6220: 65 20 65 74 45 52 52 4f 52 3a 0a 20 20 20 20 20  e etERROR:.     
6230: 20 20 20 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b     buf[0] = '%';
6240: 0a 20 20 20 20 20 20 20 20 62 75 66 5b 31 5d 20  .        buf[1] 
6250: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 65 72 72  = c;.        err
6260: 6f 72 66 6c 61 67 20 3d 20 30 3b 0a 20 20 20 20  orflag = 0;.    
6270: 20 20 20 20 69 64 78 20 3d 20 31 2b 28 63 21 3d      idx = 1+(c!=
6280: 30 29 3b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62  0);.        blob
6290: 5f 61 70 70 65 6e 64 28 70 42 6c 6f 62 2c 22 25  _append(pBlob,"%
62a0: 22 2c 69 64 78 29 3b 0a 20 20 20 20 20 20 20 20  ",idx);.        
62b0: 63 6f 75 6e 74 20 2b 3d 20 69 64 78 3b 0a 20 20  count += idx;.  
62c0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29        if( c==0 )
62d0: 20 66 6d 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20   fmt--;.        
62e0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 2f 2a 20 45  break;.    }/* E
62f0: 6e 64 20 73 77 69 74 63 68 20 6f 76 65 72 20 74  nd switch over t
6300: 68 65 20 66 6f 72 6d 61 74 20 74 79 70 65 20 2a  he format type *
6310: 2f 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20  /.    /*.    ** 
6320: 54 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  The text of the 
6330: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f  conversion is po
6340: 69 6e 74 65 64 20 74 6f 20 62 79 20 22 62 75 66  inted to by "buf
6350: 70 74 22 20 61 6e 64 20 69 73 0a 20 20 20 20 2a  pt" and is.    *
6360: 2a 20 22 6c 65 6e 67 74 68 22 20 63 68 61 72 61  * "length" chara
6370: 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
6380: 20 66 69 65 6c 64 20 77 69 64 74 68 20 69 73 20   field width is 
6390: 22 77 69 64 74 68 22 2e 20 20 44 6f 0a 20 20 20  "width".  Do.   
63a0: 20 2a 2a 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   ** the output..
63b0: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21      */.    if( !
63c0: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
63d0: 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74   ){.      regist
63e0: 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20  er int nspace;. 
63f0: 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69       nspace = wi
6400: 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20  dth-length;.    
6410: 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29    if( nspace>0 )
6420: 7b 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74 20  {.        count 
6430: 2b 3d 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20  += nspace;.     
6440: 20 20 20 77 68 69 6c 65 28 20 6e 73 70 61 63 65     while( nspace
6450: 3e 3d 65 74 53 50 41 43 45 53 49 5a 45 20 29 7b  >=etSPACESIZE ){
6460: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f  .          blob_
6470: 61 70 70 65 6e 64 28 70 42 6c 6f 62 2c 73 70 61  append(pBlob,spa
6480: 63 65 73 2c 65 74 53 50 41 43 45 53 49 5a 45 29  ces,etSPACESIZE)
6490: 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 73 70 61  ;.          nspa
64a0: 63 65 20 2d 3d 20 65 74 53 50 41 43 45 53 49 5a  ce -= etSPACESIZ
64b0: 45 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  E;.        }.   
64c0: 20 20 20 20 20 69 66 28 20 6e 73 70 61 63 65 3e       if( nspace>
64d0: 30 20 29 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28  0 ) blob_append(
64e0: 70 42 6c 6f 62 2c 73 70 61 63 65 73 2c 6e 73 70  pBlob,spaces,nsp
64f0: 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ace);.      }.  
6500: 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 65 6e 67    }.    if( leng
6510: 74 68 3e 30 20 29 7b 0a 20 20 20 20 20 20 62 6c  th>0 ){.      bl
6520: 6f 62 5f 61 70 70 65 6e 64 28 70 42 6c 6f 62 2c  ob_append(pBlob,
6530: 62 75 66 70 74 2c 6c 65 6e 67 74 68 29 3b 0a 20  bufpt,length);. 
6540: 20 20 20 20 20 63 6f 75 6e 74 20 2b 3d 20 6c 65       count += le
6550: 6e 67 74 68 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ngth;.    }.    
6560: 69 66 28 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73  if( flag_leftjus
6570: 74 69 66 79 20 29 7b 0a 20 20 20 20 20 20 72 65  tify ){.      re
6580: 67 69 73 74 65 72 20 69 6e 74 20 6e 73 70 61 63  gister int nspac
6590: 65 3b 0a 20 20 20 20 20 20 6e 73 70 61 63 65 20  e;.      nspace 
65a0: 3d 20 77 69 64 74 68 2d 6c 65 6e 67 74 68 3b 0a  = width-length;.
65b0: 20 20 20 20 20 20 69 66 28 20 6e 73 70 61 63 65        if( nspace
65c0: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  >0 ){.        co
65d0: 75 6e 74 20 2b 3d 20 6e 73 70 61 63 65 3b 0a 20  unt += nspace;. 
65e0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 6e 73         while( ns
65f0: 70 61 63 65 3e 3d 65 74 53 50 41 43 45 53 49 5a  pace>=etSPACESIZ
6600: 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  E ){.          b
6610: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 42 6c 6f 62  lob_append(pBlob
6620: 2c 73 70 61 63 65 73 2c 65 74 53 50 41 43 45 53  ,spaces,etSPACES
6630: 49 5a 45 29 3b 0a 20 20 20 20 20 20 20 20 20 20  IZE);.          
6640: 6e 73 70 61 63 65 20 2d 3d 20 65 74 53 50 41 43  nspace -= etSPAC
6650: 45 53 49 5a 45 3b 0a 20 20 20 20 20 20 20 20 7d  ESIZE;.        }
6660: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 73 70  .        if( nsp
6670: 61 63 65 3e 30 20 29 20 62 6c 6f 62 5f 61 70 70  ace>0 ) blob_app
6680: 65 6e 64 28 70 42 6c 6f 62 2c 73 70 61 63 65 73  end(pBlob,spaces
6690: 2c 6e 73 70 61 63 65 29 3b 0a 20 20 20 20 20 20  ,nspace);.      
66a0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
66b0: 7a 45 78 74 72 61 20 29 7b 0a 20 20 20 20 20 20  zExtra ){.      
66c0: 66 72 65 65 28 7a 45 78 74 72 61 29 3b 0a 20 20  free(zExtra);.  
66d0: 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20 66 6f    }.  }/* End fo
66e0: 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74 68 65 20  r loop over the 
66f0: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f  format string */
6700: 0a 20 20 72 65 74 75 72 6e 20 65 72 72 6f 72 66  .  return errorf
6710: 6c 61 67 20 3f 20 2d 31 20 3a 20 63 6f 75 6e 74  lag ? -1 : count
6720: 3b 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 66 75  ;.} /* End of fu
6730: 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nction */../*.**
6740: 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f   Print into memo
6750: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
6760: 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 63 68   malloc()..*/.ch
6770: 61 72 20 2a 6d 70 72 69 6e 74 66 28 63 6f 6e 73  ar *mprintf(cons
6780: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
6790: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
67a0: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a   ap;.  char *z;.
67b0: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 7a 46    va_start(ap,zF
67c0: 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 76 6d  ormat);.  z = vm
67d0: 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20  printf(zFormat, 
67e0: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
67f0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d  );.  return z;.}
6800: 0a 63 68 61 72 20 2a 76 6d 70 72 69 6e 74 66 28  .char *vmprintf(
6810: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
6820: 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29  mat, va_list ap)
6830: 7b 0a 20 20 42 6c 6f 62 20 62 6c 6f 62 20 3d 20  {.  Blob blob = 
6840: 65 6d 70 74 79 5f 62 6c 6f 62 3b 0a 20 20 62 6c  empty_blob;.  bl
6850: 6f 62 5f 76 61 70 70 65 6e 64 66 28 26 62 6c 6f  ob_vappendf(&blo
6860: 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  b, zFormat, ap);
6870: 0a 20 20 62 6c 6f 62 5f 6d 61 74 65 72 69 61 6c  .  blob_material
6880: 69 7a 65 28 26 62 6c 6f 62 29 3b 0a 20 20 72 65  ize(&blob);.  re
6890: 74 75 72 6e 20 62 6c 6f 62 2e 61 44 61 74 61 3b  turn blob.aData;
68a0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 63 6f 72 64  .}../*.** Record
68b0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
68c0: 65 20 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  e in the global 
68d0: 67 2e 7a 45 72 72 4d 73 67 20 76 61 72 69 61 62  g.zErrMsg variab
68e0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
68f0: 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 6e  re is already an
6900: 6f 74 68 65 72 20 65 72 72 6f 72 20 6d 65 73 73  other error mess
6910: 61 67 65 2c 20 6f 6e 6c 79 20 6f 76 65 72 77 72  age, only overwr
6920: 69 74 65 20 69 74 20 69 66 0a 2a 2a 20 74 68 65  ite it if.** the
6930: 20 63 75 72 72 65 6e 74 20 65 72 72 6f 72 20 68   current error h
6940: 61 73 20 61 20 68 69 67 68 65 72 20 70 72 69 6f  as a higher prio
6950: 72 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 66 6f  rity..*/.void fo
6960: 73 73 69 6c 5f 65 72 72 6f 72 28 69 6e 74 20 69  ssil_error(int i
6970: 50 72 69 6f 72 69 74 79 2c 20 63 6f 6e 73 74 20  Priority, const 
6980: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
6990: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
69a0: 70 3b 0a 20 20 69 66 28 20 69 50 72 69 6f 72 69  p;.  if( iPriori
69b0: 74 79 3c 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ty<=0 ){.    ret
69c0: 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  urn;.  }.  if( g
69d0: 2e 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20  .zErrMsg ){.    
69e0: 69 66 28 20 67 2e 69 45 72 72 50 72 69 6f 72 69  if( g.iErrPriori
69f0: 74 79 3e 3d 69 50 72 69 6f 72 69 74 79 20 29 7b  ty>=iPriority ){
6a00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  .      return;. 
6a10: 20 20 20 7d 0a 20 20 20 20 66 72 65 65 28 67 2e     }.    free(g.
6a20: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
6a30: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
6a40: 72 6d 61 74 29 3b 0a 20 20 67 2e 7a 45 72 72 4d  rmat);.  g.zErrM
6a50: 73 67 20 3d 20 76 6d 70 72 69 6e 74 66 28 7a 46  sg = vmprintf(zF
6a60: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
6a70: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 67 2e 69 45  _end(ap);.  g.iE
6a80: 72 72 50 72 69 6f 72 69 74 79 20 3d 20 69 50 72  rrPriority = iPr
6a90: 69 6f 72 69 74 79 3b 0a 7d 0a 76 6f 69 64 20 66  iority;.}.void f
6aa0: 6f 73 73 69 6c 5f 65 72 72 6f 72 5f 72 65 73 65  ossil_error_rese
6ab0: 74 28 76 6f 69 64 29 7b 0a 20 20 66 72 65 65 28  t(void){.  free(
6ac0: 67 2e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 67 2e  g.zErrMsg);.  g.
6ad0: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 67  zErrMsg = 0;.  g
6ae0: 2e 69 45 72 72 50 72 69 6f 72 69 74 79 20 3d 20  .iErrPriority = 
6af0: 30 3b 0a 7d 0a                                   0;.}.