Artifact df915ce19af9969f6a18e8a481223179c1a3c04a6ebddf9c9b654c35da6336d4:

  • File src/printf.c — part of check-in [517b9a56] at 2017-09-25 17:24:39 on branch trunk — Improved limit handling for annotation. The limit can now be expressed in compute-time seconds rather than versions analyzed, and defaults to "1.0s", which is enough to compute a complete annotation on most reasonable files. (user: drh size: 36698) [more...]

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 36 20 44 2e 20 52 69 63 68  (c) 2006 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 53 69 6d 70 6c 69 66 69 65 64 20 42 53 44 20   Simplified BSD 
00a0: 4c 69 63 65 6e 73 65 20 28 61 6c 73 6f 0a 2a 2a  License (also.**
00b0: 20 6b 6e 6f 77 6e 20 61 73 20 74 68 65 20 22 32   known as the "2
00c0: 2d 43 6c 61 75 73 65 20 4c 69 63 65 6e 73 65 22  -Clause License"
00d0: 20 6f 72 20 22 46 72 65 65 42 53 44 20 4c 69 63   or "FreeBSD Lic
00e0: 65 6e 73 65 22 2e 29 0a 0a 2a 2a 20 54 68 69 73  ense".)..** This
00f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0100: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0110: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0120: 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 62   be useful,.** b
0130: 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20 77  ut without any w
0140: 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f 75 74  arranty; without
0150: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
0160: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a 2a  d warranty of.**
0170: 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 74 79   merchantability
0180: 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f 72 20   or fitness for 
0190: 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 75 72  a particular pur
01a0: 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 74 68  pose..**.** Auth
01b0: 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72  or contact infor
01c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 72 68  mation:.**   drh
01d0: 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 20 20  @hwaci.com.**   
01e0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69  http://www.hwaci
01f0: 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a  .com/drh/.**.***
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a  ************.**.
0250: 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e  ** This file con
0260: 74 61 69 6e 73 20 69 6d 70 6c 65 6d 65 6e 74 69  tains implementi
0270: 6f 6e 73 20 6f 66 20 72 6f 75 74 69 6e 65 73 20  ons of routines 
0280: 66 6f 72 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  for formatting o
0290: 75 74 70 75 74 0a 2a 2a 20 28 65 78 3a 20 6d 70  utput.** (ex: mp
02a0: 72 69 6e 74 66 28 29 29 20 61 6e 64 20 66 6f 72  rintf()) and for
02b0: 20 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20 63   output to the c
02c0: 6f 6e 73 6f 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c  onsole..*/.#incl
02d0: 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23  ude "config.h".#
02e0: 69 6e 63 6c 75 64 65 20 22 70 72 69 6e 74 66 2e  include "printf.
02f0: 68 22 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  h".#if defined(_
0300: 57 49 4e 33 32 29 0a 23 20 20 20 69 6e 63 6c 75  WIN32).#   inclu
0310: 64 65 20 3c 69 6f 2e 68 3e 0a 23 20 20 20 69 6e  de <io.h>.#   in
0320: 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a  clude <fcntl.h>.
0330: 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75 64 65 20  #endif.#include 
0340: 3c 74 69 6d 65 2e 68 3e 0a 0a 2f 2a 20 54 77 6f  <time.h>../* Two
0350: 20 63 75 73 74 6f 6d 20 63 6f 6e 76 65 72 73 69   custom conversi
0360: 6f 6e 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ons are used to 
0370: 73 68 6f 77 20 61 20 70 72 65 66 69 78 20 6f 66  show a prefix of
0380: 20 61 72 74 69 66 61 63 74 20 68 61 73 68 65 73   artifact hashes
0390: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 21 53  :.**.**      %!S
03a0: 20 20 20 20 20 20 20 50 72 65 66 69 78 20 6f 66         Prefix of
03b0: 20 61 20 6c 65 6e 67 74 68 20 61 70 70 72 6f 70   a length approp
03c0: 72 69 61 74 65 20 66 6f 72 20 55 52 4c 73 0a 2a  riate for URLs.*
03d0: 2a 20 20 20 20 20 20 25 53 20 20 20 20 20 20 20  *      %S       
03e0: 20 50 72 65 66 69 78 20 6f 66 20 61 20 6c 65 6e   Prefix of a len
03f0: 67 74 68 20 61 70 70 72 6f 70 72 69 61 74 65 20  gth appropriate 
0400: 66 6f 72 20 68 75 6d 61 6e 20 64 69 73 70 6c 61  for human displa
0410: 79 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  y.**.** The foll
0420: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 68 65 6c  owing macros hel
0430: 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68 6f 73  p determine thos
0440: 65 20 6c 65 6e 67 74 68 73 2e 20 20 46 4f 53 53  e lengths.  FOSS
0450: 49 4c 5f 48 41 53 48 5f 44 49 47 49 54 53 0a 2a  IL_HASH_DIGITS.*
0460: 2a 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  * is the default
0470: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69 74   number of digit
0480: 73 20 74 6f 20 64 69 73 70 6c 61 79 20 74 6f 20  s to display to 
0490: 68 75 6d 61 6e 73 2e 20 20 54 68 69 73 20 76 61  humans.  This va
04a0: 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76  lue can.** be ov
04b0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74  erridden using t
04c0: 68 65 20 68 61 73 68 2d 64 69 67 69 74 73 20 73  he hash-digits s
04d0: 65 74 74 69 6e 67 2e 20 20 46 4f 53 53 49 4c 5f  etting.  FOSSIL_
04e0: 48 41 53 48 5f 44 49 47 49 54 53 5f 55 52 4c 0a  HASH_DIGITS_URL.
04f0: 2a 2a 20 69 73 20 74 68 65 20 6d 69 6e 69 6d 75  ** is the minimu
0500: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69  m number of digi
0510: 74 73 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ts to be used in
0520: 20 55 52 4c 73 2e 20 20 54 68 65 20 6e 75 6d 62   URLs.  The numb
0530: 65 72 20 75 73 65 64 0a 2a 2a 20 77 69 6c 6c 20  er used.** will 
0540: 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65 61  always be at lea
0550: 73 74 20 36 20 6d 6f 72 65 20 74 68 61 6e 20 74  st 6 more than t
0560: 68 65 20 6e 75 6d 62 65 72 20 75 73 65 64 20 66  he number used f
0570: 6f 72 20 68 75 6d 61 6e 20 6f 75 74 70 75 74 2c  or human output,
0580: 0a 2a 2a 20 6f 72 20 34 30 20 69 66 20 74 68 65  .** or 40 if the
0590: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69 74   number of digit
05a0: 73 20 69 6e 20 68 75 6d 61 6e 20 6f 75 74 70 75  s in human outpu
05b0: 74 20 69 73 20 33 34 20 6f 72 20 6d 6f 72 65 2e  t is 34 or more.
05c0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 46 4f 53 53  .*/.#ifndef FOSS
05d0: 49 4c 5f 48 41 53 48 5f 44 49 47 49 54 53 0a 23  IL_HASH_DIGITS.#
05e0: 20 64 65 66 69 6e 65 20 46 4f 53 53 49 4c 5f 48   define FOSSIL_H
05f0: 41 53 48 5f 44 49 47 49 54 53 20 31 30 20 20 20  ASH_DIGITS 10   
0600: 20 20 20 20 2f 2a 20 46 6f 72 20 25 53 20 28 68      /* For %S (h
0610: 75 6d 61 6e 20 64 69 73 70 6c 61 79 29 20 2a 2f  uman display) */
0620: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
0630: 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44 49 47 49  FOSSIL_HASH_DIGI
0640: 54 53 5f 55 52 4c 0a 23 20 64 65 66 69 6e 65 20  TS_URL.# define 
0650: 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44 49 47 49  FOSSIL_HASH_DIGI
0660: 54 53 5f 55 52 4c 20 31 36 20 20 20 2f 2a 20 46  TS_URL 16   /* F
0670: 6f 72 20 25 21 53 20 28 65 6d 62 65 64 64 65 64  or %!S (embedded
0680: 20 69 6e 20 55 52 4c 73 29 20 2a 2f 0a 23 65 6e   in URLs) */.#en
0690: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
06a0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
06b0: 61 72 74 69 66 61 63 74 20 68 61 73 68 20 64 69  artifact hash di
06c0: 67 69 74 73 20 74 6f 20 64 69 73 70 6c 61 79 2e  gits to display.
06d0: 20 20 54 68 65 20 6e 75 6d 62 65 72 20 69 73 20    The number is 
06e0: 66 6f 72 0a 2a 2a 20 68 75 6d 61 6e 20 6f 75 74  for.** human out
06f0: 70 75 74 20 69 66 20 74 68 65 20 62 46 6f 72 55  put if the bForU
0700: 72 6c 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  rl is false and 
0710: 69 73 20 64 65 73 74 69 6e 65 64 20 66 6f 72 20  is destined for 
0720: 61 20 55 52 4c 20 69 66 0a 2a 2a 20 62 46 6f 72  a URL if.** bFor
0730: 55 72 6c 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2f  Url is false..*/
0740: 0a 73 74 61 74 69 63 20 69 6e 74 20 68 61 73 68  .static int hash
0750: 44 69 67 69 74 73 28 69 6e 74 20 62 46 6f 72 55  Digits(int bForU
0760: 72 6c 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e  rl){.  static in
0770: 74 20 6e 44 69 67 69 74 48 75 6d 61 6e 20 3d 20  t nDigitHuman = 
0780: 30 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20  0;.  static int 
0790: 6e 44 69 67 69 74 55 72 6c 20 3d 20 30 3b 0a 20  nDigitUrl = 0;. 
07a0: 20 69 66 28 20 6e 44 69 67 69 74 48 75 6d 61 6e   if( nDigitHuman
07b0: 3d 3d 30 20 29 7b 0a 20 20 20 20 6e 44 69 67 69  ==0 ){.    nDigi
07c0: 74 48 75 6d 61 6e 20 3d 20 64 62 5f 67 65 74 5f  tHuman = db_get_
07d0: 69 6e 74 28 22 68 61 73 68 2d 64 69 67 69 74 73  int("hash-digits
07e0: 22 2c 20 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44  ", FOSSIL_HASH_D
07f0: 49 47 49 54 53 29 3b 0a 20 20 20 20 69 66 28 20  IGITS);.    if( 
0800: 6e 44 69 67 69 74 48 75 6d 61 6e 20 3c 20 36 20  nDigitHuman < 6 
0810: 29 20 6e 44 69 67 69 74 48 75 6d 61 6e 20 3d 20  ) nDigitHuman = 
0820: 36 3b 0a 20 20 20 20 69 66 28 20 6e 44 69 67 69  6;.    if( nDigi
0830: 74 48 75 6d 61 6e 20 3e 20 34 30 20 29 20 6e 44  tHuman > 40 ) nD
0840: 69 67 69 74 48 75 6d 61 6e 20 3d 20 34 30 3b 0a  igitHuman = 40;.
0850: 20 20 20 20 6e 44 69 67 69 74 55 72 6c 20 3d 20      nDigitUrl = 
0860: 6e 44 69 67 69 74 48 75 6d 61 6e 20 2b 20 36 3b  nDigitHuman + 6;
0870: 0a 20 20 20 20 69 66 28 20 6e 44 69 67 69 74 55  .    if( nDigitU
0880: 72 6c 20 3c 20 46 4f 53 53 49 4c 5f 48 41 53 48  rl < FOSSIL_HASH
0890: 5f 44 49 47 49 54 53 5f 55 52 4c 20 29 20 6e 44  _DIGITS_URL ) nD
08a0: 69 67 69 74 55 72 6c 20 3d 20 46 4f 53 53 49 4c  igitUrl = FOSSIL
08b0: 5f 48 41 53 48 5f 44 49 47 49 54 53 5f 55 52 4c  _HASH_DIGITS_URL
08c0: 3b 0a 20 20 20 20 69 66 28 20 6e 44 69 67 69 74  ;.    if( nDigit
08d0: 55 72 6c 20 3e 20 34 30 20 29 20 6e 44 69 67 69  Url > 40 ) nDigi
08e0: 74 55 72 6c 20 3d 20 34 30 3b 0a 20 20 7d 0a 20  tUrl = 40;.  }. 
08f0: 20 72 65 74 75 72 6e 20 62 46 6f 72 55 72 6c 20   return bForUrl 
0900: 3f 20 6e 44 69 67 69 74 55 72 6c 20 3a 20 6e 44  ? nDigitUrl : nD
0910: 69 67 69 74 48 75 6d 61 6e 3b 0a 7d 0a 0a 2f 2a  igitHuman;.}../*
0920: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
0930: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
0940: 65 72 73 20 69 6e 20 61 20 25 53 20 6f 75 74 70  ers in a %S outp
0950: 75 74 2e 0a 2a 2f 0a 69 6e 74 20 6c 65 6e 67 74  ut..*/.int lengt
0960: 68 5f 6f 66 5f 53 5f 64 69 73 70 6c 61 79 28 76  h_of_S_display(v
0970: 6f 69 64 29 7b 0a 20 20 72 65 74 75 72 6e 20 68  oid){.  return h
0980: 61 73 68 44 69 67 69 74 73 28 30 29 3b 0a 7d 0a  ashDigits(0);.}.
0990: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 73 69 6f  ./*.** Conversio
09a0: 6e 20 74 79 70 65 73 20 66 61 6c 6c 20 69 6e 74  n types fall int
09b0: 6f 20 76 61 72 69 6f 75 73 20 63 61 74 65 67 6f  o various catego
09c0: 72 69 65 73 20 61 73 20 64 65 66 69 6e 65 64 20  ries as defined 
09d0: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
09e0: 69 6e 67 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e  ing enumeration.
09f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 52 41  .*/.#define etRA
0a00: 44 49 58 20 20 20 20 20 20 20 31 20 2f 2a 20 49  DIX       1 /* I
0a10: 6e 74 65 67 65 72 20 74 79 70 65 73 2e 20 20 25  nteger types.  %
0a20: 64 2c 20 25 78 2c 20 25 6f 2c 20 61 6e 64 20 73  d, %x, %o, and s
0a30: 6f 20 66 6f 72 74 68 20 2a 2f 0a 23 64 65 66 69  o forth */.#defi
0a40: 6e 65 20 65 74 46 4c 4f 41 54 20 20 20 20 20 20  ne etFLOAT      
0a50: 20 32 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 70   2 /* Floating p
0a60: 6f 69 6e 74 2e 20 20 25 66 20 2a 2f 0a 23 64 65  oint.  %f */.#de
0a70: 66 69 6e 65 20 65 74 45 58 50 20 20 20 20 20 20  fine etEXP      
0a80: 20 20 20 33 20 2f 2a 20 45 78 70 6f 6e 65 6e 74     3 /* Exponent
0a90: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 20 25 65  ial notation. %e
0aa0: 20 61 6e 64 20 25 45 20 2a 2f 0a 23 64 65 66 69   and %E */.#defi
0ab0: 6e 65 20 65 74 47 45 4e 45 52 49 43 20 20 20 20  ne etGENERIC    
0ac0: 20 34 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 6f   4 /* Floating o
0ad0: 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 2c 20 64  r exponential, d
0ae0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 65 78 70 6f  epending on expo
0af0: 6e 65 6e 74 2e 20 25 67 20 2a 2f 0a 23 64 65 66  nent. %g */.#def
0b00: 69 6e 65 20 65 74 53 49 5a 45 20 20 20 20 20 20  ine etSIZE      
0b10: 20 20 35 20 2f 2a 20 52 65 74 75 72 6e 20 6e 75    5 /* Return nu
0b20: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
0b30: 72 73 20 70 72 6f 63 65 73 73 65 64 20 73 6f 20  rs processed so 
0b40: 66 61 72 2e 20 25 6e 20 2a 2f 0a 23 64 65 66 69  far. %n */.#defi
0b50: 6e 65 20 65 74 53 54 52 49 4e 47 20 20 20 20 20  ne etSTRING     
0b60: 20 36 20 2f 2a 20 53 74 72 69 6e 67 73 2e 20 25   6 /* Strings. %
0b70: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 44  s */.#define etD
0b80: 59 4e 53 54 52 49 4e 47 20 20 20 37 20 2f 2a 20  YNSTRING   7 /* 
0b90: 44 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  Dynamically allo
0ba0: 63 61 74 65 64 20 73 74 72 69 6e 67 73 2e 20 25  cated strings. %
0bb0: 7a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 50  z */.#define etP
0bc0: 45 52 43 45 4e 54 20 20 20 20 20 38 20 2f 2a 20  ERCENT     8 /* 
0bd0: 50 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2e 20  Percent symbol. 
0be0: 25 25 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74  %% */.#define et
0bf0: 43 48 41 52 58 20 20 20 20 20 20 20 39 20 2f 2a  CHARX       9 /*
0c00: 20 43 68 61 72 61 63 74 65 72 73 2e 20 25 63 20   Characters. %c 
0c10: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 52 52  */.#define etERR
0c20: 4f 52 20 20 20 20 20 20 31 30 20 2f 2a 20 55 73  OR      10 /* Us
0c30: 65 64 20 74 6f 20 69 6e 64 69 63 61 74 65 20 6e  ed to indicate n
0c40: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
0c50: 6e 20 74 79 70 65 20 2a 2f 0a 2f 2a 20 54 68 65  n type */./* The
0c60: 20 72 65 73 74 20 61 72 65 20 65 78 74 65 6e 73   rest are extens
0c70: 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d 61 6c  ions, not normal
0c80: 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 69 6e  ly found in prin
0c90: 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tf() */.#define 
0ca0: 65 74 42 4c 4f 42 20 20 20 20 20 20 20 31 31 20  etBLOB       11 
0cb0: 2f 2a 20 42 6c 6f 62 20 6f 62 6a 65 63 74 73 2e  /* Blob objects.
0cc0: 20 20 25 62 20 2a 2f 0a 23 64 65 66 69 6e 65 20    %b */.#define 
0cd0: 65 74 42 4c 4f 42 53 51 4c 20 20 20 20 31 32 20  etBLOBSQL    12 
0ce0: 2f 2a 20 42 6c 6f 62 20 6f 62 6a 65 63 74 73 20  /* Blob objects 
0cf0: 71 75 6f 74 65 64 20 66 6f 72 20 53 51 4c 2e 20  quoted for SQL. 
0d00: 20 25 42 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %B */.#define e
0d10: 74 53 51 4c 45 53 43 41 50 45 20 20 31 33 20 2f  tSQLESCAPE  13 /
0d20: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
0d30: 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20 20 25 71  \'' doubled.  %q
0d40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51   */.#define etSQ
0d50: 4c 45 53 43 41 50 45 32 20 31 34 20 2f 2a 20 53  LESCAPE2 14 /* S
0d60: 74 72 69 6e 67 73 20 77 69 74 68 20 27 5c 27 27  trings with '\''
0d70: 20 64 6f 75 62 6c 65 64 20 61 6e 64 20 65 6e 63   doubled and enc
0d80: 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a 20 20 20  losed in '',.   
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0da0: 20 20 20 20 20 20 20 4e 55 4c 4c 20 70 6f 69 6e         NULL poin
0db0: 74 65 72 73 20 72 65 70 6c 61 63 65 64 20 62 79  ters replaced by
0dc0: 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25 51 20 2a   SQL NULL.  %Q *
0dd0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45  /.#define etSQLE
0de0: 53 43 41 50 45 33 20 31 35 20 2f 2a 20 44 6f 75  SCAPE3 15 /* Dou
0df0: 62 6c 65 20 27 22 27 20 63 68 61 72 61 63 74 65  ble '"' characte
0e00: 72 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64  rs within an ind
0e10: 65 6e 74 69 66 69 65 72 2e 20 20 25 77 20 2a 2f  entifier.  %w */
0e20: 0a 23 64 65 66 69 6e 65 20 65 74 50 4f 49 4e 54  .#define etPOINT
0e30: 45 52 20 20 20 20 31 36 20 2f 2a 20 54 68 65 20  ER    16 /* The 
0e40: 25 70 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f  %p conversion */
0e50: 0a 23 64 65 66 69 6e 65 20 65 74 48 54 4d 4c 49  .#define etHTMLI
0e60: 5a 45 20 20 20 20 31 37 20 2f 2a 20 4d 61 6b 65  ZE    17 /* Make
0e70: 20 74 65 78 74 20 73 61 66 65 20 66 6f 72 20 48   text safe for H
0e80: 54 4d 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  TML */.#define e
0e90: 74 48 54 54 50 49 5a 45 20 20 20 20 31 38 20 2f  tHTTPIZE    18 /
0ea0: 2a 20 4d 61 6b 65 20 74 65 78 74 20 73 61 66 65  * Make text safe
0eb0: 20 66 6f 72 20 48 54 54 50 2e 20 20 22 2f 22 20   for HTTP.  "/" 
0ec0: 65 6e 63 6f 64 65 64 20 61 73 20 25 32 66 20 2a  encoded as %2f *
0ed0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 55 52 4c 49  /.#define etURLI
0ee0: 5a 45 20 20 20 20 20 31 39 20 2f 2a 20 4d 61 6b  ZE     19 /* Mak
0ef0: 65 20 74 65 78 74 20 73 61 66 65 20 66 6f 72 20  e text safe for 
0f00: 48 54 54 50 2e 20 20 22 2f 22 20 6e 6f 74 20 65  HTTP.  "/" not e
0f10: 6e 63 6f 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  ncoded */.#defin
0f20: 65 20 65 74 46 4f 53 53 49 4c 49 5a 45 20 20 32  e etFOSSILIZE  2
0f30: 30 20 2f 2a 20 54 68 65 20 66 6f 73 73 69 6c 20  0 /* The fossil 
0f40: 68 65 61 64 65 72 20 65 6e 63 6f 64 69 6e 67 20  header encoding 
0f50: 66 6f 72 6d 61 74 2e 20 2a 2f 0a 23 64 65 66 69  format. */.#defi
0f60: 6e 65 20 65 74 50 41 54 48 20 20 20 20 20 20 20  ne etPATH       
0f70: 32 31 20 2f 2a 20 50 61 74 68 20 74 79 70 65 20  21 /* Path type 
0f80: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 57 49 4b  */.#define etWIK
0f90: 49 53 54 52 20 20 20 20 32 32 20 2f 2a 20 54 69  ISTR    22 /* Ti
0fa0: 6d 65 6c 69 6e 65 20 63 6f 6d 6d 65 6e 74 20 74  meline comment t
0fb0: 65 78 74 20 72 65 6e 64 65 72 65 64 20 66 72 6f  ext rendered fro
0fc0: 6d 20 61 20 63 68 61 72 2a 3a 20 25 57 20 2a 2f  m a char*: %W */
0fd0: 0a 23 64 65 66 69 6e 65 20 65 74 53 54 52 49 4e  .#define etSTRIN
0fe0: 47 49 44 20 20 20 32 33 20 2f 2a 20 53 74 72 69  GID   23 /* Stri
0ff0: 6e 67 20 77 69 74 68 20 6c 65 6e 67 74 68 20 6c  ng with length l
1000: 69 6d 69 74 20 66 6f 72 20 61 20 55 55 49 44 20  imit for a UUID 
1010: 70 72 65 66 69 78 3a 20 25 53 20 2a 2f 0a 23 64  prefix: %S */.#d
1020: 65 66 69 6e 65 20 65 74 52 4f 4f 54 20 20 20 20  efine etROOT    
1030: 20 20 20 32 34 20 2f 2a 20 53 74 72 69 6e 67 20     24 /* String 
1040: 76 61 6c 75 65 20 6f 66 20 67 2e 7a 54 6f 70 3a  value of g.zTop:
1050: 20 25 52 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   %R */.../*.** A
1060: 6e 20 22 65 74 42 79 74 65 22 20 69 73 20 61 6e  n "etByte" is an
1070: 20 38 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20   8-bit unsigned 
1080: 76 61 6c 75 65 2e 0a 2a 2f 0a 74 79 70 65 64 65  value..*/.typede
1090: 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
10a0: 65 74 42 79 74 65 3b 0a 0a 2f 2a 0a 2a 2a 20 45  etByte;../*.** E
10b0: 61 63 68 20 62 75 69 6c 74 69 6e 20 63 6f 6e 76  ach builtin conv
10c0: 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72  ersion character
10d0: 20 28 65 78 3a 20 74 68 65 20 27 64 27 20 69 6e   (ex: the 'd' in
10e0: 20 22 25 64 22 29 20 69 73 20 64 65 73 63 72 69   "%d") is descri
10f0: 62 65 64 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  bed.** by an ins
1100: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1110: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1120: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1130: 63 74 20 65 74 5f 69 6e 66 6f 20 7b 20 20 20 2f  ct et_info {   /
1140: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1150: 6f 75 74 20 65 61 63 68 20 66 6f 72 6d 61 74 20  out each format 
1160: 66 69 65 6c 64 20 2a 2f 0a 20 20 63 68 61 72 20  field */.  char 
1170: 66 6d 74 74 79 70 65 3b 20 20 20 20 20 20 20 20  fmttype;        
1180: 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 72 6d 61      /* The forma
1190: 74 20 66 69 65 6c 64 20 63 6f 64 65 20 6c 65 74  t field code let
11a0: 74 65 72 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ter */.  etByte 
11b0: 62 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  base;           
11c0: 20 20 2f 2a 20 54 68 65 20 62 61 73 65 20 66 6f    /* The base fo
11d0: 72 20 72 61 64 69 78 20 63 6f 6e 76 65 72 73 69  r radix conversi
11e0: 6f 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  on */.  etByte f
11f0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
1200: 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1210: 6f 66 20 46 4c 41 47 5f 20 63 6f 6e 73 74 61 6e  of FLAG_ constan
1220: 74 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 65 74  ts below */.  et
1230: 42 79 74 65 20 74 79 70 65 3b 20 20 20 20 20 20  Byte type;      
1240: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
1250: 73 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f  sion paradigm */
1260: 0a 20 20 65 74 42 79 74 65 20 63 68 61 72 73 65  .  etByte charse
1270: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  t;          /* O
1280: 66 66 73 65 74 20 69 6e 74 6f 20 61 44 69 67 69  ffset into aDigi
1290: 74 73 5b 5d 20 6f 66 20 74 68 65 20 64 69 67 69  ts[] of the digi
12a0: 74 73 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 65  ts string */.  e
12b0: 74 42 79 74 65 20 70 72 65 66 69 78 3b 20 20 20  tByte prefix;   
12c0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
12d0: 74 20 69 6e 74 6f 20 61 50 72 65 66 69 78 5b 5d  t into aPrefix[]
12e0: 20 6f 66 20 74 68 65 20 70 72 65 66 69 78 20 73   of the prefix s
12f0: 74 72 69 6e 67 20 2a 2f 0a 7d 20 65 74 5f 69 6e  tring */.} et_in
1300: 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  fo;../*.** Allow
1310: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 65 74  ed values for et
1320: 5f 69 6e 66 6f 2e 66 6c 61 67 73 0a 2a 2f 0a 23  _info.flags.*/.#
1330: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 49 47 4e  define FLAG_SIGN
1340: 45 44 20 20 31 20 20 20 20 20 2f 2a 20 54 72 75  ED  1     /* Tru
1350: 65 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 74  e if the value t
1360: 6f 20 63 6f 6e 76 65 72 74 20 69 73 20 73 69 67  o convert is sig
1370: 6e 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46  ned */.#define F
1380: 4c 41 47 5f 49 4e 54 45 52 4e 20 20 32 20 20 20  LAG_INTERN  2   
1390: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 6f 72    /* True if for
13a0: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e   internal use on
13b0: 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c  ly */.#define FL
13c0: 41 47 5f 53 54 52 49 4e 47 20 20 34 20 20 20 20  AG_STRING  4    
13d0: 20 2f 2a 20 41 6c 6c 6f 77 20 69 6e 66 69 6e 69   /* Allow infini
13e0: 74 79 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a  ty precision */.
13f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1400: 6f 77 69 6e 67 20 74 61 62 6c 65 20 69 73 20 73  owing table is s
1410: 65 61 72 63 68 65 64 20 6c 69 6e 65 61 72 6c 79  earched linearly
1420: 2c 20 73 6f 20 69 74 20 69 73 20 67 6f 6f 64 20  , so it is good 
1430: 74 6f 20 70 75 74 20 74 68 65 0a 2a 2a 20 6d 6f  to put the.** mo
1440: 73 74 20 66 72 65 71 75 65 6e 74 6c 79 20 75 73  st frequently us
1450: 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79  ed conversion ty
1460: 70 65 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 73 74  pes first..*/.st
1470: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1480: 61 44 69 67 69 74 73 5b 5d 20 3d 20 22 30 31 32  aDigits[] = "012
1490: 33 34 35 36 37 38 39 41 42 43 44 45 46 30 31 32  3456789ABCDEF012
14a0: 33 34 35 36 37 38 39 61 62 63 64 65 66 22 3b 0a  3456789abcdef";.
14b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
14c0: 72 20 61 50 72 65 66 69 78 5b 5d 20 3d 20 22 2d  r aPrefix[] = "-
14d0: 78 30 5c 30 30 30 58 30 22 3b 0a 73 74 61 74 69  x0\000X0";.stati
14e0: 63 20 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20  c const et_info 
14f0: 66 6d 74 69 6e 66 6f 5b 5d 20 3d 20 7b 0a 20 20  fmtinfo[] = {.  
1500: 7b 20 20 27 64 27 2c 20 31 30 2c 20 31 2c 20 65  {  'd', 10, 1, e
1510: 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20  tRADIX,      0, 
1520: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 73 27 2c 20   0 },.  {  's', 
1530: 20 30 2c 20 34 2c 20 65 74 53 54 52 49 4e 47 2c   0, 4, etSTRING,
1540: 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20       0,  0 },.  
1550: 7b 20 20 27 67 27 2c 20 20 30 2c 20 31 2c 20 65  {  'g',  0, 1, e
1560: 74 47 45 4e 45 52 49 43 2c 20 20 20 20 33 30 2c  tGENERIC,    30,
1570: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 7a 27 2c 20   0 },.  {  'z', 
1580: 20 30 2c 20 36 2c 20 65 74 44 59 4e 53 54 52 49   0, 6, etDYNSTRI
1590: 4e 47 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  NG,  0,  0 },.  
15a0: 7b 20 20 27 71 27 2c 20 20 30 2c 20 34 2c 20 65  {  'q',  0, 4, e
15b0: 74 53 51 4c 45 53 43 41 50 45 2c 20 20 30 2c 20  tSQLESCAPE,  0, 
15c0: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 51 27 2c 20   0 },.  {  'Q', 
15d0: 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43 41   0, 4, etSQLESCA
15e0: 50 45 32 2c 20 30 2c 20 20 30 20 7d 2c 0a 20 20  PE2, 0,  0 },.  
15f0: 7b 20 20 27 62 27 2c 20 20 30 2c 20 32 2c 20 65  {  'b',  0, 2, e
1600: 74 42 4c 4f 42 2c 20 20 20 20 20 20 20 30 2c 20  tBLOB,       0, 
1610: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 42 27 2c 20   0 },.  {  'B', 
1620: 20 30 2c 20 32 2c 20 65 74 42 4c 4f 42 53 51 4c   0, 2, etBLOBSQL
1630: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
1640: 7b 20 20 27 57 27 2c 20 20 30 2c 20 32 2c 20 65  {  'W',  0, 2, e
1650: 74 57 49 4b 49 53 54 52 2c 20 20 20 20 30 2c 20  tWIKISTR,    0, 
1660: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 68 27 2c 20   0 },.  {  'h', 
1670: 20 30 2c 20 34 2c 20 65 74 48 54 4d 4c 49 5a 45   0, 4, etHTMLIZE
1680: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
1690: 7b 20 20 27 52 27 2c 20 20 30 2c 20 30 2c 20 65  {  'R',  0, 0, e
16a0: 74 52 4f 4f 54 2c 20 20 20 20 20 20 20 30 2c 20  tROOT,       0, 
16b0: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 74 27 2c 20   0 },.  {  't', 
16c0: 20 30 2c 20 34 2c 20 65 74 48 54 54 50 49 5a 45   0, 4, etHTTPIZE
16d0: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 20 20 2f  ,    0,  0 },  /
16e0: 2a 20 22 2f 22 20 2d 3e 20 22 25 32 46 22 20 2a  * "/" -> "%2F" *
16f0: 2f 0a 20 20 7b 20 20 27 54 27 2c 20 20 30 2c 20  /.  {  'T',  0, 
1700: 34 2c 20 65 74 55 52 4c 49 5a 45 2c 20 20 20 20  4, etURLIZE,    
1710: 20 30 2c 20 20 30 20 7d 2c 20 20 2f 2a 20 22 2f   0,  0 },  /* "/
1720: 22 20 75 6e 63 68 61 6e 67 65 64 20 2a 2f 0a 20  " unchanged */. 
1730: 20 7b 20 20 27 77 27 2c 20 20 30 2c 20 34 2c 20   {  'w',  0, 4, 
1740: 65 74 53 51 4c 45 53 43 41 50 45 33 2c 20 30 2c  etSQLESCAPE3, 0,
1750: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 46 27 2c    0 },.  {  'F',
1760: 20 20 30 2c 20 34 2c 20 65 74 46 4f 53 53 49 4c    0, 4, etFOSSIL
1770: 49 5a 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  IZE,  0,  0 },. 
1780: 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 34 2c 20   {  'S',  0, 4, 
1790: 65 74 53 54 52 49 4e 47 49 44 2c 20 20 20 30 2c  etSTRINGID,   0,
17a0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 63 27 2c    0 },.  {  'c',
17b0: 20 20 30 2c 20 30 2c 20 65 74 43 48 41 52 58 2c    0, 0, etCHARX,
17c0: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
17d0: 20 7b 20 20 27 6f 27 2c 20 20 38 2c 20 30 2c 20   {  'o',  8, 0, 
17e0: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
17f0: 20 20 32 20 7d 2c 0a 20 20 7b 20 20 27 75 27 2c    2 },.  {  'u',
1800: 20 31 30 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   10, 0, etRADIX,
1810: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
1820: 20 7b 20 20 27 78 27 2c 20 31 36 2c 20 30 2c 20   {  'x', 16, 0, 
1830: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 31 36  etRADIX,      16
1840: 2c 20 31 20 7d 2c 0a 20 20 7b 20 20 27 58 27 2c  , 1 },.  {  'X',
1850: 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   16, 0, etRADIX,
1860: 20 20 20 20 20 20 30 2c 20 20 34 20 7d 2c 0a 20        0,  4 },. 
1870: 20 7b 20 20 27 66 27 2c 20 20 30 2c 20 31 2c 20   {  'f',  0, 1, 
1880: 65 74 46 4c 4f 41 54 2c 20 20 20 20 20 20 30 2c  etFLOAT,      0,
1890: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 65 27 2c    0 },.  {  'e',
18a0: 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20 20    0, 1, etEXP,  
18b0: 20 20 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20        30, 0 },. 
18c0: 20 7b 20 20 27 45 27 2c 20 20 30 2c 20 31 2c 20   {  'E',  0, 1, 
18d0: 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 31 34  etEXP,        14
18e0: 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 47 27 2c  , 0 },.  {  'G',
18f0: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
1900: 43 2c 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a 20  C,    14, 0 },. 
1910: 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 31 2c 20   {  'i', 10, 1, 
1920: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
1930: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6e 27 2c    0 },.  {  'n',
1940: 20 20 30 2c 20 30 2c 20 65 74 53 49 5a 45 2c 20    0, 0, etSIZE, 
1950: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
1960: 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 30 2c 20   {  '%',  0, 0, 
1970: 65 74 50 45 52 43 45 4e 54 2c 20 20 20 20 30 2c  etPERCENT,    0,
1980: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 70 27 2c    0 },.  {  'p',
1990: 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 4e 54 45   16, 0, etPOINTE
19a0: 52 2c 20 20 20 20 30 2c 20 20 31 20 7d 2c 0a 20  R,    0,  1 },. 
19b0: 20 7b 20 20 27 2f 27 2c 20 20 30 2c 20 30 2c 20   {  '/',  0, 0, 
19c0: 65 74 50 41 54 48 2c 20 20 20 20 20 20 20 30 2c  etPATH,       0,
19d0: 20 20 30 20 7d 2c 0a 7d 3b 0a 23 64 65 66 69 6e    0 },.};.#defin
19e0: 65 20 65 74 4e 49 4e 46 4f 20 63 6f 75 6e 74 28  e etNINFO count(
19f0: 66 6d 74 69 6e 66 6f 29 0a 0a 2f 2a 0a 2a 2a 20  fmtinfo)../*.** 
1a00: 22 2a 76 61 6c 22 20 69 73 20 61 20 64 6f 75 62  "*val" is a doub
1a10: 6c 65 20 73 75 63 68 20 74 68 61 74 20 30 2e 31  le such that 0.1
1a20: 20 3c 3d 20 2a 76 61 6c 20 3c 20 31 30 2e 30 0a   <= *val < 10.0.
1a30: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 73  ** Return the as
1a40: 63 69 69 20 63 6f 64 65 20 66 6f 72 20 74 68 65  cii code for the
1a50: 20 6c 65 61 64 69 6e 67 20 64 69 67 69 74 20 6f   leading digit o
1a60: 66 20 2a 76 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20  f *val, then.** 
1a70: 6d 75 6c 74 69 70 6c 79 20 22 2a 76 61 6c 22 20  multiply "*val" 
1a80: 62 79 20 31 30 2e 30 20 74 6f 20 72 65 6e 6f 72  by 10.0 to renor
1a90: 6d 61 6c 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  malize..**.** Ex
1aa0: 61 6d 70 6c 65 3a 0a 2a 2a 20 20 20 20 20 69 6e  ample:.**     in
1ab0: 70 75 74 3a 20 20 20 20 20 2a 76 61 6c 20 3d 20  put:     *val = 
1ac0: 33 2e 31 34 31 35 39 0a 2a 2a 20 20 20 20 20 6f  3.14159.**     o
1ad0: 75 74 70 75 74 3a 20 20 20 20 2a 76 61 6c 20 3d  utput:    *val =
1ae0: 20 31 2e 34 31 35 39 20 20 20 20 66 75 6e 63 74   1.4159    funct
1af0: 69 6f 6e 20 72 65 74 75 72 6e 20 3d 20 27 33 27  ion return = '3'
1b00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 75 6e 74  .**.** The count
1b10: 65 72 20 2a 63 6e 74 20 69 73 20 69 6e 63 72 65  er *cnt is incre
1b20: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
1b30: 2e 20 20 41 66 74 65 72 20 63 6f 75 6e 74 65 72  .  After counter
1b40: 20 65 78 63 65 65 64 73 0a 2a 2a 20 31 36 20 28   exceeds.** 16 (
1b50: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 69  the number of si
1b60: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
1b70: 20 69 6e 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   in a 64-bit flo
1b80: 61 74 29 20 27 30 27 20 69 73 0a 2a 2a 20 61 6c  at) '0' is.** al
1b90: 77 61 79 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  ways returned..*
1ba0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 74 5f  /.static int et_
1bb0: 67 65 74 64 69 67 69 74 28 6c 6f 6e 67 20 64 6f  getdigit(long do
1bc0: 75 62 6c 65 20 2a 76 61 6c 2c 20 69 6e 74 20 2a  uble *val, int *
1bd0: 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69  cnt){.  int digi
1be0: 74 3b 0a 20 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  t;.  long double
1bf0: 20 64 3b 0a 20 20 69 66 28 20 28 2a 63 6e 74 29   d;.  if( (*cnt)
1c00: 2b 2b 20 3e 3d 20 31 36 20 29 20 72 65 74 75 72  ++ >= 16 ) retur
1c10: 6e 20 27 30 27 3b 0a 20 20 64 69 67 69 74 20 3d  n '0';.  digit =
1c20: 20 28 69 6e 74 29 2a 76 61 6c 3b 0a 20 20 64 20   (int)*val;.  d 
1c30: 3d 20 64 69 67 69 74 3b 0a 20 20 64 69 67 69 74  = digit;.  digit
1c40: 20 2b 3d 20 27 30 27 3b 0a 20 20 2a 76 61 6c 20   += '0';.  *val 
1c50: 3d 20 28 2a 76 61 6c 20 2d 20 64 29 2a 31 30 2e  = (*val - d)*10.
1c60: 30 3b 0a 20 20 72 65 74 75 72 6e 20 64 69 67 69  0;.  return digi
1c70: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  t;.}../*.** Size
1c80: 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 63 6f   of temporary co
1c90: 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 2e  nversion buffer.
1ca0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 42 55  .*/.#define etBU
1cb0: 46 53 49 5a 45 20 35 30 30 0a 0a 2f 2a 0a 2a 2a  FSIZE 500../*.**
1cc0: 20 46 69 6e 64 20 74 68 65 20 6c 65 6e 67 74 68   Find the length
1cd0: 20 6f 66 20 61 20 73 74 72 69 6e 67 20 61 73 20   of a string as 
1ce0: 6c 6f 6e 67 20 61 73 20 74 68 61 74 20 6c 65 6e  long as that len
1cf0: 67 74 68 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  gth does not.** 
1d00: 65 78 63 65 65 64 20 4e 20 62 79 74 65 73 2e 20  exceed N bytes. 
1d10: 20 49 66 20 6e 6f 20 7a 65 72 6f 20 74 65 72 6d   If no zero term
1d20: 69 6e 61 74 6f 72 20 69 73 20 73 65 65 6e 20 69  inator is seen i
1d30: 6e 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 4e  n the first.** N
1d40: 20 62 79 74 65 73 20 74 68 65 6e 20 72 65 74 75   bytes then retu
1d50: 72 6e 20 4e 2e 20 20 49 66 20 4e 20 69 73 20 6e  rn N.  If N is n
1d60: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
1d70: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 69 73  is routine.** is
1d80: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 73 74   an alias for st
1d90: 72 6c 65 6e 28 29 2e 0a 2a 2f 0a 73 74 61 74 69  rlen()..*/.stati
1da0: 63 20 69 6e 74 20 53 74 72 4e 4c 65 6e 33 32 28  c int StrNLen32(
1db0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
1dc0: 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 6e 20 3d  nt N){.  int n =
1dd0: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 28 4e 2d   0;.  while( (N-
1de0: 2d 20 21 3d 20 30 29 20 26 26 20 2a 28 7a 2b 2b  - != 0) && *(z++
1df0: 29 21 3d 30 20 29 7b 20 6e 2b 2b 3b 20 7d 0a 20  )!=0 ){ n++; }. 
1e00: 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a   return n;.}../*
1e10: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 61 70  .** Return an ap
1e20: 70 72 6f 70 72 69 61 74 65 20 73 65 74 20 6f 66  propriate set of
1e30: 20 66 6c 61 67 73 20 66 6f 72 20 77 69 6b 69 5f   flags for wiki_
1e40: 63 6f 6e 76 65 72 74 28 29 20 66 6f 72 20 64 69  convert() for di
1e50: 73 70 6c 61 79 69 6e 67 0a 2a 2a 20 63 6f 6d 6d  splaying.** comm
1e60: 65 6e 74 73 20 6f 6e 20 61 20 74 69 6d 65 6c 69  ents on a timeli
1e70: 6e 65 2e 20 20 54 68 65 73 65 20 66 6c 61 67 20  ne.  These flag 
1e80: 73 65 74 74 69 6e 67 73 20 61 72 65 20 64 65 74  settings are det
1e90: 65 72 6d 69 6e 65 64 20 62 79 0a 2a 2a 20 63 6f  ermined by.** co
1ea0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 70 61 72 61  nfiguration para
1eb0: 6d 65 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  meters..**.** Th
1ec0: 65 20 61 6c 74 46 6f 72 6d 32 20 61 72 67 75 6d  e altForm2 argum
1ed0: 65 6e 74 20 69 73 20 74 72 75 65 20 66 6f 72 20  ent is true for 
1ee0: 22 25 21 57 22 20 28 77 69 74 68 20 74 68 65 20  "%!W" (with the 
1ef0: 22 21 22 20 61 6c 74 65 72 6e 61 74 65 2d 66 6f  "!" alternate-fo
1f00: 72 6d 2d 32 0a 2a 2a 20 66 6c 61 67 73 29 20 61  rm-2.** flags) a
1f10: 6e 64 20 69 73 20 66 61 6c 73 65 20 66 6f 72 20  nd is false for 
1f20: 70 6c 61 69 6e 20 22 25 57 22 2e 20 20 54 68 65  plain "%W".  The
1f30: 20 21 20 69 6e 64 69 63 61 74 65 73 20 74 68 61   ! indicates tha
1f40: 74 20 74 68 65 20 74 65 78 74 20 69 73 0a 2a 2a  t the text is.**
1f50: 20 74 6f 20 62 65 20 72 65 6e 64 65 72 65 64 20   to be rendered 
1f60: 6f 6e 20 61 20 66 6f 72 6d 20 72 61 74 68 65 72  on a form rather
1f70: 20 74 68 61 6e 20 74 68 65 20 74 69 6d 65 6c 69   than the timeli
1f80: 6e 65 20 61 6e 64 20 74 68 61 74 20 62 6c 6f 63  ne and that bloc
1f90: 6b 20 6d 61 72 6b 75 70 0a 2a 2a 20 69 73 20 61  k markup.** is a
1fa0: 63 63 65 70 74 61 62 6c 65 20 65 76 65 6e 20 69  cceptable even i
1fb0: 66 20 74 68 65 20 22 74 69 6d 65 6c 69 6e 65 2d  f the "timeline-
1fc0: 62 6c 6f 63 6b 2d 6d 61 72 6b 75 70 22 20 73 65  block-markup" se
1fd0: 74 74 69 6e 67 20 69 73 20 66 61 6c 73 65 2e 0a  tting is false..
1fe0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 77 69  */.static int wi
1ff0: 6b 69 5f 63 6f 6e 76 65 72 74 5f 66 6c 61 67 73  ki_convert_flags
2000: 28 69 6e 74 20 61 6c 74 46 6f 72 6d 32 29 7b 0a  (int altForm2){.
2010: 20 20 73 74 61 74 69 63 20 69 6e 74 20 77 69 6b    static int wik
2020: 69 46 6c 61 67 73 20 3d 20 30 3b 0a 20 20 69 66  iFlags = 0;.  if
2030: 28 20 77 69 6b 69 46 6c 61 67 73 3d 3d 30 20 29  ( wikiFlags==0 )
2040: 7b 0a 20 20 20 20 69 66 28 20 61 6c 74 46 6f 72  {.    if( altFor
2050: 6d 32 20 7c 7c 20 64 62 5f 67 65 74 5f 62 6f 6f  m2 || db_get_boo
2060: 6c 65 61 6e 28 22 74 69 6d 65 6c 69 6e 65 2d 62  lean("timeline-b
2070: 6c 6f 63 6b 2d 6d 61 72 6b 75 70 22 2c 20 30 29  lock-markup", 0)
2080: 20 29 7b 0a 20 20 20 20 20 20 77 69 6b 69 46 6c   ){.      wikiFl
2090: 61 67 73 20 3d 20 57 49 4b 49 5f 49 4e 4c 49 4e  ags = WIKI_INLIN
20a0: 45 20 7c 20 57 49 4b 49 5f 4e 4f 42 41 44 4c 49  E | WIKI_NOBADLI
20b0: 4e 4b 53 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  NKS;.    }else{.
20c0: 20 20 20 20 20 20 77 69 6b 69 46 6c 61 67 73 20        wikiFlags 
20d0: 3d 20 57 49 4b 49 5f 49 4e 4c 49 4e 45 20 7c 20  = WIKI_INLINE | 
20e0: 57 49 4b 49 5f 4e 4f 42 4c 4f 43 4b 20 7c 20 57  WIKI_NOBLOCK | W
20f0: 49 4b 49 5f 4e 4f 42 41 44 4c 49 4e 4b 53 3b 0a  IKI_NOBADLINKS;.
2100: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
2110: 5f 67 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 74 69  _get_boolean("ti
2120: 6d 65 6c 69 6e 65 2d 70 6c 61 69 6e 74 65 78 74  meline-plaintext
2130: 22 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 77  ", 0) ){.      w
2140: 69 6b 69 46 6c 61 67 73 20 7c 3d 20 57 49 4b 49  ikiFlags |= WIKI
2150: 5f 4c 49 4e 4b 53 4f 4e 4c 59 3b 0a 20 20 20 20  _LINKSONLY;.    
2160: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 77  }.  }.  return w
2170: 69 6b 69 46 6c 61 67 73 3b 0a 7d 0a 0a 0a 0a 2f  ikiFlags;.}..../
2180: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 72  *.** The root pr
2190: 6f 67 72 61 6d 2e 20 20 41 6c 6c 20 76 61 72 69  ogram.  All vari
21a0: 61 74 69 6f 6e 73 20 63 61 6c 6c 20 74 68 69 73  ations call this
21b0: 20 63 6f 72 65 2e 0a 2a 2a 0a 2a 2a 20 49 4e 50   core..**.** INP
21c0: 55 54 53 3a 0a 2a 2a 20 20 20 70 42 6c 6f 62 20  UTS:.**   pBlob 
21d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6c 6f   This is the blo
21e0: 62 20 77 68 65 72 65 20 74 68 65 20 6f 75 74 70  b where the outp
21f0: 75 74 20 77 69 6c 6c 20 62 65 20 62 75 69 6c 74  ut will be built
2200: 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6d 74 20 20 20  ..**.**   fmt   
2210: 20 54 68 69 73 20 69 73 20 74 68 65 20 66 6f 72   This is the for
2220: 6d 61 74 20 73 74 72 69 6e 67 2c 20 61 73 20 69  mat string, as i
2230: 6e 20 74 68 65 20 75 73 75 61 6c 20 70 72 69 6e  n the usual prin
2240: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 61 70 20 20 20  t..**.**   ap   
2250: 20 20 54 68 69 73 20 69 73 20 61 20 70 6f 69 6e    This is a poin
2260: 74 65 72 20 74 6f 20 61 20 6c 69 73 74 20 6f 66  ter to a list of
2270: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 53 61 6d   arguments.  Sam
2280: 65 20 61 73 20 69 6e 0a 2a 2a 20 20 20 20 20 20  e as in.**      
2290: 20 20 20 20 76 66 70 72 69 6e 74 2e 0a 2a 2a 0a      vfprint..**.
22a0: 2a 2a 20 4f 55 54 50 55 54 53 3a 0a 2a 2a 20 20  ** OUTPUTS:.**  
22b0: 20 20 20 20 20 20 20 20 54 68 65 20 72 65 74 75          The retu
22c0: 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  rn value is the 
22d0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
22e0: 63 68 61 72 61 63 74 65 72 73 20 73 65 6e 74 20  characters sent 
22f0: 74 6f 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 74  to.**          t
2300: 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 66 75 6e  he function "fun
2310: 63 22 2e 20 20 52 65 74 75 72 6e 73 20 2d 31 20  c".  Returns -1 
2320: 6f 6e 20 61 20 65 72 72 6f 72 2e 0a 2a 2a 0a 2a  on a error..**.*
2330: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
2340: 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 61  order in which a
2350: 75 74 6f 6d 61 74 69 63 20 76 61 72 69 61 62 6c  utomatic variabl
2360: 65 73 20 61 72 65 20 64 65 63 6c 61 72 65 64 20  es are declared 
2370: 62 65 6c 6f 77 0a 2a 2a 20 73 65 65 6d 73 20 74  below.** seems t
2380: 6f 20 6d 61 6b 65 20 61 20 62 69 67 20 64 69 66  o make a big dif
2390: 66 65 72 65 6e 63 65 20 69 6e 20 64 65 74 65 72  ference in deter
23a0: 6d 69 6e 69 6e 67 20 68 6f 77 20 66 61 73 74 20  mining how fast 
23b0: 74 68 69 73 20 62 65 61 73 74 0a 2a 2a 20 77 69  this beast.** wi
23c0: 6c 6c 20 72 75 6e 2e 0a 2a 2f 0a 69 6e 74 20 76  ll run..*/.int v
23d0: 78 70 72 69 6e 74 66 28 0a 20 20 42 6c 6f 62 20  xprintf(.  Blob 
23e0: 2a 70 42 6c 6f 62 2c 20 20 20 20 20 20 20 20 20  *pBlob,         
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2400: 20 41 70 70 65 6e 64 20 6f 75 74 70 75 74 20 74   Append output t
2410: 6f 20 74 68 69 73 20 62 6c 6f 62 20 2a 2f 0a 20  o this blob */. 
2420: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 6d 74   const char *fmt
2430: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2440: 20 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 73 74      /* Format st
2450: 72 69 6e 67 20 2a 2f 0a 20 20 76 61 5f 6c 69 73  ring */.  va_lis
2460: 74 20 61 70 20 20 20 20 20 20 20 20 20 20 20 20  t ap            
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2480: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
2490: 20 20 69 6e 74 20 63 3b 20 20 20 20 20 20 20 20    int c;        
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24b0: 4e 65 78 74 20 63 68 61 72 61 63 74 65 72 20 69  Next character i
24c0: 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72  n the format str
24d0: 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62  ing */.  char *b
24e0: 75 66 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  ufpt;           
24f0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
2500: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2510: 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
2520: 20 70 72 65 63 69 73 69 6f 6e 3b 20 20 20 20 20   precision;     
2530: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65 63 69          /* Preci
2540: 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72  sion of the curr
2550: 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69  ent field */.  i
2560: 6e 74 20 6c 65 6e 67 74 68 3b 20 20 20 20 20 20  nt length;      
2570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
2580: 67 74 68 20 6f 66 20 74 68 65 20 66 69 65 6c 64  gth of the field
2590: 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78 3b 20 20   */.  int idx;  
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 2f 2a 20 41 20 67 65 6e 65 72 61 6c 20 70 75   /* A general pu
25c0: 72 70 6f 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74  rpose loop count
25d0: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 75 6e  er */.  int coun
25e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25f0: 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
2600: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
2610: 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
2620: 20 77 69 64 74 68 3b 20 20 20 20 20 20 20 20 20   width;         
2630: 20 20 20 20 20 20 20 20 2f 2a 20 57 69 64 74 68          /* Width
2640: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2650: 66 69 65 6c 64 20 2a 2f 0a 20 20 65 74 42 79 74  field */.  etByt
2660: 65 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69  e flag_leftjusti
2670: 66 79 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  fy;   /* True if
2680: 20 22 2d 22 20 66 6c 61 67 20 69 73 20 70 72 65   "-" flag is pre
2690: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
26a0: 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 3b 20   flag_plussign; 
26b0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
26c0: 22 2b 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  "+" flag is pres
26d0: 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ent */.  etByte 
26e0: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 3b 20  flag_blanksign; 
26f0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
2700: 20 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65   " flag is prese
2710: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
2720: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
2730: 6d 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 22 23  m; /* True if "#
2740: 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e  " flag is presen
2750: 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  t */.  etByte fl
2760: 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 20 20 20 20  ag_altform2;    
2770: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 21 22    /* True if "!"
2780: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
2790: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
27a0: 67 5f 7a 65 72 6f 70 61 64 3b 20 20 20 20 20 20  g_zeropad;      
27b0: 20 2f 2a 20 54 72 75 65 20 69 66 20 66 69 65 6c   /* True if fiel
27c0: 64 20 77 69 64 74 68 20 63 6f 6e 73 74 61 6e 74  d width constant
27d0: 20 73 74 61 72 74 73 20 77 69 74 68 20 7a 65 72   starts with zer
27e0: 6f 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  o */.  etByte fl
27f0: 61 67 5f 6c 6f 6e 67 3b 20 20 20 20 20 20 20 20  ag_long;        
2800: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 6c 22    /* True if "l"
2810: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
2820: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2830: 67 5f 6c 6f 6e 67 6c 6f 6e 67 3b 20 20 20 20 20  g_longlong;     
2840: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
2850: 22 6c 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65  "ll" flag is pre
2860: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
2870: 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20   done;          
2880: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74 65 72       /* Loop ter
2890: 6d 69 6e 61 74 69 6f 6e 20 66 6c 61 67 20 2a 2f  mination flag */
28a0: 0a 20 20 75 36 34 20 6c 6f 6e 67 76 61 6c 75 65  .  u64 longvalue
28b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
28c0: 20 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65 67   Value for integ
28d0: 65 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 6c 6f  er types */.  lo
28e0: 6e 67 20 64 6f 75 62 6c 65 20 72 65 61 6c 76 61  ng double realva
28f0: 6c 75 65 3b 20 20 20 20 20 2f 2a 20 56 61 6c 75  lue;     /* Valu
2900: 65 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65 73  e for real types
2910: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f 69   */.  const et_i
2920: 6e 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20 20  nfo *infop;     
2930: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
2940: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69  he appropriate i
2950: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a 2f  nfo structure */
2960: 0a 20 20 63 68 61 72 20 62 75 66 5b 65 74 42 55  .  char buf[etBU
2970: 46 53 49 5a 45 5d 3b 20 20 20 20 20 20 20 2f 2a  FSIZE];       /*
2980: 20 43 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66 66   Conversion buff
2990: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 70 72 65  er */.  char pre
29a0: 66 69 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  fix;            
29b0: 20 20 20 2f 2a 20 50 72 65 66 69 78 20 63 68 61     /* Prefix cha
29c0: 72 61 63 74 65 72 2e 20 20 22 2b 22 20 6f 72 20  racter.  "+" or 
29d0: 22 2d 22 20 6f 72 20 22 20 22 20 6f 72 20 27 5c  "-" or " " or '\
29e0: 30 27 2e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  0'. */.  etByte 
29f0: 65 72 72 6f 72 66 6c 61 67 20 3d 20 30 3b 20 20  errorflag = 0;  
2a00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
2a10: 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  n error is encou
2a20: 6e 74 65 72 65 64 20 2a 2f 0a 20 20 65 74 42 79  ntered */.  etBy
2a30: 74 65 20 78 74 79 70 65 3b 20 20 20 20 20 20 20  te xtype;       
2a40: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
2a50: 73 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f  sion paradigm */
2a60: 0a 20 20 63 68 61 72 20 2a 7a 45 78 74 72 61 3b  .  char *zExtra;
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a80: 20 45 78 74 72 61 20 6d 65 6d 6f 72 79 20 75 73   Extra memory us
2a90: 65 64 20 66 6f 72 20 65 74 54 43 4c 45 53 43 41  ed for etTCLESCA
2aa0: 50 45 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 2a  PE conversions *
2ab0: 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  /.  static const
2ac0: 20 63 68 61 72 20 73 70 61 63 65 73 5b 5d 20 3d   char spaces[] =
2ad0: 0a 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20  .   "           
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3b                ";
2b20: 0a 23 64 65 66 69 6e 65 20 65 74 53 50 41 43 45  .#define etSPACE
2b30: 53 49 5a 45 20 28 73 69 7a 65 6f 66 28 73 70 61  SIZE (sizeof(spa
2b40: 63 65 73 29 2d 31 29 0a 20 20 69 6e 74 20 20 65  ces)-1).  int  e
2b50: 78 70 2c 20 65 32 3b 20 20 20 20 20 20 20 20 20  xp, e2;         
2b60: 20 20 20 20 20 2f 2a 20 65 78 70 6f 6e 65 6e 74       /* exponent
2b70: 20 6f 66 20 72 65 61 6c 20 6e 75 6d 62 65 72 73   of real numbers
2b80: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 6f 75   */.  double rou
2b90: 6e 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  nder;           
2ba0: 20 2f 2a 20 55 73 65 64 20 66 6f 72 20 72 6f 75   /* Used for rou
2bb0: 6e 64 69 6e 67 20 66 6c 6f 61 74 69 6e 67 20 70  nding floating p
2bc0: 6f 69 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 20  oint values */. 
2bd0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 64 70 3b   etByte flag_dp;
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2bf0: 72 75 65 20 69 66 20 64 65 63 69 6d 61 6c 20 70  rue if decimal p
2c00: 6f 69 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 73  oint should be s
2c10: 68 6f 77 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65  hown */.  etByte
2c20: 20 66 6c 61 67 5f 72 74 7a 3b 20 20 20 20 20 20   flag_rtz;      
2c30: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
2c40: 74 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73 20 73  trailing zeros s
2c50: 68 6f 75 6c 64 20 62 65 20 72 65 6d 6f 76 65 64  hould be removed
2c60: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2c70: 67 5f 65 78 70 3b 20 20 20 20 20 20 20 20 20 20  g_exp;          
2c80: 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 6f 72 63   /* True to forc
2c90: 65 20 64 69 73 70 6c 61 79 20 6f 66 20 74 68 65  e display of the
2ca0: 20 65 78 70 6f 6e 65 6e 74 20 2a 2f 0a 20 20 69   exponent */.  i
2cb0: 6e 74 20 6e 73 64 3b 20 20 20 20 20 20 20 20 20  nt nsd;         
2cc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2cd0: 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63 61  ber of significa
2ce0: 6e 74 20 64 69 67 69 74 73 20 72 65 74 75 72 6e  nt digits return
2cf0: 65 64 20 2a 2f 0a 0a 20 20 63 6f 75 6e 74 20 3d  ed */..  count =
2d00: 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a 20 20 62   length = 0;.  b
2d10: 75 66 70 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28  ufpt = 0;.  for(
2d20: 3b 20 28 63 3d 28 2a 66 6d 74 29 29 21 3d 30 3b  ; (c=(*fmt))!=0;
2d30: 20 2b 2b 66 6d 74 29 7b 0a 20 20 20 20 69 66 28   ++fmt){.    if(
2d40: 20 63 21 3d 27 25 27 20 29 7b 0a 20 20 20 20 20   c!='%' ){.     
2d50: 20 69 6e 74 20 61 6d 74 3b 0a 20 20 20 20 20 20   int amt;.      
2d60: 62 75 66 70 74 20 3d 20 28 63 68 61 72 20 2a 29  bufpt = (char *)
2d70: 66 6d 74 3b 0a 20 20 20 20 20 20 61 6d 74 20 3d  fmt;.      amt =
2d80: 20 31 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28   1;.      while(
2d90: 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 27   (c=(*++fmt))!='
2da0: 25 27 20 26 26 20 63 21 3d 30 20 29 20 61 6d 74  %' && c!=0 ) amt
2db0: 2b 2b 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61  ++;.      blob_a
2dc0: 70 70 65 6e 64 28 70 42 6c 6f 62 2c 62 75 66 70  ppend(pBlob,bufp
2dd0: 74 2c 61 6d 74 29 3b 0a 20 20 20 20 20 20 63 6f  t,amt);.      co
2de0: 75 6e 74 20 2b 3d 20 61 6d 74 3b 0a 20 20 20 20  unt += amt;.    
2df0: 20 20 69 66 28 20 63 3d 3d 30 20 29 20 62 72 65    if( c==0 ) bre
2e00: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ak;.    }.    if
2e10: 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d  ( (c=(*++fmt))==
2e20: 30 20 29 7b 0a 20 20 20 20 20 20 65 72 72 6f 72  0 ){.      error
2e30: 66 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  flag = 1;.      
2e40: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 42 6c 6f  blob_append(pBlo
2e50: 62 2c 22 25 22 2c 31 29 3b 0a 20 20 20 20 20 20  b,"%",1);.      
2e60: 63 6f 75 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 62  count++;.      b
2e70: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
2e80: 2f 2a 20 46 69 6e 64 20 6f 75 74 20 77 68 61 74  /* Find out what
2e90: 20 66 6c 61 67 73 20 61 72 65 20 70 72 65 73 65   flags are prese
2ea0: 6e 74 20 2a 2f 0a 20 20 20 20 66 6c 61 67 5f 6c  nt */.    flag_l
2eb0: 65 66 74 6a 75 73 74 69 66 79 20 3d 20 66 6c 61  eftjustify = fla
2ec0: 67 5f 70 6c 75 73 73 69 67 6e 20 3d 20 66 6c 61  g_plussign = fla
2ed0: 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 0a 20 20  g_blanksign =.  
2ee0: 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74     flag_alternat
2ef0: 65 66 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c 74  eform = flag_alt
2f00: 66 6f 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 72  form2 = flag_zer
2f10: 6f 70 61 64 20 3d 20 30 3b 0a 20 20 20 20 64 6f  opad = 0;.    do
2f20: 6e 65 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b 0a  ne = 0;.    do{.
2f30: 20 20 20 20 20 20 73 77 69 74 63 68 28 20 63 20        switch( c 
2f40: 29 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ){.        case 
2f50: 27 2d 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66 74  '-':   flag_left
2f60: 6a 75 73 74 69 66 79 20 3d 20 31 3b 20 20 20 20  justify = 1;    
2f70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2f80: 63 61 73 65 20 27 2b 27 3a 20 20 20 66 6c 61 67  case '+':   flag
2f90: 5f 70 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20 20  _plussign = 1;  
2fa0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2fb0: 20 20 20 20 20 63 61 73 65 20 27 20 27 3a 20 20       case ' ':  
2fc0: 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20   flag_blanksign 
2fd0: 3d 20 31 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = 1;       break
2fe0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  ;.        case '
2ff0: 23 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72  #':   flag_alter
3000: 6e 61 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20 20  nateform = 1;   
3010: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
3020: 61 73 65 20 27 21 27 3a 20 20 20 66 6c 61 67 5f  ase '!':   flag_
3030: 61 6c 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20 20  altform2 = 1;   
3040: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3050: 20 20 20 20 63 61 73 65 20 27 30 27 3a 20 20 20      case '0':   
3060: 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 31  flag_zeropad = 1
3070: 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;         break;
3080: 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74  .        default
3090: 3a 20 20 20 20 64 6f 6e 65 20 3d 20 31 3b 20 20  :    done = 1;  
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
30b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
30c0: 20 20 7d 77 68 69 6c 65 28 20 21 64 6f 6e 65 20    }while( !done 
30d0: 26 26 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21  && (c=(*++fmt))!
30e0: 3d 30 20 29 3b 0a 20 20 20 20 2f 2a 20 47 65 74  =0 );.    /* Get
30f0: 20 74 68 65 20 66 69 65 6c 64 20 77 69 64 74 68   the field width
3100: 20 2a 2f 0a 20 20 20 20 77 69 64 74 68 20 3d 20   */.    width = 
3110: 30 3b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2a  0;.    if( c=='*
3120: 27 20 29 7b 0a 20 20 20 20 20 20 77 69 64 74 68  ' ){.      width
3130: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74   = va_arg(ap,int
3140: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 77 69 64  );.      if( wid
3150: 74 68 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  th<0 ){.        
3160: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
3170: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 77 69   = 1;.        wi
3180: 64 74 68 20 3d 20 2d 77 69 64 74 68 3b 0a 20 20  dth = -width;.  
3190: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 20 3d 20      }.      c = 
31a0: 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 7d 65 6c 73  *++fmt;.    }els
31b0: 65 7b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  e{.      while( 
31c0: 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  c>='0' && c<='9'
31d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 77 69 64 74   ){.        widt
31e0: 68 20 3d 20 77 69 64 74 68 2a 31 30 20 2b 20 63  h = width*10 + c
31f0: 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   - '0';.        
3200: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
3210: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
3220: 28 20 77 69 64 74 68 20 3e 20 65 74 42 55 46 53  ( width > etBUFS
3230: 49 5a 45 2d 31 30 20 29 7b 0a 20 20 20 20 20 20  IZE-10 ){.      
3240: 77 69 64 74 68 20 3d 20 65 74 42 55 46 53 49 5a  width = etBUFSIZ
3250: 45 2d 31 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20  E-10;.    }.    
3260: 2f 2a 20 47 65 74 20 74 68 65 20 70 72 65 63 69  /* Get the preci
3270: 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  sion */.    if( 
3280: 63 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20  c=='.' ){.      
3290: 70 72 65 63 69 73 69 6f 6e 20 3d 20 30 3b 0a 20  precision = 0;. 
32a0: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b       c = *++fmt;
32b0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 2a  .      if( c=='*
32c0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 65  ' ){.        pre
32d0: 63 69 73 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28  cision = va_arg(
32e0: 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ap,int);.       
32f0: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30   if( precision<0
3300: 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d   ) precision = -
3310: 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20  precision;.     
3320: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20     c = *++fmt;. 
3330: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3340: 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30      while( c>='0
3350: 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20  ' && c<='9' ){. 
3360: 20 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69           precisi
3370: 6f 6e 20 3d 20 70 72 65 63 69 73 69 6f 6e 2a 31  on = precision*1
3380: 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 20  0 + c - '0';.   
3390: 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d         c = *++fm
33a0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
33b0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
33c0: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
33d0: 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = -1;.    }.    
33e0: 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6e 76 65  /* Get the conve
33f0: 72 73 69 6f 6e 20 74 79 70 65 20 6d 6f 64 69 66  rsion type modif
3400: 69 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 63  ier */.    if( c
3410: 3d 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 66  =='l' ){.      f
3420: 6c 61 67 5f 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20  lag_long = 1;.  
3430: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
3440: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27        if( c=='l'
3450: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   ){.        flag
3460: 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20  _longlong = 1;. 
3470: 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d         c = *++fm
3480: 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  t;.      }else{.
3490: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e          flag_lon
34a0: 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 20  glong = 0;.     
34b0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
34c0: 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20      flag_long = 
34d0: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
34e0: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  0;.    }.    /* 
34f0: 46 65 74 63 68 20 74 68 65 20 69 6e 66 6f 20 65  Fetch the info e
3500: 6e 74 72 79 20 66 6f 72 20 74 68 65 20 66 69 65  ntry for the fie
3510: 6c 64 20 2a 2f 0a 20 20 20 20 69 6e 66 6f 70 20  ld */.    infop 
3520: 3d 20 30 3b 0a 20 20 20 20 78 74 79 70 65 20 3d  = 0;.    xtype =
3530: 20 65 74 45 52 52 4f 52 3b 0a 20 20 20 20 66 6f   etERROR;.    fo
3540: 72 28 69 64 78 3d 30 3b 20 69 64 78 3c 65 74 4e  r(idx=0; idx<etN
3550: 49 4e 46 4f 3b 20 69 64 78 2b 2b 29 7b 0a 20 20  INFO; idx++){.  
3560: 20 20 20 20 69 66 28 20 63 3d 3d 66 6d 74 69 6e      if( c==fmtin
3570: 66 6f 5b 69 64 78 5d 2e 66 6d 74 74 79 70 65 20  fo[idx].fmttype 
3580: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 66 6f 70  ){.        infop
3590: 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 69 64 78 5d   = &fmtinfo[idx]
35a0: 3b 0a 20 20 20 20 20 20 20 20 78 74 79 70 65 20  ;.        xtype 
35b0: 3d 20 69 6e 66 6f 70 2d 3e 74 79 70 65 3b 0a 20  = infop->type;. 
35c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
35d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
35e0: 7a 45 78 74 72 61 20 3d 20 30 3b 0a 0a 20 20 20  zExtra = 0;..   
35f0: 20 2f 2a 20 4c 69 6d 69 74 20 74 68 65 20 70 72   /* Limit the pr
3600: 65 63 69 73 69 6f 6e 20 74 6f 20 70 72 65 76 65  ecision to preve
3610: 6e 74 20 6f 76 65 72 66 6c 6f 77 69 6e 67 20 62  nt overflowing b
3620: 75 66 5b 5d 20 64 75 72 69 6e 67 20 63 6f 6e 76  uf[] during conv
3630: 65 72 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ersion */.    if
3640: 28 20 70 72 65 63 69 73 69 6f 6e 3e 65 74 42 55  ( precision>etBU
3650: 46 53 49 5a 45 2d 34 30 20 26 26 20 28 69 6e 66  FSIZE-40 && (inf
3660: 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47  op->flags & FLAG
3670: 5f 53 54 52 49 4e 47 29 3d 3d 30 20 29 7b 0a 20  _STRING)==0 ){. 
3680: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
3690: 20 65 74 42 55 46 53 49 5a 45 2d 34 30 3b 0a 20   etBUFSIZE-40;. 
36a0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20     }..    /*.   
36b0: 20 2a 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e   ** At this poin
36c0: 74 2c 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  t, variables are
36d0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
36e0: 66 6f 6c 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a 0a  follows:.    **.
36f0: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c      **   flag_al
3700: 74 65 72 6e 61 74 65 66 6f 72 6d 20 20 20 20 20  ternateform     
3710: 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27       TRUE if a '
3720: 23 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20  #' is present.. 
3730: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74     **   flag_alt
3740: 66 6f 72 6d 32 20 20 20 20 20 20 20 20 20 20 20  form2           
3750: 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27 21      TRUE if a '!
3760: 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20  ' is present..  
3770: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 70 6c 75 73    **   flag_plus
3780: 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20 20  sign            
3790: 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2b 27     TRUE if a '+'
37a0: 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20   is present..   
37b0: 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a   **   flag_leftj
37c0: 75 73 74 69 66 79 20 20 20 20 20 20 20 20 20 20  ustify          
37d0: 20 20 54 52 55 45 20 69 66 20 61 20 27 2d 27 20    TRUE if a '-' 
37e0: 69 73 20 70 72 65 73 65 6e 74 20 6f 72 20 69 66  is present or if
37f0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 20 20 20 20   the.    **     
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3810: 20 20 20 20 20 20 20 20 20 20 66 69 65 6c 64 20            field 
3820: 77 69 64 74 68 20 77 61 73 20 6e 65 67 61 74 69  width was negati
3830: 76 65 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  ve..    **   fla
3840: 67 5f 7a 65 72 6f 70 61 64 20 20 20 20 20 20 20  g_zeropad       
3850: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3860: 20 74 68 65 20 77 69 64 74 68 20 62 65 67 61 6e   the width began
3870: 20 77 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a 20   with 0..    ** 
3880: 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20 20    flag_long     
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
38a0: 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65 72  UE if the letter
38b0: 20 27 6c 27 20 28 65 6c 6c 29 20 70 72 65 66 69   'l' (ell) prefi
38c0: 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  xed.    **      
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38e0: 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e           the con
38f0: 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65  version characte
3900: 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  r..    **   flag
3910: 5f 6c 6f 6e 67 6c 6f 6e 67 20 20 20 20 20 20 20  _longlong       
3920: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20          TRUE if 
3930: 74 68 65 20 6c 65 74 74 65 72 20 27 6c 6c 27 20  the letter 'll' 
3940: 28 65 6c 6c 20 65 6c 6c 29 20 70 72 65 66 69 78  (ell ell) prefix
3950: 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  ed.    **       
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3970: 20 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 76          the conv
3980: 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72  ersion character
3990: 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f  ..    **   flag_
39a0: 62 6c 61 6e 6b 73 69 67 6e 20 20 20 20 20 20 20  blanksign       
39b0: 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20 61         TRUE if a
39c0: 20 27 20 27 20 69 73 20 70 72 65 73 65 6e 74 2e   ' ' is present.
39d0: 0a 20 20 20 20 2a 2a 20 20 20 77 69 64 74 68 20  .    **   width 
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39f0: 20 20 20 20 20 20 54 68 65 20 73 70 65 63 69 66        The specif
3a00: 69 65 64 20 66 69 65 6c 64 20 77 69 64 74 68 2e  ied field width.
3a10: 20 20 54 68 69 73 20 69 73 0a 20 20 20 20 2a 2a    This is.    **
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
3a40: 6c 77 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74 69  lways non-negati
3a50: 76 65 2e 20 20 5a 65 72 6f 20 69 73 20 74 68 65  ve.  Zero is the
3a60: 20 64 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a 2a   default..    **
3a70: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 20 20 20     precision    
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3a90: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 72 65  he specified pre
3aa0: 63 69 73 69 6f 6e 2e 20 20 54 68 65 20 64 65 66  cision.  The def
3ab0: 61 75 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20 20  ault.    **     
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ad0: 20 20 20 20 20 20 20 20 20 20 69 73 20 2d 31 2e            is -1.
3ae0: 0a 20 20 20 20 2a 2a 20 20 20 78 74 79 70 65 20  .    **   xtype 
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 20 20 20 20 20 20 54 68 65 20 63 6c 61 73 73 20        The class 
3b10: 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  of the conversio
3b20: 6e 2e 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66 6f  n..    **   info
3b30: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
3b40: 20 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72 20          Pointer 
3b50: 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  to the appropria
3b60: 74 65 20 69 6e 66 6f 20 73 74 72 75 63 74 2e 0a  te info struct..
3b70: 20 20 20 20 2a 2f 0a 20 20 20 20 73 77 69 74 63      */.    switc
3b80: 68 28 20 78 74 79 70 65 20 29 7b 0a 20 20 20 20  h( xtype ){.    
3b90: 20 20 63 61 73 65 20 65 74 50 4f 49 4e 54 45 52    case etPOINTER
3ba0: 3a 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c  :.        flag_l
3bb0: 6f 6e 67 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66  onglong = sizeof
3bc0: 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28  (char*)==sizeof(
3bd0: 69 36 34 29 3b 0a 20 20 20 20 20 20 20 20 66 6c  i64);.        fl
3be0: 61 67 5f 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66  ag_long = sizeof
3bf0: 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28  (char*)==sizeof(
3c00: 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20  long int);.     
3c10: 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75     /* Fall throu
3c20: 67 68 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 74  gh into the next
3c30: 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 63   case */.      c
3c40: 61 73 65 20 65 74 52 41 44 49 58 3a 0a 20 20 20  ase etRADIX:.   
3c50: 20 20 20 20 20 69 66 28 20 69 6e 66 6f 70 2d 3e       if( infop->
3c60: 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 49 47  flags & FLAG_SIG
3c70: 4e 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  NED ){.         
3c80: 20 69 36 34 20 76 3b 0a 20 20 20 20 20 20 20 20   i64 v;.        
3c90: 20 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c    if( flag_longl
3ca0: 6f 6e 67 20 29 20 20 20 76 20 3d 20 76 61 5f 61  ong )   v = va_a
3cb0: 72 67 28 61 70 2c 69 36 34 29 3b 0a 20 20 20 20  rg(ap,i64);.    
3cc0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 66        else if( f
3cd0: 6c 61 67 5f 6c 6f 6e 67 20 29 20 20 76 20 3d 20  lag_long )  v = 
3ce0: 76 61 5f 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69  va_arg(ap,long i
3cf0: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 65  nt);.          e
3d00: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
3d10: 20 20 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28       v = va_arg(
3d20: 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ap,int);.       
3d30: 20 20 20 69 66 28 20 76 3c 30 20 29 7b 0a 20 20     if( v<0 ){.  
3d40: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61            longva
3d50: 6c 75 65 20 3d 20 2d 76 3b 0a 20 20 20 20 20 20  lue = -v;.      
3d60: 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27        prefix = '
3d70: 2d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  -';.          }e
3d80: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
3d90: 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 3b 0a   longvalue = v;.
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
3db0: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20  flag_plussign ) 
3dc0: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
3dd0: 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20  '+';.           
3de0: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62   else if( flag_b
3df0: 6c 61 6e 6b 73 69 67 6e 20 29 20 20 70 72 65 66  lanksign )  pref
3e00: 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20  ix = ' ';.      
3e10: 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20        else      
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 20   prefix = 0;.   
3e40: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3e50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
3e60: 20 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c    if( flag_longl
3e70: 6f 6e 67 20 29 20 20 20 6c 6f 6e 67 76 61 6c 75  ong )   longvalu
3e80: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 75 36  e = va_arg(ap,u6
3e90: 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c  4);.          el
3ea0: 73 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67  se if( flag_long
3eb0: 20 29 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20   )  longvalue = 
3ec0: 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e  va_arg(ap,unsign
3ed0: 65 64 20 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20  ed long int);.  
3ee0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 20 20 20          else    
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
3f00: 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67  ngvalue = va_arg
3f10: 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  (ap,unsigned int
3f20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 65  );.          pre
3f30: 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  fix = 0;.       
3f40: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c   }.        if( l
3f50: 6f 6e 67 76 61 6c 75 65 3d 3d 30 20 29 20 66 6c  ongvalue==0 ) fl
3f60: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
3f70: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   = 0;.        if
3f80: 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26  ( flag_zeropad &
3f90: 26 20 70 72 65 63 69 73 69 6f 6e 3c 77 69 64 74  & precision<widt
3fa0: 68 2d 28 70 72 65 66 69 78 21 3d 30 29 20 29 7b  h-(prefix!=0) ){
3fb0: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 63 69  .          preci
3fc0: 73 69 6f 6e 20 3d 20 77 69 64 74 68 2d 28 70 72  sion = width-(pr
3fd0: 65 66 69 78 21 3d 30 29 3b 0a 20 20 20 20 20 20  efix!=0);.      
3fe0: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70    }.        bufp
3ff0: 74 20 3d 20 26 62 75 66 5b 65 74 42 55 46 53 49  t = &buf[etBUFSI
4000: 5a 45 2d 31 5d 3b 0a 20 20 20 20 20 20 20 20 7b  ZE-1];.        {
4010: 0a 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73  .          regis
4020: 74 65 72 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ter const char *
4030: 63 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 55 73  cset;      /* Us
4040: 65 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  e registers for 
4050: 73 70 65 65 64 20 2a 2f 0a 20 20 20 20 20 20 20  speed */.       
4060: 20 20 20 72 65 67 69 73 74 65 72 20 69 6e 74 20     register int 
4070: 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20  base;.          
4080: 63 73 65 74 20 3d 20 26 61 44 69 67 69 74 73 5b  cset = &aDigits[
4090: 69 6e 66 6f 70 2d 3e 63 68 61 72 73 65 74 5d 3b  infop->charset];
40a0: 0a 20 20 20 20 20 20 20 20 20 20 62 61 73 65 20  .          base 
40b0: 3d 20 69 6e 66 6f 70 2d 3e 62 61 73 65 3b 0a 20  = infop->base;. 
40c0: 20 20 20 20 20 20 20 20 20 64 6f 7b 20 20 20 20           do{    
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40f0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
4100: 74 20 74 6f 20 61 73 63 69 69 20 2a 2f 0a 20 20  t to ascii */.  
4110: 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75            *(--bu
4120: 66 70 74 29 20 3d 20 63 73 65 74 5b 6c 6f 6e 67  fpt) = cset[long
4130: 76 61 6c 75 65 25 62 61 73 65 5d 3b 0a 20 20 20  value%base];.   
4140: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
4150: 75 65 20 3d 20 6c 6f 6e 67 76 61 6c 75 65 2f 62  ue = longvalue/b
4160: 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ase;.          }
4170: 77 68 69 6c 65 28 20 6c 6f 6e 67 76 61 6c 75 65  while( longvalue
4180: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  >0 );.        }.
4190: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
41a0: 20 26 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d   &buf[etBUFSIZE-
41b0: 31 5d 2d 62 75 66 70 74 3b 0a 20 20 20 20 20 20  1]-bufpt;.      
41c0: 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73    for(idx=precis
41d0: 69 6f 6e 2d 6c 65 6e 67 74 68 3b 20 69 64 78 3e  ion-length; idx>
41e0: 30 3b 20 69 64 78 2d 2d 29 7b 0a 20 20 20 20 20  0; idx--){.     
41f0: 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20       *(--bufpt) 
4200: 3d 20 27 30 27 3b 20 20 20 20 20 20 20 20 20 20  = '0';          
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 20 2f 2a 20 5a 65 72 6f 20 70 61 64 20 2a     /* Zero pad *
4230: 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
4240: 20 20 20 20 69 66 28 20 70 72 65 66 69 78 20 29      if( prefix )
4250: 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 70 72   *(--bufpt) = pr
4260: 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20 20  efix;           
4270: 20 20 20 20 2f 2a 20 41 64 64 20 73 69 67 6e 20      /* Add sign 
4280: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  */.        if( f
4290: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
42a0: 6d 20 26 26 20 69 6e 66 6f 70 2d 3e 70 72 65 66  m && infop->pref
42b0: 69 78 20 29 7b 20 20 20 20 20 20 2f 2a 20 41 64  ix ){      /* Ad
42c0: 64 20 22 30 22 20 6f 72 20 22 30 78 22 20 2a 2f  d "0" or "0x" */
42d0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74  .          const
42e0: 20 63 68 61 72 20 2a 70 72 65 3b 0a 20 20 20 20   char *pre;.    
42f0: 20 20 20 20 20 20 63 68 61 72 20 78 3b 0a 20 20        char x;.  
4300: 20 20 20 20 20 20 20 20 70 72 65 20 3d 20 26 61          pre = &a
4310: 50 72 65 66 69 78 5b 69 6e 66 6f 70 2d 3e 70 72  Prefix[infop->pr
4320: 65 66 69 78 5d 3b 0a 20 20 20 20 20 20 20 20 20  efix];.         
4330: 20 69 66 28 20 2a 62 75 66 70 74 21 3d 70 72 65   if( *bufpt!=pre
4340: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 20  [0] ){.         
4350: 20 20 20 66 6f 72 28 3b 20 28 78 3d 28 2a 70 72     for(; (x=(*pr
4360: 65 29 29 21 3d 30 3b 20 70 72 65 2b 2b 29 20 2a  e))!=0; pre++) *
4370: 28 2d 2d 62 75 66 70 74 29 20 3d 20 78 3b 0a 20  (--bufpt) = x;. 
4380: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
4390: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e     }.        len
43a0: 67 74 68 20 3d 20 26 62 75 66 5b 65 74 42 55 46  gth = &buf[etBUF
43b0: 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74 3b 0a 20  SIZE-1]-bufpt;. 
43c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
43d0: 20 20 20 20 63 61 73 65 20 65 74 46 4c 4f 41 54      case etFLOAT
43e0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 45  :.      case etE
43f0: 58 50 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65  XP:.      case e
4400: 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 20 20 20  tGENERIC:.      
4410: 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 76 61    realvalue = va
4420: 5f 61 72 67 28 61 70 2c 64 6f 75 62 6c 65 29 3b  _arg(ap,double);
4430: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65  .        if( pre
4440: 63 69 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69  cision<0 ) preci
4450: 73 69 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20 20  sion = 6;       
4460: 20 20 2f 2a 20 53 65 74 20 64 65 66 61 75 6c 74    /* Set default
4470: 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20   precision */.  
4480: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
4490: 69 6f 6e 3e 65 74 42 55 46 53 49 5a 45 2f 32 2d  ion>etBUFSIZE/2-
44a0: 31 30 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d  10 ) precision =
44b0: 20 65 74 42 55 46 53 49 5a 45 2f 32 2d 31 30 3b   etBUFSIZE/2-10;
44c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65 61  .        if( rea
44d0: 6c 76 61 6c 75 65 3c 30 2e 30 20 29 7b 0a 20 20  lvalue<0.0 ){.  
44e0: 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75          realvalu
44f0: 65 20 3d 20 2d 72 65 61 6c 76 61 6c 75 65 3b 0a  e = -realvalue;.
4500: 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78            prefix
4510: 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 20   = '-';.        
4520: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4530: 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73 69   if( flag_plussi
4540: 67 6e 20 29 20 20 20 20 20 20 20 20 20 20 70 72  gn )          pr
4550: 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20  efix = '+';.    
4560: 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 66        else if( f
4570: 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 20  lag_blanksign ) 
4580: 20 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b     prefix = ' ';
4590: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
45c0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
45d0: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
45e0: 3d 65 74 47 45 4e 45 52 49 43 20 26 26 20 70 72  =etGENERIC && pr
45f0: 65 63 69 73 69 6f 6e 3e 30 20 29 20 70 72 65 63  ecision>0 ) prec
4600: 69 73 69 6f 6e 2d 2d 3b 0a 23 69 66 20 30 0a 20  ision--;.#if 0. 
4610: 20 20 20 20 20 20 20 2f 2a 20 52 6f 75 6e 64 69         /* Roundi
4620: 6e 67 20 77 6f 72 6b 73 20 6c 69 6b 65 20 42 53  ng works like BS
4630: 44 20 77 68 65 6e 20 74 68 65 20 63 6f 6e 73 74  D when the const
4640: 61 6e 74 20 30 2e 34 39 39 39 20 69 73 20 75 73  ant 0.4999 is us
4650: 65 64 2e 20 20 57 69 65 72 64 21 20 2a 2f 0a 20  ed.  Wierd! */. 
4660: 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70         for(idx=p
4670: 72 65 63 69 73 69 6f 6e 2c 20 72 6f 75 6e 64 65  recision, rounde
4680: 72 3d 30 2e 34 39 39 39 3b 20 69 64 78 3e 30 3b  r=0.4999; idx>0;
4690: 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a   idx--, rounder*
46a0: 3d 30 2e 31 29 3b 0a 23 65 6c 73 65 0a 20 20 20  =0.1);.#else.   
46b0: 20 20 20 20 20 2f 2a 20 49 74 20 6d 61 6b 65 73       /* It makes
46c0: 20 6d 6f 72 65 20 73 65 6e 73 65 20 74 6f 20 75   more sense to u
46d0: 73 65 20 30 2e 35 20 2a 2f 0a 20 20 20 20 20 20  se 0.5 */.      
46e0: 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73    for(idx=precis
46f0: 69 6f 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 35  ion, rounder=0.5
4700: 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c 20  ; idx>0; idx--, 
4710: 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29 3b 0a 23  rounder*=0.1);.#
4720: 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 69 66  endif.        if
4730: 28 20 78 74 79 70 65 3d 3d 65 74 46 4c 4f 41 54  ( xtype==etFLOAT
4740: 20 29 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20   ) realvalue += 
4750: 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20 20  rounder;.       
4760: 20 2f 2a 20 4e 6f 72 6d 61 6c 69 7a 65 20 72 65   /* Normalize re
4770: 61 6c 76 61 6c 75 65 20 74 6f 20 77 69 74 68 69  alvalue to withi
4780: 6e 20 31 30 2e 30 20 3e 20 72 65 61 6c 76 61 6c  n 10.0 > realval
4790: 75 65 20 3e 3d 20 31 2e 30 20 2a 2f 0a 20 20 20  ue >= 1.0 */.   
47a0: 20 20 20 20 20 65 78 70 20 3d 20 30 3b 0a 20 20       exp = 0;.  
47b0: 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76 61        if( realva
47c0: 6c 75 65 3e 30 2e 30 20 29 7b 0a 20 20 20 20 20  lue>0.0 ){.     
47d0: 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c       while( real
47e0: 76 61 6c 75 65 3e 3d 31 65 33 32 20 26 26 20 65  value>=1e32 && e
47f0: 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76  xp<=350 ){ realv
4800: 61 6c 75 65 20 2a 3d 20 31 65 2d 33 32 3b 20 65  alue *= 1e-32; e
4810: 78 70 2b 3d 33 32 3b 20 7d 0a 20 20 20 20 20 20  xp+=32; }.      
4820: 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76      while( realv
4830: 61 6c 75 65 3e 3d 31 65 38 20 26 26 20 65 78 70  alue>=1e8 && exp
4840: 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c  <=350 ){ realval
4850: 75 65 20 2a 3d 20 31 65 2d 38 3b 20 65 78 70 2b  ue *= 1e-8; exp+
4860: 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  =8; }.          
4870: 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65  while( realvalue
4880: 3e 3d 31 30 2e 30 20 26 26 20 65 78 70 3c 3d 33  >=10.0 && exp<=3
4890: 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20  50 ){ realvalue 
48a0: 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d  *= 0.1; exp++; }
48b0: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65  .          while
48c0: 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 65 2d 38  ( realvalue<1e-8
48d0: 20 26 26 20 65 78 70 3e 3d 2d 33 35 30 20 29 7b   && exp>=-350 ){
48e0: 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 65   realvalue *= 1e
48f0: 38 3b 20 65 78 70 2d 3d 38 3b 20 7d 0a 20 20 20  8; exp-=8; }.   
4900: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
4910: 61 6c 76 61 6c 75 65 3c 31 2e 30 20 26 26 20 65  alvalue<1.0 && e
4920: 78 70 3e 3d 2d 33 35 30 20 29 7b 20 72 65 61 6c  xp>=-350 ){ real
4930: 76 61 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20 65  value *= 10.0; e
4940: 78 70 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20 20  xp--; }.        
4950: 20 20 69 66 28 20 65 78 70 3e 33 35 30 20 7c 7c    if( exp>350 ||
4960: 20 65 78 70 3c 2d 33 35 30 20 29 7b 0a 20 20 20   exp<-350 ){.   
4970: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d           bufpt =
4980: 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 20 20 20   "NaN";.        
4990: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b 0a      length = 3;.
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
49b0: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
49c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
49d0: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20   bufpt = buf;.  
49e0: 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20        /*.       
49f0: 20 2a 2a 20 49 66 20 74 68 65 20 66 69 65 6c 64   ** If the field
4a00: 20 74 79 70 65 20 69 73 20 65 74 47 45 4e 45 52   type is etGENER
4a10: 49 43 2c 20 74 68 65 6e 20 63 6f 6e 76 65 72 74  IC, then convert
4a20: 20 74 6f 20 65 69 74 68 65 72 20 65 74 45 58 50   to either etEXP
4a30: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65  .        ** or e
4a40: 74 46 4c 4f 41 54 2c 20 61 73 20 61 70 70 72 6f  tFLOAT, as appro
4a50: 70 72 69 61 74 65 2e 0a 20 20 20 20 20 20 20 20  priate..        
4a60: 2a 2f 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  */.        flag_
4a70: 65 78 70 20 3d 20 78 74 79 70 65 3d 3d 65 74 45  exp = xtype==etE
4a80: 58 50 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  XP;.        if( 
4a90: 78 74 79 70 65 21 3d 65 74 46 4c 4f 41 54 20 29  xtype!=etFLOAT )
4aa0: 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61 6c  {.          real
4ab0: 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72  value += rounder
4ac0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
4ad0: 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 20  realvalue>=10.0 
4ae0: 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20  ){ realvalue *= 
4af0: 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20  0.1; exp++; }.  
4b00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4b10: 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45 4e  if( xtype==etGEN
4b20: 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 20 20  ERIC ){.        
4b30: 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 21 66 6c    flag_rtz = !fl
4b40: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
4b50: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
4b60: 65 78 70 3c 2d 34 20 7c 7c 20 65 78 70 3e 70 72  exp<-4 || exp>pr
4b70: 65 63 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20  ecision ){.     
4b80: 20 20 20 20 20 20 20 78 74 79 70 65 20 3d 20 65         xtype = e
4b90: 74 45 58 50 3b 0a 20 20 20 20 20 20 20 20 20 20  tEXP;.          
4ba0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4bb0: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 70     precision = p
4bc0: 72 65 63 69 73 69 6f 6e 20 2d 20 65 78 70 3b 0a  recision - exp;.
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 78 74 79 70              xtyp
4be0: 65 20 3d 20 65 74 46 4c 4f 41 54 3b 0a 20 20 20  e = etFLOAT;.   
4bf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4c00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4c10: 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 30 3b 0a    flag_rtz = 0;.
4c20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c30: 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 45    if( xtype==etE
4c40: 58 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XP ){.          
4c50: 65 32 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  e2 = 0;.        
4c60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4c70: 20 65 32 20 3d 20 65 78 70 3b 0a 20 20 20 20 20   e2 = exp;.     
4c80: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 73 64     }.        nsd
4c90: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 66 6c   = 0;.        fl
4ca0: 61 67 5f 64 70 20 3d 20 28 70 72 65 63 69 73 69  ag_dp = (precisi
4cb0: 6f 6e 3e 30 29 20 7c 20 66 6c 61 67 5f 61 6c 74  on>0) | flag_alt
4cc0: 65 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66 6c 61  ernateform | fla
4cd0: 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20 20 20  g_altform2;.    
4ce0: 20 20 20 20 2f 2a 20 54 68 65 20 73 69 67 6e 20      /* The sign 
4cf0: 69 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68 65 20  in front of the 
4d00: 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20  number */.      
4d10: 20 20 69 66 28 20 70 72 65 66 69 78 20 29 7b 0a    if( prefix ){.
4d20: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4d30: 74 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b 0a 20  t++) = prefix;. 
4d40: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4d50: 20 2f 2a 20 44 69 67 69 74 73 20 70 72 69 6f 72   /* Digits prior
4d60: 20 74 6f 20 74 68 65 20 64 65 63 69 6d 61 6c 20   to the decimal 
4d70: 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  point */.       
4d80: 20 69 66 28 20 65 32 3c 30 20 29 7b 0a 20 20 20   if( e2<0 ){.   
4d90: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4da0: 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20  ) = '0';.       
4db0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4dc0: 20 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b 20 65    for(; e2>=0; e
4dd0: 32 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20  2--){.          
4de0: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 65    *(bufpt++) = e
4df0: 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61 6c  t_getdigit(&real
4e00: 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20  value,&nsd);.   
4e10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4e20: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68   }.        /* Th
4e30: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4e40: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  */.        if( f
4e50: 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20 20 20  lag_dp ){.      
4e60: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4e70: 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a   '.';.        }.
4e80: 20 20 20 20 20 20 20 20 2f 2a 20 22 30 22 20 64          /* "0" d
4e90: 69 67 69 74 73 20 61 66 74 65 72 20 74 68 65 20  igits after the 
4ea0: 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 62 75  decimal point bu
4eb0: 74 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  t before the fir
4ec0: 73 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 69  st.        ** si
4ed0: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 20  gnificant digit 
4ee0: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f  of the number */
4ef0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 65 32 2b  .        for(e2+
4f00: 2b 3b 20 65 32 3c 30 20 26 26 20 70 72 65 63 69  +; e2<0 && preci
4f10: 73 69 6f 6e 3e 30 3b 20 70 72 65 63 69 73 69 6f  sion>0; precisio
4f20: 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20 20 20 20  n--, e2++){.    
4f30: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
4f40: 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   = '0';.        
4f50: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  }.        /* Sig
4f60: 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20  nificant digits 
4f70: 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d 61  after the decima
4f80: 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20  l point */.     
4f90: 20 20 20 77 68 69 6c 65 28 20 28 70 72 65 63 69     while( (preci
4fa0: 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b 0a 20 20 20  sion--)>0 ){.   
4fb0: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4fc0: 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74 28  ) = et_getdigit(
4fd0: 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64 29  &realvalue,&nsd)
4fe0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4ff0: 20 20 20 20 2f 2a 20 52 65 6d 6f 76 65 20 74 72      /* Remove tr
5000: 61 69 6c 69 6e 67 20 7a 65 72 6f 73 20 61 6e 64  ailing zeros and
5010: 20 74 68 65 20 22 2e 22 20 69 66 20 6e 6f 20 64   the "." if no d
5020: 69 67 69 74 73 20 66 6f 6c 6c 6f 77 20 74 68 65  igits follow the
5030: 20 22 2e 22 20 2a 2f 0a 20 20 20 20 20 20 20 20   "." */.        
5040: 69 66 28 20 66 6c 61 67 5f 72 74 7a 20 26 26 20  if( flag_rtz && 
5050: 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20 20  flag_dp ){.     
5060: 20 20 20 20 20 77 68 69 6c 65 28 20 62 75 66 70       while( bufp
5070: 74 5b 2d 31 5d 3d 3d 27 30 27 20 29 20 2a 28 2d  t[-1]=='0' ) *(-
5080: 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20 20 20  -bufpt) = 0;.   
5090: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 62         assert( b
50a0: 75 66 70 74 3e 62 75 66 20 29 3b 0a 20 20 20 20  ufpt>buf );.    
50b0: 20 20 20 20 20 20 69 66 28 20 62 75 66 70 74 5b        if( bufpt[
50c0: 2d 31 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20  -1]=='.' ){.    
50d0: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
50e0: 5f 61 6c 74 66 6f 72 6d 32 20 29 7b 0a 20 20 20  _altform2 ){.   
50f0: 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66             *(buf
5100: 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20  pt++) = '0';.   
5110: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 28                *(
5130: 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20 20  --bufpt) = 0;.  
5140: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
5150: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5160: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64  }.        /* Add
5170: 20 74 68 65 20 22 65 4e 4e 4e 22 20 73 75 66 66   the "eNNN" suff
5180: 69 78 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ix */.        if
5190: 28 20 66 6c 61 67 5f 65 78 70 20 7c 7c 20 28 78  ( flag_exp || (x
51a0: 74 79 70 65 3d 3d 65 74 45 58 50 20 26 26 20 65  type==etEXP && e
51b0: 78 70 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  xp) ){.         
51c0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 61 44   *(bufpt++) = aD
51d0: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
51e0: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
51f0: 20 69 66 28 20 65 78 70 3c 30 20 29 7b 0a 20 20   if( exp<0 ){.  
5200: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
5210: 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78 70 20  t++) = '-'; exp 
5220: 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20 20 20 20  = -exp;.        
5230: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
5240: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
5250: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
5260: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
5270: 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20 20 20   exp>=100 ){.   
5280: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
5290: 2b 2b 29 20 3d 20 28 65 78 70 2f 31 30 30 29 2b  ++) = (exp/100)+
52a0: 27 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20  '0';            
52b0: 20 20 20 20 2f 2a 20 31 30 30 27 73 20 64 69 67      /* 100's dig
52c0: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
52d0: 20 20 65 78 70 20 25 3d 20 31 30 30 3b 0a 20 20    exp %= 100;.  
52e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
52f0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
5300: 20 65 78 70 2f 31 30 2b 27 30 27 3b 20 20 20 20   exp/10+'0';    
5310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5320: 20 2f 2a 20 31 30 27 73 20 64 69 67 69 74 20 2a   /* 10's digit *
5330: 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  /.          *(bu
5340: 66 70 74 2b 2b 29 20 3d 20 65 78 70 25 31 30 2b  fpt++) = exp%10+
5350: 27 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20  '0';            
5360: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 27 73 20           /* 1's 
5370: 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  digit */.       
5380: 20 7d 0a 20 20 20 20 20 20 20 20 2a 62 75 66 70   }.        *bufp
5390: 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20 20  t = 0;..        
53a0: 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72 74 65 64  /* The converted
53b0: 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 62 75   number is in bu
53c0: 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74 65 72  f[] and zero ter
53d0: 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70 75 74 20  minated. Output 
53e0: 69 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e  it..        ** N
53f0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 6e 75 6d  ote that the num
5400: 62 65 72 20 69 73 20 69 6e 20 74 68 65 20 75 73  ber is in the us
5410: 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74 20 72  ual order, not r
5420: 65 76 65 72 73 65 64 20 61 73 20 77 69 74 68 0a  eversed as with.
5430: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
5440: 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20  er conversions. 
5450: 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  */.        lengt
5460: 68 20 3d 20 62 75 66 70 74 2d 62 75 66 3b 0a 20  h = bufpt-buf;. 
5470: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62         bufpt = b
5480: 75 66 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20  uf;..        /* 
5490: 53 70 65 63 69 61 6c 20 63 61 73 65 3a 20 20 41  Special case:  A
54a0: 64 64 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73  dd leading zeros
54b0: 20 69 66 20 74 68 65 20 66 6c 61 67 5f 7a 65 72   if the flag_zer
54c0: 6f 70 61 64 20 66 6c 61 67 20 69 73 0a 20 20 20  opad flag is.   
54d0: 20 20 20 20 20 2a 2a 20 73 65 74 20 61 6e 64 20       ** set and 
54e0: 77 65 20 61 72 65 20 6e 6f 74 20 6c 65 66 74 20  we are not left 
54f0: 6a 75 73 74 69 66 69 65 64 20 2a 2f 0a 20 20 20  justified */.   
5500: 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a 65       if( flag_ze
5510: 72 6f 70 61 64 20 26 26 20 21 66 6c 61 67 5f 6c  ropad && !flag_l
5520: 65 66 74 6a 75 73 74 69 66 79 20 26 26 20 6c 65  eftjustify && le
5530: 6e 67 74 68 20 3c 20 77 69 64 74 68 29 7b 0a 20  ngth < width){. 
5540: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b 0a           int i;.
5550: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50            int nP
5560: 61 64 20 3d 20 77 69 64 74 68 20 2d 20 6c 65 6e  ad = width - len
5570: 67 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20 66  gth;.          f
5580: 6f 72 28 69 3d 77 69 64 74 68 3b 20 69 3e 3d 6e  or(i=width; i>=n
5590: 50 61 64 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20  Pad; i--){.     
55a0: 20 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d 20         bufpt[i] 
55b0: 3d 20 62 75 66 70 74 5b 69 2d 6e 50 61 64 5d 3b  = bufpt[i-nPad];
55c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
55d0: 20 20 20 20 20 20 20 69 20 3d 20 70 72 65 66 69         i = prefi
55e0: 78 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20  x!=0;.          
55f0: 77 68 69 6c 65 28 20 6e 50 61 64 2d 2d 20 29 20  while( nPad-- ) 
5600: 62 75 66 70 74 5b 69 2b 2b 5d 20 3d 20 27 30 27  bufpt[i++] = '0'
5610: 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67  ;.          leng
5620: 74 68 20 3d 20 77 69 64 74 68 3b 0a 20 20 20 20  th = width;.    
5630: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72      }.        br
5640: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
5650: 65 74 53 49 5a 45 3a 0a 20 20 20 20 20 20 20 20  etSIZE:.        
5660: 2a 28 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 2a  *(va_arg(ap,int*
5670: 29 29 20 3d 20 63 6f 75 6e 74 3b 0a 20 20 20 20  )) = count;.    
5680: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64      length = wid
5690: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  th = 0;.        
56a0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
56b0: 65 20 65 74 50 45 52 43 45 4e 54 3a 0a 20 20 20  e etPERCENT:.   
56c0: 20 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 27 25       buf[0] = '%
56d0: 27 3b 0a 20 20 20 20 20 20 20 20 62 75 66 70 74  ';.        bufpt
56e0: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
56f0: 6c 65 6e 67 74 68 20 3d 20 31 3b 0a 20 20 20 20  length = 1;.    
5700: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
5710: 20 63 61 73 65 20 65 74 43 48 41 52 58 3a 0a 20   case etCHARX:. 
5720: 20 20 20 20 20 20 20 63 20 3d 20 62 75 66 5b 30         c = buf[0
5730: 5d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  ] = va_arg(ap,in
5740: 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
5750: 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a  precision>=0 ){.
5760: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 64            for(id
5770: 78 3d 31 3b 20 69 64 78 3c 70 72 65 63 69 73 69  x=1; idx<precisi
5780: 6f 6e 3b 20 69 64 78 2b 2b 29 20 62 75 66 5b 69  on; idx++) buf[i
5790: 64 78 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20  dx] = c;.       
57a0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63     length = prec
57b0: 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 7d  ision;.        }
57c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
57d0: 6c 65 6e 67 74 68 20 3d 31 3b 0a 20 20 20 20 20  length =1;.     
57e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66     }.        buf
57f0: 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20  pt = buf;.      
5800: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
5810: 61 73 65 20 65 74 50 41 54 48 3a 20 7b 0a 20 20  ase etPATH: {.  
5820: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
5830: 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
5840: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
5850: 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c  orm ? va_arg(ap,
5860: 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20  int) : -1;.     
5870: 20 20 20 63 68 61 72 20 2a 65 20 3d 20 76 61 5f     char *e = va_
5880: 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20  arg(ap,char*);. 
5890: 20 20 20 20 20 20 20 69 66 28 20 65 3d 3d 30 20         if( e==0 
58a0: 29 7b 65 3d 22 22 3b 7d 0a 20 20 20 20 20 20 20  ){e="";}.       
58b0: 20 6c 65 6e 67 74 68 20 3d 20 53 74 72 4e 4c 65   length = StrNLe
58c0: 6e 33 32 28 65 2c 20 6c 69 6d 69 74 29 3b 0a 20  n32(e, limit);. 
58d0: 20 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20         zExtra = 
58e0: 62 75 66 70 74 20 3d 20 66 6f 73 73 69 6c 5f 6d  bufpt = fossil_m
58f0: 61 6c 6c 6f 63 28 6c 65 6e 67 74 68 2b 31 29 3b  alloc(length+1);
5900: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 20 69 3d  .        for( i=
5910: 30 3b 20 69 3c 6c 65 6e 67 74 68 3b 20 69 2b 2b  0; i<length; i++
5920: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
5930: 28 20 65 5b 69 5d 3d 3d 27 5c 5c 27 20 29 7b 0a  ( e[i]=='\\' ){.
5940: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 70              bufp
5950: 74 5b 69 5d 3d 27 2f 27 3b 0a 20 20 20 20 20 20  t[i]='/';.      
5960: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5970: 20 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d 3d         bufpt[i]=
5980: 65 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  e[i];.          
5990: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
59a0: 20 20 20 20 62 75 66 70 74 5b 6c 65 6e 67 74 68      bufpt[length
59b0: 5d 3d 27 5c 30 27 3b 0a 20 20 20 20 20 20 20 20  ]='\0';.        
59c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
59d0: 20 20 20 20 20 63 61 73 65 20 65 74 52 4f 4f 54       case etROOT
59e0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 62 75 66 70  : {.        bufp
59f0: 74 20 3d 20 67 2e 7a 54 6f 70 20 3f 20 67 2e 7a  t = g.zTop ? g.z
5a00: 54 6f 70 20 3a 20 22 22 3b 0a 20 20 20 20 20 20  Top : "";.      
5a10: 20 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29    length = (int)
5a20: 73 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a 20  strlen(bufpt);. 
5a30: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5a40: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
5a50: 20 65 74 53 54 52 49 4e 47 49 44 3a 0a 20 20 20   etSTRINGID:.   
5a60: 20 20 20 63 61 73 65 20 65 74 53 54 52 49 4e 47     case etSTRING
5a70: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 44  :.      case etD
5a80: 59 4e 53 54 52 49 4e 47 3a 20 7b 0a 20 20 20 20  YNSTRING: {.    
5a90: 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20      int limit = 
5aa0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
5ab0: 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 69  rm ? va_arg(ap,i
5ac0: 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20  nt) : -1;.      
5ad0: 20 20 62 75 66 70 74 20 3d 20 76 61 5f 61 72 67    bufpt = va_arg
5ae0: 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20  (ap,char*);.    
5af0: 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30      if( bufpt==0
5b00: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75   ){.          bu
5b10: 66 70 74 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  fpt = "";.      
5b20: 20 20 7d 65 6c 73 65 20 69 66 28 20 78 74 79 70    }else if( xtyp
5b30: 65 3d 3d 65 74 44 59 4e 53 54 52 49 4e 47 20 29  e==etDYNSTRING )
5b40: 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 45 78 74  {.          zExt
5b50: 72 61 20 3d 20 62 75 66 70 74 3b 0a 20 20 20 20  ra = bufpt;.    
5b60: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 78 74      }else if( xt
5b70: 79 70 65 3d 3d 65 74 53 54 52 49 4e 47 49 44 20  ype==etSTRINGID 
5b80: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72 65  ){.          pre
5b90: 63 69 73 69 6f 6e 20 3d 20 68 61 73 68 44 69 67  cision = hashDig
5ba0: 69 74 73 28 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  its(flag_altform
5bb0: 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  2);.        }.  
5bc0: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 53        length = S
5bd0: 74 72 4e 4c 65 6e 33 32 28 62 75 66 70 74 2c 20  trNLen32(bufpt, 
5be0: 6c 69 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20  limit);.        
5bf0: 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30  if( precision>=0
5c00: 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 6c 65   && precision<le
5c10: 6e 67 74 68 20 29 20 6c 65 6e 67 74 68 20 3d 20  ngth ) length = 
5c20: 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20  precision;.     
5c30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5c40: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 42  }.      case etB
5c50: 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  LOB: {.        i
5c60: 6e 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f  nt limit = flag_
5c70: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20  alternateform ? 
5c80: 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 20  va_arg(ap, int) 
5c90: 3a 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 42 6c  : -1;.        Bl
5ca0: 6f 62 20 2a 70 42 6c 6f 62 20 3d 20 76 61 5f 61  ob *pBlob = va_a
5cb0: 72 67 28 61 70 2c 20 42 6c 6f 62 2a 29 3b 0a 20  rg(ap, Blob*);. 
5cc0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62         bufpt = b
5cd0: 6c 6f 62 5f 62 75 66 66 65 72 28 70 42 6c 6f 62  lob_buffer(pBlob
5ce0: 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  );.        lengt
5cf0: 68 20 3d 20 62 6c 6f 62 5f 73 69 7a 65 28 70 42  h = blob_size(pB
5d00: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66  lob);.        if
5d10: 28 20 6c 69 6d 69 74 3e 3d 30 20 26 26 20 6c 69  ( limit>=0 && li
5d20: 6d 69 74 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e  mit<length ) len
5d30: 67 74 68 20 3d 20 6c 69 6d 69 74 3b 0a 20 20 20  gth = limit;.   
5d40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5d50: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65    }.      case e
5d60: 74 42 4c 4f 42 53 51 4c 3a 20 7b 0a 20 20 20 20  tBLOBSQL: {.    
5d70: 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20      int limit = 
5d80: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
5d90: 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 20  rm ? va_arg(ap, 
5da0: 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20  int) : -1;.     
5db0: 20 20 20 42 6c 6f 62 20 2a 70 42 6c 6f 62 20 3d     Blob *pBlob =
5dc0: 20 76 61 5f 61 72 67 28 61 70 2c 20 42 6c 6f 62   va_arg(ap, Blob
5dd0: 2a 29 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72  *);.        char
5de0: 20 2a 7a 4f 72 69 67 20 3d 20 62 6c 6f 62 5f 62   *zOrig = blob_b
5df0: 75 66 66 65 72 28 70 42 6c 6f 62 29 3b 0a 20 20  uffer(pBlob);.  
5e00: 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20        int i, j, 
5e10: 6e 2c 20 63 6e 74 3b 0a 20 20 20 20 20 20 20 20  n, cnt;.        
5e20: 6e 20 3d 20 62 6c 6f 62 5f 73 69 7a 65 28 70 42  n = blob_size(pB
5e30: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66  lob);.        if
5e40: 28 20 6c 69 6d 69 74 3e 3d 30 20 26 26 20 6c 69  ( limit>=0 && li
5e50: 6d 69 74 3c 6e 20 29 20 6e 20 3d 20 6c 69 6d 69  mit<n ) n = limi
5e60: 74 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 63  t;.        for(c
5e70: 6e 74 3d 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  nt=i=0; i<n; i++
5e80: 29 7b 20 69 66 28 20 7a 4f 72 69 67 5b 69 5d 3d  ){ if( zOrig[i]=
5e90: 3d 27 5c 27 27 20 29 20 63 6e 74 2b 2b 3b 20 7d  ='\'' ) cnt++; }
5ea0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 2b 63  .        if( n+c
5eb0: 6e 74 2b 32 20 3e 20 65 74 42 55 46 53 49 5a 45  nt+2 > etBUFSIZE
5ec0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75   ){.          bu
5ed0: 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d 20 66  fpt = zExtra = f
5ee0: 6f 73 73 69 6c 5f 6d 61 6c 6c 6f 63 28 20 6e 20  ossil_malloc( n 
5ef0: 2b 20 63 6e 74 20 2b 20 32 20 29 3b 0a 20 20 20  + cnt + 2 );.   
5f00: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5f10: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
5f20: 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  f;.        }.   
5f30: 20 20 20 20 20 62 75 66 70 74 5b 30 5d 20 3d 20       bufpt[0] = 
5f40: 27 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 66 6f  '\'';.        fo
5f50: 72 28 69 3d 30 2c 20 6a 3d 31 3b 20 69 3c 6e 3b  r(i=0, j=1; i<n;
5f60: 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20   i++, j++){.    
5f70: 20 20 20 20 20 20 69 66 28 20 7a 4f 72 69 67 5b        if( zOrig[
5f80: 69 5d 3d 3d 27 5c 27 27 20 29 7b 20 62 75 66 70  i]=='\'' ){ bufp
5f90: 74 5b 6a 2b 2b 5d 20 3d 20 27 5c 27 27 3b 20 7d  t[j++] = '\''; }
5fa0: 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74  .          bufpt
5fb0: 5b 6a 5d 20 3d 20 7a 4f 72 69 67 5b 69 5d 3b 0a  [j] = zOrig[i];.
5fc0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5fd0: 20 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 27    bufpt[j++] = '
5fe0: 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  \'';.        len
5ff0: 67 74 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20 20  gth = j;.       
6000: 20 61 73 73 65 72 74 28 20 6c 65 6e 67 74 68 3d   assert( length=
6010: 3d 6e 2b 63 6e 74 2b 32 20 29 3b 0a 20 20 20 20  =n+cnt+2 );.    
6020: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
6030: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74   }.      case et
6040: 53 51 4c 45 53 43 41 50 45 3a 0a 20 20 20 20 20  SQLESCAPE:.     
6050: 20 63 61 73 65 20 65 74 53 51 4c 45 53 43 41 50   case etSQLESCAP
6060: 45 32 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65  E2:.      case e
6070: 74 53 51 4c 45 53 43 41 50 45 33 3a 20 7b 0a 20  tSQLESCAPE3: {. 
6080: 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c         int i, j,
6090: 20 6e 2c 20 63 68 2c 20 69 73 6e 75 6c 6c 3b 0a   n, ch, isnull;.
60a0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65 65 64          int need
60b0: 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69  Quote;.        i
60c0: 6e 74 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f  nt limit = flag_
60d0: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20  alternateform ? 
60e0: 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 20 3a  va_arg(ap,int) :
60f0: 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 63 68 61   -1;.        cha
6100: 72 20 71 20 3d 20 28 28 78 74 79 70 65 3d 3d 65  r q = ((xtype==e
6110: 74 53 51 4c 45 53 43 41 50 45 33 29 3f 27 22 27  tSQLESCAPE3)?'"'
6120: 3a 27 5c 27 27 29 3b 20 20 2f 2a 20 51 75 6f 74  :'\'');  /* Quot
6130: 65 20 63 68 61 72 61 63 74 65 72 73 20 2a 2f 0a  e characters */.
6140: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 65 73          char *es
6150: 63 61 72 67 20 3d 20 76 61 5f 61 72 67 28 61 70  carg = va_arg(ap
6160: 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20  ,char*);.       
6170: 20 69 73 6e 75 6c 6c 20 3d 20 65 73 63 61 72 67   isnull = escarg
6180: 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ==0;.        if(
6190: 20 69 73 6e 75 6c 6c 20 29 20 65 73 63 61 72 67   isnull ) escarg
61a0: 20 3d 20 28 78 74 79 70 65 3d 3d 65 74 53 51 4c   = (xtype==etSQL
61b0: 45 53 43 41 50 45 32 20 3f 20 22 4e 55 4c 4c 22  ESCAPE2 ? "NULL"
61c0: 20 3a 20 22 28 4e 55 4c 4c 29 22 29 3b 0a 20 20   : "(NULL)");.  
61d0: 20 20 20 20 20 20 69 66 28 20 6c 69 6d 69 74 3c        if( limit<
61e0: 30 20 29 20 6c 69 6d 69 74 20 3d 20 73 74 72 6c  0 ) limit = strl
61f0: 65 6e 28 65 73 63 61 72 67 29 3b 0a 20 20 20 20  en(escarg);.    
6200: 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 69      for(i=n=0; i
6210: 3c 6c 69 6d 69 74 3b 20 69 2b 2b 29 7b 0a 20 20  <limit; i++){.  
6220: 20 20 20 20 20 20 20 20 69 66 28 20 65 73 63 61          if( esca
6230: 72 67 5b 69 5d 3d 3d 71 20 29 20 20 6e 2b 2b 3b  rg[i]==q )  n++;
6240: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
6250: 20 20 20 6e 65 65 64 51 75 6f 74 65 20 3d 20 21     needQuote = !
6260: 69 73 6e 75 6c 6c 20 26 26 20 78 74 79 70 65 3d  isnull && xtype=
6270: 3d 65 74 53 51 4c 45 53 43 41 50 45 32 3b 0a 20  =etSQLESCAPE2;. 
6280: 20 20 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b 20         n += i + 
6290: 31 20 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32 3b  1 + needQuote*2;
62a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 3e 65  .        if( n>e
62b0: 74 42 55 46 53 49 5a 45 20 29 7b 0a 20 20 20 20  tBUFSIZE ){.    
62c0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 7a 45        bufpt = zE
62d0: 78 74 72 61 20 3d 20 66 6f 73 73 69 6c 5f 6d 61  xtra = fossil_ma
62e0: 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20  lloc( n );.     
62f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6300: 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b      bufpt = buf;
6310: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
6320: 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20     j = 0;.      
6330: 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20    if( needQuote 
6340: 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71  ) bufpt[j++] = q
6350: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  ;.        for(i=
6360: 30 3b 20 69 3c 6c 69 6d 69 74 3b 20 69 2b 2b 29  0; i<limit; i++)
6370: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  {.          bufp
6380: 74 5b 6a 2b 2b 5d 20 3d 20 63 68 20 3d 20 65 73  t[j++] = ch = es
6390: 63 61 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20  carg[i];.       
63a0: 20 20 20 69 66 28 20 63 68 3d 3d 71 20 29 20 62     if( ch==q ) b
63b0: 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68 3b 0a  ufpt[j++] = ch;.
63c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
63d0: 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20    if( needQuote 
63e0: 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71  ) bufpt[j++] = q
63f0: 3b 0a 20 20 20 20 20 20 20 20 62 75 66 70 74 5b  ;.        bufpt[
6400: 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  j] = 0;.        
6410: 6c 65 6e 67 74 68 20 3d 20 6a 3b 0a 20 20 20 20  length = j;.    
6420: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
6430: 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f  n>=0 && precisio
6440: 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74  n<length ) lengt
6450: 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20  h = precision;. 
6460: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
6470: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
6480: 20 65 74 48 54 4d 4c 49 5a 45 3a 20 7b 0a 20 20   etHTMLIZE: {.  
6490: 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20        int limit 
64a0: 3d 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  = flag_alternate
64b0: 66 6f 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70  form ? va_arg(ap
64c0: 2c 69 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20  ,int) : -1;.    
64d0: 20 20 20 20 63 68 61 72 20 2a 7a 4d 65 6d 20 3d      char *zMem =
64e0: 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a   va_arg(ap,char*
64f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  );.        if( z
6500: 4d 65 6d 3d 3d 30 20 29 20 7a 4d 65 6d 20 3d 20  Mem==0 ) zMem = 
6510: 22 22 3b 0a 20 20 20 20 20 20 20 20 7a 45 78 74  "";.        zExt
6520: 72 61 20 3d 20 62 75 66 70 74 20 3d 20 68 74 6d  ra = bufpt = htm
6530: 6c 69 7a 65 28 7a 4d 65 6d 2c 20 6c 69 6d 69 74  lize(zMem, limit
6540: 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  );.        lengt
6550: 68 20 3d 20 73 74 72 6c 65 6e 28 62 75 66 70 74  h = strlen(bufpt
6560: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
6570: 72 65 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70  recision>=0 && p
6580: 72 65 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20  recision<length 
6590: 29 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69  ) length = preci
65a0: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 62 72  sion;.        br
65b0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
65c0: 20 20 20 63 61 73 65 20 65 74 48 54 54 50 49 5a     case etHTTPIZ
65d0: 45 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  E: {.        int
65e0: 20 6c 69 6d 69 74 20 3d 20 66 6c 61 67 5f 61 6c   limit = flag_al
65f0: 74 65 72 6e 61 74 65 66 6f 72 6d 20 3f 20 76 61  ternateform ? va
6600: 5f 61 72 67 28 61 70 2c 69 6e 74 29 20 3a 20 2d  _arg(ap,int) : -
6610: 31 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  1;.        char 
6620: 2a 7a 4d 65 6d 20 3d 20 76 61 5f 61 72 67 28 61  *zMem = va_arg(a
6630: 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  p,char*);.      
6640: 20 20 69 66 28 20 7a 4d 65 6d 3d 3d 30 20 29 20    if( zMem==0 ) 
6650: 7a 4d 65 6d 20 3d 20 22 22 3b 0a 20 20 20 20 20  zMem = "";.     
6660: 20 20 20 7a 45 78 74 72 61 20 3d 20 62 75 66 70     zExtra = bufp
6670: 74 20 3d 20 68 74 74 70 69 7a 65 28 7a 4d 65 6d  t = httpize(zMem
6680: 2c 20 6c 69 6d 69 74 29 3b 0a 20 20 20 20 20 20  , limit);.      
6690: 20 20 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c 65    length = strle
66a0: 6e 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  n(bufpt);.      
66b0: 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e    if( precision>
66c0: 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c  =0 && precision<
66d0: 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68 20  length ) length 
66e0: 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20  = precision;.   
66f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6700: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65    }.      case e
6710: 74 55 52 4c 49 5a 45 3a 20 7b 0a 20 20 20 20 20  tURLIZE: {.     
6720: 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20 66     int limit = f
6730: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
6740: 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  m ? va_arg(ap,in
6750: 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20 20  t) : -1;.       
6760: 20 63 68 61 72 20 2a 7a 4d 65 6d 20 3d 20 76 61   char *zMem = va
6770: 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a  _arg(ap,char*);.
6780: 20 20 20 20 20 20 20 20 69 66 28 20 7a 4d 65 6d          if( zMem
6790: 3d 3d 30 20 29 20 7a 4d 65 6d 20 3d 20 22 22 3b  ==0 ) zMem = "";
67a0: 0a 20 20 20 20 20 20 20 20 7a 45 78 74 72 61 20  .        zExtra 
67b0: 3d 20 62 75 66 70 74 20 3d 20 75 72 6c 69 7a 65  = bufpt = urlize
67c0: 28 7a 4d 65 6d 2c 20 6c 69 6d 69 74 29 3b 0a 20  (zMem, limit);. 
67d0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
67e0: 73 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a 20  strlen(bufpt);. 
67f0: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
6800: 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69  sion>=0 && preci
6810: 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65  sion<length ) le
6820: 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e  ngth = precision
6830: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
6840: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
6850: 61 73 65 20 65 74 46 4f 53 53 49 4c 49 5a 45 3a  ase etFOSSILIZE:
6860: 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c   {.        int l
6870: 69 6d 69 74 20 3d 20 66 6c 61 67 5f 61 6c 74 65  imit = flag_alte
6880: 72 6e 61 74 65 66 6f 72 6d 20 3f 20 76 61 5f 61  rnateform ? va_a
6890: 72 67 28 61 70 2c 69 6e 74 29 20 3a 20 2d 31 3b  rg(ap,int) : -1;
68a0: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a  .        char *z
68b0: 4d 65 6d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  Mem = va_arg(ap,
68c0: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
68d0: 69 66 28 20 7a 4d 65 6d 3d 3d 30 20 29 20 7a 4d  if( zMem==0 ) zM
68e0: 65 6d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20  em = "";.       
68f0: 20 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74 20   zExtra = bufpt 
6900: 3d 20 66 6f 73 73 69 6c 69 7a 65 28 7a 4d 65 6d  = fossilize(zMem
6910: 2c 20 6c 69 6d 69 74 29 3b 0a 20 20 20 20 20 20  , limit);.      
6920: 20 20 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c 65    length = strle
6930: 6e 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  n(bufpt);.      
6940: 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e    if( precision>
6950: 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c  =0 && precision<
6960: 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68 20  length ) length 
6970: 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20  = precision;.   
6980: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6990: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65    }.      case e
69a0: 74 57 49 4b 49 53 54 52 3a 20 7b 0a 20 20 20 20  tWIKISTR: {.    
69b0: 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d 20      int limit = 
69c0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
69d0: 72 6d 20 3f 20 76 61 5f 61 72 67 28 61 70 2c 69  rm ? va_arg(ap,i
69e0: 6e 74 29 20 3a 20 2d 31 3b 0a 20 20 20 20 20 20  nt) : -1;.      
69f0: 20 20 63 68 61 72 20 2a 7a 57 69 6b 69 20 3d 20    char *zWiki = 
6a00: 76 61 5f 61 72 67 28 61 70 2c 20 63 68 61 72 2a  va_arg(ap, char*
6a10: 29 3b 0a 20 20 20 20 20 20 20 20 42 6c 6f 62 20  );.        Blob 
6a20: 77 69 6b 69 3b 0a 20 20 20 20 20 20 20 20 62 6c  wiki;.        bl
6a30: 6f 62 5f 69 6e 69 74 28 26 77 69 6b 69 2c 20 7a  ob_init(&wiki, z
6a40: 57 69 6b 69 2c 20 6c 69 6d 69 74 29 3b 0a 20 20  Wiki, limit);.  
6a50: 20 20 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 65        wiki_conve
6a60: 72 74 28 26 77 69 6b 69 2c 20 70 42 6c 6f 62 2c  rt(&wiki, pBlob,
6a70: 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 5f 66 6c   wiki_convert_fl
6a80: 61 67 73 28 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  ags(flag_altform
6a90: 32 29 29 3b 0a 20 20 20 20 20 20 20 20 62 6c 6f  2));.        blo
6aa0: 62 5f 72 65 73 65 74 28 26 77 69 6b 69 29 3b 0a  b_reset(&wiki);.
6ab0: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
6ac0: 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20   width = 0;.    
6ad0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
6ae0: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74   }.      case et
6af0: 45 52 52 4f 52 3a 0a 20 20 20 20 20 20 20 20 62  ERROR:.        b
6b00: 75 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20  uf[0] = '%';.   
6b10: 20 20 20 20 20 62 75 66 5b 31 5d 20 3d 20 63 3b       buf[1] = c;
6b20: 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72 66 6c  .        errorfl
6b30: 61 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ag = 0;.        
6b40: 69 64 78 20 3d 20 31 2b 28 63 21 3d 30 29 3b 0a  idx = 1+(c!=0);.
6b50: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70          blob_app
6b60: 65 6e 64 28 70 42 6c 6f 62 2c 22 25 22 2c 69 64  end(pBlob,"%",id
6b70: 78 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 75 6e  x);.        coun
6b80: 74 20 2b 3d 20 69 64 78 3b 0a 20 20 20 20 20 20  t += idx;.      
6b90: 20 20 69 66 28 20 63 3d 3d 30 20 29 20 66 6d 74    if( c==0 ) fmt
6ba0: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  --;.        brea
6bb0: 6b 3b 0a 20 20 20 20 7d 2f 2a 20 45 6e 64 20 73  k;.    }/* End s
6bc0: 77 69 74 63 68 20 6f 76 65 72 20 74 68 65 20 66  witch over the f
6bd0: 6f 72 6d 61 74 20 74 79 70 65 20 2a 2f 0a 20 20  ormat type */.  
6be0: 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    /*.    ** The 
6bf0: 74 65 78 74 20 6f 66 20 74 68 65 20 63 6f 6e 76  text of the conv
6c00: 65 72 73 69 6f 6e 20 69 73 20 70 6f 69 6e 74 65  ersion is pointe
6c10: 64 20 74 6f 20 62 79 20 22 62 75 66 70 74 22 20  d to by "bufpt" 
6c20: 61 6e 64 20 69 73 0a 20 20 20 20 2a 2a 20 22 6c  and is.    ** "l
6c30: 65 6e 67 74 68 22 20 63 68 61 72 61 63 74 65 72  ength" character
6c40: 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 66 69 65  s long.  The fie
6c50: 6c 64 20 77 69 64 74 68 20 69 73 20 22 77 69 64  ld width is "wid
6c60: 74 68 22 2e 20 20 44 6f 0a 20 20 20 20 2a 2a 20  th".  Do.    ** 
6c70: 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
6c80: 2a 2f 0a 20 20 20 20 69 66 28 20 21 66 6c 61 67  */.    if( !flag
6c90: 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b 0a  _leftjustify ){.
6ca0: 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69        register i
6cb0: 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20  nt nspace;.     
6cc0: 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74 68 2d   nspace = width-
6cd0: 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 69 66  length;.      if
6ce0: 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a 20 20  ( nspace>0 ){.  
6cf0: 20 20 20 20 20 20 63 6f 75 6e 74 20 2b 3d 20 6e        count += n
6d00: 73 70 61 63 65 3b 0a 20 20 20 20 20 20 20 20 77  space;.        w
6d10: 68 69 6c 65 28 20 6e 73 70 61 63 65 3e 3d 65 74  hile( nspace>=et
6d20: 53 50 41 43 45 53 49 5a 45 20 29 7b 0a 20 20 20  SPACESIZE ){.   
6d30: 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65         blob_appe
6d40: 6e 64 28 70 42 6c 6f 62 2c 73 70 61 63 65 73 2c  nd(pBlob,spaces,
6d50: 65 74 53 50 41 43 45 53 49 5a 45 29 3b 0a 20 20  etSPACESIZE);.  
6d60: 20 20 20 20 20 20 20 20 6e 73 70 61 63 65 20 2d          nspace -
6d70: 3d 20 65 74 53 50 41 43 45 53 49 5a 45 3b 0a 20  = etSPACESIZE;. 
6d80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6d90: 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29 20   if( nspace>0 ) 
6da0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 42 6c 6f  blob_append(pBlo
6db0: 62 2c 73 70 61 63 65 73 2c 6e 73 70 61 63 65 29  b,spaces,nspace)
6dc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
6dd0: 20 20 20 20 69 66 28 20 6c 65 6e 67 74 68 3e 30      if( length>0
6de0: 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61   ){.      blob_a
6df0: 70 70 65 6e 64 28 70 42 6c 6f 62 2c 62 75 66 70  ppend(pBlob,bufp
6e00: 74 2c 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 20  t,length);.     
6e10: 20 63 6f 75 6e 74 20 2b 3d 20 6c 65 6e 67 74 68   count += length
6e20: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
6e30: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
6e40: 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74   ){.      regist
6e50: 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20  er int nspace;. 
6e60: 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69       nspace = wi
6e70: 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20  dth-length;.    
6e80: 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29    if( nspace>0 )
6e90: 7b 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74 20  {.        count 
6ea0: 2b 3d 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20  += nspace;.     
6eb0: 20 20 20 77 68 69 6c 65 28 20 6e 73 70 61 63 65     while( nspace
6ec0: 3e 3d 65 74 53 50 41 43 45 53 49 5a 45 20 29 7b  >=etSPACESIZE ){
6ed0: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f  .          blob_
6ee0: 61 70 70 65 6e 64 28 70 42 6c 6f 62 2c 73 70 61  append(pBlob,spa
6ef0: 63 65 73 2c 65 74 53 50 41 43 45 53 49 5a 45 29  ces,etSPACESIZE)
6f00: 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 73 70 61  ;.          nspa
6f10: 63 65 20 2d 3d 20 65 74 53 50 41 43 45 53 49 5a  ce -= etSPACESIZ
6f20: 45 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  E;.        }.   
6f30: 20 20 20 20 20 69 66 28 20 6e 73 70 61 63 65 3e       if( nspace>
6f40: 30 20 29 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28  0 ) blob_append(
6f50: 70 42 6c 6f 62 2c 73 70 61 63 65 73 2c 6e 73 70  pBlob,spaces,nsp
6f60: 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ace);.      }.  
6f70: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 78 74    }.    if( zExt
6f80: 72 61 20 29 7b 0a 20 20 20 20 20 20 66 6f 73 73  ra ){.      foss
6f90: 69 6c 5f 66 72 65 65 28 7a 45 78 74 72 61 29 3b  il_free(zExtra);
6fa0: 0a 20 20 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e 64  .    }.  }/* End
6fb0: 20 66 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74   for loop over t
6fc0: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
6fd0: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 65 72 72   */.  return err
6fe0: 6f 72 66 6c 61 67 20 3f 20 2d 31 20 3a 20 63 6f  orflag ? -1 : co
6ff0: 75 6e 74 3b 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66  unt;.} /* End of
7000: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
7010: 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d  .** Print into m
7020: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
7030: 72 6f 6d 20 66 6f 73 73 69 6c 5f 6d 61 6c 6c 6f  rom fossil_mallo
7040: 63 28 29 2e 0a 2a 2f 0a 63 68 61 72 20 2a 6d 70  c()..*/.char *mp
7050: 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
7060: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
7070: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
7080: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73   char *z;.  va_s
7090: 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29  tart(ap,zFormat)
70a0: 3b 0a 20 20 7a 20 3d 20 76 6d 70 72 69 6e 74 66  ;.  z = vmprintf
70b0: 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20  (zFormat, ap);. 
70c0: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 72   va_end(ap);.  r
70d0: 65 74 75 72 6e 20 7a 3b 0a 7d 0a 63 68 61 72 20  eturn z;.}.char 
70e0: 2a 76 6d 70 72 69 6e 74 66 28 63 6f 6e 73 74 20  *vmprintf(const 
70f0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76  char *zFormat, v
7100: 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 42 6c  a_list ap){.  Bl
7110: 6f 62 20 62 6c 6f 62 20 3d 20 65 6d 70 74 79 5f  ob blob = empty_
7120: 62 6c 6f 62 3b 0a 20 20 62 6c 6f 62 5f 76 61 70  blob;.  blob_vap
7130: 70 65 6e 64 66 28 26 62 6c 6f 62 2c 20 7a 46 6f  pendf(&blob, zFo
7140: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 62 6c 6f  rmat, ap);.  blo
7150: 62 5f 6d 61 74 65 72 69 61 6c 69 7a 65 28 26 62  b_materialize(&b
7160: 6c 6f 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 62  lob);.  return b
7170: 6c 6f 62 2e 61 44 61 74 61 3b 0a 7d 0a 0a 2f 2a  lob.aData;.}../*
7180: 0a 2a 2a 20 52 65 63 6f 72 64 20 61 6e 20 65 72  .** Record an er
7190: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 20 74  ror message in t
71a0: 68 65 20 67 6c 6f 62 61 6c 20 67 2e 7a 45 72 72  he global g.zErr
71b0: 4d 73 67 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  Msg variable..**
71c0: 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
71d0: 61 6c 72 65 61 64 79 20 61 6e 6f 74 68 65 72 20  already another 
71e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 6f  error message, o
71f0: 6e 6c 79 20 6f 76 65 72 77 72 69 74 65 20 69 74  nly overwrite it
7200: 20 69 66 0a 2a 2a 20 74 68 65 20 63 75 72 72 65   if.** the curre
7210: 6e 74 20 65 72 72 6f 72 20 68 61 73 20 61 20 68  nt error has a h
7220: 69 67 68 65 72 20 70 72 69 6f 72 69 74 79 2e 0a  igher priority..
7230: 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69 6c 5f 65  */.void fossil_e
7240: 72 72 6f 72 28 69 6e 74 20 69 50 72 69 6f 72 69  rror(int iPriori
7250: 74 79 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ty, const char *
7260: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
7270: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69   va_list ap;.  i
7280: 66 28 20 69 50 72 69 6f 72 69 74 79 3c 3d 30 20  f( iPriority<=0 
7290: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  ){.    return;. 
72a0: 20 7d 0a 20 20 69 66 28 20 67 2e 7a 45 72 72 4d   }.  if( g.zErrM
72b0: 73 67 20 29 7b 0a 20 20 20 20 69 66 28 20 67 2e  sg ){.    if( g.
72c0: 69 45 72 72 50 72 69 6f 72 69 74 79 3e 3d 69 50  iErrPriority>=iP
72d0: 72 69 6f 72 69 74 79 20 29 7b 0a 20 20 20 20 20  riority ){.     
72e0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20   return;.    }. 
72f0: 20 20 20 66 72 65 65 28 67 2e 7a 45 72 72 4d 73     free(g.zErrMs
7300: 67 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 73 74 61  g);.  }.  va_sta
7310: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
7320: 0a 20 20 67 2e 7a 45 72 72 4d 73 67 20 3d 20 76  .  g.zErrMsg = v
7330: 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c  mprintf(zFormat,
7340: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
7350: 70 29 3b 0a 20 20 67 2e 69 45 72 72 50 72 69 6f  p);.  g.iErrPrio
7360: 72 69 74 79 20 3d 20 69 50 72 69 6f 72 69 74 79  rity = iPriority
7370: 3b 0a 7d 0a 76 6f 69 64 20 66 6f 73 73 69 6c 5f  ;.}.void fossil_
7380: 65 72 72 6f 72 5f 72 65 73 65 74 28 76 6f 69 64  error_reset(void
7390: 29 7b 0a 20 20 66 72 65 65 28 67 2e 7a 45 72 72  ){.  free(g.zErr
73a0: 4d 73 67 29 3b 0a 20 20 67 2e 7a 45 72 72 4d 73  Msg);.  g.zErrMs
73b0: 67 20 3d 20 30 3b 0a 20 20 67 2e 69 45 72 72 50  g = 0;.  g.iErrP
73c0: 72 69 6f 72 69 74 79 20 3d 20 30 3b 0a 7d 0a 0a  riority = 0;.}..
73d0: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6c  /* True if the l
73e0: 61 73 74 20 63 68 61 72 61 63 74 65 72 20 73 74  ast character st
73f0: 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 63 75  andard output cu
7400: 72 73 6f 72 20 69 73 20 73 65 74 74 69 6e 67 20  rsor is setting 
7410: 61 74 0a 2a 2a 20 74 68 65 20 62 65 67 69 6e 6e  at.** the beginn
7420: 69 6e 67 20 6f 66 20 61 20 62 6c 61 6e 6b 20 6c  ing of a blank l
7430: 69 6e 6b 2e 20 20 46 61 6c 73 65 20 69 66 20 61  ink.  False if a
7440: 20 5c 72 20 68 61 73 20 62 65 65 6e 20 74 6f 20   \r has been to 
7450: 6d 6f 76 65 20 74 68 65 0a 2a 2a 20 63 75 72 73  move the.** curs
7460: 6f 72 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  or to the beginn
7470: 69 6e 67 20 6f 66 20 74 68 65 20 6c 69 6e 65 20  ing of the line 
7480: 6f 72 20 69 66 20 6e 6f 74 20 61 74 20 74 68 65  or if not at the
7490: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
74a0: 20 61 20 6c 69 6e 65 2e 0a 2a 2a 20 77 61 73 20   a line..** was 
74b0: 61 20 5c 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  a \n.*/.static i
74c0: 6e 74 20 73 74 64 6f 75 74 41 74 42 4f 4c 20 3d  nt stdoutAtBOL =
74d0: 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65   1;../*.** Write
74e0: 20 74 6f 20 73 74 61 6e 64 61 72 64 20 6f 75 74   to standard out
74f0: 70 75 74 20 6f 72 20 73 74 61 6e 64 61 72 64 20  put or standard 
7500: 65 72 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 20  error..**.** On 
7510: 77 69 6e 64 6f 77 73 2c 20 74 72 61 6e 73 66 6f  windows, transfo
7520: 72 6d 20 74 68 65 20 6f 75 74 70 75 74 20 69 6e  rm the output in
7530: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  to the current t
7540: 65 72 6d 69 6e 61 6c 20 65 6e 63 6f 64 69 6e 67  erminal encoding
7550: 0a 2a 2a 20 69 66 20 74 68 65 20 6f 75 74 70 75  .** if the outpu
7560: 74 20 69 73 20 67 6f 69 6e 67 20 74 6f 20 74 68  t is going to th
7570: 65 20 73 63 72 65 65 6e 2e 20 20 49 66 20 6f 75  e screen.  If ou
7580: 74 70 75 74 20 69 73 20 72 65 64 69 72 65 63 74  tput is redirect
7590: 65 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 66 69 6c  ed into.** a fil
75a0: 65 2c 20 6e 6f 20 74 72 61 6e 73 6c 61 74 69 6f  e, no translatio
75b0: 6e 20 6f 63 63 75 72 73 2e 20 53 77 69 74 63 68  n occurs. Switch
75c0: 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20   output mode to 
75d0: 62 69 6e 61 72 79 20 74 6f 0a 2a 2a 20 70 72 6f  binary to.** pro
75e0: 70 65 72 6c 79 20 70 72 6f 63 65 73 73 20 6c 69  perly process li
75f0: 6e 65 2d 65 6e 64 69 6e 67 73 2c 20 6d 61 6b 65  ne-endings, make
7600: 20 73 75 72 65 20 74 6f 20 73 77 69 74 63 68 20   sure to switch 
7610: 74 68 65 20 6d 6f 64 65 20 62 61 63 6b 20 74 6f  the mode back to
7620: 0a 2a 2a 20 74 65 78 74 20 77 68 65 6e 20 64 6f  .** text when do
7630: 6e 65 2e 0a 2a 2a 20 4e 6f 20 74 72 61 6e 73 6c  ne..** No transl
7640: 61 74 69 6f 6e 20 65 76 65 72 20 6f 63 63 75 72  ation ever occur
7650: 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a 2f 0a 76 6f  s on unix..*/.vo
7660: 69 64 20 66 6f 73 73 69 6c 5f 70 75 74 73 28 63  id fossil_puts(c
7670: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
7680: 74 20 74 6f 53 74 64 45 72 72 29 7b 0a 20 20 46  t toStdErr){.  F
7690: 49 4c 45 2a 20 6f 75 74 20 3d 20 28 74 6f 53 74  ILE* out = (toSt
76a0: 64 45 72 72 20 3f 20 73 74 64 65 72 72 20 3a 20  dErr ? stderr : 
76b0: 73 74 64 6f 75 74 29 3b 0a 20 20 69 6e 74 20 6e  stdout);.  int n
76c0: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
76d0: 29 3b 0a 20 20 69 66 28 20 6e 3d 3d 30 20 29 20  );.  if( n==0 ) 
76e0: 72 65 74 75 72 6e 3b 0a 20 20 61 73 73 65 72 74  return;.  assert
76f0: 28 20 74 6f 53 74 64 45 72 72 3d 3d 30 20 7c 7c  ( toStdErr==0 ||
7700: 20 74 6f 53 74 64 45 72 72 3d 3d 31 20 29 3b 0a   toStdErr==1 );.
7710: 20 20 69 66 28 20 74 6f 53 74 64 45 72 72 3d 3d    if( toStdErr==
7720: 30 20 29 20 73 74 64 6f 75 74 41 74 42 4f 4c 20  0 ) stdoutAtBOL 
7730: 3d 20 28 7a 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27 29  = (z[n-1]=='\n')
7740: 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  ;.#if defined(_W
7750: 49 4e 33 32 29 0a 20 20 69 66 28 20 66 6f 73 73  IN32).  if( foss
7760: 69 6c 5f 75 74 66 38 5f 74 6f 5f 63 6f 6e 73 6f  il_utf8_to_conso
7770: 6c 65 28 7a 2c 20 6e 2c 20 74 6f 53 74 64 45 72  le(z, n, toStdEr
7780: 72 29 20 3e 3d 20 30 20 29 7b 0a 20 20 20 20 72  r) >= 0 ){.    r
7790: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 66 66 6c  eturn;.  }.  ffl
77a0: 75 73 68 28 6f 75 74 29 3b 0a 20 20 5f 73 65 74  ush(out);.  _set
77b0: 6d 6f 64 65 28 5f 66 69 6c 65 6e 6f 28 6f 75 74  mode(_fileno(out
77c0: 29 2c 20 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 23  ), _O_BINARY);.#
77d0: 65 6e 64 69 66 0a 20 20 66 77 72 69 74 65 28 7a  endif.  fwrite(z
77e0: 2c 20 31 2c 20 6e 2c 20 6f 75 74 29 3b 0a 23 69  , 1, n, out);.#i
77f0: 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  f defined(_WIN32
7800: 29 0a 20 20 66 66 6c 75 73 68 28 6f 75 74 29 3b  ).  fflush(out);
7810: 0a 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c  .  _setmode(_fil
7820: 65 6e 6f 28 6f 75 74 29 2c 20 5f 4f 5f 54 45 58  eno(out), _O_TEX
7830: 54 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a  T);.#endif.}../*
7840: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 73 74  .** Force the st
7850: 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 63 75  andard output cu
7860: 72 73 6f 72 20 74 6f 20 6d 6f 76 65 20 74 6f 20  rsor to move to 
7870: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a  the beginning.**
7880: 20 6f 66 20 61 20 6c 69 6e 65 2c 20 69 66 20 69   of a line, if i
7890: 74 20 69 73 20 6e 6f 74 20 74 68 65 72 65 20 61  t is not there a
78a0: 6c 72 65 61 64 79 2e 0a 2a 2f 0a 69 6e 74 20 66  lready..*/.int f
78b0: 6f 73 73 69 6c 5f 66 6f 72 63 65 5f 6e 65 77 6c  ossil_force_newl
78c0: 69 6e 65 28 76 6f 69 64 29 7b 0a 20 20 69 66 28  ine(void){.  if(
78d0: 20 67 2e 63 67 69 4f 75 74 70 75 74 3d 3d 30 20   g.cgiOutput==0 
78e0: 26 26 20 73 74 64 6f 75 74 41 74 42 4f 4c 3d 3d  && stdoutAtBOL==
78f0: 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f  0 ){.    fossil_
7900: 70 75 74 73 28 22 5c 6e 22 2c 20 30 29 3b 0a 20  puts("\n", 0);. 
7910: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
7920: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
7930: 2f 2a 0a 2a 2a 20 49 6e 64 69 63 61 74 65 20 74  /*.** Indicate t
7940: 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 68  hat the cursor h
7950: 61 73 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20  as moved to the 
7960: 73 74 61 72 74 20 6f 66 20 61 20 6c 69 6e 65 20  start of a line 
7970: 62 79 20 6d 65 61 6e 73 0a 2a 2a 20 6f 74 68 65  by means.** othe
7980: 72 20 74 68 61 6e 20 77 72 69 74 69 6e 67 20 74  r than writing t
7990: 6f 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75  o standard outpu
79a0: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69  t..*/.void fossi
79b0: 6c 5f 6e 65 77 5f 6c 69 6e 65 5f 73 74 61 72 74  l_new_line_start
79c0: 65 64 28 76 6f 69 64 29 7b 0a 20 20 73 74 64 6f  ed(void){.  stdo
79d0: 75 74 41 74 42 4f 4c 20 3d 20 31 3b 0a 7d 0a 0a  utAtBOL = 1;.}..
79e0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 6f 75 74 70  /*.** Write outp
79f0: 75 74 20 66 6f 72 20 75 73 65 72 20 63 6f 6e 73  ut for user cons
7a00: 75 6d 70 74 69 6f 6e 2e 20 20 49 66 20 67 2e 63  umption.  If g.c
7a10: 67 69 4f 75 74 70 75 74 20 69 73 20 65 6e 61 62  giOutput is enab
7a20: 6c 65 64 2c 20 74 68 65 6e 0a 2a 2a 20 73 65 6e  led, then.** sen
7a30: 64 20 74 68 65 20 6f 75 74 70 75 74 20 61 73 20  d the output as 
7a40: 70 61 72 74 20 6f 66 20 74 68 65 20 43 47 49 20  part of the CGI 
7a50: 72 65 70 6c 79 2e 20 20 49 66 20 67 2e 63 67 69  reply.  If g.cgi
7a60: 4f 75 74 70 75 74 20 69 73 20 66 61 6c 73 65 2c  Output is false,
7a70: 0a 2a 2a 20 74 68 65 6e 20 77 72 69 74 65 20 6f  .** then write o
7a80: 6e 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75  n standard outpu
7a90: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69  t..*/.void fossi
7aa0: 6c 5f 70 72 69 6e 74 28 63 6f 6e 73 74 20 63 68  l_print(const ch
7ab0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
7ac0: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
7ad0: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
7ae0: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28 20  zFormat);.  if( 
7af0: 67 2e 63 67 69 4f 75 74 70 75 74 20 29 7b 0a 20  g.cgiOutput ){. 
7b00: 20 20 20 63 67 69 5f 76 70 72 69 6e 74 66 28 7a     cgi_vprintf(z
7b10: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7d  Format, ap);.  }
7b20: 65 6c 73 65 7b 0a 20 20 20 20 42 6c 6f 62 20 62  else{.    Blob b
7b30: 20 3d 20 65 6d 70 74 79 5f 62 6c 6f 62 3b 0a 20   = empty_blob;. 
7b40: 20 20 20 76 78 70 72 69 6e 74 66 28 26 62 2c 20     vxprintf(&b, 
7b50: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
7b60: 20 20 66 6f 73 73 69 6c 5f 70 75 74 73 28 62 6c    fossil_puts(bl
7b70: 6f 62 5f 73 74 72 28 26 62 29 2c 20 30 29 3b 0a  ob_str(&b), 0);.
7b80: 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26      blob_reset(&
7b90: 62 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64  b);.  }.  va_end
7ba0: 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  (ap);.}../*.** P
7bb0: 72 69 6e 74 20 61 20 74 72 61 63 65 20 6d 65 73  rint a trace mes
7bc0: 73 61 67 65 20 6f 6e 20 73 74 61 6e 64 61 72 64  sage on standard
7bd0: 20 65 72 72 6f 72 2e 0a 2a 2f 0a 76 6f 69 64 20   error..*/.void 
7be0: 66 6f 73 73 69 6c 5f 74 72 61 63 65 28 63 6f 6e  fossil_trace(con
7bf0: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
7c00: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73  , ...){.  va_lis
7c10: 74 20 61 70 3b 0a 20 20 42 6c 6f 62 20 62 3b 0a  t ap;.  Blob b;.
7c20: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
7c30: 46 6f 72 6d 61 74 29 3b 0a 20 20 62 20 3d 20 65  Format);.  b = e
7c40: 6d 70 74 79 5f 62 6c 6f 62 3b 0a 20 20 76 78 70  mpty_blob;.  vxp
7c50: 72 69 6e 74 66 28 26 62 2c 20 7a 46 6f 72 6d 61  rintf(&b, zForma
7c60: 74 2c 20 61 70 29 3b 0a 20 20 66 6f 73 73 69 6c  t, ap);.  fossil
7c70: 5f 70 75 74 73 28 62 6c 6f 62 5f 73 74 72 28 26  _puts(blob_str(&
7c80: 62 29 2c 20 31 29 3b 0a 20 20 62 6c 6f 62 5f 72  b), 1);.  blob_r
7c90: 65 73 65 74 28 26 62 29 3b 0a 20 20 76 61 5f 65  eset(&b);.  va_e
7ca0: 6e 64 28 61 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  nd(ap);.}../*.**
7cb0: 20 57 72 69 74 65 20 61 20 6d 65 73 73 61 67 65   Write a message
7cc0: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 20 6c 6f   to the error lo
7cd0: 67 2c 20 69 66 20 74 68 65 20 65 72 72 6f 72 20  g, if the error 
7ce0: 6c 6f 67 20 66 69 6c 65 6e 61 6d 65 20 69 73 0a  log filename is.
7cf0: 2a 2a 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 73  ** defined..*/.s
7d00: 74 61 74 69 63 20 76 6f 69 64 20 66 6f 73 73 69  tatic void fossi
7d10: 6c 5f 65 72 72 6f 72 6c 6f 67 28 63 6f 6e 73 74  l_errorlog(const
7d20: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
7d30: 2e 2e 2e 29 7b 0a 20 20 73 74 72 75 63 74 20 74  ...){.  struct t
7d40: 6d 20 2a 70 4e 6f 77 3b 0a 20 20 74 69 6d 65 5f  m *pNow;.  time_
7d50: 74 20 6e 6f 77 3b 0a 20 20 46 49 4c 45 20 2a 6f  t now;.  FILE *o
7d60: 75 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ut;.  const char
7d70: 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20   *z;.  int i;.  
7d80: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 73 74  va_list ap;.  st
7d90: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
7da0: 2a 63 6f 6e 73 74 20 61 7a 45 6e 76 5b 5d 20 3d  *const azEnv[] =
7db0: 20 7b 20 22 48 54 54 50 5f 48 4f 53 54 22 2c 20   { "HTTP_HOST", 
7dc0: 22 48 54 54 50 5f 55 53 45 52 5f 41 47 45 4e 54  "HTTP_USER_AGENT
7dd0: 22 2c 0a 20 20 20 20 20 20 22 50 41 54 48 5f 49  ",.      "PATH_I
7de0: 4e 46 4f 22 2c 20 22 51 55 45 52 59 5f 53 54 52  NFO", "QUERY_STR
7df0: 49 4e 47 22 2c 20 22 52 45 4d 4f 54 45 5f 41 44  ING", "REMOTE_AD
7e00: 44 52 22 2c 20 22 52 45 51 55 45 53 54 5f 4d 45  DR", "REQUEST_ME
7e10: 54 48 4f 44 22 2c 0a 20 20 20 20 20 20 22 52 45  THOD",.      "RE
7e20: 51 55 45 53 54 5f 55 52 49 22 2c 20 22 53 43 52  QUEST_URI", "SCR
7e30: 49 50 54 5f 4e 41 4d 45 22 20 7d 3b 0a 20 20 69  IPT_NAME" };.  i
7e40: 66 28 20 67 2e 7a 45 72 72 6c 6f 67 3d 3d 30 20  f( g.zErrlog==0 
7e50: 29 20 72 65 74 75 72 6e 3b 0a 20 20 6f 75 74 20  ) return;.  out 
7e60: 3d 20 66 6f 73 73 69 6c 5f 66 6f 70 65 6e 28 67  = fossil_fopen(g
7e70: 2e 7a 45 72 72 6c 6f 67 2c 20 22 61 22 29 3b 0a  .zErrlog, "a");.
7e80: 20 20 69 66 28 20 6f 75 74 3d 3d 30 20 29 20 72    if( out==0 ) r
7e90: 65 74 75 72 6e 3b 0a 20 20 6e 6f 77 20 3d 20 74  eturn;.  now = t
7ea0: 69 6d 65 28 30 29 3b 0a 20 20 70 4e 6f 77 20 3d  ime(0);.  pNow =
7eb0: 20 67 6d 74 69 6d 65 28 26 6e 6f 77 29 3b 0a 20   gmtime(&now);. 
7ec0: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d   fprintf(out, "-
7ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 25 30 34  ------------ %04
7ee0: 64 2d 25 30 32 64 2d 25 30 32 64 20 25 30 32 64  d-%02d-%02d %02d
7ef0: 3a 25 30 32 64 3a 25 30 32 64 20 55 54 43 20 2d  :%02d:%02d UTC -
7f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 2c 0a  -----------\n",.
7f10: 20 20 20 20 20 20 20 20 20 20 70 4e 6f 77 2d 3e            pNow->
7f20: 74 6d 5f 79 65 61 72 2b 31 39 30 30 2c 20 70 4e  tm_year+1900, pN
7f30: 6f 77 2d 3e 74 6d 5f 6d 6f 6e 2b 31 2c 20 70 4e  ow->tm_mon+1, pN
7f40: 6f 77 2d 3e 74 6d 5f 6d 64 61 79 2b 31 2c 0a 20  ow->tm_mday+1,. 
7f50: 20 20 20 20 20 20 20 20 20 70 4e 6f 77 2d 3e 74           pNow->t
7f60: 6d 5f 68 6f 75 72 2c 20 70 4e 6f 77 2d 3e 74 6d  m_hour, pNow->tm
7f70: 5f 6d 69 6e 2c 20 70 4e 6f 77 2d 3e 74 6d 5f 73  _min, pNow->tm_s
7f80: 65 63 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28  ec);.  va_start(
7f90: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
7fa0: 76 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 7a 46  vfprintf(out, zF
7fb0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 66 70  ormat, ap);.  fp
7fc0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
7fd0: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  ;.  va_end(ap);.
7fe0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 63 6f 75    for(i=0; i<cou
7ff0: 6e 74 28 61 7a 45 6e 76 29 3b 20 69 2b 2b 29 7b  nt(azEnv); i++){
8000: 0a 20 20 20 20 63 68 61 72 20 2a 70 3b 0a 20 20  .    char *p;.  
8010: 20 20 69 66 28 20 28 70 20 3d 20 66 6f 73 73 69    if( (p = fossi
8020: 6c 5f 67 65 74 65 6e 76 28 61 7a 45 6e 76 5b 69  l_getenv(azEnv[i
8030: 5d 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ]))!=0 ){.      
8040: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  fprintf(out, "%s
8050: 3d 25 73 5c 6e 22 2c 20 61 7a 45 6e 76 5b 69 5d  =%s\n", azEnv[i]
8060: 2c 20 70 29 3b 0a 20 20 20 20 20 20 66 6f 73 73  , p);.      foss
8070: 69 6c 5f 70 61 74 68 5f 66 72 65 65 28 70 29 3b  il_path_free(p);
8080: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
8090: 7a 20 3d 20 50 28 61 7a 45 6e 76 5b 69 5d 29 29  z = P(azEnv[i]))
80a0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 70 72  !=0 ){.      fpr
80b0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 3d 25 73  intf(out, "%s=%s
80c0: 5c 6e 22 2c 20 61 7a 45 6e 76 5b 69 5d 2c 20 7a  \n", azEnv[i], z
80d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66  );.    }.  }.  f
80e0: 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 7d 0a 0a 2f  close(out);.}../
80f0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
8100: 6e 67 20 76 61 72 69 61 62 6c 65 20 62 65 63 6f  ng variable beco
8110: 6d 65 73 20 74 72 75 65 20 77 68 69 6c 65 20 70  mes true while p
8120: 72 6f 63 65 73 73 69 6e 67 20 61 20 66 61 74 61  rocessing a fata
8130: 6c 20 65 72 72 6f 72 0a 2a 2a 20 6f 72 20 61 20  l error.** or a 
8140: 70 61 6e 69 63 2e 20 20 49 66 20 61 64 64 69 74  panic.  If addit
8150: 69 6f 6e 61 6c 20 22 72 65 63 75 72 73 69 76 65  ional "recursive
8160: 2d 66 61 74 61 6c 22 20 65 72 72 6f 72 73 20 6f  -fatal" errors o
8170: 63 63 75 72 20 77 68 69 6c 65 0a 2a 2a 20 73 68  ccur while.** sh
8180: 75 74 74 69 6e 67 20 64 6f 77 6e 2c 20 74 68 65  utting down, the
8190: 20 72 65 63 75 72 73 69 76 65 20 65 72 72 6f 72   recursive error
81a0: 73 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69  s are silently i
81b0: 67 6e 6f 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  gnored..*/.stati
81c0: 63 20 69 6e 74 20 6d 61 69 6e 49 6e 46 61 74 61  c int mainInFata
81d0: 6c 45 72 72 6f 72 20 3d 20 30 3b 0a 0a 2f 2a 0a  lError = 0;../*.
81e0: 2a 2a 20 50 72 69 6e 74 20 61 6e 20 65 72 72 6f  ** Print an erro
81f0: 72 20 6d 65 73 73 61 67 65 2c 20 72 6f 6c 6c 62  r message, rollb
8200: 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73 65  ack all database
8210: 73 2c 20 61 6e 64 20 71 75 69 74 2e 20 20 54 68  s, and quit.  Th
8220: 65 73 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ese.** routines 
8230: 6e 65 76 65 72 20 72 65 74 75 72 6e 2e 0a 2a 2f  never return..*/
8240: 0a 4e 4f 52 45 54 55 52 4e 20 76 6f 69 64 20 66  .NORETURN void f
8250: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 63 6f 6e 73  ossil_panic(cons
8260: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
8270: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
8280: 20 61 70 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20   ap;.  int rc = 
8290: 31 3b 0a 20 20 63 68 61 72 20 7a 5b 31 30 30 30  1;.  char z[1000
82a0: 5d 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20  ];.  static int 
82b0: 6f 6e 63 65 20 3d 20 30 3b 0a 0a 20 20 69 66 28  once = 0;..  if(
82c0: 20 6f 6e 63 65 20 29 20 65 78 69 74 28 31 29 3b   once ) exit(1);
82d0: 0a 20 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 6d  .  once = 1;.  m
82e0: 61 69 6e 49 6e 46 61 74 61 6c 45 72 72 6f 72 20  ainInFatalError 
82f0: 3d 20 31 3b 0a 20 20 64 62 5f 66 6f 72 63 65 5f  = 1;.  db_force_
8300: 72 6f 6c 6c 62 61 63 6b 28 29 3b 0a 20 20 76 61  rollback();.  va
8310: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
8320: 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  at);.  sqlite3_v
8330: 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
8340: 7a 29 2c 7a 2c 7a 46 6f 72 6d 61 74 2c 20 61 70  z),z,zFormat, ap
8350: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
8360: 0a 20 20 66 6f 73 73 69 6c 5f 65 72 72 6f 72 6c  .  fossil_errorl
8370: 6f 67 28 22 70 61 6e 69 63 3a 20 25 73 22 2c 20  og("panic: %s", 
8380: 7a 29 3b 0a 23 69 66 64 65 66 20 46 4f 53 53 49  z);.#ifdef FOSSI
8390: 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 0a 20 20  L_ENABLE_JSON.  
83a0: 69 66 28 20 67 2e 6a 73 6f 6e 2e 69 73 4a 73 6f  if( g.json.isJso
83b0: 6e 4d 6f 64 65 20 29 7b 0a 20 20 20 20 6a 73 6f  nMode ){.    jso
83c0: 6e 5f 65 72 72 28 20 30 2c 20 7a 2c 20 31 20 29  n_err( 0, z, 1 )
83d0: 3b 0a 20 20 20 20 69 66 28 20 67 2e 69 73 48 54  ;.    if( g.isHT
83e0: 54 50 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  TP ){.      rc =
83f0: 20 30 20 2f 2a 20 61 76 6f 69 64 20 48 54 54 50   0 /* avoid HTTP
8400: 20 35 30 30 20 2a 2f 3b 0a 20 20 20 20 7d 0a 20   500 */;.    }. 
8410: 20 7d 0a 20 20 65 6c 73 65 0a 23 65 6e 64 69 66   }.  else.#endif
8420: 0a 20 20 7b 0a 20 20 20 20 69 66 28 20 67 2e 63  .  {.    if( g.c
8430: 67 69 4f 75 74 70 75 74 20 29 7b 0a 20 20 20 20  giOutput ){.    
8440: 20 20 63 67 69 5f 70 72 69 6e 74 66 28 22 3c 70    cgi_printf("<p
8450: 20 63 6c 61 73 73 3d 5c 22 67 65 6e 65 72 61 6c   class=\"general
8460: 45 72 72 6f 72 5c 22 3e 25 68 3c 2f 70 3e 22 2c  Error\">%h</p>",
8470: 20 7a 29 3b 0a 20 20 20 20 20 20 63 67 69 5f 72   z);.      cgi_r
8480: 65 70 6c 79 28 29 3b 0a 20 20 20 20 7d 65 6c 73  eply();.    }els
8490: 65 20 69 66 28 20 21 67 2e 66 51 75 69 65 74 20  e if( !g.fQuiet 
84a0: 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f  ){.      fossil_
84b0: 66 6f 72 63 65 5f 6e 65 77 6c 69 6e 65 28 29 3b  force_newline();
84c0: 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 75  .      fossil_pu
84d0: 74 73 28 22 46 6f 73 73 69 6c 20 69 6e 74 65 72  ts("Fossil inter
84e0: 6e 61 6c 20 65 72 72 6f 72 3a 20 22 2c 20 31 29  nal error: ", 1)
84f0: 3b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70  ;.      fossil_p
8500: 75 74 73 28 7a 2c 20 31 29 3b 0a 20 20 20 20 20  uts(z, 1);.     
8510: 20 66 6f 73 73 69 6c 5f 70 75 74 73 28 22 5c 6e   fossil_puts("\n
8520: 22 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ", 1);.    }.  }
8530: 0a 20 20 65 78 69 74 28 72 63 29 3b 0a 7d 0a 0a  .  exit(rc);.}..
8540: 4e 4f 52 45 54 55 52 4e 20 76 6f 69 64 20 66 6f  NORETURN void fo
8550: 73 73 69 6c 5f 66 61 74 61 6c 28 63 6f 6e 73 74  ssil_fatal(const
8560: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
8570: 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b  ...){.  char *z;
8580: 0a 20 20 69 6e 74 20 72 63 20 3d 20 31 3b 0a 20  .  int rc = 1;. 
8590: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 6d   va_list ap;.  m
85a0: 61 69 6e 49 6e 46 61 74 61 6c 45 72 72 6f 72 20  ainInFatalError 
85b0: 3d 20 31 3b 0a 20 20 76 61 5f 73 74 61 72 74 28  = 1;.  va_start(
85c0: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
85d0: 7a 20 3d 20 76 6d 70 72 69 6e 74 66 28 7a 46 6f  z = vmprintf(zFo
85e0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
85f0: 65 6e 64 28 61 70 29 3b 0a 20 20 66 6f 73 73 69  end(ap);.  fossi
8600: 6c 5f 65 72 72 6f 72 6c 6f 67 28 22 66 61 74 61  l_errorlog("fata
8610: 6c 3a 20 25 73 22 2c 20 7a 29 3b 0a 23 69 66 64  l: %s", z);.#ifd
8620: 65 66 20 46 4f 53 53 49 4c 5f 45 4e 41 42 4c 45  ef FOSSIL_ENABLE
8630: 5f 4a 53 4f 4e 0a 20 20 69 66 28 20 67 2e 6a 73  _JSON.  if( g.js
8640: 6f 6e 2e 69 73 4a 73 6f 6e 4d 6f 64 65 20 29 7b  on.isJsonMode ){
8650: 0a 20 20 20 20 6a 73 6f 6e 5f 65 72 72 28 20 67  .    json_err( g
8660: 2e 6a 73 6f 6e 2e 72 65 73 75 6c 74 43 6f 64 65  .json.resultCode
8670: 2c 20 7a 2c 20 31 20 29 3b 0a 20 20 20 20 69 66  , z, 1 );.    if
8680: 28 20 67 2e 69 73 48 54 54 50 20 29 7b 0a 20 20  ( g.isHTTP ){.  
8690: 20 20 20 20 72 63 20 3d 20 30 20 2f 2a 20 61 76      rc = 0 /* av
86a0: 6f 69 64 20 48 54 54 50 20 35 30 30 20 2a 2f 3b  oid HTTP 500 */;
86b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 65 6c 73  .    }.  }.  els
86c0: 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20  e.#endif.  {.   
86d0: 20 69 66 28 20 67 2e 63 67 69 4f 75 74 70 75 74   if( g.cgiOutput
86e0: 20 29 7b 0a 20 20 20 20 20 20 67 2e 63 67 69 4f   ){.      g.cgiO
86f0: 75 74 70 75 74 20 3d 20 30 3b 0a 20 20 20 20 20  utput = 0;.     
8700: 20 63 67 69 5f 70 72 69 6e 74 66 28 22 3c 70 20   cgi_printf("<p 
8710: 63 6c 61 73 73 3d 5c 22 67 65 6e 65 72 61 6c 45  class=\"generalE
8720: 72 72 6f 72 5c 22 3e 5c 6e 25 68 5c 6e 3c 2f 70  rror\">\n%h\n</p
8730: 3e 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  >\n", z);.      
8740: 63 67 69 5f 72 65 70 6c 79 28 29 3b 0a 20 20 20  cgi_reply();.   
8750: 20 7d 65 6c 73 65 20 69 66 28 20 21 67 2e 66 51   }else if( !g.fQ
8760: 75 69 65 74 20 29 7b 0a 20 20 20 20 20 20 66 6f  uiet ){.      fo
8770: 73 73 69 6c 5f 66 6f 72 63 65 5f 6e 65 77 6c 69  ssil_force_newli
8780: 6e 65 28 29 3b 0a 20 20 20 20 20 20 66 6f 73 73  ne();.      foss
8790: 69 6c 5f 74 72 61 63 65 28 22 25 73 5c 6e 22 2c  il_trace("%s\n",
87a0: 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
87b0: 20 66 72 65 65 28 7a 29 3b 0a 20 20 64 62 5f 66   free(z);.  db_f
87c0: 6f 72 63 65 5f 72 6f 6c 6c 62 61 63 6b 28 29 3b  orce_rollback();
87d0: 0a 20 20 66 6f 73 73 69 6c 5f 65 78 69 74 28 72  .  fossil_exit(r
87e0: 63 29 3b 0a 7d 0a 0a 2f 2a 20 54 68 69 73 20 72  c);.}../* This r
87f0: 6f 75 74 69 6e 65 20 77 6f 72 6b 73 20 6c 69 6b  outine works lik
8800: 65 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 29  e fossil_fatal()
8810: 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
8820: 63 61 6c 6c 65 64 0a 2a 2a 20 72 65 63 75 72 73  called.** recurs
8830: 69 76 65 6c 79 2c 20 74 68 65 20 72 65 63 75 72  ively, the recur
8840: 73 69 76 65 20 63 61 6c 6c 20 69 73 20 61 20 6e  sive call is a n
8850: 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 55 73 65 20  o-op..**.** Use 
8860: 74 68 69 73 20 69 6e 20 70 6c 61 63 65 73 20 77  this in places w
8870: 68 65 72 65 20 61 6e 20 65 72 72 6f 72 20 6d 69  here an error mi
8880: 67 68 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  ght occur while 
8890: 64 6f 69 6e 67 0a 2a 2a 20 66 61 74 61 6c 20 65  doing.** fatal e
88a0: 72 72 6f 72 20 73 68 75 74 64 6f 77 6e 20 70 72  rror shutdown pr
88b0: 6f 63 65 73 73 69 6e 67 2e 20 20 55 6e 6c 69 6b  ocessing.  Unlik
88c0: 65 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 29  e fossil_panic()
88d0: 20 61 6e 64 0a 2a 2a 20 66 6f 73 73 69 6c 5f 66   and.** fossil_f
88e0: 61 74 61 6c 28 29 20 77 68 69 63 68 20 6e 65 76  atal() which nev
88f0: 65 72 20 72 65 74 75 72 6e 2c 20 74 68 69 73 20  er return, this 
8900: 72 6f 75 74 69 6e 65 20 6d 69 67 68 74 20 72 65  routine might re
8910: 74 75 72 6e 20 69 66 0a 2a 2a 20 74 68 65 20 66  turn if.** the f
8920: 61 74 61 6c 20 65 72 72 6f 72 20 68 61 6e 64 69  atal error handi
8930: 6e 67 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e  ng is already in
8940: 20 70 72 6f 63 65 73 73 2e 20 20 54 68 65 20 63   process.  The c
8950: 61 6c 6c 65 72 20 6d 75 73 74 0a 2a 2a 20 62 65  aller must.** be
8960: 20 70 72 65 70 61 72 65 64 20 66 6f 72 20 74 68   prepared for th
8970: 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65  is routine to re
8980: 74 75 72 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 66 6f  turn..*/.void fo
8990: 73 73 69 6c 5f 66 61 74 61 6c 5f 72 65 63 75 72  ssil_fatal_recur
89a0: 73 69 76 65 28 63 6f 6e 73 74 20 63 68 61 72 20  sive(const char 
89b0: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
89c0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f    char *z;.  va_
89d0: 6c 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 72  list ap;.  int r
89e0: 63 20 3d 20 31 3b 0a 20 20 69 66 28 20 6d 61 69  c = 1;.  if( mai
89f0: 6e 49 6e 46 61 74 61 6c 45 72 72 6f 72 20 29 20  nInFatalError ) 
8a00: 72 65 74 75 72 6e 3b 0a 20 20 6d 61 69 6e 49 6e  return;.  mainIn
8a10: 46 61 74 61 6c 45 72 72 6f 72 20 3d 20 31 3b 0a  FatalError = 1;.
8a20: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
8a30: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 76  Format);.  z = v
8a40: 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c  mprintf(zFormat,
8a50: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
8a60: 70 29 3b 0a 20 20 66 6f 73 73 69 6c 5f 65 72 72  p);.  fossil_err
8a70: 6f 72 6c 6f 67 28 22 66 61 74 61 6c 3a 20 25 73  orlog("fatal: %s
8a80: 22 2c 20 7a 29 3b 0a 23 69 66 64 65 66 20 46 4f  ", z);.#ifdef FO
8a90: 53 53 49 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e  SSIL_ENABLE_JSON
8aa0: 0a 20 20 69 66 28 20 67 2e 6a 73 6f 6e 2e 69 73  .  if( g.json.is
8ab0: 4a 73 6f 6e 4d 6f 64 65 20 29 7b 0a 20 20 20 20  JsonMode ){.    
8ac0: 6a 73 6f 6e 5f 65 72 72 28 20 67 2e 6a 73 6f 6e  json_err( g.json
8ad0: 2e 72 65 73 75 6c 74 43 6f 64 65 2c 20 7a 2c 20  .resultCode, z, 
8ae0: 31 20 29 3b 0a 20 20 20 20 69 66 28 20 67 2e 69  1 );.    if( g.i
8af0: 73 48 54 54 50 20 29 7b 0a 20 20 20 20 20 20 72  sHTTP ){.      r
8b00: 63 20 3d 20 30 20 2f 2a 20 61 76 6f 69 64 20 48  c = 0 /* avoid H
8b10: 54 54 50 20 35 30 30 20 2a 2f 3b 0a 20 20 20 20  TTP 500 */;.    
8b20: 7d 0a 20 20 7d 20 65 6c 73 65 0a 23 65 6e 64 69  }.  } else.#endi
8b30: 66 0a 20 20 7b 0a 20 20 20 20 69 66 28 20 67 2e  f.  {.    if( g.
8b40: 63 67 69 4f 75 74 70 75 74 20 29 7b 0a 20 20 20  cgiOutput ){.   
8b50: 20 20 20 67 2e 63 67 69 4f 75 74 70 75 74 20 3d     g.cgiOutput =
8b60: 20 30 3b 0a 20 20 20 20 20 20 63 67 69 5f 70 72   0;.      cgi_pr
8b70: 69 6e 74 66 28 22 3c 70 20 63 6c 61 73 73 3d 5c  intf("<p class=\
8b80: 22 67 65 6e 65 72 61 6c 45 72 72 6f 72 5c 22 3e  "generalError\">
8b90: 5c 6e 25 68 5c 6e 3c 2f 70 3e 5c 6e 22 2c 20 7a  \n%h\n</p>\n", z
8ba0: 29 3b 0a 20 20 20 20 20 20 63 67 69 5f 72 65 70  );.      cgi_rep
8bb0: 6c 79 28 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ly();.    }else{
8bc0: 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 6f  .      fossil_fo
8bd0: 72 63 65 5f 6e 65 77 6c 69 6e 65 28 29 3b 0a 20  rce_newline();. 
8be0: 20 20 20 20 20 66 6f 73 73 69 6c 5f 74 72 61 63       fossil_trac
8bf0: 65 28 22 25 73 5c 6e 22 2c 20 7a 29 3b 0a 20 20  e("%s\n", z);.  
8c00: 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 6f 72    }.  }.  db_for
8c10: 63 65 5f 72 6f 6c 6c 62 61 63 6b 28 29 3b 0a 20  ce_rollback();. 
8c20: 20 66 6f 73 73 69 6c 5f 65 78 69 74 28 72 63 29   fossil_exit(rc)
8c30: 3b 0a 7d 0a 0a 0a 2f 2a 20 50 72 69 6e 74 20 61  ;.}.../* Print a
8c40: 20 77 61 72 6e 69 6e 67 20 6d 65 73 73 61 67 65   warning message
8c50: 20 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69 6c 5f   */.void fossil_
8c60: 77 61 72 6e 69 6e 67 28 63 6f 6e 73 74 20 63 68  warning(const ch
8c70: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
8c80: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ){.  char *z;.  
8c90: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61  va_list ap;.  va
8ca0: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
8cb0: 61 74 29 3b 0a 20 20 7a 20 3d 20 76 6d 70 72 69  at);.  z = vmpri
8cc0: 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ntf(zFormat, ap)
8cd0: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  ;.  va_end(ap);.
8ce0: 20 20 66 6f 73 73 69 6c 5f 65 72 72 6f 72 6c 6f    fossil_errorlo
8cf0: 67 28 22 77 61 72 6e 69 6e 67 3a 20 25 73 22 2c  g("warning: %s",
8d00: 20 7a 29 3b 0a 23 69 66 64 65 66 20 46 4f 53 53   z);.#ifdef FOSS
8d10: 49 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 0a 20  IL_ENABLE_JSON. 
8d20: 20 69 66 28 67 2e 6a 73 6f 6e 2e 69 73 4a 73 6f   if(g.json.isJso
8d30: 6e 4d 6f 64 65 29 7b 0a 20 20 20 20 6a 73 6f 6e  nMode){.    json
8d40: 5f 77 61 72 6e 28 20 46 53 4c 5f 4a 53 4f 4e 5f  _warn( FSL_JSON_
8d50: 57 5f 55 4e 4b 4e 4f 57 4e 2c 20 7a 20 29 3b 0a  W_UNKNOWN, z );.
8d60: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
8d70: 20 7b 0a 20 20 20 20 69 66 28 20 67 2e 63 67 69   {.    if( g.cgi
8d80: 4f 75 74 70 75 74 20 29 7b 0a 20 20 20 20 20 20  Output ){.      
8d90: 63 67 69 5f 70 72 69 6e 74 66 28 22 3c 70 20 63  cgi_printf("<p c
8da0: 6c 61 73 73 3d 5c 22 67 65 6e 65 72 61 6c 45 72  lass=\"generalEr
8db0: 72 6f 72 5c 22 3e 5c 6e 25 68 5c 6e 3c 2f 70 3e  ror\">\n%h\n</p>
8dc0: 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 65 6c  \n", z);.    }el
8dd0: 73 65 7b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c  se{.      fossil
8de0: 5f 66 6f 72 63 65 5f 6e 65 77 6c 69 6e 65 28 29  _force_newline()
8df0: 3b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 74  ;.      fossil_t
8e00: 72 61 63 65 28 22 25 73 5c 6e 22 2c 20 7a 29 3b  race("%s\n", z);
8e10: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 72 65  .    }.  }.  fre
8e20: 65 28 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  e(z);.}../*.** T
8e30: 75 72 6e 20 6f 66 66 20 61 6e 79 20 4c 46 20 74  urn off any LF t
8e40: 6f 20 43 52 4c 46 20 74 72 61 6e 73 6c 61 74 69  o CRLF translati
8e50: 6f 6e 20 6f 6e 20 74 68 65 20 73 74 72 65 61 6d  on on the stream
8e60: 20 67 69 76 65 6e 20 61 73 20 61 6e 0a 2a 2a 20   given as an.** 
8e70: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20  argument.  This 
8e80: 69 73 20 61 20 6e 6f 2d 6f 70 20 6f 6e 20 75 6e  is a no-op on un
8e90: 69 78 20 62 75 74 20 69 73 20 6e 65 63 65 73 73  ix but is necess
8ea0: 61 72 79 20 6f 6e 20 77 69 6e 64 6f 77 73 2e 0a  ary on windows..
8eb0: 2a 2f 0a 76 6f 69 64 20 66 6f 73 73 69 6c 5f 62  */.void fossil_b
8ec0: 69 6e 61 72 79 5f 6d 6f 64 65 28 46 49 4c 45 20  inary_mode(FILE 
8ed0: 2a 70 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  *p){.#if defined
8ee0: 28 5f 57 49 4e 33 32 29 0a 20 20 5f 73 65 74 6d  (_WIN32).  _setm
8ef0: 6f 64 65 28 5f 66 69 6c 65 6e 6f 28 70 29 2c 20  ode(_fileno(p), 
8f00: 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 23 65 6e 64  _O_BINARY);.#end
8f10: 69 66 0a 23 69 66 64 65 66 20 5f 5f 45 4d 58 5f  if.#ifdef __EMX_
8f20: 5f 20 20 20 20 20 2f 2a 20 4f 53 2f 32 20 2a 2f  _     /* OS/2 */
8f30: 0a 20 20 73 65 74 6d 6f 64 65 28 66 69 6c 65 6e  .  setmode(filen
8f40: 6f 28 70 29 2c 20 4f 5f 42 49 4e 41 52 59 29 3b  o(p), O_BINARY);
8f50: 0a 23 65 6e 64 69 66 0a 7d 0a                    .#endif.}.