Documentation Source Text

Hex Artifact Content
Login

Artifact e6795dc448732d1e4d8c786abab8170944657406c090f061df79cd3204c7577b:


0000: 3c 74 69 74 6c 65 3e 53 51 4c 69 74 65 20 53 65  <title>SQLite Se
0010: 73 73 69 6f 6e 20 4d 6f 64 75 6c 65 20 43 2f 43  ssion Module C/C
0020: 2b 2b 20 49 6e 74 65 72 66 61 63 65 3c 2f 74 69  ++ Interface</ti
0030: 74 6c 65 3e 0a 0a 3c 68 32 3e 53 51 4c 69 74 65  tle>..<h2>SQLite
0040: 20 53 65 73 73 69 6f 6e 20 4d 6f 64 75 6c 65 20   Session Module 
0050: 43 2f 43 2b 2b 20 49 6e 74 65 72 66 61 63 65 3c  C/C++ Interface<
0060: 2f 68 32 3e 0a 0a 3c 74 63 6c 3e 0a 66 69 6c 65  /h2>..<tcl>.file
0070: 20 6d 6b 64 69 72 20 24 7b 44 45 53 54 7d 2f 73   mkdir ${DEST}/s
0080: 65 73 73 69 6f 6e 0a 73 65 74 20 68 64 72 66 69  ession.set hdrfi
0090: 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 53  le [file join $S
00a0: 52 43 20 65 78 74 20 73 65 73 73 69 6f 6e 20 73  RC ext session s
00b0: 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 2e 68 5d  qlite3session.h]
00c0: 0a 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20 24 68  .set in [open $h
00d0: 64 72 66 69 6c 65 5d 0a 0a 73 65 74 20 74 69 74  drfile]..set tit
00e0: 6c 65 20 7b 7d 20 20 20 20 20 20 20 3b 23 20 74  le {}       ;# t
00f0: 69 74 6c 65 20 6f 66 20 61 20 73 65 63 74 69 6f  itle of a sectio
0100: 6e 20 6f 66 20 69 6e 74 65 72 66 61 63 65 20 64  n of interface d
0110: 65 66 69 6e 69 74 69 6f 6e 0a 73 65 74 20 74 79  efinition.set ty
0120: 70 65 20 7b 7d 20 20 20 20 20 20 20 20 3b 23 20  pe {}        ;# 
0130: 6f 6e 65 20 6f 66 3a 20 63 6f 6e 73 74 61 6e 74  one of: constant
0140: 20 64 61 74 61 74 79 70 65 20 66 75 6e 63 74 69   datatype functi
0150: 6f 6e 0a 73 65 74 20 62 6f 64 79 20 7b 7d 20 20  on.set body {}  
0160: 20 20 20 20 20 20 3b 23 20 68 75 6d 61 6e 2d 72        ;# human-r
0170: 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
0180: 69 6f 6e 0a 73 65 74 20 63 6f 64 65 20 7b 7d 20  ion.set code {} 
0190: 20 20 20 20 20 20 20 3b 23 20 43 20 63 6f 64 65         ;# C code
01a0: 20 6f 66 20 74 68 65 20 64 65 66 69 6e 69 74 69   of the definiti
01b0: 6f 6e 0a 73 65 74 20 70 68 61 73 65 20 30 20 20  on.set phase 0  
01c0: 20 20 20 20 20 20 3b 23 20 50 68 61 73 65 20 75        ;# Phase u
01d0: 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
01e0: 72 20 0a 73 65 74 20 63 6f 6e 74 65 6e 74 20 7b  r .set content {
01f0: 7d 20 20 20 20 20 3b 23 20 4c 69 73 74 20 6f 66  }     ;# List of
0200: 20 72 65 63 6f 72 64 73 2c 20 6f 6e 65 20 72 65   records, one re
0210: 63 6f 72 64 20 70 65 72 20 64 65 66 69 6e 69 74  cord per definit
0220: 69 6f 6e 0a 73 65 74 20 64 63 6e 74 20 30 20 20  ion.set dcnt 0  
0230: 20 20 20 20 20 20 20 3b 23 20 4e 75 6d 62 65 72         ;# Number
0240: 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 64   of individual d
0250: 65 63 6c 61 72 61 74 69 6f 6e 73 0a 73 65 74 20  eclarations.set 
0260: 6c 69 6e 65 6e 6f 20 30 20 20 20 20 20 20 20 3b  lineno 0       ;
0270: 23 20 69 6e 70 75 74 20 66 69 6c 65 20 6c 69 6e  # input file lin
0280: 65 20 6e 75 6d 62 65 72 0a 73 65 74 20 69 6e 74  e number.set int
0290: 61 62 20 30 20 20 20 20 20 20 20 20 3b 23 20 49  ab 0        ;# I
02a0: 6e 20 61 20 63 6f 76 65 6e 65 6e 74 73 20 6f 72  n a covenents or
02b0: 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 74 61 62   limitations tab
02c0: 6c 65 0a 73 65 74 20 69 6e 72 6f 77 20 30 20 20  le.set inrow 0  
02d0: 20 20 20 20 20 20 3b 23 20 49 6e 20 61 20 72 6f        ;# In a ro
02e0: 77 20 6f 66 20 61 20 74 61 62 6c 65 0a 73 65 74  w of a table.set
02f0: 20 72 6f 77 62 6f 64 79 20 7b 7d 20 20 20 20 20   rowbody {}     
0300: 3b 23 20 43 6f 6e 74 65 6e 74 20 6f 66 20 61 20  ;# Content of a 
0310: 72 6f 77 0a 73 65 74 20 72 6f 77 74 61 67 20 7b  row.set rowtag {
0320: 7d 20 20 20 20 20 20 3b 23 20 0a 73 65 74 20 65  }      ;# .set e
0330: 78 66 6c 61 67 20 30 20 20 20 20 20 20 20 3b 23  xflag 0       ;#
0340: 20 54 72 75 65 20 66 6f 72 20 65 78 70 65 72 69   True for experi
0350: 6d 65 6e 74 61 6c 20 69 6e 74 65 72 66 61 63 65  mental interface
0360: 73 20 0a 73 65 74 20 6f 62 73 66 6c 61 67 20 30  s .set obsflag 0
0370: 20 20 20 20 20 20 3b 23 20 54 72 75 65 20 66 6f        ;# True fo
0380: 72 20 6f 62 73 6f 6c 65 74 65 20 69 6e 74 65 72  r obsolete inter
0390: 66 61 63 65 73 0a 75 6e 73 65 74 20 2d 6e 6f 63  faces.unset -noc
03a0: 6f 6d 70 6c 61 69 6e 20 6b 65 79 77 6f 72 64 0a  omplain keyword.
03b0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
03c0: 6e 20 73 75 70 70 6f 72 74 65 64 20 20 20 3b 23  n supported   ;#
03d0: 20 30 3a 20 73 74 61 62 6c 65 2e 20 20 31 3a 20   0: stable.  1: 
03e0: 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 20 32 3a  experimental  2:
03f0: 20 64 65 70 72 65 63 61 74 65 64 0a 75 6e 73 65   deprecated.unse
0400: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 66 6d  t -nocomplain fm
0410: 65 74 68 0a 0a 23 20 45 6e 64 20 61 20 74 61 62  eth..# End a tab
0420: 6c 65 20 72 6f 77 20 6f 72 20 74 68 65 20 63 6f  le row or the co
0430: 6d 70 6c 65 74 65 20 74 61 62 6c 65 2e 0a 23 0a  mplete table..#.
0440: 70 72 6f 63 20 65 6e 64 72 6f 77 20 7b 7d 20 7b  proc endrow {} {
0450: 0a 20 20 67 6c 6f 62 61 6c 20 69 6e 72 6f 77 20  .  global inrow 
0460: 62 6f 64 79 20 72 6f 77 62 6f 64 79 20 72 6f 77  body rowbody row
0470: 74 61 67 20 6b 65 79 77 6f 72 64 20 64 66 6c 74  tag keyword dflt
0480: 5f 70 61 72 65 6e 74 0a 20 20 69 66 20 7b 24 69  _parent.  if {$i
0490: 6e 72 6f 77 7d 20 7b 0a 20 20 20 20 73 65 74 20  nrow} {.    set 
04a0: 72 6f 77 62 6f 64 79 20 5b 73 74 72 69 6e 67 20  rowbody [string 
04b0: 74 72 69 6d 20 24 72 6f 77 62 6f 64 79 5d 0a 20  trim $rowbody]. 
04c0: 20 20 20 61 70 70 65 6e 64 20 62 6f 64 79 20 24     append body $
04d0: 72 6f 77 62 6f 64 79 3c 2f 74 64 3e 3c 2f 74 72  rowbody</td></tr
04e0: 3e 5c 6e 0a 20 20 20 20 69 66 20 7b 24 64 66 6c  >\n.    if {$dfl
04f0: 74 5f 70 61 72 65 6e 74 21 3d 22 22 7d 20 7b 0a  t_parent!=""} {.
0500: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 6f 77        append row
0510: 62 6f 64 79 20 22 20 3c 24 64 66 6c 74 5f 70 61  body " <$dflt_pa
0520: 72 65 6e 74 3e 22 0a 20 20 20 20 7d 0a 20 20 20  rent>".    }.   
0530: 20 23 68 64 5f 72 65 71 75 69 72 65 6d 65 6e 74   #hd_requirement
0540: 20 24 72 6f 77 74 61 67 20 24 72 6f 77 62 6f 64   $rowtag $rowbod
0550: 79 0a 20 20 20 20 23 73 65 74 20 6b 65 79 77 6f  y.    #set keywo
0560: 72 64 28 24 72 6f 77 74 61 67 29 20 31 0a 20 20  rd($rowtag) 1.  
0570: 20 20 73 65 74 20 69 6e 72 6f 77 20 30 0a 20 20    set inrow 0.  
0580: 20 20 73 65 74 20 72 6f 77 62 6f 64 79 20 7b 7d    set rowbody {}
0590: 0a 20 20 20 20 73 65 74 20 72 6f 77 74 61 67 20  .    set rowtag 
05a0: 7b 7d 0a 20 20 7d 0a 7d 0a 70 72 6f 63 20 65 6e  {}.  }.}.proc en
05b0: 64 74 61 62 20 7b 7d 20 7b 0a 20 20 67 6c 6f 62  dtab {} {.  glob
05c0: 61 6c 20 69 6e 74 61 62 20 62 6f 64 79 0a 20 20  al intab body.  
05d0: 65 6e 64 72 6f 77 0a 20 20 69 66 20 7b 24 69 6e  endrow.  if {$in
05e0: 74 61 62 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e  tab} {.    appen
05f0: 64 20 62 6f 64 79 20 22 3c 2f 74 61 62 6c 65 3e  d body "</table>
0600: 5c 6e 22 0a 20 20 20 20 73 65 74 20 69 6e 74 61  \n".    set inta
0610: 62 20 30 0a 20 20 7d 0a 7d 0a 70 72 6f 63 20 73  b 0.  }.}.proc s
0620: 74 61 72 74 74 61 62 20 7b 7d 20 7b 0a 20 20 67  tarttab {} {.  g
0630: 6c 6f 62 61 6c 20 69 6e 74 61 62 20 62 6f 64 79  lobal intab body
0640: 0a 20 20 65 6e 64 74 61 62 0a 20 20 61 70 70 65  .  endtab.  appe
0650: 6e 64 20 62 6f 64 79 20 7b 3c 74 61 62 6c 65 20  nd body {<table 
0660: 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
0670: 61 64 64 69 6e 67 3d 22 35 22 20 63 65 6c 6c 73  adding="5" cells
0680: 70 61 63 69 6e 67 3d 22 30 22 3e 7d 0a 20 20 61  pacing="0">}.  a
0690: 70 70 65 6e 64 20 62 6f 64 79 20 5c 6e 0a 20 20  ppend body \n.  
06a0: 73 65 74 20 69 6e 74 61 62 20 31 0a 7d 0a 0a 23  set intab 1.}..#
06b0: 20 52 65 61 64 20 73 71 6c 69 74 65 33 73 65 73   Read sqlite3ses
06c0: 73 69 6f 6e 2e 68 20 6c 69 6e 65 20 62 79 20 6c  sion.h line by l
06d0: 69 6e 65 20 61 6e 64 20 65 78 74 72 61 63 74 20  ine and extract 
06e0: 69 6e 74 65 72 66 61 63 65 20 0a 23 20 64 65 66  interface .# def
06f0: 69 6e 69 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  inition informat
0700: 69 6f 6e 2e 0a 23 0a 77 68 69 6c 65 20 7b 21 5b  ion..#.while {![
0710: 65 6f 66 20 24 69 6e 5d 7d 20 7b 0a 20 20 73 65  eof $in]} {.  se
0720: 74 20 6c 69 6e 65 20 5b 67 65 74 73 20 24 69 6e  t line [gets $in
0730: 5d 0a 20 20 69 6e 63 72 20 6c 69 6e 65 6e 6f 0a  ].  incr lineno.
0740: 20 20 69 66 20 7b 24 70 68 61 73 65 3d 3d 30 7d    if {$phase==0}
0750: 20 7b 0a 20 20 20 20 23 20 4c 6f 6f 6b 69 6e 67   {.    # Looking
0760: 20 66 6f 72 20 74 68 65 20 43 41 50 49 33 52 45   for the CAPI3RE
0770: 46 3a 20 6b 65 79 77 6f 72 64 2e 20 20 54 68 69  F: keyword.  Thi
0780: 73 20 6d 61 72 6b 73 20 74 68 65 20 62 65 67 69  s marks the begi
0790: 6e 6e 69 6e 67 20 6f 66 0a 20 20 20 20 23 20 61  nning of.    # a
07a0: 6e 20 69 6e 74 65 72 66 61 63 65 20 64 65 66 69  n interface defi
07b0: 6e 69 74 69 6f 6e 2e 20 20 57 68 65 6e 20 74 68  nition.  When th
07c0: 65 20 43 41 50 49 33 52 45 46 20 6b 65 79 77 6f  e CAPI3REF keywo
07d0: 72 64 73 20 69 73 20 73 65 65 6e 2c 20 0a 20 20  rds is seen, .  
07e0: 20 20 23 20 72 65 63 6f 72 64 20 74 68 65 20 69    # record the i
07f0: 6e 74 65 72 66 61 63 65 20 74 69 74 6c 65 20 61  nterface title a
0800: 6e 64 20 74 68 65 6e 20 73 77 69 74 63 68 20 74  nd then switch t
0810: 6f 20 22 70 68 61 73 65 20 31 22 2e 0a 20 20 20  o "phase 1"..   
0820: 20 23 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65   #.    if {[rege
0830: 78 70 20 7b 5e 5c 2a 5c 2a 20 43 41 50 49 33 52  xp {^\*\* CAPI3R
0840: 45 46 3a 20 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65  EF: +(.*)} $line
0850: 20 61 6c 6c 20 74 78 5d 7d 20 7b 0a 20 20 20 20   all tx]} {.    
0860: 20 20 73 65 74 20 74 69 74 6c 65 20 24 74 78 0a    set title $tx.
0870: 20 20 20 20 20 20 73 65 74 20 64 66 6c 74 5f 70        set dflt_p
0880: 61 72 65 6e 74 20 7b 7d 0a 20 20 20 20 20 20 72  arent {}.      r
0890: 65 67 65 78 70 20 7b 3c 28 5b 41 48 4c 53 5d 5c  egexp {<([AHLS]\
08a0: 64 5c 64 5c 64 5c 64 5c 64 29 3e 7d 20 24 74 69  d\d\d\d\d)>} $ti
08b0: 74 6c 65 20 61 6c 6c 20 64 66 6c 74 5f 70 61 72  tle all dflt_par
08c0: 65 6e 74 0a 20 20 20 20 20 20 73 65 74 20 74 69  ent.      set ti
08d0: 74 6c 65 5f 6c 69 6e 65 6e 6f 20 24 6c 69 6e 65  tle_lineno $line
08e0: 6e 6f 0a 20 20 20 20 20 20 73 65 74 20 6d 65 74  no.      set met
08f0: 68 6f 64 20 7b 7d 0a 20 20 20 20 20 20 73 65 74  hod {}.      set
0900: 20 64 65 73 74 72 75 63 74 6f 72 20 7b 7d 0a 20   destructor {}. 
0910: 20 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72 75       set constru
0920: 63 74 6f 72 20 7b 7d 0a 20 20 20 20 20 20 73 65  ctor {}.      se
0930: 74 20 70 68 61 73 65 20 31 0a 20 20 20 20 7d 0a  t phase 1.    }.
0940: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 70 68 61    } elseif {$pha
0950: 73 65 3d 3d 31 7d 20 7b 0a 20 20 20 20 69 66 20  se==1} {.    if 
0960: 7b 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24  {[string range $
0970: 6c 69 6e 65 20 30 20 31 5d 3d 3d 22 2a 2a 22 7d  line 0 1]=="**"}
0980: 20 7b 0a 20 20 20 20 20 20 23 20 52 65 63 6f 72   {.      # Recor
0990: 64 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 63  d all lines of c
09a0: 6f 6c 75 6d 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20  olumn following 
09b0: 74 68 65 20 43 41 50 49 33 52 45 46 20 6b 65 79  the CAPI3REF key
09c0: 77 6f 72 64 20 61 73 20 74 68 65 0a 20 20 20 20  word as the.    
09d0: 20 20 23 20 64 65 73 63 72 69 70 74 69 6f 6e 20    # description 
09e0: 6f 66 20 74 68 65 20 69 6e 74 65 72 66 61 63 65  of the interface
09f0: 2e 20 20 45 78 63 65 70 74 2c 20 6c 6f 6f 6b 20  .  Except, look 
0a00: 66 6f 72 20 73 70 65 63 69 61 6c 20 6b 65 79 77  for special keyw
0a10: 6f 72 64 73 0a 20 20 20 20 20 20 23 20 43 41 54  ords.      # CAT
0a20: 45 47 4f 52 59 2c 20 4b 45 59 57 4f 52 44 53 2c  EGORY, KEYWORDS,
0a30: 20 49 4e 56 41 52 49 41 4e 54 53 2c 20 61 6e 64   INVARIANTS, and
0a40: 20 41 53 53 55 4d 50 54 49 4f 4e 53 20 61 6e 64   ASSUMPTIONS and
0a50: 20 70 72 6f 63 65 73 73 20 74 68 65 6d 0a 20 20   process them.  
0a60: 20 20 20 20 23 20 73 65 70 61 72 61 74 65 6c 79      # separately
0a70: 2e 0a 20 20 20 20 20 20 23 0a 20 20 20 20 20 20  ..      #.      
0a80: 73 65 74 20 6c 78 20 5b 73 74 72 69 6e 67 20 72  set lx [string r
0a90: 61 6e 67 65 20 24 6c 69 6e 65 20 33 20 65 6e 64  ange $line 3 end
0aa0: 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67  ].      if {[reg
0ab0: 65 78 70 20 7b 5e 43 41 54 45 47 4f 52 59 3a 20  exp {^CATEGORY: 
0ac0: 2b 28 5b 61 2d 7a 5d 2a 29 7d 20 24 6c 78 20 61  +([a-z]*)} $lx a
0ad0: 6c 6c 20 63 78 5d 7d 20 7b 0a 20 20 20 20 20 20  ll cx]} {.      
0ae0: 20 20 73 65 74 20 74 79 70 65 20 24 63 78 0a 20    set type $cx. 
0af0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
0b00: 72 65 67 65 78 70 20 7b 5e 4b 45 59 57 4f 52 44  regexp {^KEYWORD
0b10: 53 3a 20 2b 28 2e 2a 29 7d 20 24 6c 78 20 61 6c  S: +(.*)} $lx al
0b20: 6c 20 6b 78 5d 7d 20 7b 0a 20 20 20 20 20 20 20  l kx]} {.       
0b30: 20 66 6f 72 65 61 63 68 20 6b 20 24 6b 78 20 7b   foreach k $kx {
0b40: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6b  .          set k
0b50: 65 79 77 6f 72 64 28 24 6b 29 20 31 0a 20 20 20  eyword($k) 1.   
0b60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 65       }.      } e
0b70: 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20 7b  lseif {[regexp {
0b80: 5e 45 58 50 45 52 49 4d 45 4e 54 41 4c 7d 20 24  ^EXPERIMENTAL} $
0b90: 6c 78 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  lx]} {.        s
0ba0: 65 74 20 65 78 66 6c 61 67 20 31 0a 20 20 20 20  et exflag 1.    
0bb0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65 67    } elseif {[reg
0bc0: 65 78 70 20 7b 5e 44 45 50 52 45 43 41 54 45 44  exp {^DEPRECATED
0bd0: 7d 20 24 6c 78 5d 7d 20 7b 0a 20 20 20 20 20 20  } $lx]} {.      
0be0: 20 20 73 65 74 20 6f 62 73 66 6c 61 67 20 31 0a    set obsflag 1.
0bf0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
0c00: 5b 72 65 67 65 78 70 20 7b 5e 43 4f 4e 53 54 52  [regexp {^CONSTR
0c10: 55 43 54 4f 52 3a 20 2b 28 2e 2a 29 7d 20 24 6c  UCTOR: +(.*)} $l
0c20: 78 20 61 6c 6c 20 6e 6d 5d 7d 20 7b 0a 20 20 20  x all nm]} {.   
0c30: 20 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72 75       set constru
0c40: 63 74 6f 72 20 24 6e 6d 0a 20 20 20 20 20 20 7d  ctor $nm.      }
0c50: 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70   elseif {[regexp
0c60: 20 7b 5e 4d 45 54 48 4f 44 3a 20 2b 28 2e 2a 29   {^METHOD: +(.*)
0c70: 7d 20 24 6c 78 20 61 6c 6c 20 6e 6d 5d 7d 20 7b  } $lx all nm]} {
0c80: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 74  .        set met
0c90: 68 6f 64 20 24 6e 6d 0a 20 20 20 20 20 20 7d 20  hod $nm.      } 
0ca0: 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20  elseif {[regexp 
0cb0: 7b 5e 44 45 53 54 52 55 43 54 4f 52 3a 20 2b 28  {^DESTRUCTOR: +(
0cc0: 2e 2a 29 7d 20 24 6c 78 20 61 6c 6c 20 6e 6d 5d  .*)} $lx all nm]
0cd0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
0ce0: 64 65 73 74 72 75 63 74 6f 72 20 24 6e 6d 0a 20  destructor $nm. 
0cf0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
0d00: 20 20 20 20 20 20 61 70 70 65 6e 64 20 62 6f 64        append bod
0d10: 79 20 24 6c 78 5c 6e 0a 20 20 20 20 20 20 7d 0a  y $lx\n.      }.
0d20: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73      } elseif {[s
0d30: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e  tring range $lin
0d40: 65 20 30 20 31 5d 3d 3d 22 2a 2f 22 7d 20 7b 0a  e 0 1]=="*/"} {.
0d50: 20 20 20 20 20 20 23 20 57 68 65 6e 20 77 65 20        # When we 
0d60: 72 65 61 63 68 20 74 68 65 20 65 6e 64 20 6f 66  reach the end of
0d70: 20 74 68 65 20 62 6c 6f 63 6b 20 63 6f 6d 6d 65   the block comme
0d80: 6e 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 65  nt that containe
0d90: 64 20 74 68 65 0a 20 20 20 20 20 20 23 20 43 41  d the.      # CA
0da0: 50 49 33 52 45 46 20 6b 65 79 77 6f 72 64 2c 20  PI3REF keyword, 
0db0: 74 68 61 74 20 65 6e 64 73 20 74 68 65 20 64 65  that ends the de
0dc0: 73 63 72 69 70 74 69 6f 6e 2e 20 20 53 77 69 74  scription.  Swit
0dd0: 63 68 20 74 6f 20 70 68 61 73 65 20 33 0a 20 20  ch to phase 3.  
0de0: 20 20 20 20 23 20 69 6e 20 6f 72 64 65 72 20 74      # in order t
0df0: 6f 20 62 65 67 69 6e 20 70 69 63 6b 69 6e 67 20  o begin picking 
0e00: 75 70 20 74 68 65 20 69 6e 74 65 72 66 61 63 65  up the interface
0e10: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 20 20 20   definition..   
0e20: 20 20 20 23 0a 20 20 20 20 20 20 73 65 74 20 70     #.      set p
0e30: 68 61 73 65 20 32 0a 20 20 20 20 7d 0a 20 20 7d  hase 2.    }.  }
0e40: 20 65 6c 73 65 69 66 20 7b 24 70 68 61 73 65 3d   elseif {$phase=
0e50: 3d 32 7d 20 7b 0a 20 20 20 20 23 20 52 65 61 64  =2} {.    # Read
0e60: 69 6e 67 20 69 6e 20 61 6e 20 69 6e 74 65 72 66  ing in an interf
0e70: 61 63 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20  ace definition. 
0e80: 20 53 74 6f 70 20 72 65 61 64 69 6e 67 20 61 74   Stop reading at
0e90: 20 74 68 65 20 66 69 72 73 74 20 62 6c 61 6e 6b   the first blank
0ea0: 0a 20 20 20 20 23 20 6c 69 6e 65 2e 0a 20 20 20  .    # line..   
0eb0: 20 23 0a 20 20 20 20 23 20 49 67 6e 6f 72 65 20   #.    # Ignore 
0ec0: 41 50 49 20 74 61 67 73 2e 0a 20 20 20 20 72 65  API tags..    re
0ed0: 67 73 75 62 20 7b 5e 53 51 4c 49 54 45 5f 44 45  gsub {^SQLITE_DE
0ee0: 50 52 45 43 41 54 45 44 20 7d 20 24 6c 69 6e 65  PRECATED } $line
0ef0: 20 7b 7d 20 6c 69 6e 65 0a 20 20 20 20 72 65 67   {} line.    reg
0f00: 73 75 62 20 7b 5e 53 51 4c 49 54 45 5f 45 58 50  sub {^SQLITE_EXP
0f10: 45 52 49 4d 45 4e 54 41 4c 20 7d 20 24 6c 69 6e  ERIMENTAL } $lin
0f20: 65 20 7b 7d 20 6c 69 6e 65 0a 20 20 20 20 72 65  e {} line.    re
0f30: 67 73 75 62 20 7b 5e 53 51 4c 49 54 45 5f 41 50  gsub {^SQLITE_AP
0f40: 49 20 7d 20 24 6c 69 6e 65 20 7b 7d 20 6c 69 6e  I } $line {} lin
0f50: 65 0a 20 20 20 20 69 66 20 7b 24 6c 69 6e 65 3d  e.    if {$line=
0f60: 3d 22 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  =""} {.      set
0f70: 20 72 65 71 74 61 67 20 7b 7d 0a 20 20 20 20 20   reqtag {}.     
0f80: 20 73 65 74 20 72 65 71 64 66 20 7b 7d 0a 20 20   set reqdf {}.  
0f90: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
0fa0: 7b 5c 7b 28 5b 41 48 4c 53 5d 5c 64 5c 64 5c 64  {\{([AHLS]\d\d\d
0fb0: 5c 64 5c 64 29 5c 7d 7d 20 24 74 69 74 6c 65 20  \d\d)\}} $title 
0fc0: 61 6c 6c 20 72 65 71 74 61 67 5d 7d 20 7b 0a 20  all reqtag]} {. 
0fd0: 20 20 20 20 20 20 20 72 65 67 73 75 62 20 7b 20         regsub { 
0fe0: 2a 5c 7b 5b 41 48 4c 53 5d 5c 64 5c 64 5c 64 5c  *\{[AHLS]\d\d\d\
0ff0: 64 5c 64 5c 7d 7d 20 24 74 69 74 6c 65 20 7b 7d  d\d\}} $title {}
1000: 20 74 69 74 6c 65 0a 20 20 20 20 20 20 20 20 77   title.        w
1010: 68 69 6c 65 20 7b 5b 72 65 67 65 78 70 20 7b 3c  hile {[regexp {<
1020: 28 5b 41 48 4c 53 5d 5c 64 5c 64 5c 64 5c 64 5c  ([AHLS]\d\d\d\d\
1030: 64 29 3e 7d 20 24 74 69 74 6c 65 20 61 6c 6c 20  d)>} $title all 
1040: 64 66 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  df]} {.         
1050: 20 61 70 70 65 6e 64 20 72 65 71 64 66 20 3c 24   append reqdf <$
1060: 64 66 3e 0a 20 20 20 20 20 20 20 20 20 20 72 65  df>.          re
1070: 67 73 75 62 20 7b 20 2a 3c 5b 41 48 4c 53 5d 5c  gsub { *<[AHLS]\
1080: 64 5c 64 5c 64 5c 64 5c 64 3e 7d 20 24 74 69 74  d\d\d\d\d>} $tit
1090: 6c 65 20 7b 7d 20 74 69 74 6c 65 0a 20 20 20 20  le {} title.    
10a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 23 20      }.        # 
10b0: 73 65 74 20 6b 65 79 77 6f 72 64 28 24 72 65 71  set keyword($req
10c0: 74 61 67 29 20 31 0a 20 20 20 20 20 20 7d 0a 20  tag) 1.      }. 
10d0: 20 20 20 20 20 73 65 74 20 6b 77 6c 69 73 74 20       set kwlist 
10e0: 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61  [lsort [array na
10f0: 6d 65 73 20 6b 65 79 77 6f 72 64 5d 5d 0a 20 20  mes keyword]].  
1100: 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d      unset -nocom
1110: 70 6c 61 69 6e 20 6b 65 79 77 6f 72 64 0a 20 20  plain keyword.  
1120: 20 20 20 20 69 66 20 7b 24 65 78 66 6c 61 67 7d      if {$exflag}
1130: 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61   {.        forea
1140: 63 68 20 6b 77 20 24 6b 77 6c 69 73 74 20 7b 73  ch kw $kwlist {s
1150: 65 74 20 73 75 70 70 6f 72 74 65 64 28 24 6b 77  et supported($kw
1160: 29 20 31 7d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ) 1}.      } els
1170: 65 69 66 20 7b 24 6f 62 73 66 6c 61 67 7d 20 7b  eif {$obsflag} {
1180: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
1190: 20 6b 77 20 24 6b 77 6c 69 73 74 20 7b 73 65 74   kw $kwlist {set
11a0: 20 73 75 70 70 6f 72 74 65 64 28 24 6b 77 29 20   supported($kw) 
11b0: 32 7d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  2}.      } else 
11c0: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  {.        foreac
11d0: 68 20 6b 77 20 24 6b 77 6c 69 73 74 20 7b 73 65  h kw $kwlist {se
11e0: 74 20 73 75 70 70 6f 72 74 65 64 28 24 6b 77 29  t supported($kw)
11f0: 20 30 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0}.      }.    
1200: 20 20 73 65 74 20 65 78 66 6c 61 67 20 30 0a 20    set exflag 0. 
1210: 20 20 20 20 20 73 65 74 20 6f 62 73 66 6c 61 67       set obsflag
1220: 20 30 0a 20 20 20 20 20 20 73 65 74 20 6b 65 79   0.      set key
1230: 20 24 74 79 70 65 3a 24 6b 77 6c 69 73 74 0a 20   $type:$kwlist. 
1240: 20 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c       regsub -all
1250: 20 7b 20 2a 5c 7b 5b 5c 77 2e 5d 2b 5c 7d 7d 20   { *\{[\w.]+\}} 
1260: 24 62 6f 64 79 20 7b 7d 20 62 6f 64 79 0a 20 20  $body {} body.  
1270: 20 20 20 20 73 65 74 20 62 6f 64 79 20 5b 73 74      set body [st
1280: 72 69 6e 67 20 6d 61 70 20 5c 0a 20 20 20 20 20  ring map \.     
1290: 20 20 20 20 20 7b 3c 74 6f 64 6f 3e 20 7b 3c 66       {<todo> {<f
12a0: 6f 6e 74 20 63 6f 6c 6f 72 3d 22 72 65 64 22 3e  ont color="red">
12b0: 28 54 4f 44 4f 3a 20 7d 20 3c 2f 74 6f 64 6f 3e  (TODO: } </todo>
12c0: 20 29 3c 2f 66 6f 6e 74 3e 7d 20 24 62 6f 64 79   )</font>} $body
12d0: 5d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65  ].      set code
12e0: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 26 20   [string map {& 
12f0: 26 61 6d 70 3b 20 3c 20 26 6c 74 3b 20 3e 20 26  &amp; < &lt; > &
1300: 67 74 3b 7d 20 24 63 6f 64 65 5d 0a 20 20 20 20  gt;} $code].    
1310: 20 20 6c 61 70 70 65 6e 64 20 63 6f 6e 74 65 6e    lappend conten
1320: 74 20 5b 6c 69 73 74 20 24 6b 65 79 20 24 74 69  t [list $key $ti
1330: 74 6c 65 20 24 74 79 70 65 20 24 6b 77 6c 69 73  tle $type $kwlis
1340: 74 20 24 62 6f 64 79 20 24 63 6f 64 65 5d 0a 20  t $body $code]. 
1350: 20 20 20 20 20 73 65 74 20 74 69 74 6c 65 20 7b       set title {
1360: 7d 0a 20 20 20 20 20 20 73 65 74 20 6b 65 79 77  }.      set keyw
1370: 6f 72 64 73 20 7b 7d 0a 20 20 20 20 20 20 73 65  ords {}.      se
1380: 74 20 74 79 70 65 20 7b 7d 0a 20 20 20 20 20 20  t type {}.      
1390: 73 65 74 20 62 6f 64 79 20 7b 7d 0a 20 20 20 20  set body {}.    
13a0: 20 20 73 65 74 20 63 6f 64 65 20 7b 7d 0a 20 20    set code {}.  
13b0: 20 20 20 20 73 65 74 20 70 68 61 73 65 20 30 0a      set phase 0.
13c0: 20 20 20 20 20 20 73 65 74 20 64 63 6e 74 20 30        set dcnt 0
13d0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
13e0: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
13f0: 7b 5e 23 64 65 66 69 6e 65 20 28 53 51 4c 49 54  {^#define (SQLIT
1400: 45 5f 5b 41 2d 5a 30 2d 39 5f 5d 2b 29 7d 20 24  E_[A-Z0-9_]+)} $
1410: 6c 69 6e 65 20 61 6c 6c 20 6b 78 5d 7d 20 7b 0a  line all kx]} {.
1420: 20 20 20 20 20 20 20 20 73 65 74 20 74 79 70 65          set type
1430: 20 63 6f 6e 73 74 61 6e 74 0a 20 20 20 20 20 20   constant.      
1440: 20 20 73 65 74 20 6b 65 79 77 6f 72 64 28 24 6b    set keyword($k
1450: 78 29 20 31 0a 20 20 20 20 20 20 20 20 69 6e 63  x) 1.        inc
1460: 72 20 64 63 6e 74 0a 20 20 20 20 20 20 7d 20 65  r dcnt.      } e
1470: 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20 7b  lseif {[regexp {
1480: 5e 74 79 70 65 64 65 66 20 2e 2a 28 73 71 6c 69  ^typedef .*(sqli
1490: 74 65 5b 30 2d 39 61 2d 7a 5f 5d 2b 29 3b 7d 20  te[0-9a-z_]+);} 
14a0: 24 6c 69 6e 65 20 61 6c 6c 20 6b 78 5d 7d 20 7b  $line all kx]} {
14b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 79 70  .        set typ
14c0: 65 20 64 61 74 61 74 79 70 65 0a 20 20 20 20 20  e datatype.     
14d0: 20 20 20 73 65 74 20 6b 65 79 77 6f 72 64 28 24     set keyword($
14e0: 6b 78 29 20 31 0a 20 20 20 20 20 20 20 20 69 6e  kx) 1.        in
14f0: 63 72 20 64 63 6e 74 0a 20 20 20 20 20 20 7d 20  cr dcnt.      } 
1500: 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20  elseif {[regexp 
1510: 7b 5e 73 74 72 75 63 74 20 28 73 71 6c 69 74 65  {^struct (sqlite
1520: 33 5b 30 2d 39 61 2d 7a 5f 5d 2b 29 7d 20 24 6c  3[0-9a-z_]+)} $l
1530: 69 6e 65 20 61 6c 6c 20 6b 78 5d 7d 20 7b 0a 20  ine all kx]} {. 
1540: 20 20 20 20 20 20 20 73 65 74 20 74 79 70 65 20         set type 
1550: 64 61 74 61 74 79 70 65 0a 20 20 20 20 20 20 20  datatype.       
1560: 20 73 65 74 20 6b 65 79 77 6f 72 64 28 24 6b 78   set keyword($kx
1570: 29 20 31 0a 20 20 20 20 20 20 20 20 69 6e 63 72  ) 1.        incr
1580: 20 64 63 6e 74 0a 20 20 20 20 20 20 7d 20 65 6c   dcnt.      } el
1590: 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e  seif {[regexp {^
15a0: 5b 61 2d 7a 5d 2e 2a 5b 20 2a 5d 28 73 71 6c 69  [a-z].*[ *](sqli
15b0: 74 65 33 5b 61 2d 7a 30 2d 39 5f 5d 2b 29 5c 28  te3[a-z0-9_]+)\(
15c0: 7d 20 24 6c 69 6e 65 20 61 6c 6c 20 6b 78 5d 7d  } $line all kx]}
15d0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 74   {.        set t
15e0: 79 70 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  ype function.   
15f0: 20 20 20 20 20 73 65 74 20 6b 65 79 77 6f 72 64       set keyword
1600: 28 24 6b 78 29 20 31 0a 20 20 20 20 20 20 20 20  ($kx) 1.        
1610: 69 66 20 7b 24 63 6f 6e 73 74 72 75 63 74 6f 72  if {$constructor
1620: 20 6e 65 20 22 22 7d 20 7b 6c 61 70 70 65 6e 64   ne ""} {lappend
1630: 20 66 6d 65 74 68 28 63 3a 24 63 6f 6e 73 74 72   fmeth(c:$constr
1640: 75 63 74 6f 72 29 20 24 6b 78 7d 0a 20 20 20 20  uctor) $kx}.    
1650: 20 20 20 20 69 66 20 7b 24 64 65 73 74 72 75 63      if {$destruc
1660: 74 6f 72 20 6e 65 20 22 22 7d 20 20 7b 6c 61 70  tor ne ""}  {lap
1670: 70 65 6e 64 20 66 6d 65 74 68 28 64 3a 24 64 65  pend fmeth(d:$de
1680: 73 74 72 75 63 74 6f 72 29 20 24 6b 78 7d 0a 20  structor) $kx}. 
1690: 20 20 20 20 20 20 20 69 66 20 7b 24 6d 65 74 68         if {$meth
16a0: 6f 64 20 6e 65 20 22 22 7d 20 20 20 20 20 20 7b  od ne ""}      {
16b0: 6c 61 70 70 65 6e 64 20 66 6d 65 74 68 28 6d 3a  lappend fmeth(m:
16c0: 24 6d 65 74 68 6f 64 29 20 24 6b 78 7d 0a 20 20  $method) $kx}.  
16d0: 20 20 20 20 20 20 69 6e 63 72 20 64 63 6e 74 0a        incr dcnt.
16e0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
16f0: 5b 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5d 2e  [regexp {^[a-z].
1700: 2a 5b 20 2a 5d 28 73 71 6c 69 74 65 33 5b 61 2d  *[ *](sqlite3[a-
1710: 7a 30 2d 39 5f 5d 2b 29 3b 7d 20 24 6c 69 6e 65  z0-9_]+);} $line
1720: 20 61 6c 6c 20 6b 78 5d 7d 20 7b 0a 20 20 20 20   all kx]} {.    
1730: 20 20 20 20 73 65 74 20 74 79 70 65 20 64 61 74      set type dat
1740: 61 74 79 70 65 0a 20 20 20 20 20 20 20 20 73 65  atype.        se
1750: 74 20 6b 65 79 77 6f 72 64 28 24 6b 78 29 20 31  t keyword($kx) 1
1760: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 64 63  .        incr dc
1770: 6e 74 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  nt.      } elsei
1780: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 53 51 4c  f {[regexp {^SQL
1790: 49 54 45 5f 45 58 54 45 52 4e 20 2e 2a 28 73 71  ITE_EXTERN .*(sq
17a0: 6c 69 74 65 5b 30 2d 39 61 2d 7a 5f 5d 2b 29 3b  lite[0-9a-z_]+);
17b0: 7d 20 24 6c 69 6e 65 20 61 6c 6c 20 6b 78 5d 7d  } $line all kx]}
17c0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 74   {.        set t
17d0: 79 70 65 20 64 61 74 61 74 79 70 65 0a 20 20 20  ype datatype.   
17e0: 20 20 20 20 20 73 65 74 20 6b 65 79 77 6f 72 64       set keyword
17f0: 28 24 6b 78 29 20 31 0a 20 20 20 20 20 20 20 20  ($kx) 1.        
1800: 69 6e 63 72 20 64 63 6e 74 0a 20 20 20 20 20 20  incr dcnt.      
1810: 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63  }.      append c
1820: 6f 64 65 20 24 6c 69 6e 65 5c 6e 0a 20 20 20 20  ode $line\n.    
1830: 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 43 6f 6e 76 65  }.  }.}..# Conve
1840: 72 74 20 61 20 74 61 67 20 6e 61 6d 65 20 69 6e  rt a tag name in
1850: 74 6f 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20  to the filename 
1860: 75 73 65 64 20 66 6f 72 20 74 68 65 0a 23 20 6d  used for the.# m
1870: 75 6c 74 69 2d 66 69 6c 65 20 76 65 72 73 69 6f  ulti-file versio
1880: 6e 2e 0a 23 0a 23 20 43 6f 6e 73 74 61 6e 74 73  n..#.# Constants
1890: 20 62 65 67 69 6e 20 77 69 74 68 20 53 51 4c 49   begin with SQLI
18a0: 54 45 5f 2e 20 20 54 68 65 20 6e 61 6d 65 73 20  TE_.  The names 
18b0: 61 72 65 20 63 6f 6e 76 65 72 74 65 64 0a 23 20  are converted.# 
18c0: 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 20 61 6e  to lower case an
18d0: 64 20 70 72 65 66 69 78 65 64 20 77 69 74 68 20  d prefixed with 
18e0: 22 63 5f 22 2e 20 20 49 66 20 77 65 20 64 69 64  "c_".  If we did
18f0: 20 6e 6f 74 0a 23 20 64 6f 20 74 68 69 73 2c 20   not.# do this, 
1900: 74 68 65 6e 20 74 68 65 20 6e 61 6d 65 73 20 22  then the names "
1910: 53 51 4c 49 54 45 5f 42 4c 4f 42 22 20 61 6e 64  SQLITE_BLOB" and
1920: 20 22 73 71 6c 69 74 65 33 5f 62 6c 6f 62 22 0a   "sqlite3_blob".
1930: 23 20 77 6f 75 6c 64 20 63 6f 6c 6c 69 64 65 2e  # would collide.
1940: 0a 23 0a 70 72 6f 63 20 63 6f 6e 76 65 72 74 5f  .#.proc convert_
1950: 6b 65 79 77 6f 72 64 5f 74 6f 5f 66 69 6c 65 6e  keyword_to_filen
1960: 61 6d 65 20 7b 6f 6c 64 6e 61 6d 65 7d 20 7b 0a  ame {oldname} {.
1970: 20 20 73 65 74 20 6f 6c 64 6e 61 6d 65 20 5b 73    set oldname [s
1980: 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6f  tring tolower $o
1990: 6c 64 6e 61 6d 65 5d 0a 20 20 72 65 67 73 75 62  ldname].  regsub
19a0: 20 7b 5e 73 71 6c 69 74 65 5f 7d 20 24 6f 6c 64   {^sqlite_} $old
19b0: 6e 61 6d 65 20 7b 63 5f 7d 20 6f 6c 64 6e 61 6d  name {c_} oldnam
19c0: 65 0a 20 20 72 65 67 73 75 62 20 7b 5e 73 71 6c  e.  regsub {^sql
19d0: 69 74 65 33 5f 7d 20 24 6f 6c 64 6e 61 6d 65 20  ite3_} $oldname 
19e0: 7b 7d 20 6e 61 6d 65 0a 20 20 72 65 74 75 72 6e  {} name.  return
19f0: 20 24 6e 61 6d 65 2e 68 74 6d 6c 0a 7d 0a 0a 0a   $name.html.}...
1a00: 68 64 5f 6f 70 65 6e 5f 61 75 78 20 73 65 73 73  hd_open_aux sess
1a10: 69 6f 6e 2f 69 6e 74 72 6f 2e 68 74 6d 6c 0a 68  ion/intro.html.h
1a20: 64 5f 68 65 61 64 65 72 20 49 6e 74 72 6f 64 75  d_header Introdu
1a30: 63 74 69 6f 6e 0a 68 64 5f 65 6e 61 62 6c 65 5f  ction.hd_enable_
1a40: 6d 61 69 6e 20 30 0a 68 64 5f 6b 65 79 77 6f 72  main 0.hd_keywor
1a50: 64 73 20 2a 73 65 73 73 69 6f 6e 2d 63 61 70 69  ds *session-capi
1a60: 20 7b 53 65 73 73 69 6f 6e 20 45 78 74 65 6e 73   {Session Extens
1a70: 69 6f 6e 20 43 2d 6c 61 6e 67 75 61 67 65 20 49  ion C-language I
1a80: 6e 74 65 72 66 61 63 65 7d 0a 3c 2f 74 63 6c 3e  nterface}.</tcl>
1a90: 0a 0a 3c 70 3e 54 68 65 73 65 20 70 61 67 65 73  ..<p>These pages
1aa0: 20 64 65 66 69 6e 65 20 74 68 65 20 43 2d 6c 61   define the C-la
1ab0: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
1ac0: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
1ad0: 0a 5b 73 65 73 73 69 6f 6e 20 65 78 74 65 6e 73  .[session extens
1ae0: 69 6f 6e 5d 2e 0a 54 68 69 73 20 69 73 20 6e 6f  ion]..This is no
1af0: 74 20 61 20 74 75 74 6f 72 69 61 6c 2e 20 54 68  t a tutorial. Th
1b00: 65 73 65 20 70 61 67 65 73 20 61 72 65 20 64 65  ese pages are de
1b10: 73 69 67 6e 65 64 20 74 6f 20 62 65 20 70 72 65  signed to be pre
1b20: 63 69 73 65 2c 20 6e 6f 74 0a 65 61 73 79 20 74  cise, not.easy t
1b30: 6f 20 72 65 61 64 2e 20 20 41 20 74 75 74 6f 72  o read.  A tutor
1b40: 69 61 6c 20 69 73 20 5b 73 65 73 73 69 6f 6e 7c  ial is [session|
1b50: 61 76 61 69 6c 61 62 6c 65 20 73 65 70 61 72 61  available separa
1b60: 74 65 6c 79 5d 2e 0a 0a 3c 70 3e 54 68 69 73 20  tely]...<p>This 
1b70: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 43  version of the C
1b80: 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66  -language interf
1b90: 61 63 65 20 72 65 66 65 72 65 6e 63 65 20 69 73  ace reference is
1ba0: 0a 62 72 6f 6b 65 6e 20 64 6f 77 6e 20 69 6e 74  .broken down int
1bb0: 6f 20 73 6d 61 6c 6c 20 70 61 67 65 73 20 66 6f  o small pages fo
1bc0: 72 20 65 61 73 79 20 76 69 65 77 69 6e 67 2e 20  r easy viewing. 
1bd0: 20 54 68 65 0a 73 61 6d 65 20 63 6f 6e 74 65 6e   The.same conten
1be0: 74 20 69 73 20 61 6c 73 6f 20 61 76 61 69 6c 61  t is also availa
1bf0: 62 6c 65 20 61 73 20 61 0a 3c 61 20 68 72 65 66  ble as a.<a href
1c00: 3d 22 2e 2e 2f 73 65 73 73 69 6f 6e 2e 68 74 6d  ="../session.htm
1c10: 6c 22 3e 73 69 6e 67 6c 65 20 6c 61 72 67 65 20  l">single large 
1c20: 48 54 4d 4c 20 66 69 6c 65 3c 2f 61 3e 0a 66 6f  HTML file</a>.fo
1c30: 72 20 74 68 6f 73 65 20 77 68 6f 20 70 72 65 66  r those who pref
1c40: 65 72 20 74 68 61 74 20 66 6f 72 6d 61 74 2e 3c  er that format.<
1c50: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74  /p>..<p>The cont
1c60: 65 6e 74 20 6f 6e 20 74 68 65 73 65 20 70 61 67  ent on these pag
1c70: 65 73 20 69 73 20 65 78 74 72 61 63 74 65 64 20  es is extracted 
1c80: 66 72 6f 6d 20 63 6f 6d 6d 65 6e 74 73 0a 69 6e  from comments.in
1c90: 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
1ca0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  .</p>..<p>The in
1cb0: 74 65 72 66 61 63 65 20 69 73 20 62 72 6f 6b 65  terface is broke
1cc0: 6e 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 72 65  n down into thre
1cd0: 65 20 63 61 74 65 67 6f 72 69 65 73 3a 3c 2f 70  e categories:</p
1ce0: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c  >..<ol>.<li><p><
1cf0: 61 20 68 72 65 66 3d 22 6f 62 6a 6c 69 73 74 2e  a href="objlist.
1d00: 68 74 6d 6c 22 3e 3c 62 3e 4c 69 73 74 20 4f 66  html"><b>List Of
1d10: 20 4f 62 6a 65 63 74 73 2e 3c 2f 62 3e 3c 2f 61   Objects.</b></a
1d20: 3e 0a 20 20 20 20 54 68 69 73 20 69 73 20 61 20  >.    This is a 
1d30: 6c 69 73 74 20 6f 66 20 74 68 65 20 74 68 72 65  list of the thre
1d40: 65 20 61 62 73 74 72 61 63 74 20 6f 62 6a 65 63  e abstract objec
1d50: 74 73 20 75 73 65 64 20 62 79 20 74 68 65 20 53  ts used by the S
1d60: 51 4c 69 74 65 20 73 65 73 73 69 6f 6e 0a 20 20  QLite session.  
1d70: 20 20 6d 6f 64 75 6c 65 2e 0a 20 20 20 20 0a 0a    module..    ..
1d80: 3c 6c 69 3e 3c 70 3e 3c 61 20 68 72 65 66 3d 22  <li><p><a href="
1d90: 63 6f 6e 73 74 6c 69 73 74 2e 68 74 6d 6c 22 3e  constlist.html">
1da0: 3c 62 3e 4c 69 73 74 20 4f 66 20 43 6f 6e 73 74  <b>List Of Const
1db0: 61 6e 74 73 2e 3c 2f 62 3e 3c 2f 61 3e 0a 20 20  ants.</b></a>.  
1dc0: 20 20 54 68 69 73 20 69 73 20 61 20 6c 69 73 74    This is a list
1dd0: 20 6f 66 20 6e 75 6d 65 72 69 63 20 63 6f 6e 73   of numeric cons
1de0: 74 61 6e 74 73 20 75 73 65 64 20 62 79 20 74 68  tants used by th
1df0: 65 20 53 51 4c 69 74 65 20 73 65 73 73 69 6f 6e  e SQLite session
1e00: 20 6d 6f 64 75 6c 65 0a 20 20 20 20 61 6e 64 20   module.    and 
1e10: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 23  represented by #
1e20: 64 65 66 69 6e 65 73 20 69 6e 20 74 68 65 20 73  defines in the s
1e30: 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 2e 68 20  qlite3session.h 
1e40: 68 65 61 64 65 72 20 66 69 6c 65 2e 20 54 68 65  header file. The
1e50: 72 65 0a 20 20 20 20 61 72 65 20 63 6f 6e 73 74  re.    are const
1e60: 61 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 63  ants passed to c
1e70: 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 65 72 20  onflict handler 
1e80: 63 61 6c 6c 62 61 63 6b 73 20 74 6f 20 69 6e 64  callbacks to ind
1e90: 69 63 61 74 65 20 74 68 65 20 74 79 70 65 0a 20  icate the type. 
1ea0: 20 20 20 6f 66 20 63 6f 6e 66 6c 69 63 74 2c 20     of conflict, 
1eb0: 61 6e 64 20 63 6f 6e 73 74 61 6e 74 73 20 72 65  and constants re
1ec0: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 63 6f  turned by the co
1ed0: 6e 66 6c 69 63 74 20 68 61 6e 64 6c 65 72 20 74  nflict handler t
1ee0: 6f 20 69 6e 64 69 63 61 74 65 0a 20 20 20 20 68  o indicate.    h
1ef0: 6f 77 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 20  ow the conflict 
1f00: 73 68 6f 75 6c 64 20 62 65 20 72 65 73 6f 6c 76  should be resolv
1f10: 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 61 20 68  ed...<li><p><a h
1f20: 72 65 66 3d 22 66 75 6e 63 6c 69 73 74 2e 68 74  ref="funclist.ht
1f30: 6d 6c 22 3e 3c 62 3e 4c 69 73 74 20 4f 66 20 46  ml"><b>List Of F
1f40: 75 6e 63 74 69 6f 6e 73 2e 3c 2f 62 3e 3c 2f 61  unctions.</b></a
1f50: 3e 0a 20 20 20 20 54 68 69 73 20 69 73 20 61 20  >.    This is a 
1f60: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 53 51 4c 69  list of all SQLi
1f70: 74 65 20 73 65 73 73 69 6f 6e 20 6d 6f 64 75 6c  te session modul
1f80: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 0a 0a 3c  e functions. ..<
1f90: 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 63  /ol>..<tcl>.hd_c
1fa0: 6c 6f 73 65 5f 61 75 78 0a 68 64 5f 65 6e 61 62  lose_aux.hd_enab
1fb0: 6c 65 5f 6d 61 69 6e 20 31 0a 3c 2f 74 63 6c 3e  le_main 1.</tcl>
1fc0: 0a 0a 3c 70 3e 54 68 69 73 20 70 61 67 65 20 64  ..<p>This page d
1fd0: 65 66 69 6e 65 73 20 74 68 65 20 43 2d 6c 61 6e  efines the C-lan
1fe0: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 20  guage interface 
1ff0: 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 0a 20  to the SQLite . 
2000: 20 20 5b 73 65 73 73 69 6f 6e 20 65 78 74 65 6e    [session exten
2010: 73 69 6f 6e 5d 2e 0a 20 20 20 54 68 69 73 20 69  sion]..   This i
2020: 73 20 6e 6f 74 20 61 20 74 75 74 6f 72 69 61 6c  s not a tutorial
2030: 2e 20 54 68 65 73 65 20 70 61 67 65 73 20 61 72  . These pages ar
2040: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65  e designed to be
2050: 20 70 72 65 63 69 73 65 2c 20 6e 6f 74 20 65 61   precise, not ea
2060: 73 79 20 0a 20 20 20 74 6f 20 72 65 61 64 2e 20  sy .   to read. 
2070: 20 41 20 74 75 74 6f 72 69 61 6c 20 69 73 20 5b   A tutorial is [
2080: 73 65 73 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f  session extensio
2090: 6e 7c 61 76 61 69 6c 61 62 6c 65 20 73 65 70 61  n|available sepa
20a0: 72 61 74 65 6c 79 5d 2e 0a 0a 3c 70 3e 54 68 69  rately]...<p>Thi
20b0: 73 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  s page contains 
20c0: 61 6c 6c 20 43 2d 6c 61 6e 67 75 61 67 65 20 69  all C-language i
20d0: 6e 74 65 72 66 61 63 65 20 69 6e 66 6f 72 6d 61  nterface informa
20e0: 74 69 6f 6e 0a 69 6e 20 61 20 73 69 6e 67 6c 65  tion.in a single
20f0: 20 48 54 4d 4c 20 66 69 6c 65 2e 20 20 54 68 65   HTML file.  The
2100: 20 73 61 6d 65 20 69 6e 66 6f 72 6d 61 74 69 6f   same informatio
2110: 6e 20 69 73 20 61 6c 73 6f 0a 61 76 61 69 6c 61  n is also.availa
2120: 62 6c 65 20 62 72 6f 6b 65 6e 20 6f 75 74 20 69  ble broken out i
2130: 6e 74 6f 20 3c 61 20 68 72 65 66 3d 22 73 65 73  nto <a href="ses
2140: 73 69 6f 6e 2f 69 6e 74 72 6f 2e 68 74 6d 6c 22  sion/intro.html"
2150: 3e 6c 6f 74 73 20 6f 66 20 73 6d 61 6c 6c 20 70  >lots of small p
2160: 61 67 65 73 3c 2f 61 3e 0a 66 6f 72 20 65 61 73  ages</a>.for eas
2170: 69 65 72 20 76 69 65 77 69 6e 67 2c 20 69 66 20  ier viewing, if 
2180: 79 6f 75 20 70 72 65 66 65 72 2e 3c 2f 70 3e 0a  you prefer.</p>.
2190: 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e  .<p>This documen
21a0: 74 20 69 73 20 63 72 65 61 74 65 64 20 62 79 20  t is created by 
21b0: 61 20 73 63 72 69 70 74 20 77 68 69 63 68 20 73  a script which s
21c0: 63 61 6e 73 20 63 6f 6d 6d 65 6e 74 73 20 69 6e  cans comments in
21d0: 20 74 68 65 20 73 6f 75 72 63 65 20 0a 63 6f 64   the source .cod
21e0: 65 20 66 69 6c 65 20 73 71 6c 69 74 65 33 73 65  e file sqlite3se
21f0: 73 73 69 6f 6e 2e 68 2e 3c 2f 70 3e 0a 0a 3c 68  ssion.h.</p>..<h
2200: 72 3e 0a 0a 3c 74 63 6c 3e 0a 23 20 46 69 6e 64  r>..<tcl>.# Find
2210: 20 74 68 65 20 70 72 65 66 65 72 72 65 64 20 6b   the preferred k
2220: 65 79 77 6f 72 64 20 66 6f 72 20 61 20 70 61 67  eyword for a pag
2230: 65 20 67 69 76 65 6e 20 61 20 6c 69 73 74 20 6f  e given a list o
2240: 66 0a 23 20 61 63 63 65 70 74 61 62 6c 65 20 6b  f.# acceptable k
2250: 65 79 77 6f 72 64 73 2e 0a 23 0a 70 72 6f 63 20  eywords..#.proc 
2260: 70 72 65 66 65 72 72 65 64 5f 6b 65 79 77 6f 72  preferred_keywor
2270: 64 20 7b 6b 65 79 77 6f 72 64 5f 6c 69 73 74 7d  d {keyword_list}
2280: 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 6b 77 20   {.  foreach kw 
2290: 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a  $keyword_list {.
22a0: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
22b0: 2d 6e 6f 63 61 73 65 20 7b 5e 73 71 6c 69 74 65  -nocase {^sqlite
22c0: 7d 20 24 6b 77 5d 7d 20 62 72 65 61 6b 0a 20 20  } $kw]} break.  
22d0: 7d 0a 20 20 72 65 74 75 72 6e 20 24 6b 77 0a 7d  }.  return $kw.}
22e0: 0a 0a 3c 74 63 6c 3e 0a 0a 23 20 44 6f 20 61 20  ..<tcl>..# Do a 
22f0: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 74 65 6e 74  table of content
2300: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 23 0a  s for objects.#.
2310: 73 65 74 20 6f 62 6a 6c 69 73 74 20 7b 7d 0a 66  set objlist {}.f
2320: 6f 72 65 61 63 68 20 63 20 24 63 6f 6e 74 65 6e  oreach c $conten
2330: 74 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 6b  t {.  foreach {k
2340: 65 79 20 74 69 74 6c 65 20 74 79 70 65 20 6b 65  ey title type ke
2350: 79 77 6f 72 64 73 20 62 6f 64 79 20 63 6f 64 65  ywords body code
2360: 7d 20 24 63 20 62 72 65 61 6b 0a 20 20 69 66 20  } $c break.  if 
2370: 7b 24 74 79 70 65 21 3d 22 64 61 74 61 74 79 70  {$type!="datatyp
2380: 65 22 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 73  e"} continue.  s
2390: 65 74 20 6b 65 79 77 6f 72 64 73 20 5b 6c 73 6f  et keywords [lso
23a0: 72 74 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20  rt $keywords].  
23b0: 73 65 74 20 6b 20 5b 70 72 65 66 65 72 72 65 64  set k [preferred
23c0: 5f 6b 65 79 77 6f 72 64 20 24 6b 65 79 77 6f 72  _keyword $keywor
23d0: 64 73 5d 0a 20 20 73 65 74 20 73 20 24 73 75 70  ds].  set s $sup
23e0: 70 6f 72 74 65 64 28 24 6b 29 0a 20 20 66 6f 72  ported($k).  for
23f0: 65 61 63 68 20 6b 77 20 24 6b 65 79 77 6f 72 64  each kw $keyword
2400: 73 20 7b 0a 20 20 20 20 69 66 20 7b 5b 72 65 67  s {.    if {[reg
2410: 65 78 70 20 7b 5e 73 71 6c 69 74 65 7d 20 24 6b  exp {^sqlite} $k
2420: 77 5d 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  w]} {.      lapp
2430: 65 6e 64 20 6f 62 6a 6c 69 73 74 20 5b 6c 69 73  end objlist [lis
2440: 74 20 24 6b 20 24 6b 77 20 24 73 5d 0a 20 20 20  t $k $kw $s].   
2450: 20 7d 0a 20 20 7d 0a 7d 0a 68 64 5f 6f 70 65 6e   }.  }.}.hd_open
2460: 5f 61 75 78 20 73 65 73 73 69 6f 6e 2f 6f 62 6a  _aux session/obj
2470: 6c 69 73 74 2e 68 74 6d 6c 0a 68 64 5f 68 65 61  list.html.hd_hea
2480: 64 65 72 20 7b 4c 69 73 74 20 4f 66 20 53 51 4c  der {List Of SQL
2490: 69 74 65 20 4f 62 6a 65 63 74 73 7d 0a 68 64 5f  ite Objects}.hd_
24a0: 65 6e 61 62 6c 65 5f 6d 61 69 6e 20 30 0a 68 64  enable_main 0.hd
24b0: 5f 70 75 74 73 6e 6c 20 7b 3c 61 20 68 72 65 66  _putsnl {<a href
24c0: 3d 22 69 6e 74 72 6f 2e 68 74 6d 6c 22 3e 3c 68  ="intro.html"><h
24d0: 32 3e 53 65 73 73 69 6f 6e 20 4d 6f 64 75 6c 65  2>Session Module
24e0: 20 43 20 49 6e 74 65 72 66 61 63 65 3c 2f 68 32   C Interface</h2
24f0: 3e 3c 2f 61 3e 7d 0a 68 64 5f 65 6e 61 62 6c 65  ></a>}.hd_enable
2500: 5f 6d 61 69 6e 20 31 0a 3c 2f 74 63 6c 3e 0a 3c  _main 1.</tcl>.<
2510: 68 32 3e 4f 62 6a 65 63 74 73 3a 3c 2f 68 32 3e  h2>Objects:</h2>
2520: 0a 3c 74 63 6c 3e 0a 68 64 5f 6c 69 73 74 5f 6f  .<tcl>.hd_list_o
2530: 66 5f 6c 69 6e 6b 73 20 7b 7d 20 33 30 30 20 5b  f_links {} 300 [
2540: 6c 73 6f 72 74 20 24 6f 62 6a 6c 69 73 74 5d 0a  lsort $objlist].
2550: 68 64 5f 65 6e 61 62 6c 65 5f 6d 61 69 6e 20 30  hd_enable_main 0
2560: 0a 68 64 5f 70 75 74 73 6e 6c 20 7b 3c 70 3e 4f  .hd_putsnl {<p>O
2570: 74 68 65 72 20 6c 69 73 74 73 3a 0a 3c 61 20 68  ther lists:.<a h
2580: 72 65 66 3d 22 63 6f 6e 73 74 6c 69 73 74 2e 68  ref="constlist.h
2590: 74 6d 6c 22 3e 43 6f 6e 73 74 61 6e 74 73 3c 2f  tml">Constants</
25a0: 61 3e 20 61 6e 64 0a 3c 61 20 68 72 65 66 3d 22  a> and.<a href="
25b0: 66 75 6e 63 6c 69 73 74 2e 68 74 6d 6c 22 3e 46  funclist.html">F
25c0: 75 6e 63 74 69 6f 6e 73 3c 2f 61 3e 2e 7d 0a 68  unctions</a>.}.h
25d0: 64 5f 63 6c 6f 73 65 5f 61 75 78 0a 68 64 5f 65  d_close_aux.hd_e
25e0: 6e 61 62 6c 65 5f 6d 61 69 6e 20 31 0a 68 64 5f  nable_main 1.hd_
25f0: 70 75 74 73 6e 6c 20 7b 3c 68 72 3e 7d 0a 0a 23  putsnl {<hr>}..#
2600: 20 44 6f 20 61 20 74 61 62 6c 65 20 6f 66 20 63   Do a table of c
2610: 6f 6e 74 65 6e 74 73 20 66 6f 72 20 63 6f 6e 73  ontents for cons
2620: 74 61 6e 74 73 0a 23 0a 73 65 74 20 63 6c 69 73  tants.#.set clis
2630: 74 20 7b 7d 0a 66 6f 72 65 61 63 68 20 63 20 24  t {}.foreach c $
2640: 63 6f 6e 74 65 6e 74 20 7b 0a 20 20 66 6f 72 65  content {.  fore
2650: 61 63 68 20 7b 6b 65 79 20 74 69 74 6c 65 20 74  ach {key title t
2660: 79 70 65 20 6b 65 79 77 6f 72 64 73 20 62 6f 64  ype keywords bod
2670: 79 20 63 6f 64 65 7d 20 24 63 20 62 72 65 61 6b  y code} $c break
2680: 0a 20 20 69 66 20 7b 24 74 79 70 65 21 3d 22 63  .  if {$type!="c
2690: 6f 6e 73 74 61 6e 74 22 7d 20 63 6f 6e 74 69 6e  onstant"} contin
26a0: 75 65 0a 20 20 73 65 74 20 6b 65 79 77 6f 72 64  ue.  set keyword
26b0: 73 20 5b 6c 73 6f 72 74 20 24 6b 65 79 77 6f 72  s [lsort $keywor
26c0: 64 73 5d 0a 20 20 73 65 74 20 6b 20 5b 70 72 65  ds].  set k [pre
26d0: 66 65 72 72 65 64 5f 6b 65 79 77 6f 72 64 20 24  ferred_keyword $
26e0: 6b 65 79 77 6f 72 64 73 5d 0a 20 20 73 65 74 20  keywords].  set 
26f0: 73 20 24 73 75 70 70 6f 72 74 65 64 28 24 6b 29  s $supported($k)
2700: 0a 20 20 66 6f 72 65 61 63 68 20 6b 77 20 24 6b  .  foreach kw $k
2710: 65 79 77 6f 72 64 73 20 7b 0a 20 20 20 20 69 66  eywords {.    if
2720: 20 7b 5b 72 65 67 65 78 70 20 7b 5e 53 51 4c 49   {[regexp {^SQLI
2730: 54 45 5f 7d 20 24 6b 77 5d 7d 20 7b 0a 20 20 20  TE_} $kw]} {.   
2740: 20 20 20 6c 61 70 70 65 6e 64 20 63 6c 69 73 74     lappend clist
2750: 20 5b 6c 69 73 74 20 24 6b 20 24 6b 77 20 24 73   [list $k $kw $s
2760: 5d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 68 64  ].    }.  }.}.hd
2770: 5f 6f 70 65 6e 5f 61 75 78 20 73 65 73 73 69 6f  _open_aux sessio
2780: 6e 2f 63 6f 6e 73 74 6c 69 73 74 2e 68 74 6d 6c  n/constlist.html
2790: 0a 68 64 5f 68 65 61 64 65 72 20 7b 4c 69 73 74  .hd_header {List
27a0: 20 4f 66 20 53 51 4c 69 74 65 20 43 6f 6e 73 74   Of SQLite Const
27b0: 61 6e 74 73 7d 0a 68 64 5f 65 6e 61 62 6c 65 5f  ants}.hd_enable_
27c0: 6d 61 69 6e 20 30 0a 68 64 5f 70 75 74 73 6e 6c  main 0.hd_putsnl
27d0: 20 7b 3c 61 20 68 72 65 66 3d 22 69 6e 74 72 6f   {<a href="intro
27e0: 2e 68 74 6d 6c 22 3e 3c 68 32 3e 53 65 73 73 69  .html"><h2>Sessi
27f0: 6f 6e 20 4d 6f 64 75 6c 65 20 43 20 49 6e 74 65  on Module C Inte
2800: 72 66 61 63 65 3c 2f 68 32 3e 3c 2f 61 3e 7d 0a  rface</h2></a>}.
2810: 68 64 5f 65 6e 61 62 6c 65 5f 6d 61 69 6e 20 31  hd_enable_main 1
2820: 0a 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43 6f 6e 73  .</tcl>.<h2>Cons
2830: 74 61 6e 74 73 3a 3c 2f 68 32 3e 0a 3c 74 63 6c  tants:</h2>.<tcl
2840: 3e 0a 73 65 74 20 63 6c 69 73 74 20 5b 6c 73 6f  >.set clist [lso
2850: 72 74 20 2d 69 6e 64 65 78 20 31 20 24 63 6c 69  rt -index 1 $cli
2860: 73 74 5d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c  st].hd_list_of_l
2870: 69 6e 6b 73 20 7b 7d 20 34 30 30 20 24 63 6c 69  inks {} 400 $cli
2880: 73 74 0a 68 64 5f 65 6e 61 62 6c 65 5f 6d 61 69  st.hd_enable_mai
2890: 6e 20 30 0a 68 64 5f 70 75 74 73 6e 6c 20 7b 3c  n 0.hd_putsnl {<
28a0: 70 3e 4f 74 68 65 72 20 6c 69 73 74 73 3a 0a 3c  p>Other lists:.<
28b0: 61 20 68 72 65 66 3d 22 6f 62 6a 6c 69 73 74 2e  a href="objlist.
28c0: 68 74 6d 6c 22 3e 4f 62 6a 65 63 74 73 3c 2f 61  html">Objects</a
28d0: 3e 20 61 6e 64 0a 3c 61 20 68 72 65 66 3d 22 66  > and.<a href="f
28e0: 75 6e 63 6c 69 73 74 2e 68 74 6d 6c 22 3e 46 75  unclist.html">Fu
28f0: 6e 63 74 69 6f 6e 73 3c 2f 61 3e 2e 3c 2f 70 3e  nctions</a>.</p>
2900: 7d 0a 68 64 5f 65 6e 61 62 6c 65 5f 6d 61 69 6e  }.hd_enable_main
2910: 20 31 0a 68 64 5f 63 6c 6f 73 65 5f 61 75 78 0a   1.hd_close_aux.
2920: 68 64 5f 70 75 74 73 6e 6c 20 7b 3c 68 72 3e 7d  hd_putsnl {<hr>}
2930: 0a 0a 0a 23 20 44 6f 20 61 20 74 61 62 6c 65 20  ...# Do a table 
2940: 6f 66 20 63 6f 6e 74 65 6e 74 73 20 66 6f 72 20  of contents for 
2950: 66 75 6e 63 74 69 6f 6e 73 0a 23 0a 73 65 74 20  functions.#.set 
2960: 66 75 6e 63 6c 69 73 74 20 7b 7d 0a 66 6f 72 65  funclist {}.fore
2970: 61 63 68 20 63 20 24 63 6f 6e 74 65 6e 74 20 7b  ach c $content {
2980: 0a 20 20 66 6f 72 65 61 63 68 20 7b 6b 65 79 20  .  foreach {key 
2990: 74 69 74 6c 65 20 74 79 70 65 20 6b 65 79 77 6f  title type keywo
29a0: 72 64 73 20 62 6f 64 79 20 63 6f 64 65 7d 20 24  rds body code} $
29b0: 63 20 62 72 65 61 6b 0a 20 20 69 66 20 7b 24 74  c break.  if {$t
29c0: 79 70 65 21 3d 22 66 75 6e 63 74 69 6f 6e 22 7d  ype!="function"}
29d0: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 73 65 74 20   continue.  set 
29e0: 6b 65 79 77 6f 72 64 73 20 5b 6c 73 6f 72 74 20  keywords [lsort 
29f0: 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 73 65 74  $keywords].  set
2a00: 20 6b 20 5b 70 72 65 66 65 72 72 65 64 5f 6b 65   k [preferred_ke
2a10: 79 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 73 5d  yword $keywords]
2a20: 0a 20 20 73 65 74 20 73 20 24 73 75 70 70 6f 72  .  set s $suppor
2a30: 74 65 64 28 24 6b 29 0a 20 20 66 6f 72 65 61 63  ted($k).  foreac
2a40: 68 20 6b 77 20 24 6b 65 79 77 6f 72 64 73 20 7b  h kw $keywords {
2a50: 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70  .    if {[regexp
2a60: 20 7b 5e 73 71 6c 69 74 65 7d 20 24 6b 77 5d 7d   {^sqlite} $kw]}
2a70: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
2a80: 20 66 75 6e 63 6c 69 73 74 20 5b 6c 69 73 74 20   funclist [list 
2a90: 24 6b 20 24 6b 77 20 24 73 5d 0a 20 20 20 20 7d  $k $kw $s].    }
2aa0: 0a 20 20 7d 0a 7d 0a 68 64 5f 6f 70 65 6e 5f 61  .  }.}.hd_open_a
2ab0: 75 78 20 73 65 73 73 69 6f 6e 2f 66 75 6e 63 6c  ux session/funcl
2ac0: 69 73 74 2e 68 74 6d 6c 0a 68 64 5f 68 65 61 64  ist.html.hd_head
2ad0: 65 72 20 7b 4c 69 73 74 20 4f 66 20 53 51 4c 69  er {List Of SQLi
2ae0: 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d 0a 68 64  te Functions}.hd
2af0: 5f 6b 65 79 77 6f 72 64 73 20 2a 73 65 73 73 69  _keywords *sessi
2b00: 6f 6e 5f 66 75 6e 63 6c 69 73 74 20 7b 53 65 73  on_funclist {Ses
2b10: 73 69 6f 6e 20 4d 6f 64 75 6c 65 20 43 2d 41 50  sion Module C-AP
2b20: 49 20 66 75 6e 63 74 69 6f 6e 20 6c 69 73 74 7d  I function list}
2b30: 0a 68 64 5f 65 6e 61 62 6c 65 5f 6d 61 69 6e 20  .hd_enable_main 
2b40: 30 0a 68 64 5f 70 75 74 73 6e 6c 20 7b 3c 61 20  0.hd_putsnl {<a 
2b50: 68 72 65 66 3d 22 69 6e 74 72 6f 2e 68 74 6d 6c  href="intro.html
2b60: 22 3e 3c 68 32 3e 53 65 73 73 69 6f 6e 20 4d 6f  "><h2>Session Mo
2b70: 64 75 6c 65 20 43 20 49 6e 74 65 72 66 61 63 65  dule C Interface
2b80: 3c 2f 68 32 3e 3c 2f 61 3e 7d 0a 68 64 5f 65 6e  </h2></a>}.hd_en
2b90: 61 62 6c 65 5f 6d 61 69 6e 20 31 0a 3c 2f 74 63  able_main 1.</tc
2ba0: 6c 3e 0a 3c 68 32 3e 46 75 6e 63 74 69 6f 6e 73  l>.<h2>Functions
2bb0: 3a 3c 2f 68 32 3e 0a 3c 74 63 6c 3e 0a 73 65 74  :</h2>.<tcl>.set
2bc0: 20 66 75 6e 63 6c 69 73 74 20 5b 6c 73 6f 72 74   funclist [lsort
2bd0: 20 2d 69 6e 64 65 78 20 31 20 24 66 75 6e 63 6c   -index 1 $funcl
2be0: 69 73 74 5d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f  ist].hd_list_of_
2bf0: 6c 69 6e 6b 73 20 7b 7d 20 33 30 30 20 24 66 75  links {} 300 $fu
2c00: 6e 63 6c 69 73 74 0a 68 64 5f 65 6e 61 62 6c 65  nclist.hd_enable
2c10: 5f 6d 61 69 6e 20 30 0a 68 64 5f 70 75 74 73 6e  _main 0.hd_putsn
2c20: 6c 20 7b 3c 70 3e 4f 74 68 65 72 20 6c 69 73 74  l {<p>Other list
2c30: 73 3a 0a 3c 61 20 68 72 65 66 3d 22 63 6f 6e 73  s:.<a href="cons
2c40: 74 6c 69 73 74 2e 68 74 6d 6c 22 3e 43 6f 6e 73  tlist.html">Cons
2c50: 74 61 6e 74 73 3c 2f 61 3e 20 61 6e 64 0a 3c 61  tants</a> and.<a
2c60: 20 68 72 65 66 3d 22 6f 62 6a 6c 69 73 74 2e 68   href="objlist.h
2c70: 74 6d 6c 22 3e 4f 62 6a 65 63 74 73 3c 2f 61 3e  tml">Objects</a>
2c80: 2e 3c 2f 70 3e 7d 0a 68 64 5f 65 6e 61 62 6c 65  .</p>}.hd_enable
2c90: 5f 6d 61 69 6e 20 31 0a 68 64 5f 63 6c 6f 73 65  _main 1.hd_close
2ca0: 5f 61 75 78 0a 68 64 5f 70 75 74 73 6e 6c 20 7b  _aux.hd_putsnl {
2cb0: 3c 68 72 3e 7d 0a 0a 23 20 43 6f 6e 76 65 72 74  <hr>}..# Convert
2cc0: 20 61 20 66 72 61 67 6d 65 6e 74 20 74 65 78 74   a fragment text
2cd0: 20 6c 61 62 65 6c 20 69 6e 74 6f 20 61 20 66 72   label into a fr
2ce0: 61 67 6d 65 6e 74 20 6e 61 6d 65 0a 23 0a 70 72  agment name.#.pr
2cf0: 6f 63 20 68 64 5f 66 72 61 67 6e 61 6d 65 20 7b  oc hd_fragname {
2d00: 6c 62 6c 7d 20 7b 0a 20 20 72 65 67 73 75 62 20  lbl} {.  regsub 
2d10: 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 30 2d 39 5d 7d  -all {[^a-z0-9]}
2d20: 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72   [string tolower
2d30: 20 24 6c 62 6c 5d 20 7b 7d 20 6c 62 6c 32 0a 20   $lbl] {} lbl2. 
2d40: 20 72 65 74 75 72 6e 20 24 6c 62 6c 32 0a 7d 0a   return $lbl2.}.
2d50: 0a 23 20 53 68 6f 77 20 63 6f 6e 73 74 72 75 63  .# Show construc
2d60: 74 6f 72 73 2c 20 64 65 73 74 72 75 63 74 6f 72  tors, destructor
2d70: 73 20 6f 72 20 6d 65 74 68 6f 64 73 20 66 6f 72  s or methods for
2d80: 20 61 6e 20 6f 62 6a 65 63 74 0a 23 0a 70 72 6f   an object.#.pro
2d90: 63 20 73 68 6f 77 5f 6d 65 74 68 6f 64 73 5f 6f  c show_methods_o
2da0: 66 5f 6f 62 6a 65 63 74 20 7b 6b 65 79 20 6c 61  f_object {key la
2db0: 62 65 6c 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  bel} {.  global 
2dc0: 66 6d 65 74 68 0a 20 20 69 66 20 7b 21 5b 69 6e  fmeth.  if {![in
2dd0: 66 6f 20 65 78 69 73 74 73 20 66 6d 65 74 68 28  fo exists fmeth(
2de0: 24 6b 65 79 29 5d 7d 20 72 65 74 75 72 6e 0a 20  $key)]} return. 
2df0: 20 73 65 74 20 6c 78 20 5b 6c 73 6f 72 74 20 24   set lx [lsort $
2e00: 66 6d 65 74 68 28 24 6b 65 79 29 5d 0a 20 20 73  fmeth($key)].  s
2e10: 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6c  et n [llength $l
2e20: 78 5d 0a 20 20 69 66 20 7b 24 6e 3d 3d 30 7d 20  x].  if {$n==0} 
2e30: 72 65 74 75 72 6e 0a 20 20 69 66 20 7b 24 6e 3d  return.  if {$n=
2e40: 3d 31 7d 20 7b 0a 20 20 20 20 68 64 5f 72 65 73  =1} {.    hd_res
2e50: 6f 6c 76 65 20 22 3c 70 3e 24 6c 61 62 65 6c 3a  olve "<p>$label:
2e60: 20 5c 5b 5b 6c 69 6e 64 65 78 20 24 6c 78 20 30   \[[lindex $lx 0
2e70: 5d 28 29 5c 5d 3c 2f 70 3e 5c 6e 22 0a 20 20 20  ]()\]</p>\n".   
2e80: 20 72 65 74 75 72 6e 0a 20 20 7d 0a 20 20 69 66   return.  }.  if
2e90: 20 7b 24 6e 3c 3d 34 7d 20 7b 0a 20 20 20 20 68   {$n<=4} {.    h
2ea0: 64 5f 70 75 74 73 20 22 3c 70 3e 24 7b 6c 61 62  d_puts "<p>${lab
2eb0: 65 6c 7d 73 3a 5c 6e 22 0a 20 20 20 20 73 65 74  el}s:\n".    set
2ec0: 20 73 65 70 20 7b 20 7d 0a 20 20 20 20 66 6f 72   sep { }.    for
2ed0: 65 61 63 68 20 78 20 24 6c 78 20 7b 0a 20 20 20  each x $lx {.   
2ee0: 20 20 20 68 64 5f 70 75 74 73 20 24 73 65 70 0a     hd_puts $sep.
2ef0: 20 20 20 20 20 20 73 65 74 20 73 65 70 20 22 2c        set sep ",
2f00: 5c 6e 22 0a 20 20 20 20 20 20 68 64 5f 72 65 73  \n".      hd_res
2f10: 6f 6c 76 65 20 5c 5b 24 7b 78 7d 28 29 5c 5d 0a  olve \[${x}()\].
2f20: 20 20 20 20 7d 0a 20 20 20 20 68 64 5f 70 75 74      }.    hd_put
2f30: 73 20 22 3c 2f 70 3e 5c 6e 22 0a 20 20 20 20 72  s "</p>\n".    r
2f40: 65 74 75 72 6e 0a 20 20 7d 0a 20 20 73 65 74 20  eturn.  }.  set 
2f50: 66 6c 73 74 20 7b 7d 0a 20 20 66 6f 72 65 61 63  flst {}.  foreac
2f60: 68 20 78 20 24 6c 78 20 7b 0a 20 20 20 20 6c 61  h x $lx {.    la
2f70: 70 70 65 6e 64 20 66 6c 73 74 20 5b 6c 69 73 74  ppend flst [list
2f80: 20 24 78 20 24 78 20 30 5d 0a 20 20 7d 0a 20 20   $x $x 0].  }.  
2f90: 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73  hd_list_of_links
2fa0: 20 22 24 7b 6c 61 62 65 6c 7d 73 3a 22 20 33 35   "${label}s:" 35
2fb0: 30 20 24 66 6c 73 74 0a 20 20 68 64 5f 70 75 74  0 $flst.  hd_put
2fc0: 73 20 22 3c 2f 70 3e 5c 6e 22 0a 7d 0a 0a 23 20  s "</p>\n".}..# 
2fd0: 4f 75 74 70 75 74 20 61 6c 6c 20 74 68 65 20 72  Output all the r
2fe0: 65 63 6f 72 64 73 0a 23 0a 66 6f 72 65 61 63 68  ecords.#.foreach
2ff0: 20 63 20 5b 6c 73 6f 72 74 20 24 63 6f 6e 74 65   c [lsort $conte
3000: 6e 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  nt] {.  foreach 
3010: 7b 6b 65 79 20 74 69 74 6c 65 20 74 79 70 65 20  {key title type 
3020: 6b 65 79 77 6f 72 64 73 20 62 6f 64 79 20 63 6f  keywords body co
3030: 64 65 7d 20 24 63 20 62 72 65 61 6b 0a 20 20 73  de} $c break.  s
3040: 65 74 20 6b 77 20 5b 70 72 65 66 65 72 72 65 64  et kw [preferred
3050: 5f 6b 65 79 77 6f 72 64 20 5b 6c 73 6f 72 74 20  _keyword [lsort 
3060: 24 6b 65 79 77 6f 72 64 73 5d 5d 0a 20 20 68 64  $keywords]].  hd
3070: 5f 66 72 61 67 6d 65 6e 74 20 24 6b 77 0a 20 20  _fragment $kw.  
3080: 68 64 5f 6f 70 65 6e 5f 61 75 78 20 73 65 73 73  hd_open_aux sess
3090: 69 6f 6e 2f 5b 63 6f 6e 76 65 72 74 5f 6b 65 79  ion/[convert_key
30a0: 77 6f 72 64 5f 74 6f 5f 66 69 6c 65 6e 61 6d 65  word_to_filename
30b0: 20 24 6b 77 5d 0a 20 20 68 64 5f 68 65 61 64 65   $kw].  hd_heade
30c0: 72 20 24 74 69 74 6c 65 0a 20 20 68 64 5f 65 6e  r $title.  hd_en
30d0: 61 62 6c 65 5f 6d 61 69 6e 20 30 0a 20 20 68 64  able_main 0.  hd
30e0: 5f 70 75 74 73 20 7b 3c 61 20 68 72 65 66 3d 22  _puts {<a href="
30f0: 69 6e 74 72 6f 2e 68 74 6d 6c 22 3e 3c 68 32 3e  intro.html"><h2>
3100: 53 65 73 73 69 6f 6e 20 4d 6f 64 75 6c 65 20 43  Session Module C
3110: 20 49 6e 74 65 72 66 61 63 65 3c 2f 68 32 3e 3c   Interface</h2><
3120: 2f 61 3e 7d 0a 20 20 68 64 5f 65 6e 61 62 6c 65  /a>}.  hd_enable
3130: 5f 6d 61 69 6e 20 31 0a 20 20 65 76 61 6c 20 68  _main 1.  eval h
3140: 64 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65 79 77  d_keywords $keyw
3150: 6f 72 64 73 0a 0a 20 20 68 64 5f 70 75 74 73 20  ords..  hd_puts 
3160: 22 3c 68 32 3e 24 74 69 74 6c 65 3c 2f 68 32 3e  "<h2>$title</h2>
3170: 22 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 62 6c  ".  hd_puts "<bl
3180: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 22 0a  ockquote><pre>".
3190: 20 20 68 64 5f 70 75 74 73 20 22 24 63 6f 64 65    hd_puts "$code
31a0: 22 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 70  ".  hd_puts "</p
31b0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
31c0: 22 0a 20 20 69 66 20 7b 24 73 75 70 70 6f 72 74  ".  if {$support
31d0: 65 64 28 24 6b 77 29 3d 3d 31 7d 20 7b 0a 20 20  ed($kw)==1} {.  
31e0: 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 7b 3c 70    hd_resolve {<p
31f0: 3e 3c 62 3e 49 6d 70 6f 72 74 61 6e 74 3a 3c 2f  ><b>Important:</
3200: 62 3e 20 54 68 69 73 20 69 6e 74 65 72 66 61 63  b> This interfac
3210: 65 20 69 73 20 5b 65 78 70 65 72 69 6d 65 6e 74  e is [experiment
3220: 61 6c 5d 20 7d 0a 20 20 20 20 68 64 5f 72 65 73  al] }.    hd_res
3230: 6f 6c 76 65 20 7b 61 6e 64 20 69 73 20 73 75 62  olve {and is sub
3240: 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 77  ject to change w
3250: 69 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e 3c 2f  ithout notice.</
3260: 70 3e 7d 0a 20 20 7d 0a 20 20 72 65 67 73 75 62  p>}.  }.  regsub
3270: 20 2d 61 6c 6c 20 22 5c 6e 5c 6e 2b 22 20 24 62   -all "\n\n+" $b
3280: 6f 64 79 20 22 3c 2f 70 3e 5c 6e 5c 6e 3c 70 3e  ody "</p>\n\n<p>
3290: 22 20 62 6f 64 79 0a 20 20 68 64 5f 72 65 73 6f  " body.  hd_reso
32a0: 6c 76 65 20 3c 70 3e 24 62 6f 64 79 3c 2f 70 3e  lve <p>$body</p>
32b0: 0a 20 20 73 68 6f 77 5f 6d 65 74 68 6f 64 73 5f  .  show_methods_
32c0: 6f 66 5f 6f 62 6a 65 63 74 20 63 3a 24 6b 77 20  of_object c:$kw 
32d0: 43 6f 6e 73 74 72 75 63 74 6f 72 0a 20 20 73 68  Constructor.  sh
32e0: 6f 77 5f 6d 65 74 68 6f 64 73 5f 6f 66 5f 6f 62  ow_methods_of_ob
32f0: 6a 65 63 74 20 64 3a 24 6b 77 20 44 65 73 74 72  ject d:$kw Destr
3300: 75 63 74 6f 72 0a 20 20 73 68 6f 77 5f 6d 65 74  uctor.  show_met
3310: 68 6f 64 73 5f 6f 66 5f 6f 62 6a 65 63 74 20 6d  hods_of_object m
3320: 3a 24 6b 77 20 4d 65 74 68 6f 64 0a 20 20 68 64  :$kw Method.  hd
3330: 5f 65 6e 61 62 6c 65 5f 6d 61 69 6e 20 30 0a 20  _enable_main 0. 
3340: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 53 65 65   hd_puts {<p>See
3350: 20 61 6c 73 6f 20 6c 69 73 74 73 20 6f 66 0a 20   also lists of. 
3360: 20 3c 61 20 68 72 65 66 3d 22 6f 62 6a 6c 69 73   <a href="objlis
3370: 74 2e 68 74 6d 6c 22 3e 4f 62 6a 65 63 74 73 3c  t.html">Objects<
3380: 2f 61 3e 2c 0a 20 20 3c 61 20 68 72 65 66 3d 22  /a>,.  <a href="
3390: 63 6f 6e 73 74 6c 69 73 74 2e 68 74 6d 6c 22 3e  constlist.html">
33a0: 43 6f 6e 73 74 61 6e 74 73 3c 2f 61 3e 2c 20 61  Constants</a>, a
33b0: 6e 64 0a 20 20 3c 61 20 68 72 65 66 3d 22 66 75  nd.  <a href="fu
33c0: 6e 63 6c 69 73 74 2e 68 74 6d 6c 22 3e 46 75 6e  nclist.html">Fun
33d0: 63 74 69 6f 6e 73 3c 2f 61 3e 2e 3c 2f 70 3e 7d  ctions</a>.</p>}
33e0: 0a 20 20 68 64 5f 65 6e 61 62 6c 65 5f 6d 61 69  .  hd_enable_mai
33f0: 6e 20 31 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 61  n 1.  hd_close_a
3400: 75 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68  ux.  hd_puts "<h
3410: 72 3e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a           r>".}.</tcl>.