/ Hex Artifact Content
Login

Artifact 37902864b63794e9bf59393b8887e21a9cbd4db8:


0000: 23 20 32 30 31 30 20 4a 75 6e 65 20 30 33 0a 23  # 2010 June 03.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 0a 23 20 54 68 69 73 20 66 69  ****.#.# This fi
0170: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6d 6d  le contains comm
0180: 6f 6e 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  on code used by 
0190: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 6d  many different m
01a0: 61 6c 6c 6f 63 20 74 65 73 74 73 0a 23 20 77 69  alloc tests.# wi
01b0: 74 68 69 6e 20 74 68 65 20 74 65 73 74 20 73 75  thin the test su
01c0: 69 74 65 2e 0a 23 0a 0a 70 72 6f 63 20 77 61 6c  ite..#..proc wal
01d0: 5f 66 69 6c 65 5f 73 69 7a 65 20 7b 6e 46 72 61  _file_size {nFra
01e0: 6d 65 20 70 67 73 7a 7d 20 7b 0a 20 20 65 78 70  me pgsz} {.  exp
01f0: 72 20 7b 33 32 20 2b 20 28 24 70 67 73 7a 2b 32  r {32 + ($pgsz+2
0200: 34 29 2a 24 6e 46 72 61 6d 65 7d 0a 7d 0a 0a 70  4)*$nFrame}.}..p
0210: 72 6f 63 20 77 61 6c 5f 66 72 61 6d 65 5f 63 6f  roc wal_frame_co
0220: 75 6e 74 20 7b 7a 46 69 6c 65 20 70 67 73 7a 7d  unt {zFile pgsz}
0230: 20 7b 0a 20 20 69 66 20 7b 5b 66 69 6c 65 20 65   {.  if {[file e
0240: 78 69 73 74 73 20 24 7a 46 69 6c 65 5d 3d 3d 30  xists $zFile]==0
0250: 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20  } { return 0 }. 
0260: 20 73 65 74 20 66 20 5b 66 69 6c 65 20 73 69 7a   set f [file siz
0270: 65 20 24 7a 46 69 6c 65 5d 0a 20 20 69 66 20 7b  e $zFile].  if {
0280: 24 66 20 3c 20 33 32 7d 20 7b 20 72 65 74 75 72  $f < 32} { retur
0290: 6e 20 30 20 7d 0a 20 20 65 78 70 72 20 7b 28 24  n 0 }.  expr {($
02a0: 66 20 2d 20 33 32 29 20 2f 20 28 24 70 67 73 7a  f - 32) / ($pgsz
02b0: 2b 32 34 29 7d 0a 7d 0a 0a 70 72 6f 63 20 77 61  +24)}.}..proc wa
02c0: 6c 5f 63 6b 73 75 6d 5f 69 6e 74 6c 69 73 74 20  l_cksum_intlist 
02d0: 7b 63 6b 76 31 20 63 6b 76 32 20 69 6e 74 6c 69  {ckv1 ckv2 intli
02e0: 73 74 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 63  st} {.  upvar $c
02f0: 6b 76 31 20 63 31 0a 20 20 75 70 76 61 72 20 24  kv1 c1.  upvar $
0300: 63 6b 76 32 20 63 32 0a 20 20 66 6f 72 65 61 63  ckv2 c2.  foreac
0310: 68 20 7b 76 31 20 76 32 7d 20 24 69 6e 74 6c 69  h {v1 v2} $intli
0320: 73 74 20 7b 0a 20 20 20 20 73 65 74 20 63 31 20  st {.    set c1 
0330: 5b 65 78 70 72 20 7b 28 24 63 31 20 2b 20 24 76  [expr {($c1 + $v
0340: 31 20 2b 20 24 63 32 29 26 30 78 46 46 46 46 46  1 + $c2)&0xFFFFF
0350: 46 46 46 7d 5d 0a 20 20 20 20 73 65 74 20 63 32  FFF}].    set c2
0360: 20 5b 65 78 70 72 20 7b 28 24 63 32 20 2b 20 24   [expr {($c2 + $
0370: 76 32 20 2b 20 24 63 31 29 26 30 78 46 46 46 46  v2 + $c1)&0xFFFF
0380: 46 46 46 46 7d 5d 0a 20 20 7d 0a 7d 0a 0a 0a 23  FFFF}].  }.}...#
0390: 20 54 68 69 73 20 70 72 6f 63 20 63 61 6c 63 75   This proc calcu
03a0: 6c 61 74 65 73 20 63 68 65 63 6b 73 75 6d 73 20  lates checksums 
03b0: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
03c0: 61 73 20 74 68 6f 73 65 20 75 73 65 64 20 62 79  as those used by
03d0: 20 53 51 4c 69 74 65 20 0a 23 20 69 6e 20 57 41   SQLite .# in WA
03e0: 4c 20 66 69 6c 65 73 2e 20 49 66 20 74 68 65 20  L files. If the 
03f0: 24 65 6e 64 69 61 6e 20 61 72 67 75 6d 65 6e 74  $endian argument
0400: 20 69 73 20 22 62 69 67 22 2c 20 74 68 65 6e 20   is "big", then 
0410: 63 68 65 63 6b 73 75 6d 73 20 61 72 65 0a 23 20  checksums are.# 
0420: 63 61 6c 63 75 6c 61 74 65 64 20 62 79 20 69 6e  calculated by in
0430: 74 65 72 70 72 65 74 69 6e 67 20 64 61 74 61 20  terpreting data 
0440: 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 62  as an array of b
0450: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
0460: 72 73 2e 20 49 66 0a 23 20 69 74 20 69 73 20 22  rs. If.# it is "
0470: 6c 69 74 74 6c 65 22 2c 20 64 61 74 61 20 69 73  little", data is
0480: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
0490: 61 6e 20 61 72 72 61 79 20 6f 66 20 6c 69 74 74  an array of litt
04a0: 6c 65 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  le-endian intege
04b0: 72 73 2e 0a 23 0a 70 72 6f 63 20 77 61 6c 5f 63  rs..#.proc wal_c
04c0: 6b 73 75 6d 20 7b 65 6e 64 69 61 6e 20 63 6b 76  ksum {endian ckv
04d0: 31 20 63 6b 76 32 20 62 6c 6f 62 7d 20 7b 0a 20  1 ckv2 blob} {. 
04e0: 20 75 70 76 61 72 20 24 63 6b 76 31 20 63 31 0a   upvar $ckv1 c1.
04f0: 20 20 75 70 76 61 72 20 24 63 6b 76 32 20 63 32    upvar $ckv2 c2
0500: 0a 0a 20 20 69 66 20 7b 24 65 6e 64 69 61 6e 21  ..  if {$endian!
0510: 3d 22 62 69 67 22 20 26 26 20 24 65 6e 64 69 61  ="big" && $endia
0520: 6e 21 3d 22 6c 69 74 74 6c 65 22 7d 20 7b 0a 20  n!="little"} {. 
0530: 20 20 20 72 65 74 75 72 6e 20 2d 65 72 72 6f 72     return -error
0540: 20 22 42 61 64 20 76 61 6c 75 65 20 5c 22 24 65   "Bad value \"$e
0550: 6e 64 69 61 6e 5c 22 20 2d 20 6d 75 73 74 20 62  ndian\" - must b
0560: 65 20 5c 22 62 69 67 5c 22 20 6f 72 20 5c 22 6c  e \"big\" or \"l
0570: 69 74 74 6c 65 5c 22 22 0a 20 20 7d 0a 20 20 73  ittle\"".  }.  s
0580: 65 74 20 73 63 61 6e 70 61 74 74 65 72 6e 20 49  et scanpattern I
0590: 2a 0a 20 20 69 66 20 7b 24 65 6e 64 69 61 6e 20  *.  if {$endian 
05a0: 3d 3d 20 22 6c 69 74 74 6c 65 22 7d 20 7b 20 73  == "little"} { s
05b0: 65 74 20 73 63 61 6e 70 61 74 74 65 72 6e 20 69  et scanpattern i
05c0: 2a 20 7d 0a 0a 20 20 62 69 6e 61 72 79 20 73 63  * }..  binary sc
05d0: 61 6e 20 24 62 6c 6f 62 20 24 73 63 61 6e 70 61  an $blob $scanpa
05e0: 74 74 65 72 6e 20 76 61 6c 75 65 73 0a 20 20 77  ttern values.  w
05f0: 61 6c 5f 63 6b 73 75 6d 5f 69 6e 74 6c 69 73 74  al_cksum_intlist
0600: 20 63 31 20 63 32 20 24 76 61 6c 75 65 73 0a 7d   c1 c2 $values.}
0610: 0a 0a 70 72 6f 63 20 77 61 6c 5f 73 65 74 5f 77  ..proc wal_set_w
0620: 61 6c 68 64 72 20 7b 66 69 6c 65 6e 61 6d 65 20  alhdr {filename 
0630: 7b 69 6e 74 6c 69 73 74 20 7b 7d 7d 7d 20 7b 0a  {intlist {}}} {.
0640: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
0650: 69 6e 74 6c 69 73 74 5d 3d 3d 36 7d 20 7b 0a 20  intlist]==6} {. 
0660: 20 20 20 73 65 74 20 62 6c 6f 62 20 5b 62 69 6e     set blob [bin
0670: 61 72 79 20 66 6f 72 6d 61 74 20 49 36 20 24 69  ary format I6 $i
0680: 6e 74 6c 69 73 74 5d 0a 20 20 20 20 73 65 74 20  ntlist].    set 
0690: 65 6e 64 69 61 6e 20 6c 69 74 74 6c 65 0a 20 20  endian little.  
06a0: 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 69    if {[lindex $i
06b0: 6e 74 6c 69 73 74 20 30 5d 20 26 20 30 78 30 30  ntlist 0] & 0x00
06c0: 30 30 30 30 30 31 7d 20 7b 20 73 65 74 20 65 6e  000001} { set en
06d0: 64 69 61 6e 20 62 69 67 20 7d 0a 20 20 20 20 73  dian big }.    s
06e0: 65 74 20 63 31 20 30 0a 20 20 20 20 73 65 74 20  et c1 0.    set 
06f0: 63 32 20 30 0a 20 20 20 20 77 61 6c 5f 63 6b 73  c2 0.    wal_cks
0700: 75 6d 20 24 65 6e 64 69 61 6e 20 63 31 20 63 32  um $endian c1 c2
0710: 20 24 62 6c 6f 62 0a 20 20 20 20 61 70 70 65 6e   $blob.    appen
0720: 64 20 62 6c 6f 62 20 5b 62 69 6e 61 72 79 20 66  d blob [binary f
0730: 6f 72 6d 61 74 20 49 49 20 24 63 31 20 24 63 32  ormat II $c1 $c2
0740: 5d 0a 0a 20 20 20 20 73 65 74 20 66 64 20 5b 6f  ]..    set fd [o
0750: 70 65 6e 20 24 66 69 6c 65 6e 61 6d 65 20 72 2b  pen $filename r+
0760: 5d 0a 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65  ].    fconfigure
0770: 20 24 66 64 20 2d 74 72 61 6e 73 6c 61 74 69 6f   $fd -translatio
0780: 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 66 63 6f  n binary.    fco
0790: 6e 66 69 67 75 72 65 20 24 66 64 20 2d 65 6e 63  nfigure $fd -enc
07a0: 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a 20 20 20  oding binary.   
07b0: 20 73 65 65 6b 20 24 66 64 20 30 0a 20 20 20 20   seek $fd 0.    
07c0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
07d0: 24 66 64 20 24 62 6c 6f 62 0a 20 20 20 20 63 6c  $fd $blob.    cl
07e0: 6f 73 65 20 24 66 64 0a 20 20 7d 0a 0a 20 20 73  ose $fd.  }..  s
07f0: 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 66 69 6c  et fd [open $fil
0800: 65 6e 61 6d 65 5d 0a 20 20 66 63 6f 6e 66 69 67  ename].  fconfig
0810: 75 72 65 20 24 66 64 20 2d 74 72 61 6e 73 6c 61  ure $fd -transla
0820: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 66 63  tion binary.  fc
0830: 6f 6e 66 69 67 75 72 65 20 24 66 64 20 2d 65 6e  onfigure $fd -en
0840: 63 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a 20 20  coding binary.  
0850: 73 65 74 20 62 6c 6f 62 20 5b 72 65 61 64 20 24  set blob [read $
0860: 66 64 20 32 34 5d 0a 20 20 63 6c 6f 73 65 20 24  fd 24].  close $
0870: 66 64 0a 0a 20 20 62 69 6e 61 72 79 20 73 63 61  fd..  binary sca
0880: 6e 20 24 62 6c 6f 62 20 49 36 20 69 6e 74 73 0a  n $blob I6 ints.
0890: 20 20 73 65 74 20 69 6e 74 73 0a 7d 0a 0a 70 72    set ints.}..pr
08a0: 6f 63 20 77 61 6c 5f 66 69 78 5f 77 61 6c 69 6e  oc wal_fix_walin
08b0: 64 65 78 5f 63 6b 73 75 6d 20 7b 68 64 72 76 61  dex_cksum {hdrva
08c0: 72 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 68 64  r} {.  upvar $hd
08d0: 72 76 61 72 20 68 64 72 0a 20 20 73 65 74 20 63  rvar hdr.  set c
08e0: 31 20 30 0a 20 20 73 65 74 20 63 32 20 30 0a 20  1 0.  set c2 0. 
08f0: 20 77 61 6c 5f 63 6b 73 75 6d 5f 69 6e 74 6c 69   wal_cksum_intli
0900: 73 74 20 63 31 20 63 32 20 5b 6c 72 61 6e 67 65  st c1 c2 [lrange
0910: 20 24 68 64 72 20 30 20 39 5d 0a 20 20 6c 73 65   $hdr 0 9].  lse
0920: 74 20 68 64 72 20 31 30 20 24 63 31 0a 20 20 6c  t hdr 10 $c1.  l
0930: 73 65 74 20 68 64 72 20 31 31 20 24 63 32 0a 7d  set hdr 11 $c2.}
0940: 0a 0a 23 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  ..# This command
0950: 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 24 66   assumes that $f
0960: 69 6c 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ile is the name 
0970: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69  of a database fi
0980: 6c 65 20 6f 70 65 6e 65 64 0a 23 20 69 6e 20 77  le opened.# in w
0990: 61 6c 20 6d 6f 64 65 20 75 73 69 6e 67 20 61 20  al mode using a 
09a0: 5b 74 65 73 74 76 66 73 5d 20 56 46 53 2e 20 49  [testvfs] VFS. I
09b0: 74 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 74  t returns a list
09c0: 20 6f 66 20 74 68 65 20 31 32 20 33 32 2d 62 69   of the 12 32-bi
09d0: 74 0a 23 20 69 6e 74 65 67 65 72 73 20 74 68 61  t.# integers tha
09e0: 74 20 6d 61 6b 65 20 75 70 20 74 68 65 20 77 61  t make up the wa
09f0: 6c 2d 69 6e 64 65 78 2d 68 65 61 64 65 72 20 66  l-index-header f
0a00: 6f 72 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c  or the named fil
0a10: 65 2e 0a 23 0a 70 72 6f 63 20 73 65 74 5f 74 76  e..#.proc set_tv
0a20: 66 73 5f 68 64 72 20 7b 66 69 6c 65 20 61 72 67  fs_hdr {file arg
0a30: 73 7d 20 7b 0a 0a 20 20 23 20 53 65 74 20 24 6e  s} {..  # Set $n
0a40: 48 64 72 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  Hdr to the numbe
0a50: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
0a60: 65 20 77 61 6c 2d 69 6e 64 65 78 20 68 65 61 64  e wal-index head
0a70: 65 72 3a 0a 20 20 73 65 74 20 6e 48 64 72 20 34  er:.  set nHdr 4
0a80: 38 0a 20 20 73 65 74 20 6e 49 6e 74 20 5b 65 78  8.  set nInt [ex
0a90: 70 72 20 7b 24 6e 48 64 72 2f 34 7d 5d 0a 0a 20  pr {$nHdr/4}].. 
0aa0: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61   if {[llength $a
0ab0: 72 67 73 5d 3e 32 7d 20 7b 0a 20 20 20 20 65 72  rgs]>2} {.    er
0ac0: 72 6f 72 20 7b 77 72 6f 6e 67 20 23 20 61 72 67  ror {wrong # arg
0ad0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 73 65  s: should be "se
0ae0: 74 5f 74 76 66 73 5f 68 64 72 20 66 69 6c 65 4e  t_tvfs_hdr fileN
0af0: 61 6d 65 20 3f 76 61 6c 31 3f 20 3f 76 61 6c 32  ame ?val1? ?val2
0b00: 3f 22 7d 0a 20 20 7d 0a 0a 20 20 73 65 74 20 62  ?"}.  }..  set b
0b10: 6c 6f 62 20 5b 74 76 66 73 20 73 68 6d 20 24 66  lob [tvfs shm $f
0b20: 69 6c 65 5d 0a 20 20 69 66 20 7b 24 3a 3a 74 63  ile].  if {$::tc
0b30: 6c 5f 70 6c 61 74 66 6f 72 6d 28 62 79 74 65 4f  l_platform(byteO
0b40: 72 64 65 72 29 3d 3d 22 62 69 67 45 6e 64 69 61  rder)=="bigEndia
0b50: 6e 22 7d 20 7b 73 65 74 20 66 6d 74 20 49 7d 20  n"} {set fmt I} 
0b60: 7b 73 65 74 20 66 6d 74 20 69 7d 0a 0a 20 20 69  {set fmt i}..  i
0b70: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67  f {[llength $arg
0b80: 73 5d 7d 20 7b 0a 20 20 20 20 73 65 74 20 69 61  s]} {.    set ia
0b90: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 30   [lindex $args 0
0ba0: 5d 0a 20 20 20 20 73 65 74 20 69 62 20 24 69 61  ].    set ib $ia
0bb0: 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  .    if {[llengt
0bc0: 68 20 24 61 72 67 73 5d 3d 3d 32 7d 20 7b 0a 20  h $args]==2} {. 
0bd0: 20 20 20 20 20 73 65 74 20 69 62 20 5b 6c 69 6e       set ib [lin
0be0: 64 65 78 20 24 61 72 67 73 20 31 5d 0a 20 20 20  dex $args 1].   
0bf0: 20 7d 0a 20 20 20 20 62 69 6e 61 72 79 20 73 63   }.    binary sc
0c00: 61 6e 20 24 62 6c 6f 62 20 61 5b 65 78 70 72 20  an $blob a[expr 
0c10: 24 6e 48 64 72 2a 32 5d 61 2a 20 64 75 6d 6d 79  $nHdr*2]a* dummy
0c20: 20 74 61 69 6c 0a 20 20 20 20 73 65 74 20 62 6c   tail.    set bl
0c30: 6f 62 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61  ob [binary forma
0c40: 74 20 24 7b 66 6d 74 7d 24 7b 6e 49 6e 74 7d 24  t ${fmt}${nInt}$
0c50: 7b 66 6d 74 7d 24 7b 6e 49 6e 74 7d 61 2a 20 24  {fmt}${nInt}a* $
0c60: 69 61 20 24 69 62 20 24 74 61 69 6c 5d 0a 20 20  ia $ib $tail].  
0c70: 20 20 74 76 66 73 20 73 68 6d 20 24 66 69 6c 65    tvfs shm $file
0c80: 20 24 62 6c 6f 62 0a 20 20 7d 0a 0a 20 20 62 69   $blob.  }..  bi
0c90: 6e 61 72 79 20 73 63 61 6e 20 24 62 6c 6f 62 20  nary scan $blob 
0ca0: 24 7b 66 6d 74 7d 24 7b 6e 49 6e 74 7d 20 69 6e  ${fmt}${nInt} in
0cb0: 74 73 0a 20 20 72 65 74 75 72 6e 20 24 69 6e 74  ts.  return $int
0cc0: 73 0a 7d 0a 0a 70 72 6f 63 20 69 6e 63 72 5f 74  s.}..proc incr_t
0cd0: 76 66 73 5f 68 64 72 20 7b 66 69 6c 65 20 69 64  vfs_hdr {file id
0ce0: 78 20 69 6e 63 72 76 61 6c 7d 20 7b 0a 20 20 73  x incrval} {.  s
0cf0: 65 74 20 69 6e 74 73 20 5b 73 65 74 5f 74 76 66  et ints [set_tvf
0d00: 73 5f 68 64 72 20 24 66 69 6c 65 5d 0a 20 20 73  s_hdr $file].  s
0d10: 65 74 20 76 20 5b 6c 69 6e 64 65 78 20 24 69 6e  et v [lindex $in
0d20: 74 73 20 24 69 64 78 5d 0a 20 20 69 6e 63 72 20  ts $idx].  incr 
0d30: 76 20 24 69 6e 63 72 76 61 6c 0a 20 20 6c 73 65  v $incrval.  lse
0d40: 74 20 69 6e 74 73 20 24 69 64 78 20 24 76 0a 20  t ints $idx $v. 
0d50: 20 73 65 74 5f 74 76 66 73 5f 68 64 72 20 24 66   set_tvfs_hdr $f
0d60: 69 6c 65 20 24 69 6e 74 73 0a 7d 0a 0a 0a        ile $ints.}...