Tcl Source Code

Hex Artifact Content
Login

Artifact c618f207fe7b271bff00f811bea7d10b0dbd3d49:

Attachment "tclBinary.patch" to ticket [1665628fff] added by dvrsn 2007-02-23 09:09:53.
0000: 2a 2a 2a 20 74 63 6c 42 69 6e 61 72 79 2e 63 2e  *** tclBinary.c.
0010: 6f 72 69 67 09 53 75 6e 20 4f 63 74 20 32 33 20  orig.Sun Oct 23 
0020: 31 35 3a 30 31 3a 32 39 20 32 30 30 35 0a 2d 2d  15:01:29 2005.--
0030: 2d 20 74 63 6c 42 69 6e 61 72 79 2e 63 09 54 68  - tclBinary.c.Th
0040: 75 20 46 65 62 20 32 32 20 31 37 3a 35 37 3a 34  u Feb 22 17:57:4
0050: 32 20 32 30 30 37 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  2 2007.*********
0060: 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 31 31 2c 31  ******.*** 111,1
0070: 31 36 20 2a 2a 2a 2a 0a 2d 2d 2d 20 31 31 31 2c  16 ****.--- 111,
0080: 31 31 38 20 2d 2d 2d 2d 0a 20 20 09 09 09 09 20  118 ----.  .... 
0090: 2a 20 61 72 72 61 79 2e 20 2a 2f 0a 20 20 20 20  * array. */.    
00a0: 20 20 69 6e 74 20 61 6c 6c 6f 63 61 74 65 64 3b    int allocated;
00b0: 09 09 2f 2a 20 54 68 65 20 61 6d 6f 75 6e 74 20  ../* The amount 
00c0: 6f 66 20 73 70 61 63 65 20 61 63 74 75 61 6c 6c  of space actuall
00d0: 79 20 61 6c 6c 6f 63 61 74 65 64 0a 20 20 09 09  y allocated.  ..
00e0: 09 09 20 2a 20 6d 69 6e 75 73 20 31 20 62 79 74  .. * minus 1 byt
00f0: 65 2e 20 2a 2f 0a 2b 20 20 20 20 20 69 6e 74 20  e. */.+     int 
0100: 6f 66 66 73 65 74 3b 09 09 09 2f 2a 20 74 68 65  offset;.../* the
0110: 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
0120: 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 61 6c   start of the al
0130: 6c 6f 63 61 74 65 64 0a 2b 20 09 09 09 09 20 2a  located.+ .... *
0140: 20 74 6f 20 74 68 65 20 72 65 61 6c 20 64 61 74   to the real dat
0150: 61 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  a */.      unsig
0160: 6e 65 64 20 63 68 61 72 20 62 79 74 65 73 5b 34  ned char bytes[4
0170: 5d 3b 09 2f 2a 20 54 68 65 20 61 72 72 61 79 20  ];./* The array 
0180: 6f 66 20 62 79 74 65 73 2e 20 20 54 68 65 20 61  of bytes.  The a
0190: 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 0a 20 20  ctual size of.  
01a0: 09 09 09 09 20 2a 20 74 68 69 73 20 66 69 65 6c  .... * this fiel
01b0: 64 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  d depends on the
01c0: 20 27 61 6c 6c 6f 63 61 74 65 64 27 20 66 69 65   'allocated' fie
01d0: 6c 64 0a 20 20 09 09 09 09 20 2a 20 61 62 6f 76  ld.  .... * abov
01e0: 65 2e 20 2a 2f 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e. */.**********
01f0: 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 32 37 38 2c 32 38  *****.*** 278,28
0200: 33 20 2a 2a 2a 2a 0a 2d 2d 2d 20 32 38 30 2c 32  3 ****.--- 280,2
0210: 38 36 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 62 79  86 ----.      by
0220: 74 65 41 72 72 61 79 50 74 72 20 3d 20 28 42 79  teArrayPtr = (By
0230: 74 65 41 72 72 61 79 20 2a 29 20 63 6b 61 6c 6c  teArray *) ckall
0240: 6f 63 28 42 59 54 45 41 52 52 41 59 5f 53 49 5a  oc(BYTEARRAY_SIZ
0250: 45 28 6c 65 6e 67 74 68 29 29 3b 0a 20 20 20 20  E(length));.    
0260: 20 20 62 79 74 65 41 72 72 61 79 50 74 72 2d 3e    byteArrayPtr->
0270: 75 73 65 64 20 3d 20 6c 65 6e 67 74 68 3b 0a 20  used = length;. 
0280: 20 20 20 20 20 62 79 74 65 41 72 72 61 79 50 74       byteArrayPt
0290: 72 2d 3e 61 6c 6c 6f 63 61 74 65 64 20 3d 20 6c  r->allocated = l
02a0: 65 6e 67 74 68 3b 0a 2b 20 20 20 20 20 62 79 74  ength;.+     byt
02b0: 65 41 72 72 61 79 50 74 72 2d 3e 6f 66 66 73 65  eArrayPtr->offse
02c0: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 6d 65 6d  t = 0;.      mem
02d0: 63 70 79 28 28 56 4f 49 44 20 2a 29 20 62 79 74  cpy((VOID *) byt
02e0: 65 41 72 72 61 79 50 74 72 2d 3e 62 79 74 65 73  eArrayPtr->bytes
02f0: 2c 20 28 56 4f 49 44 20 2a 29 20 62 79 74 65 73  , (VOID *) bytes
0300: 2c 20 28 73 69 7a 65 5f 74 29 20 6c 65 6e 67 74  , (size_t) lengt
0310: 68 29 3b 0a 20 20 0a 20 20 20 20 20 20 6f 62 6a  h);.  .      obj
0320: 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 20 26  Ptr->typePtr = &
0330: 74 63 6c 42 79 74 65 41 72 72 61 79 54 79 70 65  tclByteArrayType
0340: 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.**************
0350: 2a 0a 2a 2a 2a 20 33 31 36 2c 33 32 32 20 2a 2a  *.*** 316,322 **
0360: 2a 2a 0a 20 20 20 20 20 20 69 66 20 28 6c 65 6e  **.      if (len
0370: 67 74 68 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20  gthPtr != NULL) 
0380: 7b 0a 20 20 09 2a 6c 65 6e 67 74 68 50 74 72 20  {.  .*lengthPtr 
0390: 3d 20 62 61 50 74 72 2d 3e 75 73 65 64 3b 0a 20  = baPtr->used;. 
03a0: 20 20 20 20 20 7d 0a 21 20 20 20 20 20 72 65 74       }.!     ret
03b0: 75 72 6e 20 28 75 6e 73 69 67 6e 65 64 20 63 68  urn (unsigned ch
03c0: 61 72 20 2a 29 20 62 61 50 74 72 2d 3e 62 79 74  ar *) baPtr->byt
03d0: 65 73 3b 0a 20 20 7d 0a 20 20 0c 0a 20 20 2f 2a  es;.  }.  ..  /*
03e0: 0a 2d 2d 2d 20 33 31 39 2c 33 32 35 20 2d 2d 2d  .--- 319,325 ---
03f0: 2d 0a 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67  -.      if (leng
0400: 74 68 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b  thPtr != NULL) {
0410: 0a 20 20 09 2a 6c 65 6e 67 74 68 50 74 72 20 3d  .  .*lengthPtr =
0420: 20 62 61 50 74 72 2d 3e 75 73 65 64 3b 0a 20 20   baPtr->used;.  
0430: 20 20 20 20 7d 0a 21 20 20 20 20 20 72 65 74 75      }.!     retu
0440: 72 6e 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61  rn (unsigned cha
0450: 72 20 2a 29 20 62 61 50 74 72 2d 3e 62 79 74 65  r *) baPtr->byte
0460: 73 20 2b 20 62 61 50 74 72 2d 3e 6f 66 66 73 65  s + baPtr->offse
0470: 74 3b 0a 20 20 7d 0a 20 20 0c 0a 20 20 2f 2a 0a  t;.  }.  ..  /*.
0480: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
0490: 2a 2a 2a 20 33 35 36 2c 33 37 34 20 2a 2a 2a 2a  *** 356,374 ****
04a0: 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
04b0: 20 20 62 79 74 65 41 72 72 61 79 50 74 72 20 3d    byteArrayPtr =
04c0: 20 47 45 54 5f 42 59 54 45 41 52 52 41 59 28 6f   GET_BYTEARRAY(o
04d0: 62 6a 50 74 72 29 3b 0a 21 20 20 20 20 20 69 66  bjPtr);.!     if
04e0: 20 28 6c 65 6e 67 74 68 20 3e 20 62 79 74 65 41   (length > byteA
04f0: 72 72 61 79 50 74 72 2d 3e 61 6c 6c 6f 63 61 74  rrayPtr->allocat
0500: 65 64 29 20 7b 0a 21 20 09 6e 65 77 42 79 74 65  ed) {.! .newByte
0510: 41 72 72 61 79 50 74 72 20 3d 20 28 42 79 74 65  ArrayPtr = (Byte
0520: 41 72 72 61 79 20 2a 29 20 63 6b 61 6c 6c 6f 63  Array *) ckalloc
0530: 28 42 59 54 45 41 52 52 41 59 5f 53 49 5a 45 28  (BYTEARRAY_SIZE(
0540: 6c 65 6e 67 74 68 29 29 3b 0a 20 20 09 6e 65 77  length));.  .new
0550: 42 79 74 65 41 72 72 61 79 50 74 72 2d 3e 75 73  ByteArrayPtr->us
0560: 65 64 20 3d 20 6c 65 6e 67 74 68 3b 0a 21 20 09  ed = length;.! .
0570: 6e 65 77 42 79 74 65 41 72 72 61 79 50 74 72 2d  newByteArrayPtr-
0580: 3e 61 6c 6c 6f 63 61 74 65 64 20 3d 20 6c 65 6e  >allocated = len
0590: 67 74 68 3b 0a 20 20 09 6d 65 6d 63 70 79 28 28  gth;.  .memcpy((
05a0: 56 4f 49 44 20 2a 29 20 6e 65 77 42 79 74 65 41  VOID *) newByteA
05b0: 72 72 61 79 50 74 72 2d 3e 62 79 74 65 73 2c 0a  rrayPtr->bytes,.
05c0: 21 20 09 09 28 56 4f 49 44 20 2a 29 20 62 79 74  ! ..(VOID *) byt
05d0: 65 41 72 72 61 79 50 74 72 2d 3e 62 79 74 65 73  eArrayPtr->bytes
05e0: 2c 20 28 73 69 7a 65 5f 74 29 20 62 79 74 65 41  , (size_t) byteA
05f0: 72 72 61 79 50 74 72 2d 3e 75 73 65 64 29 3b 0a  rrayPtr->used);.
0600: 20 20 09 63 6b 66 72 65 65 28 28 63 68 61 72 20    .ckfree((char 
0610: 2a 29 20 62 79 74 65 41 72 72 61 79 50 74 72 29  *) byteArrayPtr)
0620: 3b 0a 20 20 09 62 79 74 65 41 72 72 61 79 50 74  ;.  .byteArrayPt
0630: 72 20 3d 20 6e 65 77 42 79 74 65 41 72 72 61 79  r = newByteArray
0640: 50 74 72 3b 0a 20 20 09 53 45 54 5f 42 59 54 45  Ptr;.  .SET_BYTE
0650: 41 52 52 41 59 28 6f 62 6a 50 74 72 2c 20 62 79  ARRAY(objPtr, by
0660: 74 65 41 72 72 61 79 50 74 72 29 3b 0a 20 20 20  teArrayPtr);.   
0670: 20 20 20 7d 0a 20 20 20 20 20 20 54 63 6c 5f 49     }.      Tcl_I
0680: 6e 76 61 6c 69 64 61 74 65 53 74 72 69 6e 67 52  nvalidateStringR
0690: 65 70 28 6f 62 6a 50 74 72 29 3b 0a 20 20 20 20  ep(objPtr);.    
06a0: 20 20 62 79 74 65 41 72 72 61 79 50 74 72 2d 3e    byteArrayPtr->
06b0: 75 73 65 64 20 3d 20 6c 65 6e 67 74 68 3b 0a 21  used = length;.!
06c0: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
06d0: 41 72 72 61 79 50 74 72 2d 3e 62 79 74 65 73 3b  ArrayPtr->bytes;
06e0: 0a 20 20 7d 0a 20 20 0c 0a 20 20 2f 2a 0a 2d 2d  .  }.  ..  /*.--
06f0: 2d 20 33 35 39 2c 33 39 32 20 2d 2d 2d 2d 0a 20  - 359,392 ----. 
0700: 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
0710: 62 79 74 65 41 72 72 61 79 50 74 72 20 3d 20 47  byteArrayPtr = G
0720: 45 54 5f 42 59 54 45 41 52 52 41 59 28 6f 62 6a  ET_BYTEARRAY(obj
0730: 50 74 72 29 3b 0a 21 20 20 20 20 20 69 66 20 28  Ptr);.!     if (
0740: 6c 65 6e 67 74 68 20 3e 20 62 79 74 65 41 72 72  length > byteArr
0750: 61 79 50 74 72 2d 3e 61 6c 6c 6f 63 61 74 65 64  ayPtr->allocated
0760: 20 2d 20 62 79 74 65 41 72 72 61 79 50 74 72 2d   - byteArrayPtr-
0770: 3e 6f 66 66 73 65 74 29 20 7b 0a 21 20 20 20 20  >offset) {.!    
0780: 20 20 20 20 20 2f 2a 20 69 66 20 65 6e 6f 75 67       /* if enoug
0790: 68 20 73 70 61 63 65 20 68 61 73 20 6e 6f 74 20  h space has not 
07a0: 70 72 65 76 69 6f 75 73 6c 79 20 62 65 65 6e 20  previously been 
07b0: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
07c0: 0a 21 20 20 20 20 20 20 20 20 20 20 2a 20 61 6c  .!          * al
07d0: 6c 6f 63 61 74 65 20 74 77 69 63 65 20 74 68 65  locate twice the
07e0: 20 72 65 71 75 65 73 74 65 64 20 73 69 7a 65 20   requested size 
07f0: 73 6f 20 74 68 61 74 20 73 75 62 73 65 71 75 65  so that subseque
0800: 6e 74 20 0a 21 20 20 20 20 20 20 20 20 20 20 2a  nt .!          *
0810: 20 65 78 74 65 6e 73 69 6f 6e 73 20 64 6f 20 6e   extensions do n
0820: 6f 74 20 6e 65 65 64 20 74 6f 20 72 65 61 6c 6c  ot need to reall
0830: 6f 63 61 74 65 20 61 6e 64 20 63 6f 70 79 0a 21  ocate and copy.!
0840: 20 20 20 20 20 20 20 20 20 20 2a 2f 20 0a 21 20            */ .! 
0850: 09 6e 65 77 42 79 74 65 41 72 72 61 79 50 74 72  .newByteArrayPtr
0860: 20 3d 20 28 42 79 74 65 41 72 72 61 79 20 2a 29   = (ByteArray *)
0870: 20 63 6b 61 6c 6c 6f 63 28 42 59 54 45 41 52 52   ckalloc(BYTEARR
0880: 41 59 5f 53 49 5a 45 28 6c 65 6e 67 74 68 2a 32  AY_SIZE(length*2
0890: 29 29 3b 0a 20 20 09 6e 65 77 42 79 74 65 41 72  ));.  .newByteAr
08a0: 72 61 79 50 74 72 2d 3e 75 73 65 64 20 3d 20 6c  rayPtr->used = l
08b0: 65 6e 67 74 68 3b 0a 21 20 09 6e 65 77 42 79 74  ength;.! .newByt
08c0: 65 41 72 72 61 79 50 74 72 2d 3e 61 6c 6c 6f 63  eArrayPtr->alloc
08d0: 61 74 65 64 20 3d 20 6c 65 6e 67 74 68 2a 32 3b  ated = length*2;
08e0: 0a 21 20 09 6e 65 77 42 79 74 65 41 72 72 61 79  .! .newByteArray
08f0: 50 74 72 2d 3e 6f 66 66 73 65 74 20 3d 20 30 3b  Ptr->offset = 0;
0900: 0a 20 20 09 6d 65 6d 63 70 79 28 28 56 4f 49 44  .  .memcpy((VOID
0910: 20 2a 29 20 6e 65 77 42 79 74 65 41 72 72 61 79   *) newByteArray
0920: 50 74 72 2d 3e 62 79 74 65 73 2c 0a 21 20 09 09  Ptr->bytes,.! ..
0930: 28 56 4f 49 44 20 2a 29 20 62 79 74 65 41 72 72  (VOID *) byteArr
0940: 61 79 50 74 72 2d 3e 62 79 74 65 73 20 2b 20 62  ayPtr->bytes + b
0950: 79 74 65 41 72 72 61 79 50 74 72 2d 3e 6f 66 66  yteArrayPtr->off
0960: 73 65 74 2c 20 0a 21 20 09 09 28 73 69 7a 65 5f  set, .! ..(size_
0970: 74 29 20 62 79 74 65 41 72 72 61 79 50 74 72 2d  t) byteArrayPtr-
0980: 3e 75 73 65 64 29 3b 0a 20 20 09 63 6b 66 72 65  >used);.  .ckfre
0990: 65 28 28 63 68 61 72 20 2a 29 20 62 79 74 65 41  e((char *) byteA
09a0: 72 72 61 79 50 74 72 29 3b 0a 20 20 09 62 79 74  rrayPtr);.  .byt
09b0: 65 41 72 72 61 79 50 74 72 20 3d 20 6e 65 77 42  eArrayPtr = newB
09c0: 79 74 65 41 72 72 61 79 50 74 72 3b 0a 20 20 09  yteArrayPtr;.  .
09d0: 53 45 54 5f 42 59 54 45 41 52 52 41 59 28 6f 62  SET_BYTEARRAY(ob
09e0: 6a 50 74 72 2c 20 62 79 74 65 41 72 72 61 79 50  jPtr, byteArrayP
09f0: 74 72 29 3b 0a 2b 20 20 20 20 20 7d 20 65 6c 73  tr);.+     } els
0a00: 65 20 69 66 20 28 6c 65 6e 67 74 68 20 3c 20 62  e if (length < b
0a10: 79 74 65 41 72 72 61 79 50 74 72 2d 3e 6f 66 66  yteArrayPtr->off
0a20: 73 65 74 29 20 7b 0a 2b 20 20 20 20 20 20 20 20  set) {.+        
0a30: 20 2f 2a 20 69 66 20 74 68 65 20 72 65 71 75 65   /* if the reque
0a40: 73 74 65 64 20 6c 65 6e 67 74 68 20 69 73 20 6c  sted length is l
0a50: 65 73 73 20 74 68 61 6e 20 74 68 65 20 63 75 72  ess than the cur
0a60: 72 65 6e 74 20 6f 66 66 73 65 74 2c 20 0a 2b 20  rent offset, .+ 
0a70: 20 20 20 20 20 20 20 20 20 2a 20 6d 6f 76 65 20           * move 
0a80: 74 68 65 20 28 72 65 71 75 65 73 74 65 64 29 20  the (requested) 
0a90: 6c 69 76 65 20 64 61 74 61 20 74 6f 20 74 68 65  live data to the
0aa0: 20 66 72 6f 6e 74 20 6f 66 20 74 68 65 20 61 6c   front of the al
0ab0: 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a 2b 20  located space.+ 
0ac0: 20 20 20 20 20 20 20 20 20 2a 20 77 69 74 68 6f           * witho
0ad0: 75 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ut changing the 
0ae0: 61 6c 6c 6f 63 61 74 69 6f 6e 0a 2b 20 20 20 20  allocation.+    
0af0: 20 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 20 20        */.+      
0b00: 20 20 20 6d 65 6d 6d 6f 76 65 28 28 56 4f 49 44     memmove((VOID
0b10: 20 2a 29 20 62 79 74 65 41 72 72 61 79 50 74 72   *) byteArrayPtr
0b20: 2d 3e 62 79 74 65 73 2c 0a 2b 20 20 20 20 20 20  ->bytes,.+      
0b30: 20 20 20 20 20 20 20 20 20 20 20 28 56 4f 49 44             (VOID
0b40: 20 2a 29 20 62 79 74 65 41 72 72 61 79 50 74 72   *) byteArrayPtr
0b50: 2d 3e 62 79 74 65 73 20 2b 20 62 79 74 65 41 72  ->bytes + byteAr
0b60: 72 61 79 50 74 72 2d 3e 6f 66 66 73 65 74 2c 0a  rayPtr->offset,.
0b70: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +               
0b80: 20 20 28 73 69 7a 65 5f 74 29 20 6c 65 6e 67 74    (size_t) lengt
0b90: 68 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 62 79  h);.+         by
0ba0: 74 65 41 72 72 61 79 50 74 72 2d 3e 6f 66 66 73  teArrayPtr->offs
0bb0: 65 74 3d 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20  et=0;.      }.  
0bc0: 20 20 20 20 54 63 6c 5f 49 6e 76 61 6c 69 64 61      Tcl_Invalida
0bd0: 74 65 53 74 72 69 6e 67 52 65 70 28 6f 62 6a 50  teStringRep(objP
0be0: 74 72 29 3b 0a 20 20 20 20 20 20 62 79 74 65 41  tr);.      byteA
0bf0: 72 72 61 79 50 74 72 2d 3e 75 73 65 64 20 3d 20  rrayPtr->used = 
0c00: 6c 65 6e 67 74 68 3b 0a 21 20 20 20 20 20 72 65  length;.!     re
0c10: 74 75 72 6e 20 62 79 74 65 41 72 72 61 79 50 74  turn byteArrayPt
0c20: 72 2d 3e 62 79 74 65 73 20 2b 20 62 79 74 65 41  r->bytes + byteA
0c30: 72 72 61 79 50 74 72 2d 3e 6f 66 66 73 65 74 3b  rrayPtr->offset;
0c40: 0a 20 20 7d 0a 20 20 0c 0a 20 20 2f 2a 0a 2a 2a  .  }.  ..  /*.**
0c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
0c60: 2a 20 34 31 32 2c 34 31 37 20 2a 2a 2a 2a 0a 2d  * 412,417 ****.-
0c70: 2d 2d 20 34 33 30 2c 34 33 36 20 2d 2d 2d 2d 0a  -- 430,436 ----.
0c80: 20 20 0a 20 20 09 62 79 74 65 41 72 72 61 79 50    .  .byteArrayP
0c90: 74 72 2d 3e 75 73 65 64 20 3d 20 64 73 74 20 2d  tr->used = dst -
0ca0: 20 62 79 74 65 41 72 72 61 79 50 74 72 2d 3e 62   byteArrayPtr->b
0cb0: 79 74 65 73 3b 0a 20 20 09 62 79 74 65 41 72 72  ytes;.  .byteArr
0cc0: 61 79 50 74 72 2d 3e 61 6c 6c 6f 63 61 74 65 64  ayPtr->allocated
0cd0: 20 3d 20 6c 65 6e 67 74 68 3b 0a 2b 20 09 62 79   = length;.+ .by
0ce0: 74 65 41 72 72 61 79 50 74 72 2d 3e 6f 66 66 73  teArrayPtr->offs
0cf0: 65 74 20 3d 20 30 3b 0a 20 20 0a 20 20 09 69 66  et = 0;.  .  .if
0d00: 20 28 28 74 79 70 65 50 74 72 20 21 3d 20 4e 55   ((typePtr != NU
0d10: 4c 4c 29 20 26 26 20 28 74 79 70 65 50 74 72 2d  LL) && (typePtr-
0d20: 3e 66 72 65 65 49 6e 74 52 65 70 50 72 6f 63 29  >freeIntRepProc)
0d30: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 09 20   != NULL) {.  . 
0d40: 20 20 20 28 2a 74 79 70 65 50 74 72 2d 3e 66 72     (*typePtr->fr
0d50: 65 65 49 6e 74 52 65 70 50 72 6f 63 29 28 6f 62  eeIntRepProc)(ob
0d60: 6a 50 74 72 29 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  jPtr);.*********
0d70: 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 34 37 38 2c 34  ******.*** 478,4
0d80: 38 34 20 2a 2a 2a 2a 0a 20 20 20 20 20 20 63 6f  84 ****.      co
0d90: 70 79 41 72 72 61 79 50 74 72 20 3d 20 28 42 79  pyArrayPtr = (By
0da0: 74 65 41 72 72 61 79 20 2a 29 20 63 6b 61 6c 6c  teArray *) ckall
0db0: 6f 63 28 42 59 54 45 41 52 52 41 59 5f 53 49 5a  oc(BYTEARRAY_SIZ
0dc0: 45 28 6c 65 6e 67 74 68 29 29 3b 0a 20 20 20 20  E(length));.    
0dd0: 20 20 63 6f 70 79 41 72 72 61 79 50 74 72 2d 3e    copyArrayPtr->
0de0: 75 73 65 64 20 3d 20 6c 65 6e 67 74 68 3b 0a 20  used = length;. 
0df0: 20 20 20 20 20 63 6f 70 79 41 72 72 61 79 50 74       copyArrayPt
0e00: 72 2d 3e 61 6c 6c 6f 63 61 74 65 64 20 3d 20 6c  r->allocated = l
0e10: 65 6e 67 74 68 3b 0a 21 20 20 20 20 20 6d 65 6d  ength;.!     mem
0e20: 63 70 79 28 28 56 4f 49 44 20 2a 29 20 63 6f 70  cpy((VOID *) cop
0e30: 79 41 72 72 61 79 50 74 72 2d 3e 62 79 74 65 73  yArrayPtr->bytes
0e40: 2c 20 28 56 4f 49 44 20 2a 29 20 73 72 63 41 72  , (VOID *) srcAr
0e50: 72 61 79 50 74 72 2d 3e 62 79 74 65 73 2c 0a 20  rayPtr->bytes,. 
0e60: 20 09 20 20 20 20 28 73 69 7a 65 5f 74 29 20 6c   .    (size_t) l
0e70: 65 6e 67 74 68 29 3b 0a 20 20 20 20 20 20 53 45  ength);.      SE
0e80: 54 5f 42 59 54 45 41 52 52 41 59 28 63 6f 70 79  T_BYTEARRAY(copy
0e90: 50 74 72 2c 20 63 6f 70 79 41 72 72 61 79 50 74  Ptr, copyArrayPt
0ea0: 72 29 3b 0a 20 20 0a 2d 2d 2d 20 34 39 37 2c 35  r);.  .--- 497,5
0eb0: 30 34 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 63 6f  04 ----.      co
0ec0: 70 79 41 72 72 61 79 50 74 72 20 3d 20 28 42 79  pyArrayPtr = (By
0ed0: 74 65 41 72 72 61 79 20 2a 29 20 63 6b 61 6c 6c  teArray *) ckall
0ee0: 6f 63 28 42 59 54 45 41 52 52 41 59 5f 53 49 5a  oc(BYTEARRAY_SIZ
0ef0: 45 28 6c 65 6e 67 74 68 29 29 3b 0a 20 20 20 20  E(length));.    
0f00: 20 20 63 6f 70 79 41 72 72 61 79 50 74 72 2d 3e    copyArrayPtr->
0f10: 75 73 65 64 20 3d 20 6c 65 6e 67 74 68 3b 0a 20  used = length;. 
0f20: 20 20 20 20 20 63 6f 70 79 41 72 72 61 79 50 74       copyArrayPt
0f30: 72 2d 3e 61 6c 6c 6f 63 61 74 65 64 20 3d 20 6c  r->allocated = l
0f40: 65 6e 67 74 68 3b 0a 21 20 20 20 20 20 63 6f 70  ength;.!     cop
0f50: 79 41 72 72 61 79 50 74 72 2d 3e 6f 66 66 73 65  yArrayPtr->offse
0f60: 74 20 3d 20 30 3b 0a 21 20 20 20 20 20 6d 65 6d  t = 0;.!     mem
0f70: 63 70 79 28 28 56 4f 49 44 20 2a 29 20 63 6f 70  cpy((VOID *) cop
0f80: 79 41 72 72 61 79 50 74 72 2d 3e 62 79 74 65 73  yArrayPtr->bytes
0f90: 2c 20 28 56 4f 49 44 20 2a 29 20 73 72 63 41 72  , (VOID *) srcAr
0fa0: 72 61 79 50 74 72 2d 3e 62 79 74 65 73 20 2b 20  rayPtr->bytes + 
0fb0: 73 72 63 41 72 72 61 79 50 74 72 2d 3e 6f 66 66  srcArrayPtr->off
0fc0: 73 65 74 2c 0a 20 20 09 20 20 20 20 28 73 69 7a  set,.  .    (siz
0fd0: 65 5f 74 29 20 6c 65 6e 67 74 68 29 3b 0a 20 20  e_t) length);.  
0fe0: 20 20 20 20 53 45 54 5f 42 59 54 45 41 52 52 41      SET_BYTEARRA
0ff0: 59 28 63 6f 70 79 50 74 72 2c 20 63 6f 70 79 41  Y(copyPtr, copyA
1000: 72 72 61 79 50 74 72 29 3b 0a 20 20 0a 2a 2a 2a  rrayPtr);.  .***
1010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a  ************.***
1020: 20 35 31 38 2c 35 32 34 20 2a 2a 2a 2a 0a 20 20   518,524 ****.  
1030: 20 20 20 20 42 79 74 65 41 72 72 61 79 20 2a 62      ByteArray *b
1040: 79 74 65 41 72 72 61 79 50 74 72 3b 0a 20 20 0a  yteArrayPtr;.  .
1050: 20 20 20 20 20 20 62 79 74 65 41 72 72 61 79 50        byteArrayP
1060: 74 72 20 3d 20 47 45 54 5f 42 59 54 45 41 52 52  tr = GET_BYTEARR
1070: 41 59 28 6f 62 6a 50 74 72 29 3b 0a 21 20 20 20  AY(objPtr);.!   
1080: 20 20 73 72 63 20 3d 20 62 79 74 65 41 72 72 61    src = byteArra
1090: 79 50 74 72 2d 3e 62 79 74 65 73 3b 0a 20 20 20  yPtr->bytes;.   
10a0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 62 79 74 65     length = byte
10b0: 41 72 72 61 79 50 74 72 2d 3e 75 73 65 64 3b 0a  ArrayPtr->used;.
10c0: 20 20 0a 20 20 20 20 20 20 2f 2a 0a 2d 2d 2d 20    .      /*.--- 
10d0: 35 33 38 2c 35 34 34 20 2d 2d 2d 2d 0a 20 20 20  538,544 ----.   
10e0: 20 20 20 42 79 74 65 41 72 72 61 79 20 2a 62 79     ByteArray *by
10f0: 74 65 41 72 72 61 79 50 74 72 3b 0a 20 20 0a 20  teArrayPtr;.  . 
1100: 20 20 20 20 20 62 79 74 65 41 72 72 61 79 50 74       byteArrayPt
1110: 72 20 3d 20 47 45 54 5f 42 59 54 45 41 52 52 41  r = GET_BYTEARRA
1120: 59 28 6f 62 6a 50 74 72 29 3b 0a 21 20 20 20 20  Y(objPtr);.!    
1130: 20 73 72 63 20 3d 20 62 79 74 65 41 72 72 61 79   src = byteArray
1140: 50 74 72 2d 3e 62 79 74 65 73 20 2b 20 62 79 74  Ptr->bytes + byt
1150: 65 41 72 72 61 79 50 74 72 2d 3e 6f 66 66 73 65  eArrayPtr->offse
1160: 74 3b 0a 20 20 20 20 20 20 6c 65 6e 67 74 68 20  t;.      length 
1170: 3d 20 62 79 74 65 41 72 72 61 79 50 74 72 2d 3e  = byteArrayPtr->
1180: 75 73 65 64 3b 0a 20 20 0a 20 20 20 20 20 20 2f  used;.  .      /
1190: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
11a0: 2a 0a 2a 2a 2a 20 35 37 39 2c 35 38 34 20 2a 2a  *.*** 579,584 **
11b0: 2a 2a 0a 2d 2d 2d 20 35 39 39 2c 36 30 35 20 2d  **.--- 599,605 -
11c0: 2d 2d 2d 0a 20 20 20 20 20 20 63 68 61 72 20 2a  ---.      char *
11d0: 66 6f 72 6d 61 74 3b 09 09 2f 2a 20 50 6f 69 6e  format;../* Poin
11e0: 74 65 72 20 74 6f 20 63 75 72 72 65 6e 74 20 70  ter to current p
11f0: 6f 73 69 74 69 6f 6e 20 69 6e 20 66 6f 72 6d 61  osition in forma
1200: 74 0a 20 20 09 09 09 09 20 2a 20 73 74 72 69 6e  t.  .... * strin
1210: 67 2e 20 2a 2f 0a 20 20 20 20 20 20 54 63 6c 5f  g. */.      Tcl_
1220: 4f 62 6a 20 2a 72 65 73 75 6c 74 50 74 72 3b 09  Obj *resultPtr;.
1230: 09 2f 2a 20 4f 62 6a 65 63 74 20 68 6f 6c 64 69  ./* Object holdi
1240: 6e 67 20 72 65 73 75 6c 74 20 62 75 66 66 65 72  ng result buffer
1250: 2e 20 2a 2f 0a 2b 20 20 20 20 20 54 63 6c 5f 4f  . */.+     Tcl_O
1260: 62 6a 20 2a 76 61 72 56 61 6c 75 65 50 74 72 3d  bj *varValuePtr=
1270: 4e 55 4c 4c 3b 09 2f 2a 20 6d 6f 64 69 66 69 61  NULL;./* modifia
1280: 62 6c 65 20 6f 62 6a 65 63 74 20 20 2a 2f 0a 20  ble object  */. 
1290: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68       unsigned ch
12a0: 61 72 20 2a 62 75 66 66 65 72 3b 09 2f 2a 20 53  ar *buffer;./* S
12b0: 74 61 72 74 20 6f 66 20 72 65 73 75 6c 74 20 62  tart of result b
12c0: 75 66 66 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  uffer. */.      
12d0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 63  unsigned char *c
12e0: 75 72 73 6f 72 3b 09 2f 2a 20 43 75 72 72 65 6e  ursor;./* Curren
12f0: 74 20 70 6f 73 69 74 69 6f 6e 20 77 69 74 68 69  t position withi
1300: 6e 20 72 65 73 75 6c 74 20 62 75 66 66 65 72 2e  n result buffer.
1310: 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1320: 65 64 20 63 68 61 72 20 2a 6d 61 78 50 6f 73 3b  ed char *maxPos;
1330: 09 2f 2a 20 47 72 65 61 74 65 73 74 20 70 6f 73  ./* Greatest pos
1340: 69 74 69 6f 6e 20 77 69 74 68 69 6e 20 72 65 73  ition within res
1350: 75 6c 74 20 62 75 66 66 65 72 20 74 68 61 74 0a  ult buffer that.
1360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1370: 2a 2a 2a 20 35 38 36 2c 35 39 35 20 2a 2a 2a 2a  *** 586,595 ****
1380: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 65 72 72  .      char *err
1390: 6f 72 53 74 72 69 6e 67 2c 20 2a 65 72 72 6f 72  orString, *error
13a0: 56 61 6c 75 65 2c 20 2a 73 74 72 3b 0a 20 20 20  Value, *str;.   
13b0: 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 20 73     int offset, s
13c0: 69 7a 65 2c 20 6c 65 6e 67 74 68 2c 20 69 6e 64  ize, length, ind
13d0: 65 78 3b 0a 20 20 20 20 20 20 73 74 61 74 69 63  ex;.      static
13e0: 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 6f 70 74   CONST char *opt
13f0: 69 6f 6e 73 5b 5d 20 3d 20 7b 20 0a 21 20 09 22  ions[] = { .! ."
1400: 66 6f 72 6d 61 74 22 2c 09 22 73 63 61 6e 22 2c  format",."scan",
1410: 09 09 4e 55 4c 4c 20 0a 20 20 20 20 20 20 7d 3b  ..NULL .      };
1420: 0a 20 20 20 20 20 20 65 6e 75 6d 20 6f 70 74 69  .      enum opti
1430: 6f 6e 73 20 7b 20 0a 21 20 09 42 49 4e 41 52 59  ons { .! .BINARY
1440: 5f 46 4f 52 4d 41 54 2c 09 42 49 4e 41 52 59 5f  _FORMAT,.BINARY_
1450: 53 43 41 4e 0a 20 20 20 20 20 20 7d 3b 0a 20 20  SCAN.      };.  
1460: 0a 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20  .      if (objc 
1470: 3c 20 32 29 20 7b 0a 2d 2d 2d 20 36 30 37 2c 36  < 2) {.--- 607,6
1480: 31 39 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 63 68  19 ----.      ch
1490: 61 72 20 2a 65 72 72 6f 72 53 74 72 69 6e 67 2c  ar *errorString,
14a0: 20 2a 65 72 72 6f 72 56 61 6c 75 65 2c 20 2a 73   *errorValue, *s
14b0: 74 72 3b 0a 20 20 20 20 20 20 69 6e 74 20 6f 66  tr;.      int of
14c0: 66 73 65 74 2c 20 73 69 7a 65 2c 20 6c 65 6e 67  fset, size, leng
14d0: 74 68 2c 20 69 6e 64 65 78 3b 0a 20 20 20 20 20  th, index;.     
14e0: 20 73 74 61 74 69 63 20 43 4f 4e 53 54 20 63 68   static CONST ch
14f0: 61 72 20 2a 6f 70 74 69 6f 6e 73 5b 5d 20 3d 20  ar *options[] = 
1500: 7b 20 0a 21 20 09 22 66 6f 72 6d 61 74 22 2c 09  { .! ."format",.
1510: 22 73 63 61 6e 22 2c 0a 21 20 09 22 73 65 74 22  "scan",.! ."set"
1520: 2c 09 09 22 64 73 63 61 6e 22 2c 0a 21 20 09 4e  ,.."dscan",.! .N
1530: 55 4c 4c 20 0a 20 20 20 20 20 20 7d 3b 0a 20 20  ULL .      };.  
1540: 20 20 20 20 65 6e 75 6d 20 6f 70 74 69 6f 6e 73      enum options
1550: 20 7b 20 0a 21 20 09 42 49 4e 41 52 59 5f 46 4f   { .! .BINARY_FO
1560: 52 4d 41 54 2c 09 42 49 4e 41 52 59 5f 53 43 41  RMAT,.BINARY_SCA
1570: 4e 2c 0a 21 20 09 42 49 4e 41 52 59 5f 53 45 54  N,.! .BINARY_SET
1580: 2c 09 42 49 4e 41 52 59 5f 44 53 43 41 4e 0a 20  ,.BINARY_DSCAN. 
1590: 20 20 20 20 20 7d 3b 0a 20 20 0a 20 20 20 20 20       };.  .     
15a0: 20 69 66 20 28 6f 62 6a 63 20 3c 20 32 29 20 7b   if (objc < 2) {
15b0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
15c0: 0a 2a 2a 2a 20 36 30 32 2c 36 31 32 20 2a 2a 2a  .*** 602,612 ***
15d0: 2a 0a 20 20 20 20 20 20 09 72 65 74 75 72 6e 20  *.      .return 
15e0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  TCL_ERROR;.     
15f0: 20 7d 0a 20 20 0a 20 20 20 20 20 20 73 77 69 74   }.  .      swit
1600: 63 68 20 28 28 65 6e 75 6d 20 6f 70 74 69 6f 6e  ch ((enum option
1610: 73 29 20 69 6e 64 65 78 29 20 7b 0a 20 20 09 63  s) index) {.  .c
1620: 61 73 65 20 42 49 4e 41 52 59 5f 46 4f 52 4d 41  ase BINARY_FORMA
1630: 54 3a 20 7b 0a 21 20 09 20 20 20 20 69 66 20 28  T: {.! .    if (
1640: 6f 62 6a 63 20 3c 20 33 29 20 7b 0a 21 20 09 09  objc < 3) {.! ..
1650: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
1660: 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76  (interp, 2, objv
1670: 2c 20 22 66 6f 72 6d 61 74 53 74 72 69 6e 67 20  , "formatString 
1680: 3f 61 72 67 20 61 72 67 20 2e 2e 2e 3f 22 29 3b  ?arg arg ...?");
1690: 0a 21 20 09 09 72 65 74 75 72 6e 20 54 43 4c 5f  .! ..return TCL_
16a0: 45 52 52 4f 52 3b 0a 20 20 09 20 20 20 20 7d 0a  ERROR;.  .    }.
16b0: 20 20 0a 20 20 09 20 20 20 20 2f 2a 0a 2d 2d 2d    .  .    /*.---
16c0: 20 36 32 36 2c 36 37 36 20 2d 2d 2d 2d 0a 20 20   626,676 ----.  
16d0: 20 20 20 20 09 72 65 74 75 72 6e 20 54 43 4c 5f      .return TCL_
16e0: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20  ERROR;.      }. 
16f0: 20 0a 2b 20 20 20 20 20 2f 2a 20 68 61 6e 64 6c   .+     /* handl
1700: 65 20 73 68 61 72 65 64 20 76 61 72 69 61 62 6c  e shared variabl
1710: 65 73 20 66 6f 72 20 64 65 73 74 72 75 63 74 69  es for destructi
1720: 76 65 20 6f 70 73 20 2a 2f 0a 20 20 20 20 20 20  ve ops */.      
1730: 73 77 69 74 63 68 20 28 28 65 6e 75 6d 20 6f 70  switch ((enum op
1740: 74 69 6f 6e 73 29 20 69 6e 64 65 78 29 20 7b 0a  tions) index) {.
1750: 2b 20 20 20 20 20 20 20 20 20 63 61 73 65 20 42  +         case B
1760: 49 4e 41 52 59 5f 53 45 54 3a 0a 2b 20 20 20 20  INARY_SET:.+    
1770: 20 20 20 20 20 63 61 73 65 20 42 49 4e 41 52 59       case BINARY
1780: 5f 44 53 43 41 4e 3a 20 7b 0a 2b 20 20 20 20 20  _DSCAN: {.+     
1790: 20 20 20 20 20 20 20 20 56 61 72 20 2a 76 61 72          Var *var
17a0: 50 74 72 2c 2a 61 72 72 61 79 50 74 72 3b 0a 2b  Ptr,*arrayPtr;.+
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
17c0: 5f 4f 62 6a 20 2a 6f 6c 64 56 61 6c 75 65 50 74  _Obj *oldValuePt
17d0: 72 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20  r;.+            
17e0: 20 76 61 72 50 74 72 3d 54 63 6c 4f 62 6a 4c 6f   varPtr=TclObjLo
17f0: 6f 6b 75 70 56 61 72 28 69 6e 74 65 72 70 2c 6f  okupVar(interp,o
1800: 62 6a 76 5b 32 5d 2c 4e 55 4c 4c 2c 54 43 4c 5f  bjv[2],NULL,TCL_
1810: 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 2c 22 6d  LEAVE_ERR_MSG,"m
1820: 6f 64 69 66 79 22 2c 0a 2b 20 20 20 20 20 20 20  odify",.+       
1830: 20 20 20 20 20 20 20 20 20 20 2f 2a 63 72 65 61            /*crea
1840: 74 65 50 61 72 74 31 2a 2f 20 31 2c 20 2f 2a 63  tePart1*/ 1, /*c
1850: 72 65 61 74 65 50 61 72 74 32 2a 2f 20 31 2c 20  reatePart2*/ 1, 
1860: 26 61 72 72 61 79 50 74 72 29 3b 0a 2b 20 20 20  &arrayPtr);.+   
1870: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1880: 72 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  rPtr == NULL) {.
1890: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +               
18a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
18b0: 4f 52 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20  OR;.+           
18c0: 20 20 7d 0a 2b 20 20 20 20 20 20 20 20 20 20 20    }.+           
18d0: 20 20 6f 6c 64 56 61 6c 75 65 50 74 72 3d 76 61    oldValuePtr=va
18e0: 72 50 74 72 2d 3e 76 61 6c 75 65 2e 6f 62 6a 50  rPtr->value.objP
18f0: 74 72 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20  tr;.+           
1900: 20 20 69 66 20 28 6f 6c 64 56 61 6c 75 65 50 74    if (oldValuePt
1910: 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 20 20  r == NULL) {.+  
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
1930: 61 72 50 74 72 2d 3e 76 61 6c 75 65 2e 6f 62 6a  arPtr->value.obj
1940: 50 74 72 3d 54 63 6c 5f 4e 65 77 4f 62 6a 28 29  Ptr=Tcl_NewObj()
1950: 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.+             
1960: 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43      Tcl_IncrRefC
1970: 6f 75 6e 74 28 76 61 72 50 74 72 2d 3e 76 61 6c  ount(varPtr->val
1980: 75 65 2e 6f 62 6a 50 74 72 29 3b 0a 2b 20 20 20  ue.objPtr);.+   
1990: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
19a0: 20 69 66 20 28 54 63 6c 5f 49 73 53 68 61 72 65   if (Tcl_IsShare
19b0: 64 28 6f 6c 64 56 61 6c 75 65 50 74 72 29 29 20  d(oldValuePtr)) 
19c0: 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 20  {.+             
19d0: 20 20 20 20 76 61 72 50 74 72 2d 3e 76 61 6c 75      varPtr->valu
19e0: 65 2e 6f 62 6a 50 74 72 20 3d 20 54 63 6c 5f 44  e.objPtr = Tcl_D
19f0: 75 70 6c 69 63 61 74 65 4f 62 6a 28 6f 6c 64 56  uplicateObj(oldV
1a00: 61 6c 75 65 50 74 72 29 3b 0a 2b 20 20 20 20 20  aluePtr);.+     
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
1a20: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6f 6c 64  DecrRefCount(old
1a30: 56 61 6c 75 65 50 74 72 29 3b 0a 2b 20 20 20 20  ValuePtr);.+    
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6c 64               old
1a50: 56 61 6c 75 65 50 74 72 3d 76 61 72 50 74 72 2d  ValuePtr=varPtr-
1a60: 3e 76 61 6c 75 65 2e 6f 62 6a 50 74 72 3b 0a 2b  >value.objPtr;.+
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a80: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
1a90: 74 28 6f 6c 64 56 61 6c 75 65 50 74 72 29 3b 0a  t(oldValuePtr);.
1aa0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  +             }.
1ab0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61  +             va
1ac0: 72 56 61 6c 75 65 50 74 72 3d 76 61 72 50 74 72  rValuePtr=varPtr
1ad0: 2d 3e 76 61 6c 75 65 2e 6f 62 6a 50 74 72 3b 0a  ->value.objPtr;.
1ae0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63  +             Tc
1af0: 6c 50 74 72 53 65 74 56 61 72 28 69 6e 74 65 72  lPtrSetVar(inter
1b00: 70 2c 76 61 72 50 74 72 2c 61 72 72 61 79 50 74  p,varPtr,arrayPt
1b10: 72 2c 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f  r,TclGetString(o
1b20: 62 6a 76 5b 32 5d 29 2c 4e 55 4c 4c 2c 76 61 72  bjv[2]),NULL,var
1b30: 56 61 6c 75 65 50 74 72 2c 54 43 4c 5f 4c 45 41  ValuePtr,TCL_LEA
1b40: 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a 2b 20 20  VE_ERR_MSG);.+  
1b50: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1b60: 3b 0a 2b 20 20 20 20 20 20 20 20 20 7d 0a 2b 20  ;.+         }.+ 
1b70: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
1b80: 20 62 72 65 61 6b 3b 0a 2b 20 20 20 20 20 7d 0a   break;.+     }.
1b90: 2b 20 0a 2b 20 0a 2b 20 20 20 20 20 73 77 69 74  + .+ .+     swit
1ba0: 63 68 20 28 28 65 6e 75 6d 20 6f 70 74 69 6f 6e  ch ((enum option
1bb0: 73 29 20 69 6e 64 65 78 29 20 7b 0a 2b 20 09 63  s) index) {.+ .c
1bc0: 61 73 65 20 42 49 4e 41 52 59 5f 53 45 54 3a 0a  ase BINARY_SET:.
1bd0: 20 20 09 63 61 73 65 20 42 49 4e 41 52 59 5f 46    .case BINARY_F
1be0: 4f 52 4d 41 54 3a 20 7b 0a 21 20 0a 21 20 09 20  ORMAT: {.! .! . 
1bf0: 20 20 20 69 66 20 28 28 65 6e 75 6d 20 6f 70 74     if ((enum opt
1c00: 69 6f 6e 73 29 20 69 6e 64 65 78 20 3d 3d 20 42  ions) index == B
1c10: 49 4e 41 52 59 5f 53 45 54 29 20 7b 0a 21 20 09  INARY_SET) {.! .
1c20: 09 69 66 20 28 6f 62 6a 63 20 3c 20 34 29 20 7b  .if (objc < 4) {
1c30: 0a 21 20 09 09 20 20 20 20 54 63 6c 5f 57 72 6f  .! ..    Tcl_Wro
1c40: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
1c50: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 76 61 72 4e  , 2, objv, "varN
1c60: 61 6d 65 20 66 6f 72 6d 61 74 53 74 72 69 6e 67  ame formatString
1c70: 20 3f 61 72 67 20 61 72 67 20 2e 2e 2e 3f 22 29   ?arg arg ...?")
1c80: 3b 0a 21 20 09 09 20 20 20 20 72 65 74 75 72 6e  ;.! ..    return
1c90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 21 20 09 09   TCL_ERROR;.! ..
1ca0: 7d 0a 21 20 09 09 61 72 67 20 3d 20 34 3b 0a 21  }.! ..arg = 4;.!
1cb0: 20 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 21   .    } else {.!
1cc0: 20 09 09 69 66 20 28 6f 62 6a 63 20 3c 20 33 29   ..if (objc < 3)
1cd0: 20 7b 0a 21 20 09 09 20 20 20 20 54 63 6c 5f 57   {.! ..    Tcl_W
1ce0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
1cf0: 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 66 6f  rp, 2, objv, "fo
1d00: 72 6d 61 74 53 74 72 69 6e 67 20 3f 61 72 67 20  rmatString ?arg 
1d10: 61 72 67 20 2e 2e 2e 3f 22 29 3b 0a 21 20 09 09  arg ...?");.! ..
1d20: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1d30: 52 52 4f 52 3b 0a 21 20 09 09 7d 0a 21 20 09 09  RROR;.! ..}.! ..
1d40: 61 72 67 20 3d 20 33 3b 0a 20 20 09 20 20 20 20  arg = 3;.  .    
1d50: 7d 0a 20 20 0a 20 20 09 20 20 20 20 2f 2a 0a 2a  }.  .  .    /*.*
1d60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
1d70: 2a 2a 20 36 31 35 2c 36 32 32 20 2a 2a 2a 2a 0a  ** 615,622 ****.
1d80: 20 20 09 20 20 20 20 20 2a 20 73 65 63 6f 6e 64    .     * second
1d90: 20 70 61 73 73 20 70 6c 61 63 65 73 20 74 68 65   pass places the
1da0: 20 66 6f 72 6d 61 74 74 65 64 20 64 61 74 61 20   formatted data 
1db0: 69 6e 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e  into the buffer.
1dc0: 0a 20 20 09 20 20 20 20 20 2a 2f 0a 20 20 0a 21  .  .     */.  .!
1dd0: 20 09 20 20 20 20 66 6f 72 6d 61 74 20 3d 20 54   .    format = T
1de0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1df0: 76 5b 32 5d 29 3b 0a 21 20 09 20 20 20 20 61 72  v[2]);.! .    ar
1e00: 67 20 3d 20 33 3b 0a 20 20 09 20 20 20 20 6f 66  g = 3;.  .    of
1e10: 66 73 65 74 20 3d 20 30 3b 0a 20 20 09 20 20 20  fset = 0;.  .   
1e20: 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a 20 20 09   length = 0;.  .
1e30: 20 20 20 20 77 68 69 6c 65 20 28 2a 66 6f 72 6d      while (*form
1e40: 61 74 20 21 3d 20 27 5c 30 27 29 20 7b 0a 2d 2d  at != '\0') {.--
1e50: 2d 20 36 37 39 2c 36 38 35 20 2d 2d 2d 2d 0a 20  - 679,685 ----. 
1e60: 20 09 20 20 20 20 20 2a 20 73 65 63 6f 6e 64 20   .     * second 
1e70: 70 61 73 73 20 70 6c 61 63 65 73 20 74 68 65 20  pass places the 
1e80: 66 6f 72 6d 61 74 74 65 64 20 64 61 74 61 20 69  formatted data i
1e90: 6e 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e 0a  nto the buffer..
1ea0: 20 20 09 20 20 20 20 20 2a 2f 0a 20 20 0a 21 20    .     */.  .! 
1eb0: 09 20 20 20 20 66 6f 72 6d 61 74 20 3d 20 54 63  .    format = Tc
1ec0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1ed0: 5b 61 72 67 2d 31 5d 29 3b 0a 20 20 09 20 20 20  [arg-1]);.  .   
1ee0: 20 6f 66 66 73 65 74 20 3d 20 30 3b 0a 20 20 09   offset = 0;.  .
1ef0: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a      length = 0;.
1f00: 20 20 09 20 20 20 20 77 68 69 6c 65 20 28 2a 66    .    while (*f
1f10: 6f 72 6d 61 74 20 21 3d 20 27 5c 30 27 29 20 7b  ormat != '\0') {
1f20: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
1f30: 0a 2a 2a 2a 20 37 37 30 2c 37 37 38 20 2a 2a 2a  .*** 770,778 ***
1f40: 2a 0a 20 20 09 20 20 20 20 20 2a 20 6e 75 6d 62  *.  .     * numb
1f50: 65 72 20 6f 66 20 62 79 74 65 73 20 61 6e 64 20  er of bytes and 
1f60: 66 69 6c 6c 69 6e 67 20 77 69 74 68 20 6e 75 6c  filling with nul
1f70: 6c 73 2e 0a 20 20 09 20 20 20 20 20 2a 2f 0a 20  ls..  .     */. 
1f80: 20 0a 21 20 09 20 20 20 20 72 65 73 75 6c 74 50   .! .    resultP
1f90: 74 72 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a 52  tr = Tcl_GetObjR
1fa0: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 21  esult(interp);.!
1fb0: 20 09 20 20 20 20 62 75 66 66 65 72 20 3d 20 54   .    buffer = T
1fc0: 63 6c 5f 53 65 74 42 79 74 65 41 72 72 61 79 4c  cl_SetByteArrayL
1fd0: 65 6e 67 74 68 28 72 65 73 75 6c 74 50 74 72 2c  ength(resultPtr,
1fe0: 20 6c 65 6e 67 74 68 29 3b 0a 21 20 09 20 20 20   length);.! .   
1ff0: 20 6d 65 6d 73 65 74 28 28 56 4f 49 44 20 2a 29   memset((VOID *)
2000: 20 62 75 66 66 65 72 2c 20 30 2c 20 28 73 69 7a   buffer, 0, (siz
2010: 65 5f 74 29 20 6c 65 6e 67 74 68 29 3b 0a 20 20  e_t) length);.  
2020: 0a 20 20 09 20 20 20 20 2f 2a 0a 20 20 09 20 20  .  .    /*.  .  
2030: 20 20 20 2a 20 50 61 63 6b 20 74 68 65 20 64 61     * Pack the da
2040: 74 61 20 69 6e 74 6f 20 74 68 65 20 72 65 73 75  ta into the resu
2050: 6c 74 20 6f 62 6a 65 63 74 2e 20 20 4e 6f 74 65  lt object.  Note
2060: 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 6b 69   that we can ski
2070: 70 0a 2d 2d 2d 20 38 33 33 2c 38 34 38 20 2d 2d  p.--- 833,848 --
2080: 2d 2d 0a 20 20 09 20 20 20 20 20 2a 20 6e 75 6d  --.  .     * num
2090: 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 6e 64  ber of bytes and
20a0: 20 66 69 6c 6c 69 6e 67 20 77 69 74 68 20 6e 75   filling with nu
20b0: 6c 6c 73 2e 0a 20 20 09 20 20 20 20 20 2a 2f 0a  lls..  .     */.
20c0: 20 20 0a 21 20 09 20 20 20 20 69 66 20 28 28 65    .! .    if ((e
20d0: 6e 75 6d 20 6f 70 74 69 6f 6e 73 29 20 69 6e 64  num options) ind
20e0: 65 78 20 3d 3d 20 42 49 4e 41 52 59 5f 53 45 54  ex == BINARY_SET
20f0: 29 20 7b 0a 21 20 09 09 62 75 66 66 65 72 20 3d  ) {.! ..buffer =
2100: 20 54 63 6c 5f 53 65 74 42 79 74 65 41 72 72 61   Tcl_SetByteArra
2110: 79 4c 65 6e 67 74 68 28 76 61 72 56 61 6c 75 65  yLength(varValue
2120: 50 74 72 2c 20 6c 65 6e 67 74 68 29 3b 0a 21 20  Ptr, length);.! 
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2140: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
2150: 28 69 6e 74 65 72 70 2c 76 61 72 56 61 6c 75 65  (interp,varValue
2160: 50 74 72 29 3b 0a 21 20 09 09 61 72 67 20 3d 20  Ptr);.! ..arg = 
2170: 34 3b 0a 21 20 09 20 20 20 20 7d 20 65 6c 73 65  4;.! .    } else
2180: 20 7b 0a 21 20 09 09 72 65 73 75 6c 74 50 74 72   {.! ..resultPtr
2190: 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73   = Tcl_GetObjRes
21a0: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 21 20 09  ult(interp);.! .
21b0: 09 62 75 66 66 65 72 20 3d 20 54 63 6c 5f 53 65  .buffer = Tcl_Se
21c0: 74 42 79 74 65 41 72 72 61 79 4c 65 6e 67 74 68  tByteArrayLength
21d0: 28 72 65 73 75 6c 74 50 74 72 2c 20 6c 65 6e 67  (resultPtr, leng
21e0: 74 68 29 3b 0a 21 20 09 09 6d 65 6d 73 65 74 28  th);.! ..memset(
21f0: 28 56 4f 49 44 20 2a 29 20 62 75 66 66 65 72 2c  (VOID *) buffer,
2200: 20 30 2c 20 28 73 69 7a 65 5f 74 29 20 6c 65 6e   0, (size_t) len
2210: 67 74 68 29 3b 0a 21 20 09 09 61 72 67 20 3d 20  gth);.! ..arg = 
2220: 33 3b 0a 21 20 09 20 20 20 20 7d 0a 20 20 0a 20  3;.! .    }.  . 
2230: 20 09 20 20 20 20 2f 2a 0a 20 20 09 20 20 20 20   .    /*.  .    
2240: 20 2a 20 50 61 63 6b 20 74 68 65 20 64 61 74 61   * Pack the data
2250: 20 69 6e 74 6f 20 74 68 65 20 72 65 73 75 6c 74   into the result
2260: 20 6f 62 6a 65 63 74 2e 20 20 4e 6f 74 65 20 74   object.  Note t
2270: 68 61 74 20 77 65 20 63 61 6e 20 73 6b 69 70 0a  hat we can skip.
2280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
2290: 2a 2a 2a 20 37 38 30 2c 37 38 37 20 2a 2a 2a 2a  *** 780,787 ****
22a0: 0a 20 20 09 20 20 20 20 20 2a 20 70 61 72 73 65  .  .     * parse
22b0: 64 20 74 68 65 20 73 74 72 69 6e 67 20 6f 6e 63  d the string onc
22c0: 65 2e 0a 20 20 09 20 20 20 20 20 2a 2f 0a 20 20  e..  .     */.  
22d0: 0a 21 20 09 20 20 20 20 61 72 67 20 3d 20 33 3b  .! .    arg = 3;
22e0: 0a 21 20 09 20 20 20 20 66 6f 72 6d 61 74 20 3d  .! .    format =
22f0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
2300: 62 6a 76 5b 32 5d 29 3b 0a 20 20 09 20 20 20 20  bjv[2]);.  .    
2310: 63 75 72 73 6f 72 20 3d 20 62 75 66 66 65 72 3b  cursor = buffer;
2320: 0a 20 20 09 20 20 20 20 6d 61 78 50 6f 73 20 3d  .  .    maxPos =
2330: 20 63 75 72 73 6f 72 3b 0a 20 20 09 20 20 20 20   cursor;.  .    
2340: 77 68 69 6c 65 20 28 2a 66 6f 72 6d 61 74 20 21  while (*format !
2350: 3d 20 30 29 20 7b 0a 2d 2d 2d 20 38 35 30 2c 38  = 0) {.--- 850,8
2360: 35 36 20 2d 2d 2d 2d 0a 20 20 09 20 20 20 20 20  56 ----.  .     
2370: 2a 20 70 61 72 73 65 64 20 74 68 65 20 73 74 72  * parsed the str
2380: 69 6e 67 20 6f 6e 63 65 2e 0a 20 20 09 20 20 20  ing once..  .   
2390: 20 20 2a 2f 0a 20 20 0a 21 20 09 20 20 20 20 66    */.  .! .    f
23a0: 6f 72 6d 61 74 20 3d 20 54 63 6c 5f 47 65 74 53  ormat = Tcl_GetS
23b0: 74 72 69 6e 67 28 6f 62 6a 76 5b 61 72 67 2d 31  tring(objv[arg-1
23c0: 5d 29 3b 0a 20 20 09 20 20 20 20 63 75 72 73 6f  ]);.  .    curso
23d0: 72 20 3d 20 62 75 66 66 65 72 3b 0a 20 20 09 20  r = buffer;.  . 
23e0: 20 20 20 6d 61 78 50 6f 73 20 3d 20 63 75 72 73     maxPos = curs
23f0: 6f 72 3b 0a 20 20 09 20 20 20 20 77 68 69 6c 65  or;.  .    while
2400: 20 28 2a 66 6f 72 6d 61 74 20 21 3d 20 30 29 20   (*format != 0) 
2410: 7b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {.**************
2420: 2a 0a 2a 2a 2a 20 39 39 30 2c 39 39 36 20 2a 2a  *.*** 990,996 **
2430: 2a 2a 0a 20 20 09 09 09 69 66 20 28 63 6f 75 6e  **.  ...if (coun
2440: 74 20 3d 3d 20 42 49 4e 41 52 59 5f 4e 4f 43 4f  t == BINARY_NOCO
2450: 55 4e 54 29 20 7b 0a 20 20 09 09 09 20 20 20 20  UNT) {.  ...    
2460: 63 6f 75 6e 74 20 3d 20 31 3b 0a 20 20 09 09 09  count = 1;.  ...
2470: 7d 0a 21 20 09 09 09 6d 65 6d 73 65 74 28 63 75  }.! ...memset(cu
2480: 72 73 6f 72 2c 20 30 2c 20 28 73 69 7a 65 5f 74  rsor, 0, (size_t
2490: 29 20 63 6f 75 6e 74 29 3b 0a 20 20 09 09 09 63  ) count);.  ...c
24a0: 75 72 73 6f 72 20 2b 3d 20 63 6f 75 6e 74 3b 0a  ursor += count;.
24b0: 20 20 09 09 09 62 72 65 61 6b 3b 0a 20 20 09 09    ...break;.  ..
24c0: 20 20 20 20 7d 0a 2d 2d 2d 20 31 30 35 39 2c 31      }.--- 1059,1
24d0: 30 36 37 20 2d 2d 2d 2d 0a 20 20 09 09 09 69 66  067 ----.  ...if
24e0: 20 28 63 6f 75 6e 74 20 3d 3d 20 42 49 4e 41 52   (count == BINAR
24f0: 59 5f 4e 4f 43 4f 55 4e 54 29 20 7b 0a 20 20 09  Y_NOCOUNT) {.  .
2500: 09 09 20 20 20 20 63 6f 75 6e 74 20 3d 20 31 3b  ..    count = 1;
2510: 0a 20 20 09 09 09 7d 0a 21 20 09 09 09 69 66 20  .  ...}.! ...if 
2520: 28 28 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 29 20  ((enum options) 
2530: 69 6e 64 65 78 20 3d 3d 20 42 49 4e 41 52 59 5f  index == BINARY_
2540: 46 4f 52 4d 41 54 29 20 7b 0a 21 20 09 09 09 20  FORMAT) {.! ... 
2550: 20 20 20 6d 65 6d 73 65 74 28 63 75 72 73 6f 72     memset(cursor
2560: 2c 20 30 2c 20 28 73 69 7a 65 5f 74 29 20 63 6f  , 0, (size_t) co
2570: 75 6e 74 29 3b 0a 21 20 09 09 09 7d 0a 20 20 09  unt);.! ...}.  .
2580: 09 09 63 75 72 73 6f 72 20 2b 3d 20 63 6f 75 6e  ..cursor += coun
2590: 74 3b 0a 20 20 09 09 09 62 72 65 61 6b 3b 0a 20  t;.  ...break;. 
25a0: 20 09 09 20 20 20 20 7d 0a 2a 2a 2a 2a 2a 2a 2a   ..    }.*******
25b0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 30 32  ********.*** 102
25c0: 34 2c 31 30 34 33 20 2a 2a 2a 2a 0a 20 20 09 20  4,1043 ****.  . 
25d0: 20 20 20 7d 0a 20 20 09 20 20 20 20 62 72 65 61     }.  .    brea
25e0: 6b 3b 0a 20 20 09 7d 0a 20 20 09 63 61 73 65 20  k;.  .}.  .case 
25f0: 42 49 4e 41 52 59 5f 53 43 41 4e 3a 20 7b 0a 20  BINARY_SCAN: {. 
2600: 20 09 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 09   .    int i;.  .
2610: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 6c      Tcl_Obj *val
2620: 75 65 50 74 72 2c 20 2a 65 6c 65 6d 65 6e 74 50  uePtr, *elementP
2630: 74 72 3b 0a 20 20 09 20 20 20 20 54 63 6c 5f 48  tr;.  .    Tcl_H
2640: 61 73 68 54 61 62 6c 65 20 6e 75 6d 62 65 72 43  ashTable numberC
2650: 61 63 68 65 48 61 73 68 3b 0a 20 20 09 20 20 20  acheHash;.  .   
2660: 20 54 63 6c 5f 48 61 73 68 54 61 62 6c 65 20 2a   Tcl_HashTable *
2670: 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 3b 0a  numberCachePtr;.
2680: 20 20 0a 21 20 09 20 20 20 20 69 66 20 28 6f 62    .! .    if (ob
2690: 6a 63 20 3c 20 34 29 20 7b 0a 21 20 09 09 54 63  jc < 4) {.! ..Tc
26a0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
26b0: 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 0a  nterp, 2, objv,.
26c0: 21 20 09 09 09 22 76 61 6c 75 65 20 66 6f 72 6d  ! ..."value form
26d0: 61 74 53 74 72 69 6e 67 20 3f 76 61 72 4e 61 6d  atString ?varNam
26e0: 65 20 76 61 72 4e 61 6d 65 20 2e 2e 2e 3f 22 29  e varName ...?")
26f0: 3b 0a 21 20 09 09 72 65 74 75 72 6e 20 54 43 4c  ;.! ..return TCL
2700: 5f 45 52 52 4f 52 3b 0a 20 20 09 20 20 20 20 7d  _ERROR;.  .    }
2710: 0a 20 20 09 20 20 20 20 6e 75 6d 62 65 72 43 61  .  .    numberCa
2720: 63 68 65 50 74 72 20 3d 20 26 6e 75 6d 62 65 72  chePtr = &number
2730: 43 61 63 68 65 48 61 73 68 3b 0a 20 20 09 20 20  CacheHash;.  .  
2740: 20 20 54 63 6c 5f 49 6e 69 74 48 61 73 68 54 61    Tcl_InitHashTa
2750: 62 6c 65 28 6e 75 6d 62 65 72 43 61 63 68 65 50  ble(numberCacheP
2760: 74 72 2c 20 54 43 4c 5f 4f 4e 45 5f 57 4f 52 44  tr, TCL_ONE_WORD
2770: 5f 4b 45 59 53 29 3b 0a 2d 20 09 20 20 20 20 62  _KEYS);.- .    b
2780: 75 66 66 65 72 20 3d 20 54 63 6c 5f 47 65 74 42  uffer = Tcl_GetB
2790: 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
27a0: 6f 62 6a 76 5b 32 5d 2c 20 26 6c 65 6e 67 74 68  objv[2], &length
27b0: 29 3b 0a 20 20 09 20 20 20 20 66 6f 72 6d 61 74  );.  .    format
27c0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
27d0: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 09 20 20  (objv[3]);.  .  
27e0: 20 20 63 75 72 73 6f 72 20 3d 20 62 75 66 66 65    cursor = buffe
27f0: 72 3b 0a 20 20 09 20 20 20 20 61 72 67 20 3d 20  r;.  .    arg = 
2800: 34 3b 0a 2d 2d 2d 20 31 30 39 35 2c 31 31 32 34  4;.--- 1095,1124
2810: 20 2d 2d 2d 2d 0a 20 20 09 20 20 20 20 7d 0a 20   ----.  .    }. 
2820: 20 09 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 09   .    break;.  .
2830: 7d 0a 2b 20 09 63 61 73 65 20 42 49 4e 41 52 59  }.+ .case BINARY
2840: 5f 44 53 43 41 4e 3a 0a 20 20 09 63 61 73 65 20  _DSCAN:.  .case 
2850: 42 49 4e 41 52 59 5f 53 43 41 4e 3a 20 7b 0a 20  BINARY_SCAN: {. 
2860: 20 09 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 09   .    int i;.  .
2870: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 6c      Tcl_Obj *val
2880: 75 65 50 74 72 2c 20 2a 65 6c 65 6d 65 6e 74 50  uePtr, *elementP
2890: 74 72 3b 0a 20 20 09 20 20 20 20 54 63 6c 5f 48  tr;.  .    Tcl_H
28a0: 61 73 68 54 61 62 6c 65 20 6e 75 6d 62 65 72 43  ashTable numberC
28b0: 61 63 68 65 48 61 73 68 3b 0a 20 20 09 20 20 20  acheHash;.  .   
28c0: 20 54 63 6c 5f 48 61 73 68 54 61 62 6c 65 20 2a   Tcl_HashTable *
28d0: 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 3b 0a  numberCachePtr;.
28e0: 20 20 0a 21 20 09 20 20 20 20 69 66 20 28 28 65    .! .    if ((e
28f0: 6e 75 6d 20 6f 70 74 69 6f 6e 73 29 20 69 6e 64  num options) ind
2900: 65 78 20 3d 3d 20 42 49 4e 41 52 59 5f 44 53 43  ex == BINARY_DSC
2910: 41 4e 29 20 7b 0a 21 20 09 09 69 66 20 28 6f 62  AN) {.! ..if (ob
2920: 6a 63 20 3c 20 34 29 20 7b 0a 21 20 09 09 20 20  jc < 4) {.! ..  
2930: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
2940: 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62  gs(interp, 2, ob
2950: 6a 76 2c 0a 21 20 09 09 09 20 20 20 20 22 76 61  jv,.! ...    "va
2960: 72 4e 61 6d 65 20 66 6f 72 6d 61 74 53 74 72 69  rName formatStri
2970: 6e 67 20 3f 76 61 72 4e 61 6d 65 20 76 61 72 4e  ng ?varName varN
2980: 61 6d 65 20 2e 2e 2e 3f 22 29 3b 0a 21 20 09 09  ame ...?");.! ..
2990: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
29a0: 52 52 4f 52 3b 0a 21 20 09 09 7d 0a 21 20 09 09  RROR;.! ..}.! ..
29b0: 62 75 66 66 65 72 20 3d 20 54 63 6c 5f 47 65 74  buffer = Tcl_Get
29c0: 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a  ByteArrayFromObj
29d0: 28 76 61 72 56 61 6c 75 65 50 74 72 2c 20 26 6c  (varValuePtr, &l
29e0: 65 6e 67 74 68 29 3b 0a 21 20 09 20 20 20 20 7d  ength);.! .    }
29f0: 20 65 6c 73 65 20 7b 0a 21 20 09 09 69 66 20 28   else {.! ..if (
2a00: 6f 62 6a 63 20 3c 20 34 29 20 7b 0a 21 20 09 09  objc < 4) {.! ..
2a10: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
2a20: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20  Args(interp, 2, 
2a30: 6f 62 6a 76 2c 0a 21 20 09 09 09 20 20 20 20 22  objv,.! ...    "
2a40: 76 61 6c 75 65 20 66 6f 72 6d 61 74 53 74 72 69  value formatStri
2a50: 6e 67 20 3f 76 61 72 4e 61 6d 65 20 76 61 72 4e  ng ?varName varN
2a60: 61 6d 65 20 2e 2e 2e 3f 22 29 3b 0a 21 20 09 09  ame ...?");.! ..
2a70: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2a80: 52 52 4f 52 3b 0a 21 20 09 09 7d 0a 21 20 09 09  RROR;.! ..}.! ..
2a90: 62 75 66 66 65 72 20 3d 20 54 63 6c 5f 47 65 74  buffer = Tcl_Get
2aa0: 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a  ByteArrayFromObj
2ab0: 28 6f 62 6a 76 5b 32 5d 2c 20 26 6c 65 6e 67 74  (objv[2], &lengt
2ac0: 68 29 3b 0a 20 20 09 20 20 20 20 7d 0a 20 20 09  h);.  .    }.  .
2ad0: 20 20 20 20 6e 75 6d 62 65 72 43 61 63 68 65 50      numberCacheP
2ae0: 74 72 20 3d 20 26 6e 75 6d 62 65 72 43 61 63 68  tr = &numberCach
2af0: 65 48 61 73 68 3b 0a 20 20 09 20 20 20 20 54 63  eHash;.  .    Tc
2b00: 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 6c 65 28  l_InitHashTable(
2b10: 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 2c 20  numberCachePtr, 
2b20: 54 43 4c 5f 4f 4e 45 5f 57 4f 52 44 5f 4b 45 59  TCL_ONE_WORD_KEY
2b30: 53 29 3b 0a 20 20 09 20 20 20 20 66 6f 72 6d 61  S);.  .    forma
2b40: 74 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  t = Tcl_GetStrin
2b50: 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 09 20  g(objv[3]);.  . 
2b60: 20 20 20 63 75 72 73 6f 72 20 3d 20 62 75 66 66     cursor = buff
2b70: 65 72 3b 0a 20 20 09 20 20 20 20 61 72 67 20 3d  er;.  .    arg =
2b80: 20 34 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   4;.************
2b90: 2a 2a 2a 0a 2a 2a 2a 20 31 33 32 38 2c 31 33 33  ***.*** 1328,133
2ba0: 33 20 2a 2a 2a 2a 0a 2d 2d 2d 20 31 34 30 39 2c  3 ****.--- 1409,
2bb0: 31 34 31 39 20 2d 2d 2d 2d 0a 20 20 09 20 20 20  1419 ----.  .   
2bc0: 20 20 2a 2f 0a 20 20 0a 20 20 09 20 20 20 20 64    */.  .  .    d
2bd0: 6f 6e 65 3a 0a 2b 20 09 20 20 20 20 69 66 20 28  one:.+ .    if (
2be0: 28 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 29 20 69  (enum options) i
2bf0: 6e 64 65 78 20 3d 3d 20 42 49 4e 41 52 59 5f 44  ndex == BINARY_D
2c00: 53 43 41 4e 20 26 26 20 61 72 67 20 3d 3d 20 6f  SCAN && arg == o
2c10: 62 6a 63 29 20 7b 0a 2b 20 20 20 20 20 20 20 20  bjc) {.+        
2c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6f 76 65           /* move
2c30: 20 74 68 65 20 6f 66 66 73 65 74 20 2a 2f 0a 2b   the offset */.+
2c40: 20 09 20 20 20 20 09 47 45 54 5f 42 59 54 45 41   .    .GET_BYTEA
2c50: 52 52 41 59 28 76 61 72 56 61 6c 75 65 50 74 72  RRAY(varValuePtr
2c60: 29 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 6f 66 66  )->offset += off
2c70: 73 65 74 3b 0a 2b 20 20 20 20 20 20 20 20 20 20  set;.+          
2c80: 20 20 20 20 20 20 20 54 63 6c 5f 53 65 74 42 79         Tcl_SetBy
2c90: 74 65 41 72 72 61 79 4c 65 6e 67 74 68 28 76 61  teArrayLength(va
2ca0: 72 56 61 6c 75 65 50 74 72 2c 20 6c 65 6e 67 74  rValuePtr, lengt
2cb0: 68 2d 6f 66 66 73 65 74 29 3b 0a 2b 20 09 20 20  h-offset);.+ .  
2cc0: 20 20 7d 0a 20 20 09 20 20 20 20 54 63 6c 5f 52    }.  .    Tcl_R
2cd0: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
2ce0: 70 29 3b 0a 20 20 09 20 20 20 20 54 63 6c 5f 53  p);.  .    Tcl_S
2cf0: 65 74 4c 6f 6e 67 4f 62 6a 28 54 63 6c 5f 47 65  etLongObj(Tcl_Ge
2d00: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
2d10: 70 29 2c 20 61 72 67 20 2d 20 34 29 3b 0a 20 20  p), arg - 4);.  
2d20: 09 20 20 20 20 44 65 6c 65 74 65 53 63 61 6e 4e  .    DeleteScanN
2d30: 75 6d 62 65 72 43 61 63 68 65 28 6e 75 6d 62 65  umberCache(numbe
2d40: 72 43 61 63 68 65 50 74 72 29 3b 0a              rCachePtr);.