Hex Artifact Content

Artifact cc9a9d6176aa2dd7156699c633956803431c1178:


0000: 64 69 66 66 20 2d 75 4e 72 20 74 63 6c 76 66 73  diff -uNr tclvfs
0010: 2d 32 30 30 38 30 35 30 33 2f 6c 69 62 72 61 72  -20080503/librar
0020: 79 2f 76 66 73 6c 69 62 2e 74 63 6c 20 74 63 6c  y/vfslib.tcl tcl
0030: 76 66 73 2d 32 30 30 38 30 35 30 33 2d 73 75 70  vfs-20080503-sup
0040: 70 6f 72 74 6e 61 74 69 76 65 7a 6c 69 62 2f 6c  portnativezlib/l
0050: 69 62 72 61 72 79 2f 76 66 73 6c 69 62 2e 74 63  ibrary/vfslib.tc
0060: 6c 0a 2d 2d 2d 20 74 63 6c 76 66 73 2d 32 30 30  l.--- tclvfs-200
0070: 38 30 35 30 33 2f 6c 69 62 72 61 72 79 2f 76 66  80503/library/vf
0080: 73 6c 69 62 2e 74 63 6c 09 32 30 30 36 2d 30 39  slib.tcl.2006-09
0090: 2d 31 34 20 31 36 3a 33 39 3a 35 37 2e 30 30 30  -14 16:39:57.000
00a0: 30 30 30 30 30 30 20 2d 30 35 30 30 0a 2b 2b 2b  000000 -0500.+++
00b0: 20 74 63 6c 76 66 73 2d 32 30 30 38 30 35 30 33   tclvfs-20080503
00c0: 2d 73 75 70 70 6f 72 74 6e 61 74 69 76 65 7a 6c  -supportnativezl
00d0: 69 62 2f 6c 69 62 72 61 72 79 2f 76 66 73 6c 69  ib/library/vfsli
00e0: 62 2e 74 63 6c 09 32 30 31 32 2d 31 30 2d 30 38  b.tcl.2012-10-08
00f0: 20 31 34 3a 33 30 3a 35 30 2e 39 33 30 37 37 39   14:30:50.930779
0100: 30 31 31 20 2d 30 35 30 30 0a 40 40 20 2d 35 2c  011 -0500.@@ -5,
0110: 36 20 2b 35 2c 31 36 20 40 40 0a 20 0a 20 6e 61  6 +5,16 @@. . na
0120: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76  mespace eval ::v
0130: 66 73 20 7b 0a 20 20 20 20 20 76 61 72 69 61 62  fs {.     variab
0140: 6c 65 20 7a 73 65 71 20 30 09 3b 23 20 75 73 65  le zseq 0.;# use
0150: 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 65  d to generate te
0160: 6d 70 20 7a 73 74 72 65 61 6d 20 63 6d 64 20 6e  mp zstream cmd n
0170: 61 6d 65 73 0a 2b 20 20 20 20 76 61 72 69 61 62  ames.+    variab
0180: 6c 65 20 7a 6c 69 62 50 6b 67 20 30 20 20 3b 23  le zlibPkg 0  ;#
0190: 20 55 73 65 20 54 63 6c 20 38 2e 36 2b 20 7a 6c   Use Tcl 8.6+ zl
01a0: 69 62 20 63 6f 6d 6d 61 6e 64 2c 20 6f 72 20 7a  ib command, or z
01b0: 6c 69 62 20 70 61 63 6b 61 67 65 0a 2b 7d 0a 2b  lib package.+}.+
01c0: 0a 2b 0a 2b 23 20 57 6f 72 6b 20 77 69 74 68 20  .+.+# Work with 
01d0: 74 68 65 20 54 63 6c 20 38 2e 36 2b 20 62 75 69  the Tcl 8.6+ bui
01e0: 6c 74 2d 69 6e 20 7a 6c 69 62 20 63 6f 6d 6d 61  lt-in zlib comma
01f0: 6e 64 20 6f 72 20 74 68 65 20 7a 6c 69 62 20 70  nd or the zlib p
0200: 61 63 6b 61 67 65 2c 20 69 66 20 61 76 61 69 6c  ackage, if avail
0210: 61 62 6c 65 0a 2b 63 61 74 63 68 20 7b 0a 2b 09  able.+catch {.+.
0220: 73 65 74 20 3a 3a 76 66 73 3a 3a 7a 6c 69 62 56  set ::vfs::zlibV
0230: 65 72 73 20 5b 70 61 63 6b 61 67 65 20 70 72 65  ers [package pre
0240: 73 65 6e 74 20 7a 6c 69 62 5d 0a 2b 09 69 66 20  sent zlib].+.if 
0250: 7b 24 3a 3a 76 66 73 3a 3a 7a 6c 69 62 56 65 72  {$::vfs::zlibVer
0260: 73 20 3d 3d 20 22 31 2e 31 22 7d 20 7b 0a 2b 09  s == "1.1"} {.+.
0270: 09 73 65 74 20 3a 3a 76 66 73 3a 3a 7a 6c 69 62  .set ::vfs::zlib
0280: 50 6b 67 20 31 0a 2b 09 7d 0a 20 7d 0a 20 0a 20  Pkg 1.+.}. }. . 
0290: 23 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  # for backwards 
02a0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 0a 40 40  compatibility.@@
02b0: 20 2d 39 34 2c 38 20 2b 31 30 34 2c 31 32 20 40   -94,8 +104,12 @
02c0: 40 0a 20 09 09 7d 0a 20 09 09 23 20 74 6f 20 73  @. ..}. ..# to s
02d0: 65 65 6b 20 62 61 63 6b 2c 20 72 65 77 69 6e 64  eek back, rewind
02e0: 2c 20 69 2e 65 2e 20 73 74 61 72 74 20 66 72 6f  , i.e. start fro
02f0: 6d 20 73 63 72 61 74 63 68 0a 20 09 09 69 66 20  m scratch. ..if 
0300: 7b 24 61 31 20 3c 20 24 70 6f 73 7d 20 7b 0a 2d  {$a1 < $pos} {.-
0310: 09 09 20 20 20 20 72 65 6e 61 6d 65 20 24 7a 63  ..    rename $zc
0320: 6d 64 20 22 22 0a 2d 09 09 20 20 20 20 7a 6c 69  md "".-..    zli
0330: 62 20 24 69 6d 6f 64 65 20 24 7a 63 6d 64 0a 2b  b $imode $zcmd.+
0340: 09 09 20 20 20 20 69 66 20 7b 24 3a 3a 76 66 73  ..    if {$::vfs
0350: 3a 3a 7a 6c 69 62 50 6b 67 7d 20 7b 0a 2b 20 20  ::zlibPkg} {.+  
0360: 20 20 09 09 09 72 65 6e 61 6d 65 20 24 7a 63 6d    ...rename $zcm
0370: 64 20 22 22 0a 2b 20 20 20 20 09 09 09 7a 6c 69  d "".+    ...zli
0380: 62 20 24 69 6d 6f 64 65 20 24 7a 63 6d 64 0a 2b  b $imode $zcmd.+
0390: 09 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b  ..    } else {.+
03a0: 09 09 09 24 7a 63 6d 64 20 72 65 73 65 74 0a 2b  ...$zcmd reset.+
03b0: 09 09 20 20 20 20 7d 0a 20 09 09 20 20 20 20 73  ..    }. ..    s
03c0: 65 65 6b 20 24 69 66 64 20 30 0a 20 09 09 20 20  eek $ifd 0. ..  
03d0: 20 20 73 65 74 20 70 6f 73 20 30 0a 20 09 09 7d    set pos 0. ..}
03e0: 0a 40 40 20 2d 31 31 30 2c 31 39 20 2b 31 32 34  .@@ -110,19 +124
03f0: 2c 32 36 20 40 40 0a 20 09 09 72 65 74 75 72 6e  ,26 @@. ..return
0400: 20 24 70 6f 73 0a 20 09 20 20 20 20 7d 0a 20 09   $pos. .    }. .
0410: 20 20 20 20 72 65 61 64 20 7b 0a 2b 20 20 20 20      read {.+    
0420: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
0430: 24 3a 3a 76 66 73 3a 3a 7a 6c 69 62 50 6b 67 7d  $::vfs::zlibPkg}
0440: 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20   {.+            
0450: 20 20 20 20 20 20 20 73 65 74 20 7a 70 75 74 63         set zputc
0460: 6d 64 20 66 69 6c 6c 0a 2b 20 20 20 20 20 20 20  md fill.+       
0470: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
0480: 7a 67 65 74 63 6d 64 20 64 72 61 69 6e 0a 2b 20  zgetcmd drain.+ 
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
04a0: 20 65 6c 73 65 20 7b 0a 2b 20 20 20 20 20 20 20   else {.+       
04b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
04c0: 7a 70 75 74 63 6d 64 20 70 75 74 0a 2b 20 20 20  zputcmd put.+   
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04e0: 73 65 74 20 7a 67 65 74 63 6d 64 20 67 65 74 0a  set zgetcmd get.
04f0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +               
0500: 20 7d 0a 20 09 09 73 65 74 20 72 20 22 22 0a 20   }. ..set r "". 
0510: 09 09 73 65 74 20 6e 20 24 61 31 0a 20 09 09 23  ..set n $a1. ..#
0520: 70 75 74 73 20 73 74 64 65 72 72 20 22 20 77 61  puts stderr " wa
0530: 6e 74 20 24 6e 20 7a 20 24 7a 63 6d 64 20 70 6f  nt $n z $zcmd po
0540: 73 20 24 70 6f 73 20 69 6c 65 6e 20 24 69 6c 65  s $pos ilen $ile
0550: 6e 22 0a 20 09 09 69 66 20 7b 24 6e 20 2b 20 24  n". ..if {$n + $
0560: 70 6f 73 20 3e 20 24 69 6c 65 6e 7d 20 7b 20 73  pos > $ilen} { s
0570: 65 74 20 6e 20 5b 65 78 70 72 20 7b 24 69 6c 65  et n [expr {$ile
0580: 6e 20 2d 20 24 70 6f 73 7d 5d 20 7d 0a 20 09 09  n - $pos}] }. ..
0590: 77 68 69 6c 65 20 7b 24 6e 20 3e 20 30 7d 20 7b  while {$n > 0} {
05a0: 0a 2d 09 09 20 20 20 20 69 66 20 7b 5b 24 7a 63  .-..    if {[$zc
05b0: 6d 64 20 66 69 6c 6c 5d 20 3d 3d 20 30 7d 20 7b  md fill] == 0} {
05c0: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .+              
05d0: 20 20 20 20 20 20 69 66 20 7b 21 5b 65 6f 66 20        if {![eof 
05e0: 24 69 66 64 5d 7d 20 7b 0a 20 09 09 20 20 20 20  $ifd]} {. ..    
05f0: 20 20 20 20 73 65 74 20 63 20 5b 65 78 70 72 20      set c [expr 
0600: 7b 24 63 6c 65 6e 20 2d 20 5b 74 65 6c 6c 20 24  {$clen - [tell $
0610: 69 66 64 5d 7d 5d 0a 20 09 09 09 69 66 20 7b 24  ifd]}]. ...if {$
0620: 63 20 3e 20 34 30 39 36 7d 20 7b 20 73 65 74 20  c > 4096} { set 
0630: 63 20 34 30 39 36 20 7d 0a 20 09 09 09 73 65 74  c 4096 }. ...set
0640: 20 64 61 74 61 20 5b 72 65 61 64 20 24 69 66 64   data [read $ifd
0650: 20 24 63 5d 0a 20 09 09 09 23 70 75 74 73 20 22   $c]. ...#puts "
0660: 66 69 6c 6c 65 64 20 24 63 20 5b 73 74 72 69 6e  filled $c [strin
0670: 67 20 6c 65 6e 67 74 68 20 24 64 61 74 61 5d 22  g length $data]"
0680: 0a 2d 09 09 09 24 7a 63 6d 64 20 66 69 6c 6c 20  .-...$zcmd fill 
0690: 24 64 61 74 61 0a 2d 09 09 20 20 20 20 7d 0a 2d  $data.-..    }.-
06a0: 09 09 20 20 20 20 73 65 74 20 64 61 74 61 20 5b  ..    set data [
06b0: 24 7a 63 6d 64 20 64 72 61 69 6e 20 24 6e 5d 0a  $zcmd drain $n].
06c0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +               
06d0: 20 20 20 20 20 20 20 20 20 24 7a 63 6d 64 20 24           $zcmd $
06e0: 7a 70 75 74 63 6d 64 20 24 64 61 74 61 0a 2b 20  zputcmd $data.+ 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 7d 0a 2b 09 09 20 20 20 20 73 65 74 20     }.+..    set 
0710: 64 61 74 61 20 5b 24 7a 63 6d 64 20 24 7a 67 65  data [$zcmd $zge
0720: 74 63 6d 64 20 24 6e 5d 0a 20 09 09 20 20 20 20  tcmd $n]. ..    
0730: 23 70 75 74 73 20 73 74 64 65 72 72 20 22 20 72  #puts stderr " r
0740: 65 61 64 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  ead [string leng
0750: 74 68 20 24 64 61 74 61 5d 22 0a 20 09 09 20 20  th $data]". ..  
0760: 20 20 69 66 20 7b 24 64 61 74 61 20 65 71 20 22    if {$data eq "
0770: 22 7d 20 62 72 65 61 6b 0a 20 09 09 20 20 20 20  "} break. ..    
0780: 61 70 70 65 6e 64 20 72 20 24 64 61 74 61 0a 40  append r $data.@
0790: 40 20 2d 31 34 31 2c 38 20 2b 31 36 32 2c 31 32  @ -141,8 +162,12
07a0: 20 40 40 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20   @@.     }. .   
07b0: 20 20 70 72 6f 63 20 76 66 73 3a 3a 7a 73 74 72    proc vfs::zstr
07c0: 65 61 6d 20 7b 6d 6f 64 65 20 69 66 64 20 63 6c  eam {mode ifd cl
07d0: 65 6e 20 69 6c 65 6e 7d 20 7b 0a 2d 09 73 65 74  en ilen} {.-.set
07e0: 20 63 6e 61 6d 65 20 5f 7a 73 74 72 65 61 6d 5f   cname _zstream_
07f0: 5b 69 6e 63 72 20 3a 3a 76 66 73 3a 3a 7a 73 65  [incr ::vfs::zse
0800: 71 5d 0a 2d 09 7a 6c 69 62 20 73 24 6d 6f 64 65  q].-.zlib s$mode
0810: 20 24 63 6e 61 6d 65 0a 2b 20 20 20 20 20 20 20   $cname.+       
0820: 20 69 66 20 7b 24 3a 3a 76 66 73 3a 3a 7a 6c 69   if {$::vfs::zli
0830: 62 50 6b 67 7d 20 7b 0a 2b 20 20 20 20 20 20 20  bPkg} {.+       
0840: 20 20 20 20 20 73 65 74 20 63 6e 61 6d 65 20 5f       set cname _
0850: 7a 73 74 72 65 61 6d 5f 5b 69 6e 63 72 20 3a 3a  zstream_[incr ::
0860: 76 66 73 3a 3a 7a 73 65 71 5d 0a 2b 20 20 20 20  vfs::zseq].+    
0870: 20 20 20 20 20 20 20 20 7a 6c 69 62 20 73 24 6d          zlib s$m
0880: 6f 64 65 20 24 63 6e 61 6d 65 0a 2b 20 20 20 20  ode $cname.+    
0890: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20      } else {.+  
08a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6e            set cn
08b0: 61 6d 65 20 5b 7a 6c 69 62 20 73 74 72 65 61 6d  ame [zlib stream
08c0: 20 24 6d 6f 64 65 5d 0a 2b 20 20 20 20 20 20 20   $mode].+       
08d0: 20 7d 0a 20 09 73 65 74 20 63 6d 64 20 5b 6c 69   }. .set cmd [li
08e0: 73 74 20 3a 3a 76 66 73 3a 3a 7a 73 74 72 65 61  st ::vfs::zstrea
08f0: 6d 5f 68 61 6e 64 6c 65 72 20 24 63 6e 61 6d 65  m_handler $cname
0900: 20 24 69 66 64 20 24 63 6c 65 6e 20 24 69 6c 65   $ifd $clen $ile
0910: 6e 20 73 24 6d 6f 64 65 5d 0a 20 09 73 65 74 20  n s$mode]. .set 
0920: 66 64 20 5b 72 65 63 68 61 6e 20 24 63 6d 64 20  fd [rechan $cmd 
0930: 32 5d 0a 20 09 73 65 74 20 3a 3a 76 66 73 3a 3a  2]. .set ::vfs::
0940: 5f 7a 73 74 72 65 61 6d 5f 70 6f 73 28 24 66 64  _zstream_pos($fd
0950: 29 20 30 0a                                      ) 0.