/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact b179b6ed12f793e028dd169e2e2e2b2a37eedc63:


0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74  /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c  f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20  lows dates from 
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20  the 1980's.  It 
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62  is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65  lic domain.  The
0060: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 65 6e   original commen
0070: 74 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ts are included 
0080: 68 65 72 65 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  here for.** comp
0090: 6c 65 74 65 6e 65 73 73 2e 20 20 54 68 65 79 20  leteness.  They 
00a0: 61 72 65 20 76 65 72 79 20 6f 75 74 2d 6f 66 2d  are very out-of-
00b0: 64 61 74 65 20 62 75 74 20 6d 69 67 68 74 20 62  date but might b
00c0: 65 20 75 73 65 66 75 6c 20 61 73 0a 2a 2a 20 61  e useful as.** a
00d0: 6e 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 66  n historical ref
00e0: 65 72 65 6e 63 65 2e 20 20 4d 6f 73 74 20 6f 66  erence.  Most of
00f0: 20 74 68 65 20 22 65 6e 68 61 6e 63 65 6d 65 6e   the "enhancemen
0100: 74 73 22 20 68 61 76 65 20 62 65 65 6e 20 62 61  ts" have been ba
0110: 63 6b 65 64 0a 2a 2a 20 6f 75 74 20 73 6f 20 74  cked.** out so t
0120: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  hat the function
0130: 61 6c 69 74 79 20 69 73 20 6e 6f 77 20 74 68 65  ality is now the
0140: 20 73 61 6d 65 20 61 73 20 73 74 61 6e 64 61 72   same as standar
0150: 64 20 70 72 69 6e 74 66 28 29 2e 0a 2a 2a 0a 2a  d printf()..**.*
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20  *********.**.** 
01b0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 6f  The following mo
01c0: 64 75 6c 65 73 20 69 73 20 61 6e 20 65 6e 68 61  dules is an enha
01d0: 6e 63 65 64 20 72 65 70 6c 61 63 65 6d 65 6e 74  nced replacement
01e0: 20 66 6f 72 20 74 68 65 20 22 70 72 69 6e 74 66   for the "printf
01f0: 22 20 73 75 62 72 6f 75 74 69 6e 65 73 0a 2a 2a  " subroutines.**
0200: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 73 74   found in the st
0210: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
0220: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
0230: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 61 72   enhancements ar
0240: 65 0a 2a 2a 20 73 75 70 70 6f 72 74 65 64 3a 0a  e.** supported:.
0250: 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 20 41 64  **.**      +  Ad
0260: 64 69 74 69 6f 6e 61 6c 20 66 75 6e 63 74 69 6f  ditional functio
0270: 6e 73 2e 20 20 54 68 65 20 73 74 61 6e 64 61 72  ns.  The standar
0280: 64 20 73 65 74 20 6f 66 20 22 70 72 69 6e 74 66  d set of "printf
0290: 22 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  " functions.**  
02a0: 20 20 20 20 20 20 20 69 6e 63 6c 75 64 65 73 20         includes 
02b0: 70 72 69 6e 74 66 2c 20 66 70 72 69 6e 74 66 2c  printf, fprintf,
02c0: 20 73 70 72 69 6e 74 66 2c 20 76 70 72 69 6e 74   sprintf, vprint
02d0: 66 2c 20 76 66 70 72 69 6e 74 66 2c 20 61 6e 64  f, vfprintf, and
02e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 76 73 70 72  .**         vspr
02f0: 69 6e 74 66 2e 20 20 54 68 69 73 20 6d 6f 64 75  intf.  This modu
0300: 6c 65 20 61 64 64 73 20 74 68 65 20 66 6f 6c 6c  le adds the foll
0310: 6f 77 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  owing:.**.**    
0320: 20 20 20 20 20 20 20 2a 20 20 73 6e 70 72 69 6e         *  snprin
0330: 74 66 20 2d 2d 20 57 6f 72 6b 73 20 6c 69 6b 65  tf -- Works like
0340: 20 73 70 72 69 6e 74 66 2c 20 62 75 74 20 68 61   sprintf, but ha
0350: 73 20 61 6e 20 65 78 74 72 61 20 61 72 67 75 6d  s an extra argum
0360: 65 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ent.**          
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
0390: 65 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20  e of the buffer 
03a0: 77 72 69 74 74 65 6e 20 74 6f 2e 0a 2a 2a 0a 2a  written to..**.*
03b0: 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 6d  *           *  m
03c0: 70 72 69 6e 74 66 20 2d 2d 20 20 53 69 6d 69 6c  printf --  Simil
03d0: 61 72 20 74 6f 20 73 70 72 69 6e 74 66 2e 20 20  ar to sprintf.  
03e0: 57 72 69 74 65 73 20 6f 75 74 70 75 74 20 74 6f  Writes output to
03f0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 6f 62 74 61 69 6e 65 64 20 66 72 6f      obtained fro
0420: 6d 20 6d 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20  m malloc..**.** 
0430: 20 20 20 20 20 20 20 20 20 20 2a 20 20 78 70 72            *  xpr
0440: 69 6e 74 66 20 2d 2d 20 20 43 61 6c 6c 73 20 61  intf --  Calls a
0450: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 69 73   function to dis
0460: 70 6f 73 65 20 6f 66 20 6f 75 74 70 75 74 2e 0a  pose of output..
0470: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  **.**           
0480: 2a 20 20 6e 70 72 69 6e 74 66 20 2d 2d 20 20 4e  *  nprintf --  N
0490: 6f 20 6f 75 74 70 75 74 2c 20 62 75 74 20 72 65  o output, but re
04a0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
04b0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 0a 2a   of characters.*
04c0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 61 74 20             that 
04e0: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
04f0: 6f 75 74 70 75 74 20 62 79 20 70 72 69 6e 74 66  output by printf
0500: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
0510: 20 20 2a 20 20 41 20 76 2d 20 76 65 72 73 69 6f    *  A v- versio
0520: 6e 20 28 65 78 3a 20 76 73 6e 70 72 69 6e 74 66  n (ex: vsnprintf
0530: 29 20 6f 66 20 65 76 65 72 79 20 66 75 6e 63 74  ) of every funct
0540: 69 6f 6e 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 20  ion is also.**  
0550: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 70 70              supp
0560: 6c 69 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lied..**.**     
0570: 20 2b 20 20 41 20 66 65 77 20 65 78 74 65 6e 73   +  A few extens
0580: 69 6f 6e 73 20 74 6f 20 74 68 65 20 66 6f 72 6d  ions to the form
0590: 61 74 74 69 6e 67 20 6e 6f 74 61 74 69 6f 6e 20  atting notation 
05a0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 3a 0a 2a  are supported:.*
05b0: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a  *.**           *
05c0: 20 20 54 68 65 20 22 3d 22 20 66 6c 61 67 20 28    The "=" flag (
05d0: 73 69 6d 69 6c 61 72 20 74 6f 20 22 2d 22 29 20  similar to "-") 
05e0: 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70 75  causes the outpu
05f0: 74 20 74 6f 20 62 65 0a 2a 2a 20 20 20 20 20 20  t to be.**      
0600: 20 20 20 20 20 20 20 20 62 65 20 63 65 6e 74 65          be cente
0610: 72 65 64 20 69 6e 20 74 68 65 20 61 70 70 72 6f  red in the appro
0620: 70 72 69 61 74 65 6c 79 20 73 69 7a 65 64 20 66  priately sized f
0630: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ield..**.**     
0640: 20 20 20 20 20 20 2a 20 20 54 68 65 20 25 62 20        *  The %b 
0650: 66 69 65 6c 64 20 6f 75 74 70 75 74 73 20 61 6e  field outputs an
0660: 20 69 6e 74 65 67 65 72 20 69 6e 20 62 69 6e 61   integer in bina
0670: 72 79 20 6e 6f 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  ry notation..**.
0680: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20  **           *  
0690: 54 68 65 20 25 63 20 66 69 65 6c 64 20 6e 6f 77  The %c field now
06a0: 20 61 63 63 65 70 74 73 20 61 20 70 72 65 63 69   accepts a preci
06b0: 73 69 6f 6e 2e 20 20 54 68 65 20 63 68 61 72 61  sion.  The chara
06c0: 63 74 65 72 20 6f 75 74 70 75 74 0a 2a 2a 20 20  cter output.**  
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 72              is r
06e0: 65 70 65 61 74 65 64 20 62 79 20 74 68 65 20 6e  epeated by the n
06f0: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74  umber of times t
0700: 68 65 20 70 72 65 63 69 73 69 6f 6e 20 73 70 65  he precision spe
0710: 63 69 66 69 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  cifies..**.**   
0720: 20 20 20 20 20 20 20 20 2a 20 20 54 68 65 20 25          *  The %
0730: 27 20 66 69 65 6c 64 20 77 6f 72 6b 73 20 6c 69  ' field works li
0740: 6b 65 20 25 63 2c 20 62 75 74 20 74 61 6b 65 73  ke %c, but takes
0750: 20 61 73 20 69 74 73 20 63 68 61 72 61 63 74 65   as its characte
0760: 72 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 20  r the.**        
0770: 20 20 20 20 20 20 6e 65 78 74 20 63 68 61 72 61        next chara
0780: 63 74 65 72 20 6f 66 20 74 68 65 20 66 6f 72 6d  cter of the form
0790: 61 74 20 73 74 72 69 6e 67 2c 20 69 6e 73 74 65  at string, inste
07a0: 61 64 20 6f 66 20 74 68 65 20 6e 65 78 74 0a 2a  ad of the next.*
07b0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
07c0: 72 67 75 6d 65 6e 74 2e 20 20 46 6f 72 20 65 78  rgument.  For ex
07d0: 61 6d 70 6c 65 2c 20 20 70 72 69 6e 74 66 28 22  ample,  printf("
07e0: 25 2e 37 38 27 2d 22 29 20 20 70 72 69 6e 74 73  %.78'-")  prints
07f0: 20 37 38 20 6d 69 6e 75 73 0a 2a 2a 20 20 20 20   78 minus.**    
0800: 20 20 20 20 20 20 20 20 20 20 73 69 67 6e 73 2c            signs,
0810: 20 74 68 65 20 73 61 6d 65 20 61 73 20 20 70 72   the same as  pr
0820: 69 6e 74 66 28 22 25 2e 37 38 63 22 2c 27 2d 27  intf("%.78c",'-'
0830: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20  )..**.**      + 
0840: 20 57 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 75   When compiled u
0850: 73 69 6e 67 20 47 43 43 20 6f 6e 20 61 20 53 50  sing GCC on a SP
0860: 41 52 43 2c 20 74 68 69 73 20 76 65 72 73 69 6f  ARC, this versio
0870: 6e 20 6f 66 20 70 72 69 6e 74 66 20 69 73 0a 2a  n of printf is.*
0880: 2a 20 20 20 20 20 20 20 20 20 66 61 73 74 65 72  *         faster
0890: 20 74 68 61 6e 20 74 68 65 20 6c 69 62 72 61 72   than the librar
08a0: 79 20 70 72 69 6e 74 66 20 66 6f 72 20 53 55 4e  y printf for SUN
08b0: 20 4f 53 20 34 2e 31 2e 0a 2a 2a 0a 2a 2a 20 20   OS 4.1..**.**  
08c0: 20 20 20 20 2b 20 20 41 6c 6c 20 66 75 6e 63 74      +  All funct
08d0: 69 6f 6e 73 20 61 72 65 20 66 75 6c 6c 79 20 72  ions are fully r
08e0: 65 65 6e 74 72 61 6e 74 2e 0a 2a 2a 0a 2a 2f 0a  eentrant..**.*/.
08f0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0900: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 6f  Int.h"../*.** Co
0910: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66  nversion types f
0920: 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 73  all into various
0930: 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 64   categories as d
0940: 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  efined by the.**
0950: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d 65   following enume
0960: 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  ration..*/.#defi
0970: 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 20  ne etRADIX      
0980: 20 31 20 2f 2a 20 49 6e 74 65 67 65 72 20 74 79   1 /* Integer ty
0990: 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 6f  pes.  %d, %x, %o
09a0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 2a  , and so forth *
09b0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f 41  /.#define etFLOA
09c0: 54 20 20 20 20 20 20 20 32 20 2f 2a 20 46 6c 6f  T       2 /* Flo
09d0: 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 66  ating point.  %f
09e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 58   */.#define etEX
09f0: 50 20 20 20 20 20 20 20 20 20 33 20 2f 2a 20 45  P         3 /* E
0a00: 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f 74  xponentional not
0a10: 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 45  ation. %e and %E
0a20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 45   */.#define etGE
0a30: 4e 45 52 49 43 20 20 20 20 20 34 20 2f 2a 20 46  NERIC     4 /* F
0a40: 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f 6e  loating or expon
0a50: 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 6e  ential, dependin
0a60: 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 25  g on exponent. %
0a70: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53  g */.#define etS
0a80: 49 5a 45 20 20 20 20 20 20 20 20 35 20 2f 2a 20  IZE        5 /* 
0a90: 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  Return number of
0aa0: 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f 63   characters proc
0ab0: 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 6e  essed so far. %n
0ac0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 54   */.#define etST
0ad0: 52 49 4e 47 20 20 20 20 20 20 36 20 2f 2a 20 53  RING      6 /* S
0ae0: 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 64  trings. %s */.#d
0af0: 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 4e  efine etDYNSTRIN
0b00: 47 20 20 20 37 20 2f 2a 20 44 79 6e 61 6d 69 63  G   7 /* Dynamic
0b10: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
0b20: 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 64  trings. %z */.#d
0b30: 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 20  efine etPERCENT 
0b40: 20 20 20 20 38 20 2f 2a 20 50 65 72 63 65 6e 74      8 /* Percent
0b50: 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a 23   symbol. %% */.#
0b60: 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 20  define etCHARX  
0b70: 20 20 20 20 20 39 20 2f 2a 20 43 68 61 72 61 63       9 /* Charac
0b80: 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 54  ters. %c */./* T
0b90: 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 65  he rest are exte
0ba0: 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d  nsions, not norm
0bb0: 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72  ally found in pr
0bc0: 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  intf() */.#defin
0bd0: 65 20 65 74 43 48 41 52 4c 49 54 20 20 20 20 31  e etCHARLIT    1
0be0: 30 20 2f 2a 20 4c 69 74 65 72 61 6c 20 63 68 61  0 /* Literal cha
0bf0: 72 61 63 74 65 72 73 2e 20 20 25 27 20 2a 2f 0a  racters.  %' */.
0c00: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43  #define etSQLESC
0c10: 41 50 45 20 20 31 31 20 2f 2a 20 53 74 72 69 6e  APE  11 /* Strin
0c20: 67 73 20 77 69 74 68 20 27 5c 27 27 20 64 6f 75  gs with '\'' dou
0c30: 62 6c 65 64 2e 20 20 25 71 20 2a 2f 0a 23 64 65  bled.  %q */.#de
0c40: 66 69 6e 65 20 65 74 53 51 4c 45 53 43 41 50 45  fine etSQLESCAPE
0c50: 32 20 31 32 20 2f 2a 20 53 74 72 69 6e 67 73 20  2 12 /* Strings 
0c60: 77 69 74 68 20 27 5c 27 27 20 64 6f 75 62 6c 65  with '\'' double
0c70: 64 20 61 6e 64 20 65 6e 63 6c 6f 73 65 64 20 69  d and enclosed i
0c80: 6e 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20  n '',.          
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ca0: 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 73 20 72 65  NULL pointers re
0cb0: 70 6c 61 63 65 64 20 62 79 20 53 51 4c 20 4e 55  placed by SQL NU
0cc0: 4c 4c 2e 20 20 25 51 20 2a 2f 0a 23 64 65 66 69  LL.  %Q */.#defi
0cd0: 6e 65 20 65 74 54 4f 4b 45 4e 20 20 20 20 20 20  ne etTOKEN      
0ce0: 31 33 20 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20  13 /* a pointer 
0cf0: 74 6f 20 61 20 54 6f 6b 65 6e 20 73 74 72 75 63  to a Token struc
0d00: 74 75 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ture */.#define 
0d10: 65 74 53 52 43 4c 49 53 54 20 20 20 20 31 34 20  etSRCLIST    14 
0d20: 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  /* a pointer to 
0d30: 61 20 53 72 63 4c 69 73 74 20 2a 2f 0a 23 64 65  a SrcList */.#de
0d40: 66 69 6e 65 20 65 74 50 4f 49 4e 54 45 52 20 20  fine etPOINTER  
0d50: 20 20 31 35 20 2f 2a 20 54 68 65 20 25 70 20 63    15 /* The %p c
0d60: 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f  onversion */.../
0d70: 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79 74 65 22  *.** An "etByte"
0d80: 20 69 73 20 61 6e 20 38 2d 62 69 74 20 75 6e 73   is an 8-bit uns
0d90: 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a 2a 2f 0a  igned value..*/.
0da0: 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
0db0: 20 63 68 61 72 20 65 74 42 79 74 65 3b 0a 0a 2f   char etByte;../
0dc0: 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69 6c 74 69  *.** Each builti
0dd0: 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68 61  n conversion cha
0de0: 72 61 63 74 65 72 20 28 65 78 3a 20 74 68 65 20  racter (ex: the 
0df0: 27 64 27 20 69 6e 20 22 25 64 22 29 20 69 73 20  'd' in "%d") is 
0e00: 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
0e10: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
0e20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
0e30: 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70 65 64 65  ucture.*/.typede
0e40: 66 20 73 74 72 75 63 74 20 65 74 5f 69 6e 66 6f  f struct et_info
0e50: 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74   {   /* Informat
0e60: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 66  ion about each f
0e70: 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a 2f 0a 20  ormat field */. 
0e80: 20 63 68 61 72 20 66 6d 74 74 79 70 65 3b 20 20   char fmttype;  
0e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
0ea0: 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 63 6f   format field co
0eb0: 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a 20 20 65  de letter */.  e
0ec0: 74 42 79 74 65 20 62 61 73 65 3b 20 20 20 20 20  tByte base;     
0ed0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62          /* The b
0ee0: 61 73 65 20 66 6f 72 20 72 61 64 69 78 20 63 6f  ase for radix co
0ef0: 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20 20 65 74  nversion */.  et
0f00: 42 79 74 65 20 66 6c 61 67 73 3b 20 20 20 20 20  Byte flags;     
0f10: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72         /* One or
0f20: 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47 5f 20 63   more of FLAG_ c
0f30: 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 2a  onstants below *
0f40: 2f 0a 20 20 65 74 42 79 74 65 20 74 79 70 65 3b  /.  etByte type;
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0f60: 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61 72 61 64  Conversion parad
0f70: 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  igm */.  etByte 
0f80: 63 68 61 72 73 65 74 3b 20 20 20 20 20 20 20 20  charset;        
0f90: 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
0fa0: 20 61 44 69 67 69 74 73 5b 5d 20 6f 66 20 74 68   aDigits[] of th
0fb0: 65 20 64 69 67 69 74 73 20 73 74 72 69 6e 67 20  e digits string 
0fc0: 2a 2f 0a 20 20 65 74 42 79 74 65 20 70 72 65 66  */.  etByte pref
0fd0: 69 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ix;           /*
0fe0: 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 61 50 72   Offset into aPr
0ff0: 65 66 69 78 5b 5d 20 6f 66 20 74 68 65 20 70 72  efix[] of the pr
1000: 65 66 69 78 20 73 74 72 69 6e 67 20 2a 2f 0a 7d  efix string */.}
1010: 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a   et_info;../*.**
1020: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1030: 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66 6c 61 67  for et_info.flag
1040: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c 41  s.*/.#define FLA
1050: 47 5f 53 49 47 4e 45 44 20 20 31 20 20 20 20 20  G_SIGNED  1     
1060: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 76  /* True if the v
1070: 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 20  alue to convert 
1080: 69 73 20 73 69 67 6e 65 64 20 2a 2f 0a 23 64 65  is signed */.#de
1090: 66 69 6e 65 20 46 4c 41 47 5f 49 4e 54 45 52 4e  fine FLAG_INTERN
10a0: 20 20 32 20 20 20 20 20 2f 2a 20 54 72 75 65 20    2     /* True 
10b0: 69 66 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  if for internal 
10c0: 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  use only */.#def
10d0: 69 6e 65 20 46 4c 41 47 5f 53 54 52 49 4e 47 20  ine FLAG_STRING 
10e0: 20 34 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 77 20   4     /* Allow 
10f0: 69 6e 66 69 6e 69 74 79 20 70 72 65 63 69 73 69  infinity precisi
1100: 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  on */.../*.** Th
1110: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
1120: 65 20 69 73 20 73 65 61 72 63 68 65 64 20 6c 69  e is searched li
1130: 6e 65 61 72 6c 79 2c 20 73 6f 20 69 74 20 69 73  nearly, so it is
1140: 20 67 6f 6f 64 20 74 6f 20 70 75 74 20 74 68 65   good to put the
1150: 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 71 75 65 6e  .** most frequen
1160: 74 6c 79 20 75 73 65 64 20 63 6f 6e 76 65 72 73  tly used convers
1170: 69 6f 6e 20 74 79 70 65 73 20 66 69 72 73 74 2e  ion types first.
1180: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  .*/.static const
1190: 20 63 68 61 72 20 61 44 69 67 69 74 73 5b 5d 20   char aDigits[] 
11a0: 3d 20 22 30 31 32 33 34 35 36 37 38 39 41 42 43  = "0123456789ABC
11b0: 44 45 46 30 31 32 33 34 35 36 37 38 39 61 62 63  DEF0123456789abc
11c0: 64 65 66 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e  def";.static con
11d0: 73 74 20 63 68 61 72 20 61 50 72 65 66 69 78 5b  st char aPrefix[
11e0: 5d 20 3d 20 22 2d 78 30 5c 30 30 30 58 30 22 3b  ] = "-x0\000X0";
11f0: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 65 74  .static const et
1200: 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 6f 5b 5d 20  _info fmtinfo[] 
1210: 3d 20 7b 0a 20 20 7b 20 20 27 64 27 2c 20 31 30  = {.  {  'd', 10
1220: 2c 20 31 2c 20 65 74 52 41 44 49 58 2c 20 20 20  , 1, etRADIX,   
1230: 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20     0,  0 },.  { 
1240: 20 27 73 27 2c 20 20 30 2c 20 34 2c 20 65 74 53   's',  0, 4, etS
1250: 54 52 49 4e 47 2c 20 20 20 20 20 30 2c 20 20 30  TRING,     0,  0
1260: 20 7d 2c 0a 20 20 7b 20 20 27 67 27 2c 20 20 30   },.  {  'g',  0
1270: 2c 20 31 2c 20 65 74 47 45 4e 45 52 49 43 2c 20  , 1, etGENERIC, 
1280: 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20 20 7b 20     30, 0 },.  { 
1290: 20 27 7a 27 2c 20 20 30 2c 20 36 2c 20 65 74 44   'z',  0, 6, etD
12a0: 59 4e 53 54 52 49 4e 47 2c 20 20 30 2c 20 20 30  YNSTRING,  0,  0
12b0: 20 7d 2c 0a 20 20 7b 20 20 27 71 27 2c 20 20 30   },.  {  'q',  0
12c0: 2c 20 34 2c 20 65 74 53 51 4c 45 53 43 41 50 45  , 4, etSQLESCAPE
12d0: 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20  ,  0,  0 },.  { 
12e0: 20 27 51 27 2c 20 20 30 2c 20 34 2c 20 65 74 53   'Q',  0, 4, etS
12f0: 51 4c 45 53 43 41 50 45 32 2c 20 30 2c 20 20 30  QLESCAPE2, 0,  0
1300: 20 7d 2c 0a 20 20 7b 20 20 27 63 27 2c 20 20 30   },.  {  'c',  0
1310: 2c 20 30 2c 20 65 74 43 48 41 52 58 2c 20 20 20  , 0, etCHARX,   
1320: 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20     0,  0 },.  { 
1330: 20 27 6f 27 2c 20 20 38 2c 20 30 2c 20 65 74 52   'o',  8, 0, etR
1340: 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20 20 32  ADIX,      0,  2
1350: 20 7d 2c 0a 20 20 7b 20 20 27 75 27 2c 20 31 30   },.  {  'u', 10
1360: 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20 20  , 0, etRADIX,   
1370: 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20     0,  0 },.  { 
1380: 20 27 78 27 2c 20 31 36 2c 20 30 2c 20 65 74 52   'x', 16, 0, etR
1390: 41 44 49 58 2c 20 20 20 20 20 20 31 36 2c 20 31  ADIX,      16, 1
13a0: 20 7d 2c 0a 20 20 7b 20 20 27 58 27 2c 20 31 36   },.  {  'X', 16
13b0: 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20 20  , 0, etRADIX,   
13c0: 20 20 20 30 2c 20 20 34 20 7d 2c 0a 23 69 66 6e     0,  4 },.#ifn
13d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13e0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
13f0: 20 7b 20 20 27 66 27 2c 20 20 30 2c 20 31 2c 20   {  'f',  0, 1, 
1400: 65 74 46 4c 4f 41 54 2c 20 20 20 20 20 20 30 2c  etFLOAT,      0,
1410: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 65 27 2c    0 },.  {  'e',
1420: 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20 20    0, 1, etEXP,  
1430: 20 20 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20        30, 0 },. 
1440: 20 7b 20 20 27 45 27 2c 20 20 30 2c 20 31 2c 20   {  'E',  0, 1, 
1450: 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 31 34  etEXP,        14
1460: 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 47 27 2c  , 0 },.  {  'G',
1470: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
1480: 43 2c 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a 23  C,    14, 0 },.#
1490: 65 6e 64 69 66 0a 20 20 7b 20 20 27 69 27 2c 20  endif.  {  'i', 
14a0: 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c 20  10, 1, etRADIX, 
14b0: 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20       0,  0 },.  
14c0: 7b 20 20 27 6e 27 2c 20 20 30 2c 20 30 2c 20 65  {  'n',  0, 0, e
14d0: 74 53 49 5a 45 2c 20 20 20 20 20 20 20 30 2c 20  tSIZE,       0, 
14e0: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 25 27 2c 20   0 },.  {  '%', 
14f0: 20 30 2c 20 30 2c 20 65 74 50 45 52 43 45 4e 54   0, 0, etPERCENT
1500: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
1510: 7b 20 20 27 70 27 2c 20 31 36 2c 20 30 2c 20 65  {  'p', 16, 0, e
1520: 74 50 4f 49 4e 54 45 52 2c 20 20 20 20 30 2c 20  tPOINTER,    0, 
1530: 20 31 20 7d 2c 0a 20 20 7b 20 20 27 54 27 2c 20   1 },.  {  'T', 
1540: 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 4e 2c 20   0, 2, etTOKEN, 
1550: 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20       0,  0 },.  
1560: 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 2c 20 65  {  'S',  0, 2, e
1570: 74 53 52 43 4c 49 53 54 2c 20 20 20 20 30 2c 20  tSRCLIST,    0, 
1580: 20 30 20 7d 2c 0a 7d 3b 0a 23 64 65 66 69 6e 65   0 },.};.#define
1590: 20 65 74 4e 49 4e 46 4f 20 20 28 73 69 7a 65 6f   etNINFO  (sizeo
15a0: 66 28 66 6d 74 69 6e 66 6f 29 2f 73 69 7a 65 6f  f(fmtinfo)/sizeo
15b0: 66 28 66 6d 74 69 6e 66 6f 5b 30 5d 29 29 0a 0a  f(fmtinfo[0]))..
15c0: 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  /*.** If SQLITE_
15d0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
15e0: 49 4e 54 20 69 73 20 64 65 66 69 6e 65 64 2c 20  INT is defined, 
15f0: 74 68 65 6e 20 6e 6f 6e 65 20 6f 66 20 74 68 65  then none of the
1600: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a   floating point.
1610: 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 77  ** conversions w
1620: 69 6c 6c 20 77 6f 72 6b 2e 0a 2a 2f 0a 23 69 66  ill work..*/.#if
1630: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1640: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1650: 2f 2a 0a 2a 2a 20 22 2a 76 61 6c 22 20 69 73 20  /*.** "*val" is 
1660: 61 20 64 6f 75 62 6c 65 20 73 75 63 68 20 74 68  a double such th
1670: 61 74 20 30 2e 31 20 3c 3d 20 2a 76 61 6c 20 3c  at 0.1 <= *val <
1680: 20 31 30 2e 30 0a 2a 2a 20 52 65 74 75 72 6e 20   10.0.** Return 
1690: 74 68 65 20 61 73 63 69 69 20 63 6f 64 65 20 66  the ascii code f
16a0: 6f 72 20 74 68 65 20 6c 65 61 64 69 6e 67 20 64  or the leading d
16b0: 69 67 69 74 20 6f 66 20 2a 76 61 6c 2c 20 74 68  igit of *val, th
16c0: 65 6e 0a 2a 2a 20 6d 75 6c 74 69 70 6c 79 20 22  en.** multiply "
16d0: 2a 76 61 6c 22 20 62 79 20 31 30 2e 30 20 74 6f  *val" by 10.0 to
16e0: 20 72 65 6e 6f 72 6d 61 6c 69 7a 65 2e 0a 2a 2a   renormalize..**
16f0: 0a 2a 2a 20 45 78 61 6d 70 6c 65 3a 0a 2a 2a 20  .** Example:.** 
1700: 20 20 20 20 69 6e 70 75 74 3a 20 20 20 20 20 2a      input:     *
1710: 76 61 6c 20 3d 20 33 2e 31 34 31 35 39 0a 2a 2a  val = 3.14159.**
1720: 20 20 20 20 20 6f 75 74 70 75 74 3a 20 20 20 20       output:    
1730: 2a 76 61 6c 20 3d 20 31 2e 34 31 35 39 20 20 20  *val = 1.4159   
1740: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1750: 20 3d 20 27 33 27 0a 2a 2a 0a 2a 2a 20 54 68 65   = '3'.**.** The
1760: 20 63 6f 75 6e 74 65 72 20 2a 63 6e 74 20 69 73   counter *cnt is
1770: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
1780: 68 20 74 69 6d 65 2e 20 20 41 66 74 65 72 20 63  h time.  After c
1790: 6f 75 6e 74 65 72 20 65 78 63 65 65 64 73 0a 2a  ounter exceeds.*
17a0: 2a 20 31 36 20 28 74 68 65 20 6e 75 6d 62 65 72  * 16 (the number
17b0: 20 6f 66 20 73 69 67 6e 69 66 69 63 61 6e 74 20   of significant 
17c0: 64 69 67 69 74 73 20 69 6e 20 61 20 36 34 2d 62  digits in a 64-b
17d0: 69 74 20 66 6c 6f 61 74 29 20 27 30 27 20 69 73  it float) '0' is
17e0: 0a 2a 2a 20 61 6c 77 61 79 73 20 72 65 74 75 72  .** always retur
17f0: 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
1800: 6e 74 20 65 74 5f 67 65 74 64 69 67 69 74 28 4c  nt et_getdigit(L
1810: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 2a  ONGDOUBLE_TYPE *
1820: 76 61 6c 2c 20 69 6e 74 20 2a 63 6e 74 29 7b 0a  val, int *cnt){.
1830: 20 20 69 6e 74 20 64 69 67 69 74 3b 0a 20 20 4c    int digit;.  L
1840: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 64  ONGDOUBLE_TYPE d
1850: 3b 0a 20 20 69 66 28 20 28 2a 63 6e 74 29 2b 2b  ;.  if( (*cnt)++
1860: 20 3e 3d 20 31 36 20 29 20 72 65 74 75 72 6e 20   >= 16 ) return 
1870: 27 30 27 3b 0a 20 20 64 69 67 69 74 20 3d 20 28  '0';.  digit = (
1880: 69 6e 74 29 2a 76 61 6c 3b 0a 20 20 64 20 3d 20  int)*val;.  d = 
1890: 64 69 67 69 74 3b 0a 20 20 64 69 67 69 74 20 2b  digit;.  digit +
18a0: 3d 20 27 30 27 3b 0a 20 20 2a 76 61 6c 20 3d 20  = '0';.  *val = 
18b0: 28 2a 76 61 6c 20 2d 20 64 29 2a 31 30 2e 30 3b  (*val - d)*10.0;
18c0: 0a 20 20 72 65 74 75 72 6e 20 64 69 67 69 74 3b  .  return digit;
18d0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
18e0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
18f0: 47 5f 50 4f 49 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a  G_POINT */../*.*
1900: 2a 20 4f 6e 20 6d 61 63 68 69 6e 65 73 20 77 69  * On machines wi
1910: 74 68 20 61 20 73 6d 61 6c 6c 20 73 74 61 63 6b  th a small stack
1920: 20 73 69 7a 65 2c 20 79 6f 75 20 63 61 6e 20 72   size, you can r
1930: 65 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 53  edefine the.** S
1940: 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f  QLITE_PRINT_BUF_
1950: 53 49 5a 45 20 74 6f 20 62 65 20 6c 65 73 73 20  SIZE to be less 
1960: 74 68 61 6e 20 33 35 30 2e 20 20 42 75 74 20 62  than 350.  But b
1970: 65 77 61 72 65 20 2d 20 66 6f 72 0a 2a 2a 20 73  eware - for.** s
1980: 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 73 6f  maller values so
1990: 6d 65 20 25 66 20 63 6f 6e 76 65 72 73 69 6f 6e  me %f conversion
19a0: 73 20 6d 61 79 20 67 6f 20 69 6e 74 6f 20 61 6e  s may go into an
19b0: 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 2e 0a   infinite loop..
19c0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
19d0: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45  E_PRINT_BUF_SIZE
19e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
19f0: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20  _PRINT_BUF_SIZE 
1a00: 33 35 30 0a 23 65 6e 64 69 66 0a 23 64 65 66 69  350.#endif.#defi
1a10: 6e 65 20 65 74 42 55 46 53 49 5a 45 20 53 51 4c  ne etBUFSIZE SQL
1a20: 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49  ITE_PRINT_BUF_SI
1a30: 5a 45 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74  ZE  /* Size of t
1a40: 68 65 20 6f 75 74 70 75 74 20 62 75 66 66 65 72  he output buffer
1a50: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72   */../*.** The r
1a60: 6f 6f 74 20 70 72 6f 67 72 61 6d 2e 20 20 41 6c  oot program.  Al
1a70: 6c 20 76 61 72 69 61 74 69 6f 6e 73 20 63 61 6c  l variations cal
1a80: 6c 20 74 68 69 73 20 63 6f 72 65 2e 0a 2a 2a 0a  l this core..**.
1a90: 2a 2a 20 49 4e 50 55 54 53 3a 0a 2a 2a 20 20 20  ** INPUTS:.**   
1aa0: 66 75 6e 63 20 20 20 54 68 69 73 20 69 73 20 61  func   This is a
1ab0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75   pointer to a fu
1ac0: 6e 63 74 69 6f 6e 20 74 61 6b 69 6e 67 20 74 68  nction taking th
1ad0: 72 65 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  ree arguments.**
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2e 20 41              1. A
1af0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 74   pointer to anyt
1b00: 68 69 6e 67 2e 20 20 53 61 6d 65 20 61 73 20 74  hing.  Same as t
1b10: 68 65 20 22 61 72 67 22 20 70 61 72 61 6d 65 74  he "arg" paramet
1b20: 65 72 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  er..**          
1b30: 20 20 32 2e 20 41 20 70 6f 69 6e 74 65 72 20 74    2. A pointer t
1b40: 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 68  o the list of ch
1b50: 61 72 61 63 74 65 72 73 20 74 6f 20 62 65 20 6f  aracters to be o
1b60: 75 74 70 75 74 0a 2a 2a 20 20 20 20 20 20 20 20  utput.**        
1b70: 20 20 20 20 20 20 20 28 4e 6f 74 65 2c 20 74 68         (Note, th
1b80: 69 73 20 6c 69 73 74 20 69 73 20 4e 4f 54 20 6e  is list is NOT n
1b90: 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 2e 29  ull terminated.)
1ba0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 33  .**            3
1bb0: 2e 20 41 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  . An integer num
1bc0: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
1bd0: 73 20 74 6f 20 62 65 20 6f 75 74 70 75 74 2e 0a  s to be output..
1be0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1bf0: 20 28 4e 6f 74 65 3a 20 54 68 69 73 20 6e 75 6d   (Note: This num
1c00: 62 65 72 20 6d 69 67 68 74 20 62 65 20 7a 65 72  ber might be zer
1c10: 6f 2e 29 0a 2a 2a 0a 2a 2a 20 20 20 61 72 67 20  o.).**.**   arg 
1c20: 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 70     This is the p
1c30: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 74 68 69  ointer to anythi
1c40: 6e 67 20 77 68 69 63 68 20 77 69 6c 6c 20 62 65  ng which will be
1c50: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 0a 2a   passed as the.*
1c60: 2a 20 20 20 20 20 20 20 20 20 20 66 69 72 73 74  *          first
1c70: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 22 66 75   argument to "fu
1c80: 6e 63 22 2e 20 20 55 73 65 20 69 74 20 66 6f 72  nc".  Use it for
1c90: 20 77 68 61 74 65 76 65 72 20 79 6f 75 20 6c 69   whatever you li
1ca0: 6b 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6d 74 20  ke..**.**   fmt 
1cb0: 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 66     This is the f
1cc0: 6f 72 6d 61 74 20 73 74 72 69 6e 67 2c 20 61 73  ormat string, as
1cd0: 20 69 6e 20 74 68 65 20 75 73 75 61 6c 20 70 72   in the usual pr
1ce0: 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 61 70 20  int..**.**   ap 
1cf0: 20 20 20 20 54 68 69 73 20 69 73 20 61 20 70 6f      This is a po
1d00: 69 6e 74 65 72 20 74 6f 20 61 20 6c 69 73 74 20  inter to a list 
1d10: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 53  of arguments.  S
1d20: 61 6d 65 20 61 73 20 69 6e 0a 2a 2a 20 20 20 20  ame as in.**    
1d30: 20 20 20 20 20 20 76 66 70 72 69 6e 74 2e 0a 2a        vfprint..*
1d40: 2a 0a 2a 2a 20 4f 55 54 50 55 54 53 3a 0a 2a 2a  *.** OUTPUTS:.**
1d50: 20 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65            The re
1d60: 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68  turn value is th
1d70: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1d80: 66 20 63 68 61 72 61 63 74 65 72 73 20 73 65 6e  f characters sen
1d90: 74 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 20 20  t to.**         
1da0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 66   the function "f
1db0: 75 6e 63 22 2e 20 20 52 65 74 75 72 6e 73 20 2d  unc".  Returns -
1dc0: 31 20 6f 6e 20 61 20 65 72 72 6f 72 2e 0a 2a 2a  1 on a error..**
1dd0: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
1de0: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
1df0: 20 61 75 74 6f 6d 61 74 69 63 20 76 61 72 69 61   automatic varia
1e00: 62 6c 65 73 20 61 72 65 20 64 65 63 6c 61 72 65  bles are declare
1e10: 64 20 62 65 6c 6f 77 0a 2a 2a 20 73 65 65 6d 73  d below.** seems
1e20: 20 74 6f 20 6d 61 6b 65 20 61 20 62 69 67 20 64   to make a big d
1e30: 69 66 66 65 72 65 6e 63 65 20 69 6e 20 64 65 74  ifference in det
1e40: 65 72 6d 69 6e 69 6e 67 20 68 6f 77 20 66 61 73  ermining how fas
1e50: 74 20 74 68 69 73 20 62 65 61 73 74 0a 2a 2a 20  t this beast.** 
1e60: 77 69 6c 6c 20 72 75 6e 2e 0a 2a 2f 0a 73 74 61  will run..*/.sta
1e70: 74 69 63 20 69 6e 74 20 76 78 70 72 69 6e 74 66  tic int vxprintf
1e80: 28 0a 20 20 76 6f 69 64 20 28 2a 66 75 6e 63 29  (.  void (*func)
1e90: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
1ea0: 72 2a 2c 69 6e 74 29 2c 20 20 20 20 20 2f 2a 20  r*,int),     /* 
1eb0: 43 6f 6e 73 75 6d 65 72 20 6f 66 20 74 65 78 74  Consumer of text
1ec0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 61 72 67 2c   */.  void *arg,
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1ef0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
1f00: 65 20 63 6f 6e 73 75 6d 65 72 20 2a 2f 0a 20 20  e consumer */.  
1f10: 69 6e 74 20 75 73 65 45 78 74 65 6e 64 65 64 2c  int useExtended,
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f30: 20 20 20 2f 2a 20 41 6c 6c 6f 77 20 65 78 74 65     /* Allow exte
1f40: 6e 64 65 64 20 25 2d 63 6f 6e 76 65 72 73 69 6f  nded %-conversio
1f50: 6e 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ns */.  const ch
1f60: 61 72 20 2a 66 6d 74 2c 20 20 20 20 20 20 20 20  ar *fmt,        
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1f80: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20  rmat string */. 
1f90: 20 76 61 5f 6c 69 73 74 20 61 70 20 20 20 20 20   va_list ap     
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb0: 20 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e 74 73      /* arguments
1fc0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 63 3b 20   */.){.  int c; 
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 63 68 61 72      /* Next char
1ff0: 61 63 74 65 72 20 69 6e 20 74 68 65 20 66 6f 72  acter in the for
2000: 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20  mat string */.  
2010: 63 68 61 72 20 2a 62 75 66 70 74 3b 20 20 20 20  char *bufpt;    
2020: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
2030: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 63 6f 6e  inter to the con
2040: 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 20 2a  version buffer *
2050: 2f 0a 20 20 69 6e 74 20 70 72 65 63 69 73 69 6f  /.  int precisio
2060: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
2070: 2a 20 50 72 65 63 69 73 69 6f 6e 20 6f 66 20 74  * Precision of t
2080: 68 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64  he current field
2090: 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 67 74 68   */.  int length
20a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20b0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
20c0: 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74  e field */.  int
20d0: 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 20   idx;           
20e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 20 67 65 6e          /* A gen
20f0: 65 72 61 6c 20 70 75 72 70 6f 73 65 20 6c 6f 6f  eral purpose loo
2100: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2110: 6e 74 20 63 6f 75 6e 74 3b 20 20 20 20 20 20 20  nt count;       
2120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
2130: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  al number of cha
2140: 72 61 63 74 65 72 73 20 6f 75 74 70 75 74 20 2a  racters output *
2150: 2f 0a 20 20 69 6e 74 20 77 69 64 74 68 3b 20 20  /.  int width;  
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2170: 2a 20 57 69 64 74 68 20 6f 66 20 74 68 65 20 63  * Width of the c
2180: 75 72 72 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a  urrent field */.
2190: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 65    etByte flag_le
21a0: 66 74 6a 75 73 74 69 66 79 3b 20 20 20 2f 2a 20  ftjustify;   /* 
21b0: 54 72 75 65 20 69 66 20 22 2d 22 20 66 6c 61 67  True if "-" flag
21c0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
21d0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 70 6c 75   etByte flag_plu
21e0: 73 73 69 67 6e 3b 20 20 20 20 20 20 2f 2a 20 54  ssign;      /* T
21f0: 72 75 65 20 69 66 20 22 2b 22 20 66 6c 61 67 20  rue if "+" flag 
2200: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
2210: 65 74 42 79 74 65 20 66 6c 61 67 5f 62 6c 61 6e  etByte flag_blan
2220: 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a 20 54 72  ksign;     /* Tr
2230: 75 65 20 69 66 20 22 20 22 20 66 6c 61 67 20 69  ue if " " flag i
2240: 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65  s present */.  e
2250: 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 65 72  tByte flag_alter
2260: 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20 54 72 75  nateform; /* Tru
2270: 65 20 69 66 20 22 23 22 20 66 6c 61 67 20 69 73  e if "#" flag is
2280: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74   present */.  et
2290: 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 66 6f 72  Byte flag_altfor
22a0: 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65  m2;      /* True
22b0: 20 69 66 20 22 21 22 20 66 6c 61 67 20 69 73 20   if "!" flag is 
22c0: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42  present */.  etB
22d0: 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  yte flag_zeropad
22e0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
22f0: 69 66 20 66 69 65 6c 64 20 77 69 64 74 68 20 63  if field width c
2300: 6f 6e 73 74 61 6e 74 20 73 74 61 72 74 73 20 77  onstant starts w
2310: 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20 20 65 74  ith zero */.  et
2320: 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 3b 20  Byte flag_long; 
2330: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2340: 20 69 66 20 22 6c 22 20 66 6c 61 67 20 69 73 20   if "l" flag is 
2350: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42  present */.  etB
2360: 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e  yte flag_longlon
2370: 67 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  g;      /* True 
2380: 69 66 20 74 68 65 20 22 6c 6c 22 20 66 6c 61 67  if the "ll" flag
2390: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
23a0: 20 65 74 42 79 74 65 20 64 6f 6e 65 3b 20 20 20   etByte done;   
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
23c0: 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20  oop termination 
23d0: 66 6c 61 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65  flag */.  sqlite
23e0: 5f 75 69 6e 74 36 34 20 6c 6f 6e 67 76 61 6c 75  _uint64 longvalu
23f0: 65 3b 20 20 20 2f 2a 20 56 61 6c 75 65 20 66 6f  e;   /* Value fo
2400: 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 73 20  r integer types 
2410: 2a 2f 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  */.  LONGDOUBLE_
2420: 54 59 50 45 20 72 65 61 6c 76 61 6c 75 65 3b 20  TYPE realvalue; 
2430: 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 72 65 61  /* Value for rea
2440: 6c 20 74 79 70 65 73 20 2a 2f 0a 20 20 63 6f 6e  l types */.  con
2450: 73 74 20 65 74 5f 69 6e 66 6f 20 2a 69 6e 66 6f  st et_info *info
2460: 70 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  p;      /* Point
2470: 65 72 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70  er to the approp
2480: 72 69 61 74 65 20 69 6e 66 6f 20 73 74 72 75 63  riate info struc
2490: 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 62  ture */.  char b
24a0: 75 66 5b 65 74 42 55 46 53 49 5a 45 5d 3b 20 20  uf[etBUFSIZE];  
24b0: 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69       /* Conversi
24c0: 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 63  on buffer */.  c
24d0: 68 61 72 20 70 72 65 66 69 78 3b 20 20 20 20 20  har prefix;     
24e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65            /* Pre
24f0: 66 69 78 20 63 68 61 72 61 63 74 65 72 2e 20 20  fix character.  
2500: 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72 20 22 20  "+" or "-" or " 
2510: 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f 0a 20 20  " or '\0'. */.  
2520: 65 74 42 79 74 65 20 65 72 72 6f 72 66 6c 61 67  etByte errorflag
2530: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 54 72   = 0;      /* Tr
2540: 75 65 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69  ue if an error i
2550: 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 2a 2f  s encountered */
2560: 0a 20 20 65 74 42 79 74 65 20 78 74 79 70 65 3b  .  etByte xtype;
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2580: 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61 72 61   Conversion para
2590: 64 69 67 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  digm */.  char *
25a0: 7a 45 78 74 72 61 3b 20 20 20 20 20 20 20 20 20  zExtra;         
25b0: 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 6d 65       /* Extra me
25c0: 6d 6f 72 79 20 75 73 65 64 20 66 6f 72 20 65 74  mory used for et
25d0: 54 43 4c 45 53 43 41 50 45 20 63 6f 6e 76 65 72  TCLESCAPE conver
25e0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 61 74 69  sions */.  stati
25f0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 73 70 61  c const char spa
2600: 63 65 73 5b 5d 20 3d 0a 20 20 20 22 20 20 20 20  ces[] =.   "    
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2650: 20 20 20 20 20 22 3b 0a 23 64 65 66 69 6e 65 20       ";.#define 
2660: 65 74 53 50 41 43 45 53 49 5a 45 20 28 73 69 7a  etSPACESIZE (siz
2670: 65 6f 66 28 73 70 61 63 65 73 29 2d 31 29 0a 23  eof(spaces)-1).#
2680: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2690: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
26a0: 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32  T.  int  exp, e2
26b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
26c0: 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65  * exponent of re
26d0: 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  al numbers */.  
26e0: 64 6f 75 62 6c 65 20 72 6f 75 6e 64 65 72 3b 20  double rounder; 
26f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2700: 65 64 20 66 6f 72 20 72 6f 75 6e 64 69 6e 67 20  ed for rounding 
2710: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
2720: 61 6c 75 65 73 20 2a 2f 0a 20 20 65 74 42 79 74  alues */.  etByt
2730: 65 20 66 6c 61 67 5f 64 70 3b 20 20 20 20 20 20  e flag_dp;      
2740: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
2750: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 73   decimal point s
2760: 68 6f 75 6c 64 20 62 65 20 73 68 6f 77 6e 20 2a  hould be shown *
2770: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
2780: 72 74 7a 3b 20 20 20 20 20 20 20 20 20 20 20 2f  rtz;           /
2790: 2a 20 54 72 75 65 20 69 66 20 74 72 61 69 6c 69  * True if traili
27a0: 6e 67 20 7a 65 72 6f 73 20 73 68 6f 75 6c 64 20  ng zeros should 
27b0: 62 65 20 72 65 6d 6f 76 65 64 20 2a 2f 0a 20 20  be removed */.  
27c0: 65 74 42 79 74 65 20 66 6c 61 67 5f 65 78 70 3b  etByte flag_exp;
27d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
27e0: 75 65 20 74 6f 20 66 6f 72 63 65 20 64 69 73 70  ue to force disp
27f0: 6c 61 79 20 6f 66 20 74 68 65 20 65 78 70 6f 6e  lay of the expon
2800: 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 73 64  ent */.  int nsd
2810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2820: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2830: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   significant dig
2840: 69 74 73 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a  its returned */.
2850: 23 65 6e 64 69 66 0a 0a 20 20 66 75 6e 63 28 61  #endif..  func(a
2860: 72 67 2c 22 22 2c 30 29 3b 0a 20 20 63 6f 75 6e  rg,"",0);.  coun
2870: 74 20 3d 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a  t = length = 0;.
2880: 20 20 62 75 66 70 74 20 3d 20 30 3b 0a 20 20 66    bufpt = 0;.  f
2890: 6f 72 28 3b 20 28 63 3d 28 2a 66 6d 74 29 29 21  or(; (c=(*fmt))!
28a0: 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20 20 20 20  =0; ++fmt){.    
28b0: 69 66 28 20 63 21 3d 27 25 27 20 29 7b 0a 20 20  if( c!='%' ){.  
28c0: 20 20 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 20      int amt;.   
28d0: 20 20 20 62 75 66 70 74 20 3d 20 28 63 68 61 72     bufpt = (char
28e0: 20 2a 29 66 6d 74 3b 0a 20 20 20 20 20 20 61 6d   *)fmt;.      am
28f0: 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 77 68 69  t = 1;.      whi
2900: 6c 65 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29  le( (c=(*++fmt))
2910: 21 3d 27 25 27 20 26 26 20 63 21 3d 30 20 29 20  !='%' && c!=0 ) 
2920: 61 6d 74 2b 2b 3b 0a 20 20 20 20 20 20 28 2a 66  amt++;.      (*f
2930: 75 6e 63 29 28 61 72 67 2c 62 75 66 70 74 2c 61  unc)(arg,bufpt,a
2940: 6d 74 29 3b 0a 20 20 20 20 20 20 63 6f 75 6e 74  mt);.      count
2950: 20 2b 3d 20 61 6d 74 3b 0a 20 20 20 20 20 20 69   += amt;.      i
2960: 66 28 20 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b  f( c==0 ) break;
2970: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
2980: 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d 30 20 29  c=(*++fmt))==0 )
2990: 7b 0a 20 20 20 20 20 20 65 72 72 6f 72 66 6c 61  {.      errorfla
29a0: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 28 2a 66  g = 1;.      (*f
29b0: 75 6e 63 29 28 61 72 67 2c 22 25 22 2c 31 29 3b  unc)(arg,"%",1);
29c0: 0a 20 20 20 20 20 20 63 6f 75 6e 74 2b 2b 3b 0a  .      count++;.
29d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
29e0: 20 7d 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 6f   }.    /* Find o
29f0: 75 74 20 77 68 61 74 20 66 6c 61 67 73 20 61 72  ut what flags ar
2a00: 65 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 20  e present */.   
2a10: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
2a20: 79 20 3d 20 66 6c 61 67 5f 70 6c 75 73 73 69 67  y = flag_plussig
2a30: 6e 20 3d 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69  n = flag_blanksi
2a40: 67 6e 20 3d 20 0a 20 20 20 20 20 66 6c 61 67 5f  gn = .     flag_
2a50: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20  alternateform = 
2a60: 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20 3d 20  flag_altform2 = 
2a70: 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 30  flag_zeropad = 0
2a80: 3b 0a 20 20 20 20 64 6f 6e 65 20 3d 20 30 3b 0a  ;.    done = 0;.
2a90: 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 73 77      do{.      sw
2aa0: 69 74 63 68 28 20 63 20 29 7b 0a 20 20 20 20 20  itch( c ){.     
2ab0: 20 20 20 63 61 73 65 20 27 2d 27 3a 20 20 20 66     case '-':   f
2ac0: 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20  lag_leftjustify 
2ad0: 3d 20 31 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  = 1;     break;.
2ae0: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 2b 27          case '+'
2af0: 3a 20 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67  :   flag_plussig
2b00: 6e 20 3d 20 31 3b 20 20 20 20 20 20 20 20 62 72  n = 1;        br
2b10: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
2b20: 65 20 27 20 27 3a 20 20 20 66 6c 61 67 5f 62 6c  e ' ':   flag_bl
2b30: 61 6e 6b 73 69 67 6e 20 3d 20 31 3b 20 20 20 20  anksign = 1;    
2b40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2b50: 20 20 63 61 73 65 20 27 23 27 3a 20 20 20 66 6c    case '#':   fl
2b60: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
2b70: 20 3d 20 31 3b 20 20 20 62 72 65 61 6b 3b 0a 20   = 1;   break;. 
2b80: 20 20 20 20 20 20 20 63 61 73 65 20 27 21 27 3a         case '!':
2b90: 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32     flag_altform2
2ba0: 20 3d 20 31 3b 20 20 20 20 20 20 20 20 62 72 65   = 1;        bre
2bb0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
2bc0: 20 27 30 27 3a 20 20 20 66 6c 61 67 5f 7a 65 72   '0':   flag_zer
2bd0: 6f 70 61 64 20 3d 20 31 3b 20 20 20 20 20 20 20  opad = 1;       
2be0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2bf0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 64 6f 6e   default:    don
2c00: 65 20 3d 20 31 3b 20 20 20 20 20 20 20 20 20 20  e = 1;          
2c10: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2c20: 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c 65      }.    }while
2c30: 28 20 21 64 6f 6e 65 20 26 26 20 28 63 3d 28 2a  ( !done && (c=(*
2c40: 2b 2b 66 6d 74 29 29 21 3d 30 20 29 3b 0a 20 20  ++fmt))!=0 );.  
2c50: 20 20 2f 2a 20 47 65 74 20 74 68 65 20 66 69 65    /* Get the fie
2c60: 6c 64 20 77 69 64 74 68 20 2a 2f 0a 20 20 20 20  ld width */.    
2c70: 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 69  width = 0;.    i
2c80: 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20  f( c=='*' ){.   
2c90: 20 20 20 77 69 64 74 68 20 3d 20 76 61 5f 61 72     width = va_ar
2ca0: 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20  g(ap,int);.     
2cb0: 20 69 66 28 20 77 69 64 74 68 3c 30 20 29 7b 0a   if( width<0 ){.
2cc0: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 65 66          flag_lef
2cd0: 74 6a 75 73 74 69 66 79 20 3d 20 31 3b 0a 20 20  tjustify = 1;.  
2ce0: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 2d 77        width = -w
2cf0: 69 64 74 68 3b 0a 20 20 20 20 20 20 7d 0a 20 20  idth;.      }.  
2d00: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
2d10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2d20: 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26   while( c>='0' &
2d30: 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20  & c<='9' ){.    
2d40: 20 20 20 20 77 69 64 74 68 20 3d 20 77 69 64 74      width = widt
2d50: 68 2a 31 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a  h*10 + c - '0';.
2d60: 20 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66          c = *++f
2d70: 6d 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  mt;.      }.    
2d80: 7d 0a 20 20 20 20 69 66 28 20 77 69 64 74 68 20  }.    if( width 
2d90: 3e 20 65 74 42 55 46 53 49 5a 45 2d 31 30 20 29  > etBUFSIZE-10 )
2da0: 7b 0a 20 20 20 20 20 20 77 69 64 74 68 20 3d 20  {.      width = 
2db0: 65 74 42 55 46 53 49 5a 45 2d 31 30 3b 0a 20 20  etBUFSIZE-10;.  
2dc0: 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65 74 20 74    }.    /* Get t
2dd0: 68 65 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a  he precision */.
2de0: 20 20 20 20 69 66 28 20 63 3d 3d 27 2e 27 20 29      if( c=='.' )
2df0: 7b 0a 20 20 20 20 20 20 70 72 65 63 69 73 69 6f  {.      precisio
2e00: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d  n = 0;.      c =
2e10: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 69   *++fmt;.      i
2e20: 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20  f( c=='*' ){.   
2e30: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
2e40: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b   va_arg(ap,int);
2e50: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65  .        if( pre
2e60: 63 69 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69  cision<0 ) preci
2e70: 73 69 6f 6e 20 3d 20 2d 70 72 65 63 69 73 69 6f  sion = -precisio
2e80: 6e 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a  n;.        c = *
2e90: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 65 6c  ++fmt;.      }el
2ea0: 73 65 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  se{.        whil
2eb0: 65 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d  e( c>='0' && c<=
2ec0: 27 39 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '9' ){.         
2ed0: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 70 72 65   precision = pre
2ee0: 63 69 73 69 6f 6e 2a 31 30 20 2b 20 63 20 2d 20  cision*10 + c - 
2ef0: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 63  '0';.          c
2f00: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
2f10: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
2f20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 72   }else{.      pr
2f30: 65 63 69 73 69 6f 6e 20 3d 20 2d 31 3b 0a 20 20  ecision = -1;.  
2f40: 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65 74 20 74    }.    /* Get t
2f50: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79  he conversion ty
2f60: 70 65 20 6d 6f 64 69 66 69 65 72 20 2a 2f 0a 20  pe modifier */. 
2f70: 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b     if( c=='l' ){
2f80: 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67  .      flag_long
2f90: 20 3d 20 31 3b 0a 20 20 20 20 20 20 63 20 3d 20   = 1;.      c = 
2fa0: 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 69 66  *++fmt;.      if
2fb0: 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20 20 20 20  ( c=='l' ){.    
2fc0: 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e      flag_longlon
2fd0: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63  g = 1;.        c
2fe0: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
2ff0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
3000: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
3010: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
3020: 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 6c 61 67  else{.      flag
3030: 5f 6c 6f 6e 67 20 3d 20 66 6c 61 67 5f 6c 6f 6e  _long = flag_lon
3040: 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 7d  glong = 0;.    }
3050: 0a 20 20 20 20 2f 2a 20 46 65 74 63 68 20 74 68  .    /* Fetch th
3060: 65 20 69 6e 66 6f 20 65 6e 74 72 79 20 66 6f 72  e info entry for
3070: 20 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20   the field */.  
3080: 20 20 69 6e 66 6f 70 20 3d 20 30 3b 0a 20 20 20    infop = 0;.   
3090: 20 66 6f 72 28 69 64 78 3d 30 3b 20 69 64 78 3c   for(idx=0; idx<
30a0: 65 74 4e 49 4e 46 4f 3b 20 69 64 78 2b 2b 29 7b  etNINFO; idx++){
30b0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 66 6d  .      if( c==fm
30c0: 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74 74 79  tinfo[idx].fmtty
30d0: 70 65 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  pe ){.        in
30e0: 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 69  fop = &fmtinfo[i
30f0: 64 78 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28  dx];.        if(
3100: 20 75 73 65 45 78 74 65 6e 64 65 64 20 7c 7c 20   useExtended || 
3110: 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20  (infop->flags & 
3120: 46 4c 41 47 5f 49 4e 54 45 52 4e 29 3d 3d 30 20  FLAG_INTERN)==0 
3130: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78 74 79  ){.          xty
3140: 70 65 20 3d 20 69 6e 66 6f 70 2d 3e 74 79 70 65  pe = infop->type
3150: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
3160: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3170: 6e 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n -1;.        }.
3180: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3190: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
31a0: 20 7a 45 78 74 72 61 20 3d 20 30 3b 0a 20 20 20   zExtra = 0;.   
31b0: 20 69 66 28 20 69 6e 66 6f 70 3d 3d 30 20 29 7b   if( infop==0 ){
31c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
31d0: 3b 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 2f 2a  ;.    }...    /*
31e0: 20 4c 69 6d 69 74 20 74 68 65 20 70 72 65 63 69   Limit the preci
31f0: 73 69 6f 6e 20 74 6f 20 70 72 65 76 65 6e 74 20  sion to prevent 
3200: 6f 76 65 72 66 6c 6f 77 69 6e 67 20 62 75 66 5b  overflowing buf[
3210: 5d 20 64 75 72 69 6e 67 20 63 6f 6e 76 65 72 73  ] during convers
3220: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ion */.    if( p
3230: 72 65 63 69 73 69 6f 6e 3e 65 74 42 55 46 53 49  recision>etBUFSI
3240: 5a 45 2d 34 30 20 26 26 20 28 69 6e 66 6f 70 2d  ZE-40 && (infop-
3250: 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 54  >flags & FLAG_ST
3260: 52 49 4e 47 29 3d 3d 30 20 29 7b 0a 20 20 20 20  RING)==0 ){.    
3270: 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 65 74    precision = et
3280: 42 55 46 53 49 5a 45 2d 34 30 3b 0a 20 20 20 20  BUFSIZE-40;.    
3290: 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a  }..    /*.    **
32a0: 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
32b0: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 69 6e  variables are in
32c0: 69 74 69 61 6c 69 7a 65 64 20 61 73 20 66 6f 6c  itialized as fol
32d0: 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20  lows:.    **.   
32e0: 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72   **   flag_alter
32f0: 6e 61 74 65 66 6f 72 6d 20 20 20 20 20 20 20 20  nateform        
3300: 20 20 54 52 55 45 20 69 66 20 61 20 27 23 27 20    TRUE if a '#' 
3310: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20  is present..    
3320: 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72  **   flag_altfor
3330: 6d 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m2              
3340: 20 54 52 55 45 20 69 66 20 61 20 27 21 27 20 69   TRUE if a '!' i
3350: 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a  s present..    *
3360: 2a 20 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67  *   flag_plussig
3370: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n               
3380: 54 52 55 45 20 69 66 20 61 20 27 2b 27 20 69 73  TRUE if a '+' is
3390: 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a   present..    **
33a0: 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74     flag_leftjust
33b0: 69 66 79 20 20 20 20 20 20 20 20 20 20 20 20 54  ify            T
33c0: 52 55 45 20 69 66 20 61 20 27 2d 27 20 69 73 20  RUE if a '-' is 
33d0: 70 72 65 73 65 6e 74 20 6f 72 20 69 66 20 74 68  present or if th
33e0: 65 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  e.    **        
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3400: 20 20 20 20 20 20 20 66 69 65 6c 64 20 77 69 64         field wid
3410: 74 68 20 77 61 73 20 6e 65 67 61 74 69 76 65 2e  th was negative.
3420: 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 7a  .    **   flag_z
3430: 65 72 6f 70 61 64 20 20 20 20 20 20 20 20 20 20  eropad          
3440: 20 20 20 20 20 20 54 52 55 45 20 69 66 20 74 68        TRUE if th
3450: 65 20 77 69 64 74 68 20 62 65 67 61 6e 20 77 69  e width began wi
3460: 74 68 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20 66  th 0..    **   f
3470: 6c 61 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20 20  lag_long        
3480: 20 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20             TRUE 
3490: 69 66 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c  if the letter 'l
34a0: 27 20 28 65 6c 6c 29 20 70 72 65 66 69 78 65 64  ' (ell) prefixed
34b0: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d0: 20 20 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72        the conver
34e0: 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a  sion character..
34f0: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f      **   flag_lo
3500: 6e 67 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20  nglong          
3510: 20 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65       TRUE if the
3520: 20 6c 65 74 74 65 72 20 27 6c 6c 27 20 28 65 6c   letter 'll' (el
3530: 6c 20 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a  l ell) prefixed.
3540: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3560: 20 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73       the convers
3570: 69 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20  ion character.. 
3580: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c 61     **   flag_bla
3590: 6e 6b 73 69 67 6e 20 20 20 20 20 20 20 20 20 20  nksign          
35a0: 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27 20      TRUE if a ' 
35b0: 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20  ' is present..  
35c0: 20 20 2a 2a 20 20 20 77 69 64 74 68 20 20 20 20    **   width    
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 54 68 65 20 73 70 65 63 69 66 69 65 64     The specified
35f0: 20 66 69 65 6c 64 20 77 69 64 74 68 2e 20 20 54   field width.  T
3600: 68 69 73 20 69 73 0a 20 20 20 20 2a 2a 20 20 20  his is.    **   
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3620: 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 77 61              alwa
3630: 79 73 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ys non-negative.
3640: 20 20 5a 65 72 6f 20 69 73 20 74 68 65 20 64 65    Zero is the de
3650: 66 61 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20 20  fault..    **   
3660: 70 72 65 63 69 73 69 6f 6e 20 20 20 20 20 20 20  precision       
3670: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
3680: 73 70 65 63 69 66 69 65 64 20 70 72 65 63 69 73  specified precis
3690: 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c  ion.  The defaul
36a0: 74 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  t.    **        
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 20 20 69 73 20 2d 31 2e 0a 20 20         is -1..  
36d0: 20 20 2a 2a 20 20 20 78 74 79 70 65 20 20 20 20    **   xtype    
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f0: 20 20 20 54 68 65 20 63 6c 61 73 73 20 6f 66 20     The class of 
3700: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a  the conversion..
3710: 20 20 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20 20      **   infop  
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 20 20 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20       Pointer to 
3740: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
3750: 69 6e 66 6f 20 73 74 72 75 63 74 2e 0a 20 20 20  info struct..   
3760: 20 2a 2f 0a 20 20 20 20 73 77 69 74 63 68 28 20   */.    switch( 
3770: 78 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20 63  xtype ){.      c
3780: 61 73 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a 20  ase etPOINTER:. 
3790: 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67         flag_long
37a0: 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68  long = sizeof(ch
37b0: 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36 34  ar*)==sizeof(i64
37c0: 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  );.        flag_
37d0: 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68  long = sizeof(ch
37e0: 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f 6e  ar*)==sizeof(lon
37f0: 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  g int);.        
3800: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
3810: 69 6e 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  into the next ca
3820: 73 65 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65  se */.      case
3830: 20 65 74 52 41 44 49 58 3a 0a 20 20 20 20 20 20   etRADIX:.      
3840: 20 20 69 66 28 20 69 6e 66 6f 70 2d 3e 66 6c 61    if( infop->fla
3850: 67 73 20 26 20 46 4c 41 47 5f 53 49 47 4e 45 44  gs & FLAG_SIGNED
3860: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 36   ){.          i6
3870: 34 20 76 3b 0a 20 20 20 20 20 20 20 20 20 20 69  4 v;.          i
3880: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67  f( flag_longlong
3890: 20 29 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28   )   v = va_arg(
38a0: 61 70 2c 69 36 34 29 3b 0a 20 20 20 20 20 20 20  ap,i64);.       
38b0: 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67     else if( flag
38c0: 5f 6c 6f 6e 67 20 29 20 20 76 20 3d 20 76 61 5f  _long )  v = va_
38d0: 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e 74 29  arg(ap,long int)
38e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ;.          else
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3900: 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c    v = va_arg(ap,
3910: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
3920: 69 66 28 20 76 3c 30 20 29 7b 0a 20 20 20 20 20  if( v<0 ){.     
3930: 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65         longvalue
3940: 20 3d 20 2d 76 3b 0a 20 20 20 20 20 20 20 20 20   = -v;.         
3950: 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b     prefix = '-';
3960: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
3970: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  {.            lo
3980: 6e 67 76 61 6c 75 65 20 3d 20 76 3b 0a 20 20 20  ngvalue = v;.   
3990: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
39a0: 67 5f 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20  g_plussign )    
39b0: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27      prefix = '+'
39c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ;.            el
39d0: 73 65 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e  se if( flag_blan
39e0: 6b 73 69 67 6e 20 29 20 20 70 72 65 66 69 78 20  ksign )  prefix 
39f0: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20  = ' ';.         
3a00: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
3a20: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  efix = 0;.      
3a30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
3a40: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
3a50: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67  f( flag_longlong
3a60: 20 29 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d   )   longvalue =
3a70: 20 76 61 5f 61 72 67 28 61 70 2c 75 36 34 29 3b   va_arg(ap,u64);
3a80: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
3a90: 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 20  if( flag_long ) 
3aa0: 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f   longvalue = va_
3ab0: 61 72 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 20  arg(ap,unsigned 
3ac0: 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20  long int);.     
3ad0: 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20 20       else       
3ae0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
3af0: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70  alue = va_arg(ap
3b00: 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a  ,unsigned int);.
3b10: 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78            prefix
3b20: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
3b30: 20 20 20 20 20 20 20 20 69 66 28 20 6c 6f 6e 67          if( long
3b40: 76 61 6c 75 65 3d 3d 30 20 29 20 66 6c 61 67 5f  value==0 ) flag_
3b50: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20  alternateform = 
3b60: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  0;.        if( f
3b70: 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26 26 20 70  lag_zeropad && p
3b80: 72 65 63 69 73 69 6f 6e 3c 77 69 64 74 68 2d 28  recision<width-(
3b90: 70 72 65 66 69 78 21 3d 30 29 20 29 7b 0a 20 20  prefix!=0) ){.  
3ba0: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
3bb0: 6e 20 3d 20 77 69 64 74 68 2d 28 70 72 65 66 69  n = width-(prefi
3bc0: 78 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  x!=0);.        }
3bd0: 0a 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d  .        bufpt =
3be0: 20 26 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d   &buf[etBUFSIZE-
3bf0: 31 5d 3b 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  1];.        {.  
3c00: 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
3c10: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 73 65   const char *cse
3c20: 74 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 20 72  t;      /* Use r
3c30: 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 70 65  egisters for spe
3c40: 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ed */.          
3c50: 72 65 67 69 73 74 65 72 20 69 6e 74 20 62 61 73  register int bas
3c60: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 63 73 65  e;.          cse
3c70: 74 20 3d 20 26 61 44 69 67 69 74 73 5b 69 6e 66  t = &aDigits[inf
3c80: 6f 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20  op->charset];.  
3c90: 20 20 20 20 20 20 20 20 62 61 73 65 20 3d 20 69          base = i
3ca0: 6e 66 6f 70 2d 3e 62 61 73 65 3b 0a 20 20 20 20  nfop->base;.    
3cb0: 20 20 20 20 20 20 64 6f 7b 20 20 20 20 20 20 20        do{       
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 74      /* Convert t
3cf0: 6f 20 61 73 63 69 69 20 2a 2f 0a 20 20 20 20 20  o ascii */.     
3d00: 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74         *(--bufpt
3d10: 29 20 3d 20 63 73 65 74 5b 6c 6f 6e 67 76 61 6c  ) = cset[longval
3d20: 75 65 25 62 61 73 65 5d 3b 0a 20 20 20 20 20 20  ue%base];.      
3d30: 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20        longvalue 
3d40: 3d 20 6c 6f 6e 67 76 61 6c 75 65 2f 62 61 73 65  = longvalue/base
3d50: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 77 68 69  ;.          }whi
3d60: 6c 65 28 20 6c 6f 6e 67 76 61 6c 75 65 3e 30 20  le( longvalue>0 
3d70: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
3d80: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 26 62       length = &b
3d90: 75 66 5b 65 74 42 55 46 53 49 5a 45 2d 31 5d 2d  uf[etBUFSIZE-1]-
3da0: 62 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20 66  bufpt;.        f
3db0: 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e  or(idx=precision
3dc0: 2d 6c 65 6e 67 74 68 3b 20 69 64 78 3e 30 3b 20  -length; idx>0; 
3dd0: 69 64 78 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20  idx--){.        
3de0: 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27    *(--bufpt) = '
3df0: 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  0';             
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e10: 2f 2a 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20  /* Zero pad */. 
3e20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3e30: 20 69 66 28 20 70 72 65 66 69 78 20 29 20 2a 28   if( prefix ) *(
3e40: 2d 2d 62 75 66 70 74 29 20 3d 20 70 72 65 66 69  --bufpt) = prefi
3e50: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
3e60: 20 2f 2a 20 41 64 64 20 73 69 67 6e 20 2a 2f 0a   /* Add sign */.
3e70: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
3e80: 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 26  _alternateform &
3e90: 26 20 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 20  & infop->prefix 
3ea0: 29 7b 20 20 20 20 20 20 2f 2a 20 41 64 64 20 22  ){      /* Add "
3eb0: 30 22 20 6f 72 20 22 30 78 22 20 2a 2f 0a 20 20  0" or "0x" */.  
3ec0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
3ed0: 61 72 20 2a 70 72 65 3b 0a 20 20 20 20 20 20 20  ar *pre;.       
3ee0: 20 20 20 63 68 61 72 20 78 3b 0a 20 20 20 20 20     char x;.     
3ef0: 20 20 20 20 20 70 72 65 20 3d 20 26 61 50 72 65       pre = &aPre
3f00: 66 69 78 5b 69 6e 66 6f 70 2d 3e 70 72 65 66 69  fix[infop->prefi
3f10: 78 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  x];.          if
3f20: 28 20 2a 62 75 66 70 74 21 3d 70 72 65 5b 30 5d  ( *bufpt!=pre[0]
3f30: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
3f40: 66 6f 72 28 3b 20 28 78 3d 28 2a 70 72 65 29 29  for(; (x=(*pre))
3f50: 21 3d 30 3b 20 70 72 65 2b 2b 29 20 2a 28 2d 2d  !=0; pre++) *(--
3f60: 62 75 66 70 74 29 20 3d 20 78 3b 0a 20 20 20 20  bufpt) = x;.    
3f70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3f80: 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68  }.        length
3f90: 20 3d 20 26 62 75 66 5b 65 74 42 55 46 53 49 5a   = &buf[etBUFSIZ
3fa0: 45 2d 31 5d 2d 62 75 66 70 74 3b 0a 20 20 20 20  E-1]-bufpt;.    
3fb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3fc0: 20 63 61 73 65 20 65 74 46 4c 4f 41 54 3a 0a 20   case etFLOAT:. 
3fd0: 20 20 20 20 20 63 61 73 65 20 65 74 45 58 50 3a       case etEXP:
3fe0: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 47 45  .      case etGE
3ff0: 4e 45 52 49 43 3a 0a 20 20 20 20 20 20 20 20 72  NERIC:.        r
4000: 65 61 6c 76 61 6c 75 65 20 3d 20 76 61 5f 61 72  ealvalue = va_ar
4010: 67 28 61 70 2c 64 6f 75 62 6c 65 29 3b 0a 23 69  g(ap,double);.#i
4020: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4030: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
4040: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65  .        if( pre
4050: 63 69 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69  cision<0 ) preci
4060: 73 69 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20 20  sion = 6;       
4070: 20 20 2f 2a 20 53 65 74 20 64 65 66 61 75 6c 74    /* Set default
4080: 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20   precision */.  
4090: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
40a0: 69 6f 6e 3e 65 74 42 55 46 53 49 5a 45 2f 32 2d  ion>etBUFSIZE/2-
40b0: 31 30 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d  10 ) precision =
40c0: 20 65 74 42 55 46 53 49 5a 45 2f 32 2d 31 30 3b   etBUFSIZE/2-10;
40d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65 61  .        if( rea
40e0: 6c 76 61 6c 75 65 3c 30 2e 30 20 29 7b 0a 20 20  lvalue<0.0 ){.  
40f0: 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75          realvalu
4100: 65 20 3d 20 2d 72 65 61 6c 76 61 6c 75 65 3b 0a  e = -realvalue;.
4110: 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78            prefix
4120: 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 20   = '-';.        
4130: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4140: 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73 69   if( flag_plussi
4150: 67 6e 20 29 20 20 20 20 20 20 20 20 20 20 70 72  gn )          pr
4160: 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20  efix = '+';.    
4170: 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 66        else if( f
4180: 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 20  lag_blanksign ) 
4190: 20 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b     prefix = ' ';
41a0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41c0: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
41d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
41e0: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
41f0: 3d 65 74 47 45 4e 45 52 49 43 20 26 26 20 70 72  =etGENERIC && pr
4200: 65 63 69 73 69 6f 6e 3e 30 20 29 20 70 72 65 63  ecision>0 ) prec
4210: 69 73 69 6f 6e 2d 2d 3b 0a 23 69 66 20 30 0a 20  ision--;.#if 0. 
4220: 20 20 20 20 20 20 20 2f 2a 20 52 6f 75 6e 64 69         /* Roundi
4230: 6e 67 20 77 6f 72 6b 73 20 6c 69 6b 65 20 42 53  ng works like BS
4240: 44 20 77 68 65 6e 20 74 68 65 20 63 6f 6e 73 74  D when the const
4250: 61 6e 74 20 30 2e 34 39 39 39 20 69 73 20 75 73  ant 0.4999 is us
4260: 65 64 2e 20 20 57 69 65 72 64 21 20 2a 2f 0a 20  ed.  Wierd! */. 
4270: 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70         for(idx=p
4280: 72 65 63 69 73 69 6f 6e 2c 20 72 6f 75 6e 64 65  recision, rounde
4290: 72 3d 30 2e 34 39 39 39 3b 20 69 64 78 3e 30 3b  r=0.4999; idx>0;
42a0: 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a   idx--, rounder*
42b0: 3d 30 2e 31 29 3b 0a 23 65 6c 73 65 0a 20 20 20  =0.1);.#else.   
42c0: 20 20 20 20 20 2f 2a 20 49 74 20 6d 61 6b 65 73       /* It makes
42d0: 20 6d 6f 72 65 20 73 65 6e 73 65 20 74 6f 20 75   more sense to u
42e0: 73 65 20 30 2e 35 20 2a 2f 0a 20 20 20 20 20 20  se 0.5 */.      
42f0: 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73    for(idx=precis
4300: 69 6f 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 35  ion, rounder=0.5
4310: 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c 20  ; idx>0; idx--, 
4320: 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29 7b 7d 0a  rounder*=0.1){}.
4330: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 69  #endif.        i
4340: 66 28 20 78 74 79 70 65 3d 3d 65 74 46 4c 4f 41  f( xtype==etFLOA
4350: 54 20 29 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d  T ) realvalue +=
4360: 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20   rounder;.      
4370: 20 20 2f 2a 20 4e 6f 72 6d 61 6c 69 7a 65 20 72    /* Normalize r
4380: 65 61 6c 76 61 6c 75 65 20 74 6f 20 77 69 74 68  ealvalue to with
4390: 69 6e 20 31 30 2e 30 20 3e 20 72 65 61 6c 76 61  in 10.0 > realva
43a0: 6c 75 65 20 3e 3d 20 31 2e 30 20 2a 2f 0a 20 20  lue >= 1.0 */.  
43b0: 20 20 20 20 20 20 65 78 70 20 3d 20 30 3b 0a 20        exp = 0;. 
43c0: 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76         if( realv
43d0: 61 6c 75 65 3e 30 2e 30 20 29 7b 0a 20 20 20 20  alue>0.0 ){.    
43e0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61        while( rea
43f0: 6c 76 61 6c 75 65 3e 3d 31 65 33 32 20 26 26 20  lvalue>=1e32 && 
4400: 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c  exp<=350 ){ real
4410: 76 61 6c 75 65 20 2a 3d 20 31 65 2d 33 32 3b 20  value *= 1e-32; 
4420: 65 78 70 2b 3d 33 32 3b 20 7d 0a 20 20 20 20 20  exp+=32; }.     
4430: 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c       while( real
4440: 76 61 6c 75 65 3e 3d 31 65 38 20 26 26 20 65 78  value>=1e8 && ex
4450: 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61  p<=350 ){ realva
4460: 6c 75 65 20 2a 3d 20 31 65 2d 38 3b 20 65 78 70  lue *= 1e-8; exp
4470: 2b 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20 20  +=8; }.         
4480: 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75   while( realvalu
4490: 65 3e 3d 31 30 2e 30 20 26 26 20 65 78 70 3c 3d  e>=10.0 && exp<=
44a0: 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  350 ){ realvalue
44b0: 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20   *= 0.1; exp++; 
44c0: 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  }.          whil
44d0: 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 65 2d  e( realvalue<1e-
44e0: 38 20 26 26 20 65 78 70 3e 3d 2d 33 35 30 20 29  8 && exp>=-350 )
44f0: 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31  { realvalue *= 1
4500: 65 38 3b 20 65 78 70 2d 3d 38 3b 20 7d 0a 20 20  e8; exp-=8; }.  
4510: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72          while( r
4520: 65 61 6c 76 61 6c 75 65 3c 31 2e 30 20 26 26 20  ealvalue<1.0 && 
4530: 65 78 70 3e 3d 2d 33 35 30 20 29 7b 20 72 65 61  exp>=-350 ){ rea
4540: 6c 76 61 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20  lvalue *= 10.0; 
4550: 65 78 70 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20  exp--; }.       
4560: 20 20 20 69 66 28 20 65 78 70 3e 33 35 30 20 7c     if( exp>350 |
4570: 7c 20 65 78 70 3c 2d 33 35 30 20 29 7b 0a 20 20  | exp<-350 ){.  
4580: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
4590: 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 20 20  = "NaN";.       
45a0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b       length = 3;
45b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
45c0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
45d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
45e0: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
45f0: 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20         /*.      
4600: 20 20 2a 2a 20 49 66 20 74 68 65 20 66 69 65 6c    ** If the fiel
4610: 64 20 74 79 70 65 20 69 73 20 65 74 47 45 4e 45  d type is etGENE
4620: 52 49 43 2c 20 74 68 65 6e 20 63 6f 6e 76 65 72  RIC, then conver
4630: 74 20 74 6f 20 65 69 74 68 65 72 20 65 74 45 58  t to either etEX
4640: 50 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20  P.        ** or 
4650: 65 74 46 4c 4f 41 54 2c 20 61 73 20 61 70 70 72  etFLOAT, as appr
4660: 6f 70 72 69 61 74 65 2e 0a 20 20 20 20 20 20 20  opriate..       
4670: 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6c 61 67   */.        flag
4680: 5f 65 78 70 20 3d 20 78 74 79 70 65 3d 3d 65 74  _exp = xtype==et
4690: 45 58 50 3b 0a 20 20 20 20 20 20 20 20 69 66 28  EXP;.        if(
46a0: 20 78 74 79 70 65 21 3d 65 74 46 4c 4f 41 54 20   xtype!=etFLOAT 
46b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61  ){.          rea
46c0: 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65  lvalue += rounde
46d0: 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  r;.          if(
46e0: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30   realvalue>=10.0
46f0: 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d   ){ realvalue *=
4700: 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20   0.1; exp++; }. 
4710: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4720: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
4730: 4e 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 20  NERIC ){.       
4740: 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 21 66     flag_rtz = !f
4750: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
4760: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  m;.          if(
4770: 20 65 78 70 3c 2d 34 20 7c 7c 20 65 78 70 3e 70   exp<-4 || exp>p
4780: 72 65 63 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20  recision ){.    
4790: 20 20 20 20 20 20 20 20 78 74 79 70 65 20 3d 20          xtype = 
47a0: 65 74 45 58 50 3b 0a 20 20 20 20 20 20 20 20 20  etEXP;.         
47b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
47c0: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
47d0: 70 72 65 63 69 73 69 6f 6e 20 2d 20 65 78 70 3b  precision - exp;
47e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 74 79  .            xty
47f0: 70 65 20 3d 20 65 74 46 4c 4f 41 54 3b 0a 20 20  pe = etFLOAT;.  
4800: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4810: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4820: 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 30 3b     flag_rtz = 0;
4830: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4840: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
4850: 45 58 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20  EXP ){.         
4860: 20 65 32 20 3d 20 30 3b 0a 20 20 20 20 20 20 20   e2 = 0;.       
4870: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4880: 20 20 65 32 20 3d 20 65 78 70 3b 0a 20 20 20 20    e2 = exp;.    
4890: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 73      }.        ns
48a0: 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 66  d = 0;.        f
48b0: 6c 61 67 5f 64 70 20 3d 20 28 70 72 65 63 69 73  lag_dp = (precis
48c0: 69 6f 6e 3e 30 29 20 7c 20 66 6c 61 67 5f 61 6c  ion>0) | flag_al
48d0: 74 65 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66 6c  ternateform | fl
48e0: 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20 20  ag_altform2;.   
48f0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 69 67 6e       /* The sign
4900: 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68 65   in front of the
4910: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
4920: 20 20 20 69 66 28 20 70 72 65 66 69 78 20 29 7b     if( prefix ){
4930: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66  .          *(buf
4940: 70 74 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b 0a  pt++) = prefix;.
4950: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4960: 20 20 2f 2a 20 44 69 67 69 74 73 20 70 72 69 6f    /* Digits prio
4970: 72 20 74 6f 20 74 68 65 20 64 65 63 69 6d 61 6c  r to the decimal
4980: 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20   point */.      
4990: 20 20 69 66 28 20 65 32 3c 30 20 29 7b 0a 20 20    if( e2<0 ){.  
49a0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
49b0: 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20  +) = '0';.      
49c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
49d0: 20 20 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b 20     for(; e2>=0; 
49e0: 65 32 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20  e2--){.         
49f0: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
4a00: 65 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61  et_getdigit(&rea
4a10: 6c 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20  lvalue,&nsd);.  
4a20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4a30: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 54    }.        /* T
4a40: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
4a50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
4a60: 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20 20  flag_dp ){.     
4a70: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
4a80: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d  = '.';.        }
4a90: 0a 20 20 20 20 20 20 20 20 2f 2a 20 22 30 22 20  .        /* "0" 
4aa0: 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68 65  digits after the
4ab0: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 62   decimal point b
4ac0: 75 74 20 62 65 66 6f 72 65 20 74 68 65 20 66 69  ut before the fi
4ad0: 72 73 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 73  rst.        ** s
4ae0: 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74  ignificant digit
4af0: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a   of the number *
4b00: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 65 32  /.        for(e2
4b10: 2b 2b 3b 20 65 32 3c 30 20 26 26 20 70 72 65 63  ++; e2<0 && prec
4b20: 69 73 69 6f 6e 3e 30 3b 20 70 72 65 63 69 73 69  ision>0; precisi
4b30: 6f 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20 20 20  on--, e2++){.   
4b40: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4b50: 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20  ) = '0';.       
4b60: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69   }.        /* Si
4b70: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
4b80: 20 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d   after the decim
4b90: 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20  al point */.    
4ba0: 20 20 20 20 77 68 69 6c 65 28 20 28 70 72 65 63      while( (prec
4bb0: 69 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b 0a 20 20  ision--)>0 ){.  
4bc0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
4bd0: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74  +) = et_getdigit
4be0: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64  (&realvalue,&nsd
4bf0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4c00: 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76 65 20 74       /* Remove t
4c10: 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73 20 61 6e  railing zeros an
4c20: 64 20 74 68 65 20 22 2e 22 20 69 66 20 6e 6f 20  d the "." if no 
4c30: 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 20 74 68  digits follow th
4c40: 65 20 22 2e 22 20 2a 2f 0a 20 20 20 20 20 20 20  e "." */.       
4c50: 20 69 66 28 20 66 6c 61 67 5f 72 74 7a 20 26 26   if( flag_rtz &&
4c60: 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20   flag_dp ){.    
4c70: 20 20 20 20 20 20 77 68 69 6c 65 28 20 62 75 66        while( buf
4c80: 70 74 5b 2d 31 5d 3d 3d 27 30 27 20 29 20 2a 28  pt[-1]=='0' ) *(
4c90: 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20 20  --bufpt) = 0;.  
4ca0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
4cb0: 62 75 66 70 74 3e 62 75 66 20 29 3b 0a 20 20 20  bufpt>buf );.   
4cc0: 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70 74         if( bufpt
4cd0: 5b 2d 31 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  [-1]=='.' ){.   
4ce0: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
4cf0: 67 5f 61 6c 74 66 6f 72 6d 32 20 29 7b 0a 20 20  g_altform2 ){.  
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
4d10: 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20  fpt++) = '0';.  
4d20: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
4d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  .              *
4d40: 28 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20  (--bufpt) = 0;. 
4d50: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
4d60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4d70: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 64   }.        /* Ad
4d80: 64 20 74 68 65 20 22 65 4e 4e 4e 22 20 73 75 66  d the "eNNN" suf
4d90: 66 69 78 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  fix */.        i
4da0: 66 28 20 66 6c 61 67 5f 65 78 70 20 7c 7c 20 28  f( flag_exp || (
4db0: 78 74 79 70 65 3d 3d 65 74 45 58 50 20 26 26 20  xtype==etEXP && 
4dc0: 65 78 70 29 20 29 7b 0a 20 20 20 20 20 20 20 20  exp) ){.        
4dd0: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 61    *(bufpt++) = a
4de0: 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68  Digits[infop->ch
4df0: 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20  arset];.        
4e00: 20 20 69 66 28 20 65 78 70 3c 30 20 29 7b 0a 20    if( exp<0 ){. 
4e10: 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66             *(buf
4e20: 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78 70  pt++) = '-'; exp
4e30: 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20 20 20   = -exp;.       
4e40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4e50: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
4e60: 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20   = '+';.        
4e70: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
4e80: 28 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20 20  ( exp>=100 ){.  
4e90: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4ea0: 74 2b 2b 29 20 3d 20 28 65 78 70 2f 31 30 30 29  t++) = (exp/100)
4eb0: 2b 27 30 27 3b 20 20 20 20 20 20 20 20 20 20 20  +'0';           
4ec0: 20 20 20 20 20 2f 2a 20 31 30 30 27 73 20 64 69       /* 100's di
4ed0: 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  git */.         
4ee0: 20 20 20 65 78 70 20 25 3d 20 31 30 30 3b 0a 20     exp %= 100;. 
4ef0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
4f00: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
4f10: 3d 20 65 78 70 2f 31 30 2b 27 30 27 3b 20 20 20  = exp/10+'0';   
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f30: 20 20 2f 2a 20 31 30 27 73 20 64 69 67 69 74 20    /* 10's digit 
4f40: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62  */.          *(b
4f50: 75 66 70 74 2b 2b 29 20 3d 20 65 78 70 25 31 30  ufpt++) = exp%10
4f60: 2b 27 30 27 3b 20 20 20 20 20 20 20 20 20 20 20  +'0';           
4f70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 27 73            /* 1's
4f80: 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20   digit */.      
4f90: 20 20 7d 0a 20 20 20 20 20 20 20 20 2a 62 75 66    }.        *buf
4fa0: 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20  pt = 0;..       
4fb0: 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72 74 65   /* The converte
4fc0: 64 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 62  d number is in b
4fd0: 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74 65  uf[] and zero te
4fe0: 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70 75 74  rminated. Output
4ff0: 20 69 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20   it..        ** 
5000: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6e 75  Note that the nu
5010: 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65 20 75  mber is in the u
5020: 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74 20  sual order, not 
5030: 72 65 76 65 72 73 65 64 20 61 73 20 77 69 74 68  reversed as with
5040: 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65  .        ** inte
5050: 67 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e  ger conversions.
5060: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e 67   */.        leng
5070: 74 68 20 3d 20 62 75 66 70 74 2d 62 75 66 3b 0a  th = bufpt-buf;.
5080: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
5090: 62 75 66 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  buf;..        /*
50a0: 20 53 70 65 63 69 61 6c 20 63 61 73 65 3a 20 20   Special case:  
50b0: 41 64 64 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f  Add leading zero
50c0: 73 20 69 66 20 74 68 65 20 66 6c 61 67 5f 7a 65  s if the flag_ze
50d0: 72 6f 70 61 64 20 66 6c 61 67 20 69 73 0a 20 20  ropad flag is.  
50e0: 20 20 20 20 20 20 2a 2a 20 73 65 74 20 61 6e 64        ** set and
50f0: 20 77 65 20 61 72 65 20 6e 6f 74 20 6c 65 66 74   we are not left
5100: 20 6a 75 73 74 69 66 69 65 64 20 2a 2f 0a 20 20   justified */.  
5110: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a        if( flag_z
5120: 65 72 6f 70 61 64 20 26 26 20 21 66 6c 61 67 5f  eropad && !flag_
5130: 6c 65 66 74 6a 75 73 74 69 66 79 20 26 26 20 6c  leftjustify && l
5140: 65 6e 67 74 68 20 3c 20 77 69 64 74 68 29 7b 0a  ength < width){.
5150: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b            int i;
5160: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
5170: 50 61 64 20 3d 20 77 69 64 74 68 20 2d 20 6c 65  Pad = width - le
5180: 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20  ngth;.          
5190: 66 6f 72 28 69 3d 77 69 64 74 68 3b 20 69 3e 3d  for(i=width; i>=
51a0: 6e 50 61 64 3b 20 69 2d 2d 29 7b 0a 20 20 20 20  nPad; i--){.    
51b0: 20 20 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d          bufpt[i]
51c0: 20 3d 20 62 75 66 70 74 5b 69 2d 6e 50 61 64 5d   = bufpt[i-nPad]
51d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
51e0: 20 20 20 20 20 20 20 20 69 20 3d 20 70 72 65 66          i = pref
51f0: 69 78 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  ix!=0;.         
5200: 20 77 68 69 6c 65 28 20 6e 50 61 64 2d 2d 20 29   while( nPad-- )
5210: 20 62 75 66 70 74 5b 69 2b 2b 5d 20 3d 20 27 30   bufpt[i++] = '0
5220: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  ';.          len
5230: 67 74 68 20 3d 20 77 69 64 74 68 3b 0a 20 20 20  gth = width;.   
5240: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20       }.#endif.  
5250: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5260: 20 20 20 63 61 73 65 20 65 74 53 49 5a 45 3a 0a     case etSIZE:.
5270: 20 20 20 20 20 20 20 20 2a 28 76 61 5f 61 72 67          *(va_arg
5280: 28 61 70 2c 69 6e 74 2a 29 29 20 3d 20 63 6f 75  (ap,int*)) = cou
5290: 6e 74 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67  nt;.        leng
52a0: 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a  th = width = 0;.
52b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
52c0: 20 20 20 20 20 63 61 73 65 20 65 74 50 45 52 43       case etPERC
52d0: 45 4e 54 3a 0a 20 20 20 20 20 20 20 20 62 75 66  ENT:.        buf
52e0: 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20  [0] = '%';.     
52f0: 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a     bufpt = buf;.
5300: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
5310: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
5320: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  k;.      case et
5330: 43 48 41 52 4c 49 54 3a 0a 20 20 20 20 20 20 63  CHARLIT:.      c
5340: 61 73 65 20 65 74 43 48 41 52 58 3a 0a 20 20 20  ase etCHARX:.   
5350: 20 20 20 20 20 63 20 3d 20 62 75 66 5b 30 5d 20       c = buf[0] 
5360: 3d 20 28 78 74 79 70 65 3d 3d 65 74 43 48 41 52  = (xtype==etCHAR
5370: 58 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  X ? va_arg(ap,in
5380: 74 29 20 3a 20 2a 2b 2b 66 6d 74 29 3b 0a 20 20  t) : *++fmt);.  
5390: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
53a0: 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  ion>=0 ){.      
53b0: 20 20 20 20 66 6f 72 28 69 64 78 3d 31 3b 20 69      for(idx=1; i
53c0: 64 78 3c 70 72 65 63 69 73 69 6f 6e 3b 20 69 64  dx<precision; id
53d0: 78 2b 2b 29 20 62 75 66 5b 69 64 78 5d 20 3d 20  x++) buf[idx] = 
53e0: 63 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  c;.          len
53f0: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b  gth = precision;
5400: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
5410: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68            length
5420: 20 3d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   =1;.        }. 
5430: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62         bufpt = b
5440: 75 66 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  uf;.        brea
5450: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  k;.      case et
5460: 53 54 52 49 4e 47 3a 0a 20 20 20 20 20 20 63 61  STRING:.      ca
5470: 73 65 20 65 74 44 59 4e 53 54 52 49 4e 47 3a 0a  se etDYNSTRING:.
5480: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
5490: 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29  va_arg(ap,char*)
54a0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 75  ;.        if( bu
54b0: 66 70 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  fpt==0 ){.      
54c0: 20 20 20 20 62 75 66 70 74 20 3d 20 22 22 3b 0a      bufpt = "";.
54d0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
54e0: 28 20 78 74 79 70 65 3d 3d 65 74 44 59 4e 53 54  ( xtype==etDYNST
54f0: 52 49 4e 47 20 29 7b 0a 20 20 20 20 20 20 20 20  RING ){.        
5500: 20 20 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74    zExtra = bufpt
5510: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5520: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 74 72      length = str
5530: 6c 65 6e 28 62 75 66 70 74 29 3b 0a 20 20 20 20  len(bufpt);.    
5540: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
5550: 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f  n>=0 && precisio
5560: 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74  n<length ) lengt
5570: 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20  h = precision;. 
5580: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5590: 20 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53      case etSQLES
55a0: 43 41 50 45 3a 0a 20 20 20 20 20 20 63 61 73 65  CAPE:.      case
55b0: 20 65 74 53 51 4c 45 53 43 41 50 45 32 3a 20 7b   etSQLESCAPE2: {
55c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20  .        int i, 
55d0: 6a 2c 20 6e 2c 20 63 68 2c 20 69 73 6e 75 6c 6c  j, n, ch, isnull
55e0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65  ;.        int ne
55f0: 65 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20  edQuote;.       
5600: 20 63 68 61 72 20 2a 65 73 63 61 72 67 20 3d 20   char *escarg = 
5610: 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29  va_arg(ap,char*)
5620: 3b 0a 20 20 20 20 20 20 20 20 69 73 6e 75 6c 6c  ;.        isnull
5630: 20 3d 20 65 73 63 61 72 67 3d 3d 30 3b 0a 20 20   = escarg==0;.  
5640: 20 20 20 20 20 20 69 66 28 20 69 73 6e 75 6c 6c        if( isnull
5650: 20 29 20 65 73 63 61 72 67 20 3d 20 28 78 74 79   ) escarg = (xty
5660: 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32  pe==etSQLESCAPE2
5670: 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 22 28 4e 55   ? "NULL" : "(NU
5680: 4c 4c 29 22 29 3b 0a 20 20 20 20 20 20 20 20 66  LL)");.        f
5690: 6f 72 28 69 3d 6e 3d 30 3b 20 28 63 68 3d 65 73  or(i=n=0; (ch=es
56a0: 63 61 72 67 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b  carg[i])!=0; i++
56b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
56c0: 20 63 68 3d 3d 27 5c 27 27 20 29 20 20 6e 2b 2b   ch=='\'' )  n++
56d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
56e0: 20 20 20 20 6e 65 65 64 51 75 6f 74 65 20 3d 20      needQuote = 
56f0: 21 69 73 6e 75 6c 6c 20 26 26 20 78 74 79 70 65  !isnull && xtype
5700: 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32 3b 0a  ==etSQLESCAPE2;.
5710: 20 20 20 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b          n += i +
5720: 20 31 20 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32   1 + needQuote*2
5730: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 3e  ;.        if( n>
5740: 65 74 42 55 46 53 49 5a 45 20 29 7b 0a 20 20 20  etBUFSIZE ){.   
5750: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 7a         bufpt = z
5760: 45 78 74 72 61 20 3d 20 73 71 6c 69 74 65 4d 61  Extra = sqliteMa
5770: 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20  lloc( n );.     
5780: 20 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d       if( bufpt==
5790: 30 20 29 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20  0 ) return -1;. 
57a0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
57b0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
57c0: 62 75 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  buf;.        }. 
57d0: 20 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20         j = 0;.  
57e0: 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 51 75        if( needQu
57f0: 6f 74 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d  ote ) bufpt[j++]
5800: 20 3d 20 27 5c 27 27 3b 0a 20 20 20 20 20 20 20   = '\'';.       
5810: 20 66 6f 72 28 69 3d 30 3b 20 28 63 68 3d 65 73   for(i=0; (ch=es
5820: 63 61 72 67 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b  carg[i])!=0; i++
5830: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ){.          buf
5840: 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68 3b 0a 20 20  pt[j++] = ch;.  
5850: 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d          if( ch==
5860: 27 5c 27 27 20 29 20 62 75 66 70 74 5b 6a 2b 2b  '\'' ) bufpt[j++
5870: 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20 20 20 20  ] = ch;.        
5880: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 65  }.        if( ne
5890: 65 64 51 75 6f 74 65 20 29 20 62 75 66 70 74 5b  edQuote ) bufpt[
58a0: 6a 2b 2b 5d 20 3d 20 27 5c 27 27 3b 0a 20 20 20  j++] = '\'';.   
58b0: 20 20 20 20 20 62 75 66 70 74 5b 6a 5d 20 3d 20       bufpt[j] = 
58c0: 30 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  0;.        lengt
58d0: 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20 20 20 2f  h = j;.        /
58e0: 2a 20 54 68 65 20 70 72 65 63 69 73 69 6f 6e 20  * The precision 
58f0: 69 73 20 69 67 6e 6f 72 65 64 20 6f 6e 20 25 71  is ignored on %q
5900: 20 61 6e 64 20 25 51 20 2a 2f 0a 20 20 20 20 20   and %Q */.     
5910: 20 20 20 2f 2a 20 69 66 28 20 70 72 65 63 69 73     /* if( precis
5920: 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73  ion>=0 && precis
5930: 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e  ion<length ) len
5940: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b  gth = precision;
5950: 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 72 65 61   */.        brea
5960: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
5970: 20 63 61 73 65 20 65 74 54 4f 4b 45 4e 3a 20 7b   case etTOKEN: {
5980: 0a 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 20 2a  .        Token *
5990: 70 54 6f 6b 65 6e 20 3d 20 76 61 5f 61 72 67 28  pToken = va_arg(
59a0: 61 70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 20  ap, Token*);.   
59b0: 20 20 20 20 20 69 66 28 20 70 54 6f 6b 65 6e 20       if( pToken 
59c0: 26 26 20 70 54 6f 6b 65 6e 2d 3e 7a 20 29 7b 0a  && pToken->z ){.
59d0: 20 20 20 20 20 20 20 20 20 20 28 2a 66 75 6e 63            (*func
59e0: 29 28 61 72 67 2c 20 28 63 68 61 72 2a 29 70 54  )(arg, (char*)pT
59f0: 6f 6b 65 6e 2d 3e 7a 2c 20 70 54 6f 6b 65 6e 2d  oken->z, pToken-
5a00: 3e 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  >n);.        }. 
5a10: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
5a20: 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20  width = 0;.     
5a30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5a40: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53  }.      case etS
5a50: 52 43 4c 49 53 54 3a 20 7b 0a 20 20 20 20 20 20  RCLIST: {.      
5a60: 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 20    SrcList *pSrc 
5a70: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 53 72 63  = va_arg(ap, Src
5a80: 4c 69 73 74 2a 29 3b 0a 20 20 20 20 20 20 20 20  List*);.        
5a90: 69 6e 74 20 6b 20 3d 20 76 61 5f 61 72 67 28 61  int k = va_arg(a
5aa0: 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  p, int);.       
5ab0: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
5ac0: 69 74 65 6d 20 2a 70 49 74 65 6d 20 3d 20 26 70  item *pItem = &p
5ad0: 53 72 63 2d 3e 61 5b 6b 5d 3b 0a 20 20 20 20 20  Src->a[k];.     
5ae0: 20 20 20 61 73 73 65 72 74 28 20 6b 3e 3d 30 20     assert( k>=0 
5af0: 26 26 20 6b 3c 70 53 72 63 2d 3e 6e 53 72 63 20  && k<pSrc->nSrc 
5b00: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
5b10: 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 20  Item->zDatabase 
5b20: 26 26 20 70 49 74 65 6d 2d 3e 7a 44 61 74 61 62  && pItem->zDatab
5b30: 61 73 65 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ase[0] ){.      
5b40: 20 20 20 20 28 2a 66 75 6e 63 29 28 61 72 67 2c      (*func)(arg,
5b50: 20 70 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73   pItem->zDatabas
5b60: 65 2c 20 73 74 72 6c 65 6e 28 70 49 74 65 6d 2d  e, strlen(pItem-
5b70: 3e 7a 44 61 74 61 62 61 73 65 29 29 3b 0a 20 20  >zDatabase));.  
5b80: 20 20 20 20 20 20 20 20 28 2a 66 75 6e 63 29 28          (*func)(
5b90: 61 72 67 2c 20 22 2e 22 2c 20 31 29 3b 0a 20 20  arg, ".", 1);.  
5ba0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5bb0: 28 2a 66 75 6e 63 29 28 61 72 67 2c 20 70 49 74  (*func)(arg, pIt
5bc0: 65 6d 2d 3e 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  em->zName, strle
5bd0: 6e 28 70 49 74 65 6d 2d 3e 7a 4e 61 6d 65 29 29  n(pItem->zName))
5be0: 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68  ;.        length
5bf0: 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20   = width = 0;.  
5c00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5c10: 20 20 20 7d 0a 20 20 20 20 7d 2f 2a 20 45 6e 64     }.    }/* End
5c20: 20 73 77 69 74 63 68 20 6f 76 65 72 20 74 68 65   switch over the
5c30: 20 66 6f 72 6d 61 74 20 74 79 70 65 20 2a 2f 0a   format type */.
5c40: 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 54 68      /*.    ** Th
5c50: 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 63 6f  e text of the co
5c60: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 69 6e  nversion is poin
5c70: 74 65 64 20 74 6f 20 62 79 20 22 62 75 66 70 74  ted to by "bufpt
5c80: 22 20 61 6e 64 20 69 73 0a 20 20 20 20 2a 2a 20  " and is.    ** 
5c90: 22 6c 65 6e 67 74 68 22 20 63 68 61 72 61 63 74  "length" charact
5ca0: 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 66  ers long.  The f
5cb0: 69 65 6c 64 20 77 69 64 74 68 20 69 73 20 22 77  ield width is "w
5cc0: 69 64 74 68 22 2e 20 20 44 6f 0a 20 20 20 20 2a  idth".  Do.    *
5cd0: 2a 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  * the output..  
5ce0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 66 6c    */.    if( !fl
5cf0: 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29  ag_leftjustify )
5d00: 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74 65 72  {.      register
5d10: 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20   int nspace;.   
5d20: 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74     nspace = widt
5d30: 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20  h-length;.      
5d40: 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a  if( nspace>0 ){.
5d50: 20 20 20 20 20 20 20 20 63 6f 75 6e 74 20 2b 3d          count +=
5d60: 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20 20 20   nspace;.       
5d70: 20 77 68 69 6c 65 28 20 6e 73 70 61 63 65 3e 3d   while( nspace>=
5d80: 65 74 53 50 41 43 45 53 49 5a 45 20 29 7b 0a 20  etSPACESIZE ){. 
5d90: 20 20 20 20 20 20 20 20 20 28 2a 66 75 6e 63 29           (*func)
5da0: 28 61 72 67 2c 73 70 61 63 65 73 2c 65 74 53 50  (arg,spaces,etSP
5db0: 41 43 45 53 49 5a 45 29 3b 0a 20 20 20 20 20 20  ACESIZE);.      
5dc0: 20 20 20 20 6e 73 70 61 63 65 20 2d 3d 20 65 74      nspace -= et
5dd0: 53 50 41 43 45 53 49 5a 45 3b 0a 20 20 20 20 20  SPACESIZE;.     
5de0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
5df0: 20 6e 73 70 61 63 65 3e 30 20 29 20 28 2a 66 75   nspace>0 ) (*fu
5e00: 6e 63 29 28 61 72 67 2c 73 70 61 63 65 73 2c 6e  nc)(arg,spaces,n
5e10: 73 70 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a  space);.      }.
5e20: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 65      }.    if( le
5e30: 6e 67 74 68 3e 30 20 29 7b 0a 20 20 20 20 20 20  ngth>0 ){.      
5e40: 28 2a 66 75 6e 63 29 28 61 72 67 2c 62 75 66 70  (*func)(arg,bufp
5e50: 74 2c 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 20  t,length);.     
5e60: 20 63 6f 75 6e 74 20 2b 3d 20 6c 65 6e 67 74 68   count += length
5e70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5e80: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
5e90: 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74   ){.      regist
5ea0: 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20  er int nspace;. 
5eb0: 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69       nspace = wi
5ec0: 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20  dth-length;.    
5ed0: 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29    if( nspace>0 )
5ee0: 7b 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74 20  {.        count 
5ef0: 2b 3d 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20  += nspace;.     
5f00: 20 20 20 77 68 69 6c 65 28 20 6e 73 70 61 63 65     while( nspace
5f10: 3e 3d 65 74 53 50 41 43 45 53 49 5a 45 20 29 7b  >=etSPACESIZE ){
5f20: 0a 20 20 20 20 20 20 20 20 20 20 28 2a 66 75 6e  .          (*fun
5f30: 63 29 28 61 72 67 2c 73 70 61 63 65 73 2c 65 74  c)(arg,spaces,et
5f40: 53 50 41 43 45 53 49 5a 45 29 3b 0a 20 20 20 20  SPACESIZE);.    
5f50: 20 20 20 20 20 20 6e 73 70 61 63 65 20 2d 3d 20        nspace -= 
5f60: 65 74 53 50 41 43 45 53 49 5a 45 3b 0a 20 20 20  etSPACESIZE;.   
5f70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
5f80: 66 28 20 6e 73 70 61 63 65 3e 30 20 29 20 28 2a  f( nspace>0 ) (*
5f90: 66 75 6e 63 29 28 61 72 67 2c 73 70 61 63 65 73  func)(arg,spaces
5fa0: 2c 6e 73 70 61 63 65 29 3b 0a 20 20 20 20 20 20  ,nspace);.      
5fb0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
5fc0: 7a 45 78 74 72 61 20 29 7b 0a 20 20 20 20 20 20  zExtra ){.      
5fd0: 73 71 6c 69 74 65 46 72 65 65 28 7a 45 78 74 72  sqliteFree(zExtr
5fe0: 61 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2f 2a 20  a);.    }.  }/* 
5ff0: 45 6e 64 20 66 6f 72 20 6c 6f 6f 70 20 6f 76 65  End for loop ove
6000: 72 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72  r the format str
6010: 69 6e 67 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  ing */.  return 
6020: 65 72 72 6f 72 66 6c 61 67 20 3f 20 2d 31 20 3a  errorflag ? -1 :
6030: 20 63 6f 75 6e 74 3b 0a 7d 20 2f 2a 20 45 6e 64   count;.} /* End
6040: 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a   of function */.
6050: 0a 0a 2f 2a 20 54 68 69 73 20 73 74 72 75 63 74  ../* This struct
6060: 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73  ure is used to s
6070: 74 6f 72 65 20 73 74 61 74 65 20 69 6e 66 6f 72  tore state infor
6080: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
6090: 0a 2a 2a 20 77 72 69 74 65 20 74 6f 20 6d 65 6d  .** write to mem
60a0: 6f 72 79 20 74 68 61 74 20 69 73 20 63 75 72 72  ory that is curr
60b0: 65 6e 74 6c 79 20 69 6e 20 70 72 6f 67 72 65 73  ently in progres
60c0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 67 4d  s..*/.struct sgM
60d0: 70 72 69 6e 74 66 20 7b 0a 20 20 63 68 61 72 20  printf {.  char 
60e0: 2a 7a 42 61 73 65 3b 20 20 20 20 20 2f 2a 20 41  *zBase;     /* A
60f0: 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
6100: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
6110: 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74  t;     /* The st
6120: 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73  ring collected s
6130: 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
6140: 6e 43 68 61 72 3b 20 20 20 20 20 20 2f 2a 20 4c  nChar;      /* L
6150: 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
6160: 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
6170: 69 6e 74 20 20 6e 54 6f 74 61 6c 3b 20 20 20 20  int  nTotal;    
6180: 20 2f 2a 20 4f 75 74 70 75 74 20 73 69 7a 65 20   /* Output size 
6190: 69 66 20 75 6e 63 6f 6e 73 74 72 61 69 6e 65 64  if unconstrained
61a0: 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
61b0: 63 3b 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74  c;     /* Amount
61c0: 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
61d0: 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
61e0: 20 20 76 6f 69 64 20 2a 28 2a 78 52 65 61 6c 6c    void *(*xReall
61f0: 6f 63 29 28 76 6f 69 64 2a 2c 69 6e 74 29 3b 20  oc)(void*,int); 
6200: 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 75 73 65   /* Function use
6210: 64 20 74 6f 20 72 65 61 6c 6c 6f 63 20 6d 65 6d  d to realloc mem
6220: 6f 72 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 0a 2a  ory */.};../* .*
6230: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
6240: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 63  implements the c
6250: 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 76 78 70  allback from vxp
6260: 72 69 6e 74 66 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  rintf. .**.** Th
6270: 69 73 20 72 6f 75 74 69 6e 65 20 61 64 64 20 6e  is routine add n
6280: 4e 65 77 43 68 61 72 20 63 68 61 72 61 63 74 65  NewChar characte
6290: 72 73 20 6f 66 20 74 65 78 74 20 69 6e 20 7a 4e  rs of text in zN
62a0: 65 77 54 65 78 74 20 74 6f 0a 2a 2a 20 74 68 65  ewText to.** the
62b0: 20 73 67 4d 70 72 69 6e 74 66 20 73 74 72 75 63   sgMprintf struc
62c0: 74 75 72 65 20 70 6f 69 6e 74 65 64 20 74 6f 20  ture pointed to 
62d0: 62 79 20 22 61 72 67 22 2e 0a 2a 2f 0a 73 74 61  by "arg"..*/.sta
62e0: 74 69 63 20 76 6f 69 64 20 6d 6f 75 74 28 76 6f  tic void mout(vo
62f0: 69 64 20 2a 61 72 67 2c 20 63 6f 6e 73 74 20 63  id *arg, const c
6300: 68 61 72 20 2a 7a 4e 65 77 54 65 78 74 2c 20 69  har *zNewText, i
6310: 6e 74 20 6e 4e 65 77 43 68 61 72 29 7b 0a 20 20  nt nNewChar){.  
6320: 73 74 72 75 63 74 20 73 67 4d 70 72 69 6e 74 66  struct sgMprintf
6330: 20 2a 70 4d 20 3d 20 28 73 74 72 75 63 74 20 73   *pM = (struct s
6340: 67 4d 70 72 69 6e 74 66 2a 29 61 72 67 3b 0a 20  gMprintf*)arg;. 
6350: 20 70 4d 2d 3e 6e 54 6f 74 61 6c 20 2b 3d 20 6e   pM->nTotal += n
6360: 4e 65 77 43 68 61 72 3b 0a 20 20 69 66 28 20 70  NewChar;.  if( p
6370: 4d 2d 3e 6e 43 68 61 72 20 2b 20 6e 4e 65 77 43  M->nChar + nNewC
6380: 68 61 72 20 2b 20 31 20 3e 20 70 4d 2d 3e 6e 41  har + 1 > pM->nA
6390: 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 69 66 28 20  lloc ){.    if( 
63a0: 70 4d 2d 3e 78 52 65 61 6c 6c 6f 63 3d 3d 30 20  pM->xRealloc==0 
63b0: 29 7b 0a 20 20 20 20 20 20 6e 4e 65 77 43 68 61  ){.      nNewCha
63c0: 72 20 3d 20 20 70 4d 2d 3e 6e 41 6c 6c 6f 63 20  r =  pM->nAlloc 
63d0: 2d 20 70 4d 2d 3e 6e 43 68 61 72 20 2d 20 31 3b  - pM->nChar - 1;
63e0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
63f0: 20 20 70 4d 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70    pM->nAlloc = p
6400: 4d 2d 3e 6e 43 68 61 72 20 2b 20 6e 4e 65 77 43  M->nChar + nNewC
6410: 68 61 72 2a 32 20 2b 20 31 3b 0a 20 20 20 20 20  har*2 + 1;.     
6420: 20 69 66 28 20 70 4d 2d 3e 7a 54 65 78 74 3d 3d   if( pM->zText==
6430: 70 4d 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20 20  pM->zBase ){.   
6440: 20 20 20 20 20 70 4d 2d 3e 7a 54 65 78 74 20 3d       pM->zText =
6450: 20 70 4d 2d 3e 78 52 65 61 6c 6c 6f 63 28 30 2c   pM->xRealloc(0,
6460: 20 70 4d 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20   pM->nAlloc);.  
6470: 20 20 20 20 20 20 69 66 28 20 70 4d 2d 3e 7a 54        if( pM->zT
6480: 65 78 74 20 26 26 20 70 4d 2d 3e 6e 43 68 61 72  ext && pM->nChar
6490: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6d 65   ){.          me
64a0: 6d 63 70 79 28 70 4d 2d 3e 7a 54 65 78 74 2c 20  mcpy(pM->zText, 
64b0: 70 4d 2d 3e 7a 42 61 73 65 2c 20 70 4d 2d 3e 6e  pM->zBase, pM->n
64c0: 43 68 61 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  Char);.        }
64d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
64e0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 65 77        char *zNew
64f0: 3b 0a 20 20 20 20 20 20 20 20 7a 4e 65 77 20 3d  ;.        zNew =
6500: 20 70 4d 2d 3e 78 52 65 61 6c 6c 6f 63 28 70 4d   pM->xRealloc(pM
6510: 2d 3e 7a 54 65 78 74 2c 20 70 4d 2d 3e 6e 41 6c  ->zText, pM->nAl
6520: 6c 6f 63 29 3b 0a 20 20 20 20 20 20 20 20 69 66  loc);.        if
6530: 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( zNew ){.      
6540: 20 20 20 20 70 4d 2d 3e 7a 54 65 78 74 20 3d 20      pM->zText = 
6550: 7a 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 7d 0a  zNew;.        }.
6560: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
6570: 7d 0a 20 20 69 66 28 20 70 4d 2d 3e 7a 54 65 78  }.  if( pM->zTex
6580: 74 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 4e 65  t ){.    if( nNe
6590: 77 43 68 61 72 3e 30 20 29 7b 0a 20 20 20 20 20  wChar>0 ){.     
65a0: 20 6d 65 6d 63 70 79 28 26 70 4d 2d 3e 7a 54 65   memcpy(&pM->zTe
65b0: 78 74 5b 70 4d 2d 3e 6e 43 68 61 72 5d 2c 20 7a  xt[pM->nChar], z
65c0: 4e 65 77 54 65 78 74 2c 20 6e 4e 65 77 43 68 61  NewText, nNewCha
65d0: 72 29 3b 0a 20 20 20 20 20 20 70 4d 2d 3e 6e 43  r);.      pM->nC
65e0: 68 61 72 20 2b 3d 20 6e 4e 65 77 43 68 61 72 3b  har += nNewChar;
65f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4d 2d 3e 7a  .    }.    pM->z
6600: 54 65 78 74 5b 70 4d 2d 3e 6e 43 68 61 72 5d 20  Text[pM->nChar] 
6610: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  = 0;.  }.}../*.*
6620: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
6630: 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
6640: 6e 64 20 78 70 72 69 6e 74 66 28 29 20 74 68 61  nd xprintf() tha
6650: 74 20 69 6e 76 6f 6b 65 73 20 6d 6f 75 74 28 29  t invokes mout()
6660: 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 73 75   as.** the consu
6670: 6d 65 72 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63  mer.  .*/.static
6680: 20 63 68 61 72 20 2a 62 61 73 65 5f 76 70 72 69   char *base_vpri
6690: 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 28 2a 78  ntf(.  void *(*x
66a0: 52 65 61 6c 6c 6f 63 29 28 76 6f 69 64 2a 2c 69  Realloc)(void*,i
66b0: 6e 74 29 2c 20 20 20 2f 2a 20 52 6f 75 74 69 6e  nt),   /* Routin
66c0: 65 20 74 6f 20 72 65 61 6c 6c 6f 63 20 6d 65 6d  e to realloc mem
66d0: 6f 72 79 2e 20 4d 61 79 20 62 65 20 4e 55 4c 4c  ory. May be NULL
66e0: 20 2a 2f 0a 20 20 69 6e 74 20 75 73 65 49 6e 74   */.  int useInt
66f0: 65 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20  ernal,          
6700: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 69 6e 74        /* Use int
6710: 65 72 6e 61 6c 20 25 2d 63 6f 6e 76 65 72 73 69  ernal %-conversi
6720: 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ons if true */. 
6730: 20 63 68 61 72 20 2a 7a 49 6e 69 74 42 75 66 2c   char *zInitBuf,
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6750: 20 2f 2a 20 49 6e 69 74 69 61 6c 6c 79 20 77 72   /* Initially wr
6760: 69 74 65 20 68 65 72 65 2c 20 62 65 66 6f 72 65  ite here, before
6770: 20 6d 61 6c 6c 6f 63 69 6e 67 20 2a 2f 0a 20 20   mallocing */.  
6780: 69 6e 74 20 6e 49 6e 69 74 42 75 66 2c 20 20 20  int nInitBuf,   
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67a0: 2f 2a 20 53 69 7a 65 20 6f 66 20 7a 49 6e 69 74  /* Size of zInit
67b0: 42 75 66 5b 5d 20 2a 2f 0a 20 20 63 6f 6e 73 74  Buf[] */.  const
67c0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
67d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f             /* fo
67e0: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20  rmat string */. 
67f0: 20 76 61 5f 6c 69 73 74 20 61 70 20 20 20 20 20   va_list ap     
6800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6810: 20 2f 2a 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   /* arguments */
6820: 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 73 67 4d  .){.  struct sgM
6830: 70 72 69 6e 74 66 20 73 4d 3b 0a 20 20 73 4d 2e  printf sM;.  sM.
6840: 7a 42 61 73 65 20 3d 20 73 4d 2e 7a 54 65 78 74  zBase = sM.zText
6850: 20 3d 20 7a 49 6e 69 74 42 75 66 3b 0a 20 20 73   = zInitBuf;.  s
6860: 4d 2e 6e 43 68 61 72 20 3d 20 73 4d 2e 6e 54 6f  M.nChar = sM.nTo
6870: 74 61 6c 20 3d 20 30 3b 0a 20 20 73 4d 2e 6e 41  tal = 0;.  sM.nA
6880: 6c 6c 6f 63 20 3d 20 6e 49 6e 69 74 42 75 66 3b  lloc = nInitBuf;
6890: 0a 20 20 73 4d 2e 78 52 65 61 6c 6c 6f 63 20 3d  .  sM.xRealloc =
68a0: 20 78 52 65 61 6c 6c 6f 63 3b 0a 20 20 76 78 70   xRealloc;.  vxp
68b0: 72 69 6e 74 66 28 6d 6f 75 74 2c 20 26 73 4d 2c  rintf(mout, &sM,
68c0: 20 75 73 65 49 6e 74 65 72 6e 61 6c 2c 20 7a 46   useInternal, zF
68d0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 69 66  ormat, ap);.  if
68e0: 28 20 78 52 65 61 6c 6c 6f 63 20 29 7b 0a 20 20  ( xRealloc ){.  
68f0: 20 20 69 66 28 20 73 4d 2e 7a 54 65 78 74 3d 3d    if( sM.zText==
6900: 73 4d 2e 7a 42 61 73 65 20 29 7b 0a 20 20 20 20  sM.zBase ){.    
6910: 20 20 73 4d 2e 7a 54 65 78 74 20 3d 20 78 52 65    sM.zText = xRe
6920: 61 6c 6c 6f 63 28 30 2c 20 73 4d 2e 6e 43 68 61  alloc(0, sM.nCha
6930: 72 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  r+1);.      if( 
6940: 73 4d 2e 7a 54 65 78 74 20 29 7b 0a 20 20 20 20  sM.zText ){.    
6950: 20 20 20 20 6d 65 6d 63 70 79 28 73 4d 2e 7a 54      memcpy(sM.zT
6960: 65 78 74 2c 20 73 4d 2e 7a 42 61 73 65 2c 20 73  ext, sM.zBase, s
6970: 4d 2e 6e 43 68 61 72 2b 31 29 3b 0a 20 20 20 20  M.nChar+1);.    
6980: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
6990: 28 20 73 4d 2e 6e 41 6c 6c 6f 63 3e 73 4d 2e 6e  ( sM.nAlloc>sM.n
69a0: 43 68 61 72 2b 31 30 20 29 7b 0a 20 20 20 20 20  Char+10 ){.     
69b0: 20 63 68 61 72 20 2a 7a 4e 65 77 20 3d 20 78 52   char *zNew = xR
69c0: 65 61 6c 6c 6f 63 28 73 4d 2e 7a 54 65 78 74 2c  ealloc(sM.zText,
69d0: 20 73 4d 2e 6e 43 68 61 72 2b 31 29 3b 0a 20 20   sM.nChar+1);.  
69e0: 20 20 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a      if( zNew ){.
69f0: 20 20 20 20 20 20 20 20 73 4d 2e 7a 54 65 78 74          sM.zText
6a00: 20 3d 20 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d   = zNew;.      }
6a10: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
6a20: 75 72 6e 20 73 4d 2e 7a 54 65 78 74 3b 0a 7d 0a  urn sM.zText;.}.
6a30: 0a 2f 2a 0a 2a 2a 20 52 65 61 6c 6c 6f 63 20 74  ./*.** Realloc t
6a40: 68 61 74 20 69 73 20 61 20 72 65 61 6c 20 66 75  hat is a real fu
6a50: 6e 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 6d 61  nction, not a ma
6a60: 63 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  cro..*/.static v
6a70: 6f 69 64 20 2a 70 72 69 6e 74 66 5f 72 65 61 6c  oid *printf_real
6a80: 6c 6f 63 28 76 6f 69 64 20 2a 6f 6c 64 2c 20 69  loc(void *old, i
6a90: 6e 74 20 73 69 7a 65 29 7b 0a 20 20 72 65 74 75  nt size){.  retu
6aa0: 72 6e 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63  rn sqliteRealloc
6ab0: 28 6f 6c 64 2c 73 69 7a 65 29 3b 0a 7d 0a 0a 2f  (old,size);.}../
6ac0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20  *.** Print into 
6ad0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
6ae0: 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  from sqliteMallo
6af0: 63 28 29 2e 20 20 55 73 65 20 74 68 65 20 69 6e  c().  Use the in
6b00: 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76  ternal.** %-conv
6b10: 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e  ersion extension
6b20: 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69  s..*/.char *sqli
6b30: 74 65 33 56 4d 50 72 69 6e 74 66 28 63 6f 6e 73  te3VMPrintf(cons
6b40: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
6b50: 20 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20   va_list ap){.  
6b60: 63 68 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54  char zBase[SQLIT
6b70: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45  E_PRINT_BUF_SIZE
6b80: 5d 3b 0a 20 20 72 65 74 75 72 6e 20 62 61 73 65  ];.  return base
6b90: 5f 76 70 72 69 6e 74 66 28 70 72 69 6e 74 66 5f  _vprintf(printf_
6ba0: 72 65 61 6c 6c 6f 63 2c 20 31 2c 20 7a 42 61 73  realloc, 1, zBas
6bb0: 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29  e, sizeof(zBase)
6bc0: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
6bd0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69  }../*.** Print i
6be0: 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69  nto memory obtai
6bf0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  ned from sqliteM
6c00: 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65 20 74 68  alloc().  Use th
6c10: 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d  e internal.** %-
6c20: 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e  conversion exten
6c30: 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a  sions..*/.char *
6c40: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 63  sqlite3MPrintf(c
6c50: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
6c60: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
6c70: 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a  ist ap;.  char *
6c80: 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b  z;.  char zBase[
6c90: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
6ca0: 5f 53 49 5a 45 5d 3b 0a 20 20 76 61 5f 73 74 61  _SIZE];.  va_sta
6cb0: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
6cc0: 0a 20 20 7a 20 3d 20 62 61 73 65 5f 76 70 72 69  .  z = base_vpri
6cd0: 6e 74 66 28 70 72 69 6e 74 66 5f 72 65 61 6c 6c  ntf(printf_reall
6ce0: 6f 63 2c 20 31 2c 20 7a 42 61 73 65 2c 20 73 69  oc, 1, zBase, si
6cf0: 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20 7a 46 6f  zeof(zBase), zFo
6d00: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
6d10: 65 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72  end(ap);.  retur
6d20: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  n z;.}../*.** Pr
6d30: 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  int into memory 
6d40: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
6d50: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20  lite3_malloc(). 
6d60: 20 4f 6d 69 74 20 74 68 65 20 69 6e 74 65 72 6e   Omit the intern
6d70: 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69  al.** %-conversi
6d80: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a  on extensions..*
6d90: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  /.char *sqlite3_
6da0: 76 6d 70 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  vmprintf(const c
6db0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61  har *zFormat, va
6dc0: 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 63 68 61  _list ap){.  cha
6dd0: 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f 50  r zBase[SQLITE_P
6de0: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a  RINT_BUF_SIZE];.
6df0: 20 20 72 65 74 75 72 6e 20 62 61 73 65 5f 76 70    return base_vp
6e00: 72 69 6e 74 66 28 73 71 6c 69 74 65 33 5f 72 65  rintf(sqlite3_re
6e10: 61 6c 6c 6f 63 2c 20 30 2c 20 7a 42 61 73 65 2c  alloc, 0, zBase,
6e20: 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20   sizeof(zBase), 
6e30: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 7d 0a  zFormat, ap);.}.
6e40: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74  ./*.** Print int
6e50: 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  o memory obtaine
6e60: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
6e70: 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69 74  alloc()().  Omit
6e80: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a   the internal.**
6e90: 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78   %-conversion ex
6ea0: 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61  tensions..*/.cha
6eb0: 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  r *sqlite3_mprin
6ec0: 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  tf(const char *z
6ed0: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20  Format, ...){.  
6ee0: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68  va_list ap;.  ch
6ef0: 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 7a 42  ar *z;.  char zB
6f00: 61 73 65 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54  ase[SQLITE_PRINT
6f10: 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 76 61  _BUF_SIZE];.  va
6f20: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
6f30: 61 74 29 3b 0a 20 20 7a 20 3d 20 62 61 73 65 5f  at);.  z = base_
6f40: 76 70 72 69 6e 74 66 28 73 71 6c 69 74 65 33 5f  vprintf(sqlite3_
6f50: 72 65 61 6c 6c 6f 63 2c 20 30 2c 20 7a 42 61 73  realloc, 0, zBas
6f60: 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29  e, sizeof(zBase)
6f70: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
6f80: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
6f90: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a  return z;.}../*.
6fa0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  ** sqlite3_snpri
6fb0: 6e 74 66 28 29 20 77 6f 72 6b 73 20 6c 69 6b 65  ntf() works like
6fc0: 20 73 6e 70 72 69 6e 74 66 28 29 20 65 78 63 65   snprintf() exce
6fd0: 70 74 20 74 68 61 74 20 69 74 20 69 67 6e 6f 72  pt that it ignor
6fe0: 65 73 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e  es the.** curren
6ff0: 74 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e 67  t locale setting
7000: 73 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70 6f  s.  This is impo
7010: 72 74 61 6e 74 20 66 6f 72 20 53 51 4c 69 74 65  rtant for SQLite
7020: 20 62 65 63 61 75 73 65 20 77 65 0a 2a 2a 20 61   because we.** a
7030: 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 75  re not able to u
7040: 73 65 20 61 20 22 2c 22 20 61 73 20 74 68 65 20  se a "," as the 
7050: 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 6e  decimal point in
7060: 20 70 6c 61 63 65 20 6f 66 20 22 2e 22 20 61 73   place of "." as
7070: 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62 79  .** specified by
7080: 20 73 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e 0a 2a   some locales..*
7090: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  /.char *sqlite3_
70a0: 73 6e 70 72 69 6e 74 66 28 69 6e 74 20 6e 2c 20  snprintf(int n, 
70b0: 63 68 61 72 20 2a 7a 42 75 66 2c 20 63 6f 6e 73  char *zBuf, cons
70c0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
70d0: 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20 2a 7a   ...){.  char *z
70e0: 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  ;.  va_list ap;.
70f0: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 7a  .  va_start(ap,z
7100: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 62  Format);.  z = b
7110: 61 73 65 5f 76 70 72 69 6e 74 66 28 30 2c 20 30  ase_vprintf(0, 0
7120: 2c 20 7a 42 75 66 2c 20 6e 2c 20 7a 46 6f 72 6d  , zBuf, n, zForm
7130: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
7140: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
7150: 7a 3b 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  z;.}..#if define
7160: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
7170: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
7180: 5f 44 45 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41 20  _DEBUG)./*.** A 
7190: 76 65 72 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74  version of print
71a0: 66 28 29 20 74 68 61 74 20 75 6e 64 65 72 73 74  f() that underst
71b0: 61 6e 64 73 20 25 6c 6c 64 2e 20 20 55 73 65 64  ands %lld.  Used
71c0: 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0a   for debugging..
71d0: 2a 2a 20 54 68 65 20 70 72 69 6e 74 66 28 29 20  ** The printf() 
71e0: 62 75 69 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20  built into some 
71f0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64  versions of wind
7200: 6f 77 73 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64  ows does not und
7210: 65 72 73 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20  erstand %lld.** 
7220: 61 6e 64 20 73 65 67 66 61 75 6c 74 73 20 69 66  and segfaults if
7230: 20 79 6f 75 20 67 69 76 65 20 69 74 20 61 20 6c   you give it a l
7240: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f  ong long int..*/
7250: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62  .void sqlite3Deb
7260: 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
7270: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
7280: 2e 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  .){.  extern int
7290: 20 67 65 74 70 69 64 28 76 6f 69 64 29 3b 0a 20   getpid(void);. 
72a0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
72b0: 68 61 72 20 7a 42 75 66 5b 35 30 30 5d 3b 0a 20  har zBuf[500];. 
72c0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
72d0: 6f 72 6d 61 74 29 3b 0a 20 20 62 61 73 65 5f 76  ormat);.  base_v
72e0: 70 72 69 6e 74 66 28 30 2c 20 30 2c 20 7a 42 75  printf(0, 0, zBu
72f0: 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c  f, sizeof(zBuf),
7300: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
7310: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 66   va_end(ap);.  f
7320: 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 22 25  printf(stdout,"%
7330: 64 3a 20 25 73 22 2c 20 67 65 74 70 69 64 28 29  d: %s", getpid()
7340: 2c 20 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75 73  , zBuf);.  fflus
7350: 68 28 73 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e  h(stdout);.}.#en
7360: 64 69 66 0a                                      dif.