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);.