Attachment "binary_flag.patch" to
ticket [1565751fff]
added by
patthoyts
2006-09-29 04:31:32.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 42 69 6e 61 72 79 2e 63 0a 3d 3d 3d 3d 3d clBinary.c.=====
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
0060: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
0070: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 t/tcl/tcl/generi
0080: 63 2f 74 63 6c 42 69 6e 61 72 79 2e 63 2c 76 0a c/tclBinary.c,v.
0090: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
00a0: 69 6f 6e 20 31 2e 32 39 0a 64 69 66 66 20 2d 63 ion 1.29.diff -c
00b0: 20 2d 72 31 2e 32 39 20 74 63 6c 42 69 6e 61 72 -r1.29 tclBinar
00c0: 79 2e 63 0a 2a 2a 2a 20 67 65 6e 65 72 69 63 2f y.c.*** generic/
00d0: 74 63 6c 42 69 6e 61 72 79 2e 63 09 31 30 20 41 tclBinary.c.10 A
00e0: 75 67 20 32 30 30 36 20 31 32 3a 31 35 3a 33 30 ug 2006 12:15:30
00f0: 20 2d 30 30 30 30 09 31 2e 32 39 0a 2d 2d 2d 20 -0000.1.29.---
0100: 67 65 6e 65 72 69 63 2f 74 63 6c 42 69 6e 61 72 generic/tclBinar
0110: 79 2e 63 09 32 38 20 53 65 70 20 32 30 30 36 20 y.c.28 Sep 2006
0120: 32 31 3a 32 36 3a 30 35 20 2d 30 30 30 30 0a 2a 21:26:05 -0000.*
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a **************.*
0140: 2a 2a 20 31 34 2c 31 39 20 2a 2a 2a 2a 0a 2d 2d ** 14,19 ****.--
0150: 2d 20 31 34 2c 32 30 20 2d 2d 2d 2d 0a 20 20 20 - 14,20 ----.
0160: 2a 2f 0a 20 20 0a 20 20 23 69 6e 63 6c 75 64 65 */. . #include
0170: 20 22 74 63 6c 49 6e 74 2e 68 22 0a 2b 20 23 69 "tclInt.h".+ #i
0180: 6e 63 6c 75 64 65 20 22 74 63 6c 54 6f 6d 4d 61 nclude "tclTomMa
0190: 74 68 2e 68 22 0a 20 20 0a 20 20 23 69 6e 63 6c th.h". . #incl
01a0: 75 64 65 20 3c 6d 61 74 68 2e 68 3e 0a 20 20 0a ude <math.h>. .
01b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a ***************.
01c0: 2a 2a 2a 20 32 36 2c 33 31 20 2a 2a 2a 2a 0a 2d *** 26,31 ****.-
01d0: 2d 2d 20 32 37 2c 33 39 20 2d 2d 2d 2d 0a 20 20 -- 27,39 ----.
01e0: 23 64 65 66 69 6e 65 20 42 49 4e 41 52 59 5f 4e #define BINARY_N
01f0: 4f 43 4f 55 4e 54 20 2d 32 09 2f 2a 20 4e 6f 20 OCOUNT -2./* No
0200: 63 6f 75 6e 74 20 77 61 73 20 73 70 65 63 69 66 count was specif
0210: 69 65 64 20 69 6e 20 66 6f 72 6d 61 74 2e 20 2a ied in format. *
0220: 2f 0a 20 20 0a 20 20 2f 2a 0a 2b 20 20 2a 20 54 /. . /*.+ * T
0230: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6c 61 he following fla
0240: 67 73 20 6d 61 79 20 62 65 20 4f 52 65 64 20 74 gs may be ORed t
0250: 6f 67 65 74 68 65 72 20 61 6e 64 20 72 65 74 75 ogether and retu
0260: 72 6e 65 64 20 62 79 20 47 65 74 46 6f 72 6d 61 rned by GetForma
0270: 74 53 70 65 63 0a 2b 20 20 2a 2f 0a 2b 20 0a 2b tSpec.+ */.+ .+
0280: 20 23 64 65 66 69 6e 65 20 42 49 4e 41 52 59 5f #define BINARY_
0290: 53 49 47 4e 45 44 20 30 09 09 2f 2a 20 46 69 65 SIGNED 0../* Fie
02a0: 6c 64 20 74 6f 20 62 65 20 72 65 61 64 20 61 73 ld to be read as
02b0: 20 73 69 67 6e 65 64 20 64 61 74 61 20 2a 2f 0a signed data */.
02c0: 2b 20 23 64 65 66 69 6e 65 20 42 49 4e 41 52 59 + #define BINARY
02d0: 5f 55 4e 53 49 47 4e 45 44 20 31 09 2f 2a 20 46 _UNSIGNED 1./* F
02e0: 69 65 6c 64 20 74 6f 20 62 65 20 72 65 61 64 20 ield to be read
02f0: 61 73 20 75 6e 73 69 67 6e 65 64 20 64 61 74 61 as unsigned data
0300: 20 2a 2f 0a 2b 20 0a 2b 20 2f 2a 0a 20 20 20 2a */.+ .+ /*. *
0310: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 The following d
0320: 65 66 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d efines the maxim
0330: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 um number of dif
0340: 66 65 72 65 6e 74 20 28 69 6e 74 65 67 65 72 29 ferent (integer)
0350: 20 6e 75 6d 62 65 72 73 0a 20 20 20 2a 20 70 6c numbers. * pl
0360: 61 63 65 64 20 69 6e 20 74 68 65 20 6f 62 6a 65 aced in the obje
0370: 63 74 20 63 61 63 68 65 20 62 79 20 27 62 69 6e ct cache by 'bin
0380: 61 72 79 20 73 63 61 6e 27 20 62 65 66 6f 72 65 ary scan' before
0390: 20 69 74 20 62 61 69 6c 73 20 6f 75 74 20 61 6e it bails out an
03a0: 64 0a 20 20 20 2a 20 73 77 69 74 63 68 65 73 20 d. * switches
03b0: 62 61 63 6b 20 74 6f 20 50 6c 61 6e 20 41 20 28 back to Plan A (
03c0: 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20 6f creating a new o
03d0: 62 6a 65 63 74 20 66 6f 72 20 65 61 63 68 20 76 bject for each v
03e0: 61 6c 75 65 2e 29 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a alue.).*********
03f0: 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 35 34 2c 36 32 ******.*** 54,62
0400: 20 2a 2a 2a 2a 0a 20 20 09 09 09 20 20 20 20 54 ****. ... T
0410: 63 6c 5f 4f 62 6a 20 2a 73 72 63 2c 20 75 6e 73 cl_Obj *src, uns
0420: 69 67 6e 65 64 20 63 68 61 72 20 2a 2a 63 75 72 igned char **cur
0430: 73 6f 72 50 74 72 29 3b 0a 20 20 73 74 61 74 69 sorPtr);. stati
0440: 63 20 76 6f 69 64 09 09 46 72 65 65 42 79 74 65 c void..FreeByte
0450: 41 72 72 61 79 49 6e 74 65 72 6e 61 6c 52 65 70 ArrayInternalRep
0460: 28 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 (Tcl_Obj *objPtr
0470: 29 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 09 );. static int.
0480: 09 47 65 74 46 6f 72 6d 61 74 53 70 65 63 28 63 .GetFormatSpec(c
0490: 68 61 72 20 2a 2a 66 6f 72 6d 61 74 50 74 72 2c har **formatPtr,
04a0: 20 63 68 61 72 20 2a 63 6d 64 50 74 72 2c 0a 21 char *cmdPtr,.!
04b0: 20 09 09 09 20 20 20 20 69 6e 74 20 2a 63 6f 75 ... int *cou
04c0: 6e 74 50 74 72 29 3b 0a 20 20 73 74 61 74 69 63 ntPtr);. static
04d0: 20 54 63 6c 5f 4f 62 6a 20 2a 09 53 63 61 6e 4e Tcl_Obj *.ScanN
04e0: 75 6d 62 65 72 28 75 6e 73 69 67 6e 65 64 20 63 umber(unsigned c
04f0: 68 61 72 20 2a 62 75 66 66 65 72 2c 20 69 6e 74 har *buffer, int
0500: 20 74 79 70 65 2c 0a 21 20 09 09 09 20 20 20 20 type,.! ...
0510: 54 63 6c 5f 48 61 73 68 54 61 62 6c 65 20 2a 2a Tcl_HashTable **
0520: 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 29 3b numberCachePtr);
0530: 0a 20 20 73 74 61 74 69 63 20 69 6e 74 09 09 53 . static int..S
0540: 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 41 etByteArrayFromA
0550: 6e 79 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 ny(Tcl_Interp *i
0560: 6e 74 65 72 70 2c 0a 20 20 09 09 09 20 20 20 20 nterp,. ...
0570: 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 Tcl_Obj *objPtr)
0580: 3b 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 09 ;. static void.
0590: 09 55 70 64 61 74 65 53 74 72 69 6e 67 4f 66 42 .UpdateStringOfB
05a0: 79 74 65 41 72 72 61 79 28 54 63 6c 5f 4f 62 6a yteArray(Tcl_Obj
05b0: 20 2a 6c 69 73 74 50 74 72 29 3b 0a 2d 2d 2d 20 *listPtr);.---
05c0: 36 32 2c 37 30 20 2d 2d 2d 2d 0a 20 20 09 09 09 62,70 ----. ...
05d0: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 73 72 63 Tcl_Obj *src
05e0: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char
05f0: 2a 2a 63 75 72 73 6f 72 50 74 72 29 3b 0a 20 20 **cursorPtr);.
0600: 73 74 61 74 69 63 20 76 6f 69 64 09 09 46 72 65 static void..Fre
0610: 65 42 79 74 65 41 72 72 61 79 49 6e 74 65 72 6e eByteArrayIntern
0620: 61 6c 52 65 70 28 54 63 6c 5f 4f 62 6a 20 2a 6f alRep(Tcl_Obj *o
0630: 62 6a 50 74 72 29 3b 0a 20 20 73 74 61 74 69 63 bjPtr);. static
0640: 20 69 6e 74 09 09 47 65 74 46 6f 72 6d 61 74 53 int..GetFormatS
0650: 70 65 63 28 63 68 61 72 20 2a 2a 66 6f 72 6d 61 pec(char **forma
0660: 74 50 74 72 2c 20 63 68 61 72 20 2a 63 6d 64 50 tPtr, char *cmdP
0670: 74 72 2c 0a 21 20 09 09 09 20 20 20 20 69 6e 74 tr,.! ... int
0680: 20 2a 63 6f 75 6e 74 50 74 72 2c 20 69 6e 74 20 *countPtr, int
0690: 2a 66 6c 61 67 73 50 74 72 29 3b 0a 20 20 73 74 *flagsPtr);. st
06a0: 61 74 69 63 20 54 63 6c 5f 4f 62 6a 20 2a 09 53 atic Tcl_Obj *.S
06b0: 63 61 6e 4e 75 6d 62 65 72 28 75 6e 73 69 67 6e canNumber(unsign
06c0: 65 64 20 63 68 61 72 20 2a 62 75 66 66 65 72 2c ed char *buffer,
06d0: 20 69 6e 74 20 74 79 70 65 2c 0a 21 20 09 09 09 int type,.! ...
06e0: 20 20 20 20 69 6e 74 20 66 6c 61 67 73 2c 20 54 int flags, T
06f0: 63 6c 5f 48 61 73 68 54 61 62 6c 65 20 2a 2a 6e cl_HashTable **n
0700: 75 6d 62 65 72 43 61 63 68 65 50 74 72 29 3b 0a umberCachePtr);.
0710: 20 20 73 74 61 74 69 63 20 69 6e 74 09 09 53 65 static int..Se
0720: 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 41 6e tByteArrayFromAn
0730: 79 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e y(Tcl_Interp *in
0740: 74 65 72 70 2c 0a 20 20 09 09 09 20 20 20 20 54 terp,. ... T
0750: 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 3b cl_Obj *objPtr);
0760: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 09 09 . static void..
0770: 55 70 64 61 74 65 53 74 72 69 6e 67 4f 66 42 79 UpdateStringOfBy
0780: 74 65 41 72 72 61 79 28 54 63 6c 5f 4f 62 6a 20 teArray(Tcl_Obj
0790: 2a 6c 69 73 74 50 74 72 29 3b 0a 2a 2a 2a 2a 2a *listPtr);.*****
07a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 35 **********.*** 5
07b0: 36 33 2c 35 36 38 20 2a 2a 2a 2a 0a 2d 2d 2d 20 63,568 ****.---
07c0: 35 37 31 2c 35 37 37 20 2d 2d 2d 2d 0a 20 20 20 571,577 ----.
07d0: 20 20 20 63 68 61 72 20 63 6d 64 3b 09 09 09 2f char cmd;.../
07e0: 2a 20 43 75 72 72 65 6e 74 20 66 6f 72 6d 61 74 * Current format
07f0: 20 63 68 61 72 61 63 74 65 72 2e 20 2a 2f 0a 20 character. */.
0800: 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 3b 09 int count;.
0810: 09 09 2f 2a 20 43 6f 75 6e 74 20 61 73 73 6f 63 ../* Count assoc
0820: 69 61 74 65 64 20 77 69 74 68 20 63 75 72 72 65 iated with curre
0830: 6e 74 20 66 6f 72 6d 61 74 0a 20 20 09 09 09 09 nt format. ....
0840: 20 2a 20 63 68 61 72 61 63 74 65 72 2e 20 2a 2f * character. */
0850: 0a 2b 20 20 20 20 20 69 6e 74 20 66 6c 61 67 73 .+ int flags
0860: 3b 09 09 09 2f 2a 20 46 6f 72 6d 61 74 20 66 69 ;.../* Format fi
0870: 65 6c 64 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 eld flags */.
0880: 20 20 20 63 68 61 72 20 2a 66 6f 72 6d 61 74 3b char *format;
0890: 09 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 ../* Pointer to
08a0: 63 75 72 72 65 6e 74 20 70 6f 73 69 74 69 6f 6e current position
08b0: 20 69 6e 20 66 6f 72 6d 61 74 0a 20 20 09 09 09 in format. ...
08c0: 09 20 2a 20 73 74 72 69 6e 67 2e 20 2a 2f 0a 20 . * string. */.
08d0: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 Tcl_Obj *re
08e0: 73 75 6c 74 50 74 72 20 3d 20 4e 55 4c 4c 3b 09 sultPtr = NULL;.
08f0: 2f 2a 20 4f 62 6a 65 63 74 20 68 6f 6c 64 69 6e /* Object holdin
0900: 67 20 72 65 73 75 6c 74 20 62 75 66 66 65 72 2e g result buffer.
0910: 20 2a 2f 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a */.************
0920: 2a 2a 2a 0a 2a 2a 2a 20 36 30 38 2c 36 31 34 20 ***.*** 608,614
0930: 2a 2a 2a 2a 0a 20 20 09 6c 65 6e 67 74 68 20 3d ****. .length =
0940: 20 30 3b 0a 20 20 09 77 68 69 6c 65 20 28 2a 66 0;. .while (*f
0950: 6f 72 6d 61 74 20 21 3d 20 27 5c 30 27 29 20 7b ormat != '\0') {
0960: 0a 20 20 09 20 20 20 20 73 74 72 20 3d 20 66 6f . . str = fo
0970: 72 6d 61 74 3b 0a 21 20 09 20 20 20 20 69 66 20 rmat;.! . if
0980: 28 21 47 65 74 46 6f 72 6d 61 74 53 70 65 63 28 (!GetFormatSpec(
0990: 26 66 6f 72 6d 61 74 2c 20 26 63 6d 64 2c 20 26 &format, &cmd, &
09a0: 63 6f 75 6e 74 29 29 20 7b 0a 20 20 09 09 62 72 count)) {. ..br
09b0: 65 61 6b 3b 0a 20 20 09 20 20 20 20 7d 0a 20 20 eak;. . }.
09c0: 09 20 20 20 20 73 77 69 74 63 68 20 28 63 6d 64 . switch (cmd
09d0: 29 20 7b 0a 2d 2d 2d 20 36 31 37 2c 36 32 34 20 ) {.--- 617,624
09e0: 2d 2d 2d 2d 0a 20 20 09 6c 65 6e 67 74 68 20 3d ----. .length =
09f0: 20 30 3b 0a 20 20 09 77 68 69 6c 65 20 28 2a 66 0;. .while (*f
0a00: 6f 72 6d 61 74 20 21 3d 20 27 5c 30 27 29 20 7b ormat != '\0') {
0a10: 0a 20 20 09 20 20 20 20 73 74 72 20 3d 20 66 6f . . str = fo
0a20: 72 6d 61 74 3b 0a 21 20 09 20 20 20 20 66 6c 61 rmat;.! . fla
0a30: 67 73 20 3d 20 30 3b 0a 21 20 09 20 20 20 20 69 gs = 0;.! . i
0a40: 66 20 28 21 47 65 74 46 6f 72 6d 61 74 53 70 65 f (!GetFormatSpe
0a50: 63 28 26 66 6f 72 6d 61 74 2c 20 26 63 6d 64 2c c(&format, &cmd,
0a60: 20 26 63 6f 75 6e 74 2c 20 26 66 6c 61 67 73 29 &count, &flags)
0a70: 29 20 7b 0a 20 20 09 09 62 72 65 61 6b 3b 0a 20 ) {. ..break;.
0a80: 20 09 20 20 20 20 7d 0a 20 20 09 20 20 20 20 73 . }. . s
0a90: 77 69 74 63 68 20 28 63 6d 64 29 20 7b 0a 2a 2a witch (cmd) {.**
0aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a *************.**
0ab0: 2a 20 37 37 30 2c 37 37 36 20 2a 2a 2a 2a 0a 20 * 770,776 ****.
0ac0: 20 09 63 75 72 73 6f 72 20 3d 20 62 75 66 66 65 .cursor = buffe
0ad0: 72 3b 0a 20 20 09 6d 61 78 50 6f 73 20 3d 20 63 r;. .maxPos = c
0ae0: 75 72 73 6f 72 3b 0a 20 20 09 77 68 69 6c 65 20 ursor;. .while
0af0: 28 2a 66 6f 72 6d 61 74 20 21 3d 20 30 29 20 7b (*format != 0) {
0b00: 0a 21 20 09 20 20 20 20 69 66 20 28 21 47 65 74 .! . if (!Get
0b10: 46 6f 72 6d 61 74 53 70 65 63 28 26 66 6f 72 6d FormatSpec(&form
0b20: 61 74 2c 20 26 63 6d 64 2c 20 26 63 6f 75 6e 74 at, &cmd, &count
0b30: 29 29 20 7b 0a 20 20 09 09 62 72 65 61 6b 3b 0a )) {. ..break;.
0b40: 20 20 09 20 20 20 20 7d 0a 20 20 09 20 20 20 20 . }. .
0b50: 69 66 20 28 28 63 6f 75 6e 74 20 3d 3d 20 30 29 if ((count == 0)
0b60: 20 26 26 20 28 63 6d 64 20 21 3d 20 27 40 27 29 && (cmd != '@')
0b70: 29 20 7b 0a 2d 2d 2d 20 37 38 30 2c 37 38 37 20 ) {.--- 780,787
0b80: 2d 2d 2d 2d 0a 20 20 09 63 75 72 73 6f 72 20 3d ----. .cursor =
0b90: 20 62 75 66 66 65 72 3b 0a 20 20 09 6d 61 78 50 buffer;. .maxP
0ba0: 6f 73 20 3d 20 63 75 72 73 6f 72 3b 0a 20 20 09 os = cursor;. .
0bb0: 77 68 69 6c 65 20 28 2a 66 6f 72 6d 61 74 20 21 while (*format !
0bc0: 3d 20 30 29 20 7b 0a 21 20 09 20 20 20 20 66 6c = 0) {.! . fl
0bd0: 61 67 73 20 3d 20 30 3b 0a 21 20 09 20 20 20 20 ags = 0;.! .
0be0: 69 66 20 28 21 47 65 74 46 6f 72 6d 61 74 53 70 if (!GetFormatSp
0bf0: 65 63 28 26 66 6f 72 6d 61 74 2c 20 26 63 6d 64 ec(&format, &cmd
0c00: 2c 20 26 63 6f 75 6e 74 2c 20 26 66 6c 61 67 73 , &count, &flags
0c10: 29 29 20 7b 0a 20 20 09 09 62 72 65 61 6b 3b 0a )) {. ..break;.
0c20: 20 20 09 20 20 20 20 7d 0a 20 20 09 20 20 20 20 . }. .
0c30: 69 66 20 28 28 63 6f 75 6e 74 20 3d 3d 20 30 29 if ((count == 0)
0c40: 20 26 26 20 28 63 6d 64 20 21 3d 20 27 40 27 29 && (cmd != '@')
0c50: 29 20 7b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ) {.************
0c60: 2a 2a 2a 0a 2a 2a 2a 20 31 30 32 38 2c 31 30 33 ***.*** 1028,103
0c70: 34 20 2a 2a 2a 2a 0a 20 20 09 6f 66 66 73 65 74 4 ****. .offset
0c80: 20 3d 20 30 3b 0a 20 20 09 77 68 69 6c 65 20 28 = 0;. .while (
0c90: 2a 66 6f 72 6d 61 74 20 21 3d 20 27 5c 30 27 29 *format != '\0')
0ca0: 20 7b 0a 20 20 09 20 20 20 20 73 74 72 20 3d 20 {. . str =
0cb0: 66 6f 72 6d 61 74 3b 0a 21 20 09 20 20 20 20 69 format;.! . i
0cc0: 66 20 28 21 47 65 74 46 6f 72 6d 61 74 53 70 65 f (!GetFormatSpe
0cd0: 63 28 26 66 6f 72 6d 61 74 2c 20 26 63 6d 64 2c c(&format, &cmd,
0ce0: 20 26 63 6f 75 6e 74 29 29 20 7b 0a 20 20 09 09 &count)) {. ..
0cf0: 67 6f 74 6f 20 64 6f 6e 65 3b 0a 20 20 09 20 20 goto done;. .
0d00: 20 20 7d 0a 20 20 09 20 20 20 20 73 77 69 74 63 }. . switc
0d10: 68 20 28 63 6d 64 29 20 7b 0a 2d 2d 2d 20 31 30 h (cmd) {.--- 10
0d20: 33 39 2c 31 30 34 36 20 2d 2d 2d 2d 0a 20 20 09 39,1046 ----. .
0d30: 6f 66 66 73 65 74 20 3d 20 30 3b 0a 20 20 09 77 offset = 0;. .w
0d40: 68 69 6c 65 20 28 2a 66 6f 72 6d 61 74 20 21 3d hile (*format !=
0d50: 20 27 5c 30 27 29 20 7b 0a 20 20 09 20 20 20 20 '\0') {. .
0d60: 73 74 72 20 3d 20 66 6f 72 6d 61 74 3b 0a 21 20 str = format;.!
0d70: 09 20 20 20 20 66 6c 61 67 73 20 3d 20 30 3b 0a . flags = 0;.
0d80: 21 20 09 20 20 20 20 69 66 20 28 21 47 65 74 46 ! . if (!GetF
0d90: 6f 72 6d 61 74 53 70 65 63 28 26 66 6f 72 6d 61 ormatSpec(&forma
0da0: 74 2c 20 26 63 6d 64 2c 20 26 63 6f 75 6e 74 2c t, &cmd, &count,
0db0: 20 26 66 6c 61 67 73 29 29 20 7b 0a 20 20 09 09 &flags)) {. ..
0dc0: 67 6f 74 6f 20 64 6f 6e 65 3b 0a 20 20 09 20 20 goto done;. .
0dd0: 20 20 7d 0a 20 20 09 20 20 20 20 73 77 69 74 63 }. . switc
0de0: 68 20 28 63 6d 64 29 20 7b 0a 2a 2a 2a 2a 2a 2a h (cmd) {.******
0df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 32 *********.*** 12
0e00: 34 30 2c 31 32 34 36 20 2a 2a 2a 2a 0a 20 20 09 40,1246 ****. .
0e10: 09 20 20 20 20 69 66 20 28 28 6c 65 6e 67 74 68 . if ((length
0e20: 20 2d 20 6f 66 66 73 65 74 29 20 3c 20 73 69 7a - offset) < siz
0e30: 65 29 20 7b 0a 20 20 09 09 09 67 6f 74 6f 20 64 e) {. ...goto d
0e40: 6f 6e 65 3b 0a 20 20 09 09 20 20 20 20 7d 0a 21 one;. .. }.!
0e50: 20 09 09 20 20 20 20 76 61 6c 75 65 50 74 72 20 .. valuePtr
0e60: 3d 20 53 63 61 6e 4e 75 6d 62 65 72 28 62 75 66 = ScanNumber(buf
0e70: 66 65 72 2b 6f 66 66 73 65 74 2c 20 63 6d 64 2c fer+offset, cmd,
0e80: 20 26 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 &numberCachePtr
0e90: 29 3b 0a 20 20 09 09 20 20 20 20 6f 66 66 73 65 );. .. offse
0ea0: 74 20 2b 3d 20 73 69 7a 65 3b 0a 20 20 09 09 7d t += size;. ..}
0eb0: 20 65 6c 73 65 20 7b 0a 20 20 09 09 20 20 20 20 else {. ..
0ec0: 69 66 20 28 63 6f 75 6e 74 20 3d 3d 20 42 49 4e if (count == BIN
0ed0: 41 52 59 5f 41 4c 4c 29 20 7b 0a 2d 2d 2d 20 31 ARY_ALL) {.--- 1
0ee0: 32 35 32 2c 31 32 35 38 20 2d 2d 2d 2d 0a 20 20 252,1258 ----.
0ef0: 09 09 20 20 20 20 69 66 20 28 28 6c 65 6e 67 74 .. if ((lengt
0f00: 68 20 2d 20 6f 66 66 73 65 74 29 20 3c 20 73 69 h - offset) < si
0f10: 7a 65 29 20 7b 0a 20 20 09 09 09 67 6f 74 6f 20 ze) {. ...goto
0f20: 64 6f 6e 65 3b 0a 20 20 09 09 20 20 20 20 7d 0a done;. .. }.
0f30: 21 20 09 09 20 20 20 20 76 61 6c 75 65 50 74 72 ! .. valuePtr
0f40: 20 3d 20 53 63 61 6e 4e 75 6d 62 65 72 28 62 75 = ScanNumber(bu
0f50: 66 66 65 72 2b 6f 66 66 73 65 74 2c 20 63 6d 64 ffer+offset, cmd
0f60: 2c 20 66 6c 61 67 73 2c 20 26 6e 75 6d 62 65 72 , flags, &number
0f70: 43 61 63 68 65 50 74 72 29 3b 0a 20 20 09 09 20 CachePtr);. ..
0f80: 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a offset += siz
0f90: 65 3b 0a 20 20 09 09 7d 20 65 6c 73 65 20 7b 0a e;. ..} else {.
0fa0: 20 20 09 09 20 20 20 20 69 66 20 28 63 6f 75 6e .. if (coun
0fb0: 74 20 3d 3d 20 42 49 4e 41 52 59 5f 41 4c 4c 29 t == BINARY_ALL)
0fc0: 20 7b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a {.*************
0fd0: 2a 2a 0a 2a 2a 2a 20 31 32 35 32 2c 31 32 35 38 **.*** 1252,1258
0fe0: 20 2a 2a 2a 2a 0a 20 20 09 09 20 20 20 20 76 61 ****. .. va
0ff0: 6c 75 65 50 74 72 20 3d 20 54 63 6c 5f 4e 65 77 luePtr = Tcl_New
1000: 4f 62 6a 28 29 3b 0a 20 20 09 09 20 20 20 20 73 Obj();. .. s
1010: 72 63 20 3d 20 62 75 66 66 65 72 2b 6f 66 66 73 rc = buffer+offs
1020: 65 74 3b 0a 20 20 09 09 20 20 20 20 66 6f 72 20 et;. .. for
1030: 28 69 20 3d 20 30 3b 20 69 20 3c 20 63 6f 75 6e (i = 0; i < coun
1040: 74 3b 20 69 2b 2b 29 20 7b 0a 21 20 09 09 09 65 t; i++) {.! ...e
1050: 6c 65 6d 65 6e 74 50 74 72 20 3d 20 53 63 61 6e lementPtr = Scan
1060: 4e 75 6d 62 65 72 28 73 72 63 2c 20 63 6d 64 2c Number(src, cmd,
1070: 20 26 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 &numberCachePtr
1080: 29 3b 0a 20 20 09 09 09 73 72 63 20 2b 3d 20 73 );. ...src += s
1090: 69 7a 65 3b 0a 20 20 09 09 09 54 63 6c 5f 4c 69 ize;. ...Tcl_Li
10a0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 stObjAppendEleme
10b0: 6e 74 28 4e 55 4c 4c 2c 20 76 61 6c 75 65 50 74 nt(NULL, valuePt
10c0: 72 2c 20 65 6c 65 6d 65 6e 74 50 74 72 29 3b 0a r, elementPtr);.
10d0: 20 20 09 09 20 20 20 20 7d 0a 2d 2d 2d 20 31 32 .. }.--- 12
10e0: 36 34 2c 31 32 37 30 20 2d 2d 2d 2d 0a 20 20 09 64,1270 ----. .
10f0: 09 20 20 20 20 76 61 6c 75 65 50 74 72 20 3d 20 . valuePtr =
1100: 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 Tcl_NewObj();.
1110: 09 09 20 20 20 20 73 72 63 20 3d 20 62 75 66 66 .. src = buff
1120: 65 72 2b 6f 66 66 73 65 74 3b 0a 20 20 09 09 20 er+offset;. ..
1130: 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 for (i = 0; i
1140: 20 3c 20 63 6f 75 6e 74 3b 20 69 2b 2b 29 20 7b < count; i++) {
1150: 0a 21 20 09 09 09 65 6c 65 6d 65 6e 74 50 74 72 .! ...elementPtr
1160: 20 3d 20 53 63 61 6e 4e 75 6d 62 65 72 28 73 72 = ScanNumber(sr
1170: 63 2c 20 63 6d 64 2c 20 66 6c 61 67 73 2c 20 26 c, cmd, flags, &
1180: 6e 75 6d 62 65 72 43 61 63 68 65 50 74 72 29 3b numberCachePtr);
1190: 0a 20 20 09 09 09 73 72 63 20 2b 3d 20 73 69 7a . ...src += siz
11a0: 65 3b 0a 20 20 09 09 09 54 63 6c 5f 4c 69 73 74 e;. ...Tcl_List
11b0: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 ObjAppendElement
11c0: 28 4e 55 4c 4c 2c 20 76 61 6c 75 65 50 74 72 2c (NULL, valuePtr,
11d0: 20 65 6c 65 6d 65 6e 74 50 74 72 29 3b 0a 20 20 elementPtr);.
11e0: 09 09 20 20 20 20 7d 0a 2a 2a 2a 2a 2a 2a 2a 2a .. }.********
11f0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 33 37 33 *******.*** 1373
1200: 2c 31 33 37 39 20 2a 2a 2a 2a 0a 20 20 47 65 74 ,1379 ****. Get
1210: 46 6f 72 6d 61 74 53 70 65 63 28 0a 20 20 20 20 FormatSpec(.
1220: 20 20 63 68 61 72 20 2a 2a 66 6f 72 6d 61 74 50 char **formatP
1230: 74 72 2c 09 09 2f 2a 20 50 6f 69 6e 74 65 72 20 tr,../* Pointer
1240: 74 6f 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 to format string
1250: 2e 20 2a 2f 0a 20 20 20 20 20 20 63 68 61 72 20 . */. char
1260: 2a 63 6d 64 50 74 72 2c 09 09 2f 2a 20 50 6f 69 *cmdPtr,../* Poi
1270: 6e 74 65 72 20 74 6f 20 6c 6f 63 61 74 69 6f 6e nter to location
1280: 20 6f 66 20 63 6f 6d 6d 61 6e 64 20 63 68 61 72 of command char
1290: 2e 20 2a 2f 0a 21 20 20 20 20 20 69 6e 74 20 2a . */.! int *
12a0: 63 6f 75 6e 74 50 74 72 29 09 09 2f 2a 20 50 6f countPtr)../* Po
12b0: 69 6e 74 65 72 20 74 6f 20 72 65 70 65 61 74 20 inter to repeat
12c0: 63 6f 75 6e 74 20 76 61 6c 75 65 2e 20 2a 2f 0a count value. */.
12d0: 20 20 7b 0a 20 20 20 20 20 20 2f 2a 0a 20 20 20 {. /*.
12e0: 20 20 20 20 2a 20 53 6b 69 70 20 61 6e 79 20 6c * Skip any l
12f0: 65 61 64 69 6e 67 20 62 6c 61 6e 6b 73 2e 0a 2d eading blanks..-
1300: 2d 2d 20 31 33 38 35 2c 31 33 39 32 20 2d 2d 2d -- 1385,1392 ---
1310: 2d 0a 20 20 47 65 74 46 6f 72 6d 61 74 53 70 65 -. GetFormatSpe
1320: 63 28 0a 20 20 20 20 20 20 63 68 61 72 20 2a 2a c(. char **
1330: 66 6f 72 6d 61 74 50 74 72 2c 09 09 2f 2a 20 50 formatPtr,../* P
1340: 6f 69 6e 74 65 72 20 74 6f 20 66 6f 72 6d 61 74 ointer to format
1350: 20 73 74 72 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 string. */.
1360: 20 20 63 68 61 72 20 2a 63 6d 64 50 74 72 2c 09 char *cmdPtr,.
1370: 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6c ./* Pointer to l
1380: 6f 63 61 74 69 6f 6e 20 6f 66 20 63 6f 6d 6d 61 ocation of comma
1390: 6e 64 20 63 68 61 72 2e 20 2a 2f 0a 21 20 20 20 nd char. */.!
13a0: 20 20 69 6e 74 20 2a 63 6f 75 6e 74 50 74 72 2c int *countPtr,
13b0: 09 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 ../* Pointer to
13c0: 72 65 70 65 61 74 20 63 6f 75 6e 74 20 76 61 6c repeat count val
13d0: 75 65 2e 20 2a 2f 0a 21 20 20 20 20 20 69 6e 74 ue. */.! int
13e0: 20 2a 66 6c 61 67 73 50 74 72 29 09 09 2f 2a 20 *flagsPtr)../*
13f0: 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 65 6c 64 Pointer to field
1400: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 7b 0a 20 20 flags */. {.
1410: 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 2a 20 /*. *
1420: 53 6b 69 70 20 61 6e 79 20 6c 65 61 64 69 6e 67 Skip any leading
1430: 20 62 6c 61 6e 6b 73 2e 0a 2a 2a 2a 2a 2a 2a 2a blanks..*******
1440: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 33 39 ********.*** 139
1450: 37 2c 31 34 30 32 20 2a 2a 2a 2a 0a 2d 2d 2d 20 7,1402 ****.---
1460: 31 34 31 30 2c 31 34 31 39 20 2d 2d 2d 2d 0a 20 1410,1419 ----.
1470: 20 0a 20 20 20 20 20 20 2a 63 6d 64 50 74 72 20 . *cmdPtr
1480: 3d 20 2a 2a 66 6f 72 6d 61 74 50 74 72 3b 0a 20 = **formatPtr;.
1490: 20 20 20 20 20 28 2a 66 6f 72 6d 61 74 50 74 72 (*formatPtr
14a0: 29 2b 2b 3b 0a 2b 20 20 20 20 20 69 66 20 28 2a )++;.+ if (*
14b0: 2a 66 6f 72 6d 61 74 50 74 72 20 3d 3d 20 27 75 *formatPtr == 'u
14c0: 27 29 20 7b 0a 2b 20 09 28 2a 66 6f 72 6d 61 74 ') {.+ .(*format
14d0: 50 74 72 29 2b 2b 3b 0a 2b 20 09 28 2a 66 6c 61 Ptr)++;.+ .(*fla
14e0: 67 73 50 74 72 29 20 7c 3d 20 42 49 4e 41 52 59 gsPtr) |= BINARY
14f0: 5f 55 4e 53 49 47 4e 45 44 3b 0a 2b 20 20 20 20 _UNSIGNED;.+
1500: 20 7d 0a 20 20 20 20 20 20 69 66 20 28 2a 2a 66 }. if (**f
1510: 6f 72 6d 61 74 50 74 72 20 3d 3d 20 27 2a 27 29 ormatPtr == '*')
1520: 20 7b 0a 20 20 09 28 2a 66 6f 72 6d 61 74 50 74 {. .(*formatPt
1530: 72 29 2b 2b 3b 0a 20 20 09 28 2a 63 6f 75 6e 74 r)++;. .(*count
1540: 50 74 72 29 20 3d 20 42 49 4e 41 52 59 5f 41 4c Ptr) = BINARY_AL
1550: 4c 3b 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a L;.*************
1560: 2a 2a 0a 2a 2a 2a 20 31 37 37 38 2c 31 37 38 33 **.*** 1778,1783
1570: 20 2a 2a 2a 2a 0a 2d 2d 2d 20 31 37 39 35 2c 31 ****.--- 1795,1
1580: 38 30 31 20 2d 2d 2d 2d 0a 20 20 53 63 61 6e 4e 801 ----. ScanN
1590: 75 6d 62 65 72 28 0a 20 20 20 20 20 20 75 6e 73 umber(. uns
15a0: 69 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 66 igned char *buff
15b0: 65 72 2c 09 2f 2a 20 42 75 66 66 65 72 20 74 6f er,./* Buffer to
15c0: 20 73 63 61 6e 20 6e 75 6d 62 65 72 20 66 72 6f scan number fro
15d0: 6d 2e 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 m. */. int
15e0: 74 79 70 65 2c 09 09 09 2f 2a 20 46 6f 72 6d 61 type,.../* Forma
15f0: 74 20 63 68 61 72 61 63 74 65 72 20 66 72 6f 6d t character from
1600: 20 22 62 69 6e 61 72 79 20 73 63 61 6e 22 20 2a "binary scan" *
1610: 2f 0a 2b 20 20 20 20 20 69 6e 74 20 66 6c 61 67 /.+ int flag
1620: 73 2c 09 09 09 2f 2a 20 46 6f 72 6d 61 74 20 66 s,.../* Format f
1630: 69 65 6c 64 20 66 6c 61 67 73 20 2a 2f 0a 20 20 ield flags */.
1640: 20 20 20 20 54 63 6c 5f 48 61 73 68 54 61 62 6c Tcl_HashTabl
1650: 65 20 2a 2a 6e 75 6d 62 65 72 43 61 63 68 65 50 e **numberCacheP
1660: 74 72 50 74 72 29 0a 20 20 09 09 09 09 2f 2a 20 trPtr). ..../*
1670: 50 6c 61 63 65 20 74 6f 20 6c 6f 6f 6b 20 66 6f Place to look fo
1680: 72 20 63 61 63 68 65 20 6f 66 20 73 63 61 6e 6e r cache of scann
1690: 65 64 0a 20 20 09 09 09 09 20 2a 20 76 61 6c 75 ed. .... * valu
16a0: 65 20 6f 62 6a 65 63 74 73 2c 20 6f 72 20 4e 55 e objects, or NU
16b0: 4c 4c 20 69 66 20 74 6f 6f 20 6d 61 6e 79 0a 2a LL if too many.*
16c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a **************.*
16d0: 2a 2a 20 31 37 39 34 2c 31 37 39 39 20 2a 2a 2a ** 1794,1799 ***
16e0: 2a 0a 2d 2d 2d 20 31 38 31 32 2c 31 38 31 38 20 *.--- 1812,1818
16f0: 2d 2d 2d 2d 0a 20 20 20 20 20 20 20 2a 20 74 68 ----. * th
1700: 65 20 65 78 61 63 74 20 73 69 7a 65 20 6f 66 20 e exact size of
1710: 74 68 65 20 69 6e 74 65 67 65 72 20 74 79 70 65 the integer type
1720: 73 2e 20 53 6f 2c 20 77 65 20 68 61 76 65 20 74 s. So, we have t
1730: 6f 20 68 61 6e 64 6c 65 20 73 69 67 6e 0a 20 20 o handle sign.
1740: 20 20 20 20 20 2a 20 65 78 74 65 6e 73 69 6f 6e * extension
1750: 20 65 78 70 6c 69 63 69 74 6c 79 20 62 79 20 63 explicitly by c
1760: 68 65 63 6b 69 6e 67 20 74 68 65 20 68 69 67 68 hecking the high
1770: 20 62 69 74 20 61 6e 64 20 70 61 64 64 69 6e 67 bit and padding
1780: 20 77 69 74 68 20 31 27 73 20 61 73 0a 20 20 20 with 1's as.
1790: 20 20 20 20 2a 20 6e 65 65 64 65 64 2e 0a 2b 20 * needed..+
17a0: 20 20 20 20 20 2a 20 54 68 69 73 20 70 72 61 63 * This prac
17b0: 74 69 63 65 20 69 73 20 64 69 73 61 62 6c 65 64 tice is disabled
17c0: 20 69 66 20 74 68 65 20 42 49 4e 41 52 59 5f 55 if the BINARY_U
17d0: 4e 53 49 47 4e 45 44 20 66 6c 61 67 20 69 73 20 NSIGNED flag is
17e0: 73 65 74 2e 0a 20 20 20 20 20 20 20 2a 2f 0a 20 set.. */.
17f0: 20 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 . switch (
1800: 74 79 70 65 29 20 7b 0a 2a 2a 2a 2a 2a 2a 2a 2a type) {.********
1810: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 38 30 36 *******.*** 1806
1820: 2c 31 38 31 33 20 2a 2a 2a 2a 0a 20 20 09 20 2a ,1813 ****. . *
1830: 2f 0a 20 20 0a 20 20 09 76 61 6c 75 65 20 3d 20 /. . .value =
1840: 62 75 66 66 65 72 5b 30 5d 3b 0a 21 20 09 69 66 buffer[0];.! .if
1850: 20 28 76 61 6c 75 65 20 26 20 30 78 38 30 29 20 (value & 0x80)
1860: 7b 0a 21 20 09 20 20 20 20 76 61 6c 75 65 20 7c {.! . value |
1870: 3d 20 2d 30 78 31 30 30 3b 0a 20 20 09 7d 0a 20 = -0x100;. .}.
1880: 20 09 67 6f 74 6f 20 72 65 74 75 72 6e 4e 75 6d .goto returnNum
1890: 65 72 69 63 4f 62 6a 65 63 74 3b 0a 20 20 0a 2d ericObject;. .-
18a0: 2d 2d 20 31 38 32 35 2c 31 38 33 34 20 2d 2d 2d -- 1825,1834 ---
18b0: 2d 0a 20 20 09 20 2a 2f 0a 20 20 0a 20 20 09 76 -. . */. . .v
18c0: 61 6c 75 65 20 3d 20 62 75 66 66 65 72 5b 30 5d alue = buffer[0]
18d0: 3b 0a 21 20 09 69 66 20 28 21 28 66 6c 61 67 73 ;.! .if (!(flags
18e0: 20 26 20 42 49 4e 41 52 59 5f 55 4e 53 49 47 4e & BINARY_UNSIGN
18f0: 45 44 29 29 20 7b 0a 21 20 09 20 20 20 20 69 66 ED)) {.! . if
1900: 20 28 76 61 6c 75 65 20 26 20 30 78 38 30 29 20 (value & 0x80)
1910: 7b 0a 21 20 09 09 76 61 6c 75 65 20 7c 3d 20 2d {.! ..value |= -
1920: 30 78 31 30 30 3b 0a 21 20 09 20 20 20 20 7d 0a 0x100;.! . }.
1930: 20 20 09 7d 0a 20 20 09 67 6f 74 6f 20 72 65 74 .}. .goto ret
1940: 75 72 6e 4e 75 6d 65 72 69 63 4f 62 6a 65 63 74 urnNumericObject
1950: 3b 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ;. .***********
1960: 2a 2a 2a 2a 0a 2a 2a 2a 20 31 38 32 34 2c 31 38 ****.*** 1824,18
1970: 33 31 20 2a 2a 2a 2a 0a 20 20 09 7d 20 65 6c 73 31 ****. .} els
1980: 65 20 7b 0a 20 20 09 20 20 20 20 76 61 6c 75 65 e {. . value
1990: 20 3d 20 28 6c 6f 6e 67 29 20 28 62 75 66 66 65 = (long) (buffe
19a0: 72 5b 31 5d 20 2b 20 28 62 75 66 66 65 72 5b 30 r[1] + (buffer[0
19b0: 5d 20 3c 3c 20 38 29 29 3b 0a 20 20 09 7d 0a 21 ] << 8));. .}.!
19c0: 20 09 69 66 20 28 76 61 6c 75 65 20 26 20 30 78 .if (value & 0x
19d0: 38 30 30 30 29 20 7b 0a 21 20 09 20 20 20 20 76 8000) {.! . v
19e0: 61 6c 75 65 20 7c 3d 20 2d 30 78 31 30 30 30 30 alue |= -0x10000
19f0: 3b 0a 20 20 09 7d 0a 20 20 09 67 6f 74 6f 20 72 ;. .}. .goto r
1a00: 65 74 75 72 6e 4e 75 6d 65 72 69 63 4f 62 6a 65 eturnNumericObje
1a10: 63 74 3b 0a 20 20 0a 2d 2d 2d 20 31 38 34 35 2c ct;. .--- 1845,
1a20: 31 38 35 34 20 2d 2d 2d 2d 0a 20 20 09 7d 20 65 1854 ----. .} e
1a30: 6c 73 65 20 7b 0a 20 20 09 20 20 20 20 76 61 6c lse {. . val
1a40: 75 65 20 3d 20 28 6c 6f 6e 67 29 20 28 62 75 66 ue = (long) (buf
1a50: 66 65 72 5b 31 5d 20 2b 20 28 62 75 66 66 65 72 fer[1] + (buffer
1a60: 5b 30 5d 20 3c 3c 20 38 29 29 3b 0a 20 20 09 7d [0] << 8));. .}
1a70: 0a 21 20 09 69 66 20 28 21 28 66 6c 61 67 73 20 .! .if (!(flags
1a80: 26 20 42 49 4e 41 52 59 5f 55 4e 53 49 47 4e 45 & BINARY_UNSIGNE
1a90: 44 29 29 20 7b 0a 21 20 09 20 20 20 20 69 66 20 D)) {.! . if
1aa0: 28 76 61 6c 75 65 20 26 20 30 78 38 30 30 30 29 (value & 0x8000)
1ab0: 20 7b 0a 21 20 09 09 76 61 6c 75 65 20 7c 3d 20 {.! ..value |=
1ac0: 2d 30 78 31 30 30 30 30 3b 0a 21 20 09 20 20 20 -0x10000;.! .
1ad0: 20 7d 0a 20 20 09 7d 0a 20 20 09 67 6f 74 6f 20 }. .}. .goto
1ae0: 72 65 74 75 72 6e 4e 75 6d 65 72 69 63 4f 62 6a returnNumericObj
1af0: 65 63 74 3b 0a 20 20 0a 2a 2a 2a 2a 2a 2a 2a 2a ect;. .********
1b00: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 38 35 31 *******.*** 1851
1b10: 2c 31 38 36 31 20 2a 2a 2a 2a 0a 20 20 09 2f 2a ,1861 ****. ./*
1b20: 0a 20 20 09 20 2a 20 43 68 65 63 6b 20 74 6f 20 . . * Check to
1b30: 73 65 65 20 69 66 20 74 68 65 20 76 61 6c 75 65 see if the value
1b40: 20 77 61 73 20 73 69 67 6e 20 65 78 74 65 6e 64 was sign extend
1b50: 65 64 20 70 72 6f 70 65 72 6c 79 20 6f 6e 20 73 ed properly on s
1b60: 79 73 74 65 6d 73 0a 20 20 09 20 2a 20 77 68 65 ystems. . * whe
1b70: 72 65 20 61 6e 20 69 6e 74 20 69 73 20 6d 6f 72 re an int is mor
1b80: 65 20 74 68 61 6e 20 33 32 2d 62 69 74 73 2e 0a e than 32-bits..
1b90: 20 20 09 20 2a 2f 0a 20 20 0a 21 20 09 69 66 20 . */. .! .if
1ba0: 28 28 76 61 6c 75 65 20 26 20 28 28 28 75 6e 73 ((value & (((uns
1bb0: 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 33 31 igned int)1)<<31
1bc0: 29 29 20 26 26 20 28 76 61 6c 75 65 20 3e 20 30 )) && (value > 0
1bd0: 29 29 20 7b 0a 21 20 09 20 20 20 20 76 61 6c 75 )) {.! . valu
1be0: 65 20 2d 3d 20 28 28 28 75 6e 73 69 67 6e 65 64 e -= (((unsigned
1bf0: 20 69 6e 74 29 31 29 3c 3c 33 31 29 3b 0a 21 20 int)1)<<31);.!
1c00: 09 20 20 20 20 76 61 6c 75 65 20 2d 3d 20 28 28 . value -= ((
1c10: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 (unsigned int)1)
1c20: 3c 3c 33 31 29 3b 0a 20 20 09 7d 0a 20 20 0a 20 <<31);. .}. .
1c30: 20 20 20 20 20 72 65 74 75 72 6e 4e 75 6d 65 72 returnNumer
1c40: 69 63 4f 62 6a 65 63 74 3a 0a 2d 2d 2d 20 31 38 icObject:.--- 18
1c50: 37 34 2c 31 38 39 30 20 2d 2d 2d 2d 0a 20 20 09 74,1890 ----. .
1c60: 2f 2a 0a 20 20 09 20 2a 20 43 68 65 63 6b 20 74 /*. . * Check t
1c70: 6f 20 73 65 65 20 69 66 20 74 68 65 20 76 61 6c o see if the val
1c80: 75 65 20 77 61 73 20 73 69 67 6e 20 65 78 74 65 ue was sign exte
1c90: 6e 64 65 64 20 70 72 6f 70 65 72 6c 79 20 6f 6e nded properly on
1ca0: 20 73 79 73 74 65 6d 73 0a 20 20 09 20 2a 20 77 systems. . * w
1cb0: 68 65 72 65 20 61 6e 20 69 6e 74 20 69 73 20 6d here an int is m
1cc0: 6f 72 65 20 74 68 61 6e 20 33 32 2d 62 69 74 73 ore than 32-bits
1cd0: 2e 0a 2b 20 09 20 2a 20 57 65 20 61 76 6f 69 64 ..+ . * We avoid
1ce0: 20 63 61 63 68 69 6e 67 20 75 6e 73 69 67 6e 65 caching unsigne
1cf0: 64 20 69 6e 74 65 67 65 72 73 20 61 73 20 77 65 d integers as we
1d00: 20 63 61 6e 6e 6f 74 20 64 69 73 74 69 6e 67 75 cannot distingu
1d10: 69 73 68 20 62 65 74 77 65 65 6e 0a 2b 20 09 20 ish between.+ .
1d20: 2a 20 33 32 62 69 74 20 73 69 67 6e 65 64 20 61 * 32bit signed a
1d30: 6e 64 20 75 6e 73 69 67 6e 65 64 20 69 6e 20 74 nd unsigned in t
1d40: 68 65 20 68 61 73 68 20 28 73 68 6f 72 74 20 61 he hash (short a
1d50: 6e 64 20 63 68 61 72 20 61 72 65 20 6f 6b 29 2e nd char are ok).
1d60: 0a 20 20 09 20 2a 2f 0a 20 20 0a 21 20 09 69 66 . . */. .! .if
1d70: 20 28 28 66 6c 61 67 73 20 26 20 42 49 4e 41 52 ((flags & BINAR
1d80: 59 5f 55 4e 53 49 47 4e 45 44 29 29 20 7b 0a 21 Y_UNSIGNED)) {.!
1d90: 20 09 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c . return Tcl
1da0: 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 28 _NewWideIntObj((
1db0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 76 61 unsigned long)va
1dc0: 6c 75 65 29 3b 0a 21 20 09 7d 20 65 6c 73 65 20 lue);.! .} else
1dd0: 7b 0a 21 20 09 20 20 20 20 69 66 20 28 28 76 61 {.! . if ((va
1de0: 6c 75 65 20 26 20 28 28 28 75 6e 73 69 67 6e 65 lue & (((unsigne
1df0: 64 20 69 6e 74 29 31 29 3c 3c 33 31 29 29 20 26 d int)1)<<31)) &
1e00: 26 20 28 76 61 6c 75 65 20 3e 20 30 29 29 20 7b & (value > 0)) {
1e10: 0a 21 20 09 09 76 61 6c 75 65 20 2d 3d 20 28 28 .! ..value -= ((
1e20: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 (unsigned int)1)
1e30: 3c 3c 33 31 29 3b 0a 21 20 09 09 76 61 6c 75 65 <<31);.! ..value
1e40: 20 2d 3d 20 28 28 28 75 6e 73 69 67 6e 65 64 20 -= (((unsigned
1e50: 69 6e 74 29 31 29 3c 3c 33 31 29 3b 0a 21 20 09 int)1)<<31);.! .
1e60: 20 20 20 20 7d 0a 20 20 09 7d 0a 20 20 0a 20 20 }. .}. .
1e70: 20 20 20 20 72 65 74 75 72 6e 4e 75 6d 65 72 69 returnNumeri
1e80: 63 4f 62 6a 65 63 74 3a 0a 2a 2a 2a 2a 2a 2a 2a cObject:.*******
1e90: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 39 32 ********.*** 192
1ea0: 30 2c 31 39 32 36 20 2a 2a 2a 2a 0a 20 20 09 09 0,1926 ****. ..
1eb0: 20 20 20 20 7c 20 28 28 28 54 63 6c 5f 57 69 64 | (((Tcl_Wid
1ec0: 65 55 49 6e 74 29 20 62 75 66 66 65 72 5b 31 5d eUInt) buffer[1]
1ed0: 29 20 3c 3c 20 34 38 29 0a 20 20 09 09 20 20 20 ) << 48). ..
1ee0: 20 7c 20 28 28 28 54 63 6c 5f 57 69 64 65 55 49 | (((Tcl_WideUI
1ef0: 6e 74 29 20 62 75 66 66 65 72 5b 30 5d 29 20 3c nt) buffer[0]) <
1f00: 3c 20 35 36 29 3b 0a 20 20 09 7d 0a 21 20 09 72 < 56);. .}.! .r
1f10: 65 74 75 72 6e 20 54 63 6c 5f 4e 65 77 57 69 64 eturn Tcl_NewWid
1f20: 65 49 6e 74 4f 62 6a 28 28 54 63 6c 5f 57 69 64 eIntObj((Tcl_Wid
1f30: 65 49 6e 74 29 20 75 77 76 61 6c 75 65 29 3b 0a eInt) uwvalue);.
1f40: 20 20 0a 20 20 09 2f 2a 0a 20 20 09 20 2a 20 44 . ./*. . * D
1f50: 6f 20 6e 6f 74 20 63 61 63 68 65 20 64 6f 75 62 o not cache doub
1f60: 6c 65 20 76 61 6c 75 65 73 3b 20 74 68 65 79 20 le values; they
1f70: 61 72 65 20 61 6c 72 65 61 64 79 20 74 6f 6f 20 are already too
1f80: 6c 61 72 67 65 20 74 6f 20 75 73 65 20 61 73 0a large to use as.
1f90: 2d 2d 2d 20 31 39 34 39 2c 31 39 36 34 20 2d 2d --- 1949,1964 --
1fa0: 2d 2d 0a 20 20 09 09 20 20 20 20 7c 20 28 28 28 --. .. | (((
1fb0: 54 63 6c 5f 57 69 64 65 55 49 6e 74 29 20 62 75 Tcl_WideUInt) bu
1fc0: 66 66 65 72 5b 31 5d 29 20 3c 3c 20 34 38 29 0a ffer[1]) << 48).
1fd0: 20 20 09 09 20 20 20 20 7c 20 28 28 28 54 63 6c .. | (((Tcl
1fe0: 5f 57 69 64 65 55 49 6e 74 29 20 62 75 66 66 65 _WideUInt) buffe
1ff0: 72 5b 30 5d 29 20 3c 3c 20 35 36 29 3b 0a 20 20 r[0]) << 56);.
2000: 09 7d 0a 21 20 09 69 66 20 28 66 6c 61 67 73 20 .}.! .if (flags
2010: 26 20 42 49 4e 41 52 59 5f 55 4e 53 49 47 4e 45 & BINARY_UNSIGNE
2020: 44 29 20 7b 0a 21 20 09 20 20 20 20 54 63 6c 5f D) {.! . Tcl_
2030: 4f 62 6a 20 2a 62 69 67 4f 62 6a 20 3d 20 4e 55 Obj *bigObj = NU
2040: 4c 4c 3b 0a 21 20 09 20 20 20 20 6d 70 5f 69 6e LL;.! . mp_in
2050: 74 20 62 69 67 3b 0a 21 20 0a 21 20 09 20 20 20 t big;.! .! .
2060: 20 54 63 6c 42 4e 49 6e 69 74 42 69 67 6e 75 6d TclBNInitBignum
2070: 46 72 6f 6d 57 69 64 65 55 49 6e 74 28 26 62 69 FromWideUInt(&bi
2080: 67 2c 20 75 77 76 61 6c 75 65 29 3b 0a 21 20 09 g, uwvalue);.! .
2090: 20 20 20 20 62 69 67 4f 62 6a 20 3d 20 54 63 6c bigObj = Tcl
20a0: 5f 4e 65 77 42 69 67 6e 75 6d 4f 62 6a 28 26 62 _NewBignumObj(&b
20b0: 69 67 29 3b 0a 21 20 09 20 20 20 20 72 65 74 75 ig);.! . retu
20c0: 72 6e 20 62 69 67 4f 62 6a 3b 0a 21 20 09 7d 20 rn bigObj;.! .}
20d0: 65 6c 73 65 20 7b 0a 21 20 09 20 20 20 20 72 65 else {.! . re
20e0: 74 75 72 6e 20 54 63 6c 5f 4e 65 77 57 69 64 65 turn Tcl_NewWide
20f0: 49 6e 74 4f 62 6a 28 28 54 63 6c 5f 57 69 64 65 IntObj((Tcl_Wide
2100: 49 6e 74 29 20 75 77 76 61 6c 75 65 29 3b 0a 21 Int) uwvalue);.!
2110: 20 09 7d 0a 20 20 0a 20 20 09 2f 2a 0a 20 20 09 .}. . ./*. .
2120: 20 2a 20 44 6f 20 6e 6f 74 20 63 61 63 68 65 20 * Do not cache
2130: 64 6f 75 62 6c 65 20 76 61 6c 75 65 73 3b 20 74 double values; t
2140: 68 65 79 20 61 72 65 20 61 6c 72 65 61 64 79 20 hey are already
2150: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 75 73 65 too large to use
2160: 20 61 73 0a 49 6e 64 65 78 3a 20 74 65 73 74 73 as.Index: tests
2170: 2f 62 69 6e 61 72 79 2e 74 65 73 74 0a 3d 3d 3d /binary.test.===
2180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
21a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
21b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
21c0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
21d0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 oot/tcl/tcl/test
21e0: 73 2f 62 69 6e 61 72 79 2e 74 65 73 74 2c 76 0a s/binary.test,v.
21f0: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
2200: 69 6f 6e 20 31 2e 32 38 0a 64 69 66 66 20 2d 63 ion 1.28.diff -c
2210: 20 2d 72 31 2e 32 38 20 62 69 6e 61 72 79 2e 74 -r1.28 binary.t
2220: 65 73 74 0a 2a 2a 2a 20 74 65 73 74 73 2f 62 69 est.*** tests/bi
2230: 6e 61 72 79 2e 74 65 73 74 09 35 20 41 70 72 20 nary.test.5 Apr
2240: 32 30 30 36 20 31 35 3a 31 37 3a 33 39 20 2d 30 2006 15:17:39 -0
2250: 30 30 30 09 31 2e 32 38 0a 2d 2d 2d 20 74 65 73 000.1.28.--- tes
2260: 74 73 2f 62 69 6e 61 72 79 2e 74 65 73 74 09 32 ts/binary.test.2
2270: 38 20 53 65 70 20 32 30 30 36 20 32 31 3a 32 36 8 Sep 2006 21:26
2280: 3a 30 36 20 2d 30 30 30 30 0a 2a 2a 2a 2a 2a 2a :06 -0000.******
2290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 39 30 *********.*** 90
22a0: 35 2c 39 31 30 20 2a 2a 2a 2a 0a 2d 2d 2d 20 39 5,910 ****.--- 9
22b0: 30 35 2c 39 33 34 20 2d 2d 2d 2d 0a 20 20 20 20 05,934 ----.
22c0: 20 20 73 65 74 20 61 72 67 32 20 62 61 72 0a 20 set arg2 bar.
22d0: 20 20 20 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 list [binar
22e0: 79 20 73 63 61 6e 20 5c 78 37 30 5c 78 38 37 5c y scan \x70\x87\
22f0: 78 30 35 20 63 32 63 2a 20 61 72 67 31 20 61 72 x05 c2c* arg1 ar
2300: 67 32 5d 20 24 61 72 67 31 20 24 61 72 67 32 0a g2] $arg1 $arg2.
2310: 20 20 7d 20 7b 32 20 7b 31 31 32 20 2d 31 32 31 } {2 {112 -121
2320: 7d 20 35 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 } 5}.+ test bina
2330: 72 79 2d 32 36 2e 31 31 20 7b 54 63 6c 5f 42 69 ry-26.11 {Tcl_Bi
2340: 6e 61 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e naryObjCmd: scan
2350: 7d 20 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 20 } {.+ catch
2360: 7b 75 6e 73 65 74 20 61 72 67 31 7d 0a 2b 20 20 {unset arg1}.+
2370: 20 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 list [binary
2380: 73 63 61 6e 20 5c 78 35 32 5c 78 61 33 20 63 75 scan \x52\xa3 cu
2390: 2a 20 61 72 67 31 5d 20 24 61 72 67 31 0a 2b 20 * arg1] $arg1.+
23a0: 7d 20 7b 31 20 7b 38 32 20 31 36 33 7d 7d 0a 2b } {1 {82 163}}.+
23b0: 20 74 65 73 74 20 62 69 6e 61 72 79 2d 32 36 2e test binary-26.
23c0: 31 32 20 7b 54 63 6c 5f 42 69 6e 61 72 79 4f 62 12 {Tcl_BinaryOb
23d0: 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b 0a 2b 20 jCmd: scan} {.+
23e0: 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 catch {unset
23f0: 20 61 72 67 31 7d 0a 2b 20 20 20 20 20 6c 69 73 arg1}.+ lis
2400: 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c t [binary scan \
2410: 78 35 32 5c 78 61 33 20 63 75 20 61 72 67 31 5d x52\xa3 cu arg1]
2420: 20 24 61 72 67 31 0a 2b 20 7d 20 7b 31 20 38 32 $arg1.+ } {1 82
2430: 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d }.+ test binary-
2440: 32 36 2e 31 33 20 7b 54 63 6c 5f 42 69 6e 61 72 26.13 {Tcl_Binar
2450: 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b yObjCmd: scan} {
2460: 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e .+ catch {un
2470: 73 65 74 20 61 72 67 31 7d 0a 2b 20 20 20 20 20 set arg1}.+
2480: 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 list [binary sca
2490: 6e 20 5c 78 66 66 20 63 75 20 61 72 67 31 5d 20 n \xff cu arg1]
24a0: 24 61 72 67 31 0a 2b 20 7d 20 7b 31 20 32 35 35 $arg1.+ } {1 255
24b0: 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d }.+ test binary-
24c0: 32 36 2e 31 34 20 7b 54 63 6c 5f 42 69 6e 61 72 26.14 {Tcl_Binar
24d0: 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b yObjCmd: scan} {
24e0: 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e .+ catch {un
24f0: 73 65 74 20 61 72 67 31 20 61 72 67 32 7d 0a 2b set arg1 arg2}.+
2500: 20 20 20 20 20 73 65 74 20 61 72 67 31 20 66 6f set arg1 fo
2510: 6f 0a 2b 20 20 20 20 20 73 65 74 20 61 72 67 32 o.+ set arg2
2520: 20 62 61 72 0a 2b 20 20 20 20 20 6c 69 73 74 20 bar.+ list
2530: 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c 78 38 [binary scan \x8
2540: 30 5c 78 38 30 20 63 75 63 20 61 72 67 31 20 61 0\x80 cuc arg1 a
2550: 72 67 32 5d 20 24 61 72 67 31 20 24 61 72 67 32 rg2] $arg1 $arg2
2560: 0a 2b 20 7d 20 7b 32 20 31 32 38 20 2d 31 32 38 .+ } {2 128 -128
2570: 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d }.+ test binary-
2580: 32 36 2e 31 35 20 7b 54 63 6c 5f 42 69 6e 61 72 26.15 {Tcl_Binar
2590: 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b yObjCmd: scan} {
25a0: 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e .+ catch {un
25b0: 73 65 74 20 61 72 67 31 20 61 72 67 32 7d 0a 2b set arg1 arg2}.+
25c0: 20 20 20 20 20 73 65 74 20 61 72 67 31 20 66 6f set arg1 fo
25d0: 6f 0a 2b 20 20 20 20 20 73 65 74 20 61 72 67 32 o.+ set arg2
25e0: 20 62 61 72 0a 2b 20 20 20 20 20 6c 69 73 74 20 bar.+ list
25f0: 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c 78 38 [binary scan \x8
2600: 30 5c 78 38 30 20 63 63 75 20 61 72 67 31 20 61 0\x80 ccu arg1 a
2610: 72 67 32 5d 20 24 61 72 67 31 20 24 61 72 67 32 rg2] $arg1 $arg2
2620: 0a 2b 20 7d 20 7b 32 20 2d 31 32 38 20 31 32 38 .+ } {2 -128 128
2630: 7d 0a 20 20 0a 20 20 74 65 73 74 20 62 69 6e 61 }. . test bina
2640: 72 79 2d 32 37 2e 31 20 7b 54 63 6c 5f 42 69 6e ry-27.1 {Tcl_Bin
2650: 61 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d aryObjCmd: scan}
2660: 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5b 63 {. list [c
2670: 61 74 63 68 20 7b 62 69 6e 61 72 79 20 73 63 61 atch {binary sca
2680: 6e 20 61 62 63 20 73 7d 20 6d 73 67 5d 20 24 6d n abc s} msg] $m
2690: 73 67 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a sg.*************
26a0: 2a 2a 0a 2a 2a 2a 20 39 34 35 2c 39 35 30 20 2a **.*** 945,950 *
26b0: 2a 2a 2a 0a 2d 2d 2d 20 39 36 39 2c 39 39 30 20 ***.--- 969,990
26c0: 2d 2d 2d 2d 0a 20 20 20 20 20 20 73 65 74 20 61 ----. set a
26d0: 72 67 32 20 62 61 72 0a 20 20 20 20 20 20 6c 69 rg2 bar. li
26e0: 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 st [binary scan
26f0: 5c 78 35 32 5c 78 61 33 5c 78 35 33 5c 78 35 34 \x52\xa3\x53\x54
2700: 5c 78 30 35 20 73 32 63 2a 20 61 72 67 31 20 61 \x05 s2c* arg1 a
2710: 72 67 32 5d 20 24 61 72 67 31 20 24 61 72 67 32 rg2] $arg1 $arg2
2720: 0a 20 20 7d 20 7b 32 20 7b 2d 32 33 37 32 36 20 . } {2 {-23726
2730: 32 31 35 38 37 7d 20 35 7d 0a 2b 20 74 65 73 74 21587} 5}.+ test
2740: 20 62 69 6e 61 72 79 2d 32 37 2e 31 30 20 7b 54 binary-27.10 {T
2750: 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 3a cl_BinaryObjCmd:
2760: 20 73 63 61 6e 7d 20 7b 0a 2b 20 20 20 20 20 63 scan} {.+ c
2770: 61 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 31 atch {unset arg1
2780: 7d 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b 62 69 }.+ list [bi
2790: 6e 61 72 79 20 73 63 61 6e 20 5c 78 35 32 5c 78 nary scan \x52\x
27a0: 61 33 5c 78 35 33 5c 78 35 34 20 73 75 2a 20 61 a3\x53\x54 su* a
27b0: 72 67 31 5d 20 24 61 72 67 31 0a 2b 20 7d 20 7b rg1] $arg1.+ } {
27c0: 31 20 7b 34 31 38 31 30 20 32 31 35 38 37 7d 7d 1 {41810 21587}}
27d0: 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d 32 .+ test binary-2
27e0: 37 2e 31 31 20 7b 54 63 6c 5f 42 69 6e 61 72 79 7.11 {Tcl_Binary
27f0: 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b 0a ObjCmd: scan} {.
2800: 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 + catch {uns
2810: 65 74 20 61 72 67 31 20 61 72 67 32 7d 0a 2b 20 et arg1 arg2}.+
2820: 20 20 20 20 73 65 74 20 61 72 67 31 20 66 6f 6f set arg1 foo
2830: 0a 2b 20 20 20 20 20 73 65 74 20 61 72 67 32 20 .+ set arg2
2840: 62 61 72 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b bar.+ list [
2850: 62 69 6e 61 72 79 20 73 63 61 6e 20 5c 78 66 66 binary scan \xff
2860: 5c 78 66 66 5c 78 66 66 5c 78 66 66 20 73 75 73 \xff\xff\xff sus
2870: 20 61 72 67 31 20 61 72 67 32 5d 20 24 61 72 67 arg1 arg2] $arg
2880: 31 20 24 61 72 67 32 0a 2b 20 7d 20 7b 32 20 36 1 $arg2.+ } {2 6
2890: 35 35 33 35 20 2d 31 7d 0a 2b 20 74 65 73 74 20 5535 -1}.+ test
28a0: 62 69 6e 61 72 79 2d 32 37 2e 31 32 20 7b 54 63 binary-27.12 {Tc
28b0: 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 3a 20 l_BinaryObjCmd:
28c0: 73 63 61 6e 7d 20 7b 0a 2b 20 20 20 20 20 63 61 scan} {.+ ca
28d0: 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 31 20 tch {unset arg1
28e0: 61 72 67 32 7d 0a 2b 20 20 20 20 20 73 65 74 20 arg2}.+ set
28f0: 61 72 67 31 20 66 6f 6f 0a 2b 20 20 20 20 20 73 arg1 foo.+ s
2900: 65 74 20 61 72 67 32 20 62 61 72 0a 2b 20 20 20 et arg2 bar.+
2910: 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 73 list [binary s
2920: 63 61 6e 20 5c 78 66 66 5c 78 66 66 5c 78 66 66 can \xff\xff\xff
2930: 5c 78 66 66 20 73 73 75 20 61 72 67 31 20 61 72 \xff ssu arg1 ar
2940: 67 32 5d 20 24 61 72 67 31 20 24 61 72 67 32 0a g2] $arg1 $arg2.
2950: 2b 20 7d 20 7b 32 20 2d 31 20 36 35 35 33 35 7d + } {2 -1 65535}
2960: 0a 20 20 0a 20 20 74 65 73 74 20 62 69 6e 61 72 . . test binar
2970: 79 2d 32 38 2e 31 20 7b 54 63 6c 5f 42 69 6e 61 y-28.1 {Tcl_Bina
2980: 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 ryObjCmd: scan}
2990: 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5b 63 61 {. list [ca
29a0: 74 63 68 20 7b 62 69 6e 61 72 79 20 73 63 61 6e tch {binary scan
29b0: 20 61 62 63 20 53 7d 20 6d 73 67 5d 20 24 6d 73 abc S} msg] $ms
29c0: 67 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a g.**************
29d0: 2a 0a 2a 2a 2a 20 39 38 35 2c 39 39 30 20 2a 2a *.*** 985,990 **
29e0: 2a 2a 0a 2d 2d 2d 20 31 30 32 35 2c 31 30 33 38 **.--- 1025,1038
29f0: 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 73 65 74 20 ----. set
2a00: 61 72 67 32 20 62 61 72 0a 20 20 20 20 20 20 6c arg2 bar. l
2a10: 69 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e ist [binary scan
2a20: 20 5c 78 35 32 5c 78 61 33 5c 78 35 33 5c 78 35 \x52\xa3\x53\x5
2a30: 34 5c 78 30 35 20 53 32 63 2a 20 61 72 67 31 20 4\x05 S2c* arg1
2a40: 61 72 67 32 5d 20 24 61 72 67 31 20 24 61 72 67 arg2] $arg1 $arg
2a50: 32 0a 20 20 7d 20 7b 32 20 7b 32 31 31 35 35 20 2. } {2 {21155
2a60: 32 31 33 33 32 7d 20 35 7d 0a 2b 20 74 65 73 74 21332} 5}.+ test
2a70: 20 62 69 6e 61 72 79 2d 32 38 2e 31 30 20 7b 54 binary-28.10 {T
2a80: 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 3a cl_BinaryObjCmd:
2a90: 20 73 63 61 6e 7d 20 7b 0a 2b 20 20 20 20 20 63 scan} {.+ c
2aa0: 61 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 31 atch {unset arg1
2ab0: 7d 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b 62 69 }.+ list [bi
2ac0: 6e 61 72 79 20 73 63 61 6e 20 5c 78 35 32 5c 78 nary scan \x52\x
2ad0: 61 33 5c 78 35 33 5c 78 35 34 20 53 75 2a 20 61 a3\x53\x54 Su* a
2ae0: 72 67 31 5d 20 24 61 72 67 31 0a 2b 20 7d 20 7b rg1] $arg1.+ } {
2af0: 31 20 7b 32 31 31 35 35 20 32 31 33 33 32 7d 7d 1 {21155 21332}}
2b00: 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d 32 .+ test binary-2
2b10: 38 2e 31 31 20 7b 54 63 6c 5f 42 69 6e 61 72 79 8.11 {Tcl_Binary
2b20: 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b 0a ObjCmd: scan} {.
2b30: 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 + catch {uns
2b40: 65 74 20 61 72 67 31 7d 0a 2b 20 20 20 20 20 6c et arg1}.+ l
2b50: 69 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e ist [binary scan
2b60: 20 5c 78 61 33 5c 78 35 32 5c 78 35 34 5c 78 35 \xa3\x52\x54\x5
2b70: 33 20 53 75 2a 20 61 72 67 31 5d 20 24 61 72 67 3 Su* arg1] $arg
2b80: 31 0a 2b 20 7d 20 7b 31 20 7b 34 31 38 31 30 20 1.+ } {1 {41810
2b90: 32 31 35 38 37 7d 7d 0a 20 20 0a 20 20 74 65 73 21587}}. . tes
2ba0: 74 20 62 69 6e 61 72 79 2d 32 39 2e 31 20 7b 54 t binary-29.1 {T
2bb0: 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 3a cl_BinaryObjCmd:
2bc0: 20 73 63 61 6e 7d 20 7b 0a 20 20 20 20 20 20 6c scan} {. l
2bd0: 69 73 74 20 5b 63 61 74 63 68 20 7b 62 69 6e 61 ist [catch {bina
2be0: 72 79 20 73 63 61 6e 20 61 62 63 20 69 7d 20 6d ry scan abc i} m
2bf0: 73 67 5d 20 24 6d 73 67 0a 2a 2a 2a 2a 2a 2a 2a sg] $msg.*******
2c00: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 20 31 30 32 ********.*** 102
2c10: 35 2c 31 30 33 30 20 2a 2a 2a 2a 0a 2d 2d 2d 20 5,1030 ****.---
2c20: 31 30 37 33 2c 31 30 39 30 20 2d 2d 2d 2d 0a 20 1073,1090 ----.
2c30: 20 20 20 20 20 73 65 74 20 61 72 67 32 20 62 61 set arg2 ba
2c40: 72 0a 20 20 20 20 20 20 6c 69 73 74 20 5b 62 69 r. list [bi
2c50: 6e 61 72 79 20 73 63 61 6e 20 5c 78 35 32 5c 78 nary scan \x52\x
2c60: 61 33 5c 78 35 33 5c 78 35 34 5c 78 30 31 5c 78 a3\x53\x54\x01\x
2c70: 30 32 5c 78 30 33 5c 78 30 34 5c 78 30 35 20 69 02\x03\x04\x05 i
2c80: 32 63 2a 20 61 72 67 31 20 61 72 67 32 5d 20 24 2c* arg1 arg2] $
2c90: 61 72 67 31 20 24 61 72 67 32 0a 20 20 7d 20 7b arg1 $arg2. } {
2ca0: 32 20 7b 31 34 31 34 37 36 37 34 34 32 20 36 37 2 {1414767442 67
2cb0: 33 30 35 39 38 35 7d 20 35 7d 0a 2b 20 74 65 73 305985} 5}.+ tes
2cc0: 74 20 62 69 6e 61 72 79 2d 32 39 2e 31 30 20 7b t binary-29.10 {
2cd0: 54 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 Tcl_BinaryObjCmd
2ce0: 3a 20 73 63 61 6e 7d 20 7b 0a 2b 20 20 20 20 20 : scan} {.+
2cf0: 63 61 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 catch {unset arg
2d00: 31 20 61 72 67 32 7d 0a 2b 20 20 20 20 20 6c 69 1 arg2}.+ li
2d10: 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 st [binary scan
2d20: 5c 78 66 66 5c 78 66 66 5c 78 66 66 5c 78 66 66 \xff\xff\xff\xff
2d30: 5c 78 66 66 5c 78 66 66 5c 78 66 66 5c 78 66 66 \xff\xff\xff\xff
2d40: 20 69 75 69 20 61 72 67 31 20 61 72 67 32 5d 20 iui arg1 arg2]
2d50: 24 61 72 67 31 20 24 61 72 67 32 0a 2b 20 7d 20 $arg1 $arg2.+ }
2d60: 7b 32 20 34 32 39 34 39 36 37 32 39 35 20 2d 31 {2 4294967295 -1
2d70: 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d }.+ test binary-
2d80: 32 39 2e 31 31 20 7b 54 63 6c 5f 42 69 6e 61 72 29.11 {Tcl_Binar
2d90: 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 7b yObjCmd: scan} {
2da0: 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e .+ catch {un
2db0: 73 65 74 20 61 72 67 31 20 61 72 67 32 7d 0a 2b set arg1 arg2}.+
2dc0: 20 20 20 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 list [binar
2dd0: 79 20 73 63 61 6e 20 5c 78 66 66 5c 78 66 66 5c y scan \xff\xff\
2de0: 78 66 66 5c 78 66 66 5c 78 66 66 5c 78 66 66 5c xff\xff\xff\xff\
2df0: 78 66 66 5c 78 66 66 20 69 69 75 20 61 72 67 31 xff\xff iiu arg1
2e00: 20 61 72 67 32 5d 20 24 61 72 67 31 20 24 61 72 arg2] $arg1 $ar
2e10: 67 32 0a 2b 20 7d 20 7b 32 20 2d 31 20 34 32 39 g2.+ } {2 -1 429
2e20: 34 39 36 37 32 39 35 7d 0a 2b 20 74 65 73 74 20 4967295}.+ test
2e30: 62 69 6e 61 72 79 2d 32 39 2e 31 32 20 7b 54 63 binary-29.12 {Tc
2e40: 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 3a 20 l_BinaryObjCmd:
2e50: 73 63 61 6e 7d 20 7b 0a 2b 20 20 20 20 20 63 61 scan} {.+ ca
2e60: 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 31 20 tch {unset arg1
2e70: 61 72 67 32 7d 0a 2b 20 20 20 20 20 6c 69 73 74 arg2}.+ list
2e80: 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c 78 [binary scan \x
2e90: 38 30 5c 78 30 30 5c 78 30 30 5c 78 30 30 5c 78 80\x00\x00\x00\x
2ea0: 30 30 5c 78 30 30 5c 78 30 30 5c 78 38 30 20 69 00\x00\x00\x80 i
2eb0: 75 69 75 20 61 72 67 31 20 61 72 67 32 5d 20 24 uiu arg1 arg2] $
2ec0: 61 72 67 31 20 24 61 72 67 32 0a 2b 20 7d 20 7b arg1 $arg2.+ } {
2ed0: 32 20 31 32 38 20 32 31 34 37 34 38 33 36 34 38 2 128 2147483648
2ee0: 7d 0a 20 20 0a 20 20 74 65 73 74 20 62 69 6e 61 }. . test bina
2ef0: 72 79 2d 33 30 2e 31 20 7b 54 63 6c 5f 42 69 6e ry-30.1 {Tcl_Bin
2f00: 61 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d aryObjCmd: scan}
2f10: 20 7b 0a 20 20 20 20 20 20 6c 69 73 74 20 5b 63 {. list [c
2f20: 61 74 63 68 20 7b 62 69 6e 61 72 79 20 73 63 61 atch {binary sca
2f30: 6e 20 61 62 63 20 49 7d 20 6d 73 67 5d 20 24 6d n abc I} msg] $m
2f40: 73 67 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a sg.*************
2f50: 2a 2a 0a 2a 2a 2a 20 31 30 36 35 2c 31 30 37 30 **.*** 1065,1070
2f60: 20 2a 2a 2a 2a 0a 2d 2d 2d 20 31 31 32 35 2c 31 ****.--- 1125,1
2f70: 31 34 32 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 73 142 ----. s
2f80: 65 74 20 61 72 67 32 20 62 61 72 0a 20 20 20 20 et arg2 bar.
2f90: 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 73 list [binary s
2fa0: 63 61 6e 20 5c 78 35 32 5c 78 61 33 5c 78 35 33 can \x52\xa3\x53
2fb0: 5c 78 35 34 5c 78 30 31 5c 78 30 32 5c 78 30 33 \x54\x01\x02\x03
2fc0: 5c 78 30 34 5c 78 30 35 20 49 32 63 2a 20 61 72 \x04\x05 I2c* ar
2fd0: 67 31 20 61 72 67 32 5d 20 24 61 72 67 31 20 24 g1 arg2] $arg1 $
2fe0: 61 72 67 32 0a 20 20 7d 20 7b 32 20 7b 31 33 38 arg2. } {2 {138
2ff0: 36 34 33 35 34 31 32 20 31 36 39 30 39 30 36 30 6435412 16909060
3000: 7d 20 35 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 } 5}.+ test bina
3010: 72 79 2d 33 30 2e 31 30 20 7b 54 63 6c 5f 42 69 ry-30.10 {Tcl_Bi
3020: 6e 61 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e naryObjCmd: scan
3030: 7d 20 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 20 } {.+ catch
3040: 7b 75 6e 73 65 74 20 61 72 67 31 20 61 72 67 32 {unset arg1 arg2
3050: 7d 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b 62 69 }.+ list [bi
3060: 6e 61 72 79 20 73 63 61 6e 20 5c 78 66 66 5c 78 nary scan \xff\x
3070: 66 66 5c 78 66 66 5c 78 66 66 5c 78 66 66 5c 78 ff\xff\xff\xff\x
3080: 66 66 5c 78 66 66 5c 78 66 66 20 49 75 49 20 61 ff\xff\xff IuI a
3090: 72 67 31 20 61 72 67 32 5d 20 24 61 72 67 31 20 rg1 arg2] $arg1
30a0: 24 61 72 67 32 0a 2b 20 7d 20 7b 32 20 34 32 39 $arg2.+ } {2 429
30b0: 34 39 36 37 32 39 35 20 2d 31 7d 0a 2b 20 74 65 4967295 -1}.+ te
30c0: 73 74 20 62 69 6e 61 72 79 2d 33 30 2e 31 31 20 st binary-30.11
30d0: 7b 54 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d {Tcl_BinaryObjCm
30e0: 64 3a 20 73 63 61 6e 7d 20 7b 0a 2b 20 20 20 20 d: scan} {.+
30f0: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 61 72 catch {unset ar
3100: 67 31 20 61 72 67 32 7d 0a 2b 20 20 20 20 20 6c g1 arg2}.+ l
3110: 69 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e ist [binary scan
3120: 20 5c 78 66 66 5c 78 66 66 5c 78 66 66 5c 78 66 \xff\xff\xff\xf
3130: 66 5c 78 66 66 5c 78 66 66 5c 78 66 66 5c 78 66 f\xff\xff\xff\xf
3140: 66 20 49 49 75 20 61 72 67 31 20 61 72 67 32 5d f IIu arg1 arg2]
3150: 20 24 61 72 67 31 20 24 61 72 67 32 0a 2b 20 7d $arg1 $arg2.+ }
3160: 20 7b 32 20 2d 31 20 34 32 39 34 39 36 37 32 39 {2 -1 429496729
3170: 35 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 5}.+ test binary
3180: 2d 33 30 2e 31 32 20 7b 54 63 6c 5f 42 69 6e 61 -30.12 {Tcl_Bina
3190: 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 7d 20 ryObjCmd: scan}
31a0: 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b 75 {.+ catch {u
31b0: 6e 73 65 74 20 61 72 67 31 20 61 72 67 32 7d 0a nset arg1 arg2}.
31c0: 2b 20 20 20 20 20 6c 69 73 74 20 5b 62 69 6e 61 + list [bina
31d0: 72 79 20 73 63 61 6e 20 5c 78 38 30 5c 78 30 30 ry scan \x80\x00
31e0: 5c 78 30 30 5c 78 30 30 5c 78 30 30 5c 78 30 30 \x00\x00\x00\x00
31f0: 5c 78 30 30 5c 78 38 30 20 49 75 49 75 20 61 72 \x00\x80 IuIu ar
3200: 67 31 20 61 72 67 32 5d 20 24 61 72 67 31 20 24 g1 arg2] $arg1 $
3210: 61 72 67 32 0a 2b 20 7d 20 7b 32 20 32 31 34 37 arg2.+ } {2 2147
3220: 34 38 33 36 34 38 20 31 32 38 7d 0a 20 20 0a 20 483648 128}. .
3230: 20 74 65 73 74 20 62 69 6e 61 72 79 2d 33 31 2e test binary-31.
3240: 31 20 7b 54 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 1 {Tcl_BinaryObj
3250: 43 6d 64 3a 20 73 63 61 6e 7d 20 7b 0a 20 20 20 Cmd: scan} {.
3260: 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b list [catch {
3270: 62 69 6e 61 72 79 20 73 63 61 6e 20 61 62 63 20 binary scan abc
3280: 66 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2a 2a 2a f} msg] $msg.***
3290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a ************.***
32a0: 20 31 33 38 34 2c 31 33 38 39 20 2a 2a 2a 2a 0a 1384,1389 ****.
32b0: 2d 2d 2d 20 31 34 35 36 2c 31 34 38 31 20 2d 2d --- 1456,1481 --
32c0: 2d 2d 0a 20 20 20 20 20 20 63 61 74 63 68 20 7b --. catch {
32d0: 75 6e 73 65 74 20 61 72 67 31 7d 0a 20 20 20 20 unset arg1}.
32e0: 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 73 list [binary s
32f0: 63 61 6e 20 5c 78 30 31 5c 78 30 31 5c 78 30 31 can \x01\x01\x01
3300: 5c 78 30 32 5c 78 38 31 5c 78 30 31 5c 78 30 31 \x02\x81\x01\x01
3310: 5c 78 30 31 5c 78 30 31 5c 78 38 32 5c 78 30 31 \x01\x01\x82\x01
3320: 5c 78 30 31 5c 78 30 31 5c 78 30 31 5c 78 38 32 \x01\x01\x01\x82
3330: 5c 78 30 31 5c 78 30 31 5c 78 30 31 5c 78 30 31 \x01\x01\x01\x01
3340: 5c 78 38 31 20 49 35 20 61 72 67 31 5d 20 24 61 \x81 I5 arg1] $a
3350: 72 67 31 0a 20 20 7d 20 7b 31 20 7b 31 36 38 34 rg1. } {1 {1684
3360: 33 30 31 30 20 2d 32 31 33 30 36 34 30 36 33 39 3010 -2130640639
3370: 20 32 35 32 39 37 31 35 33 20 31 36 38 37 36 30 25297153 168760
3380: 33 33 20 31 36 38 34 33 31 33 37 7d 7d 0a 2b 20 33 16843137}}.+
3390: 74 65 73 74 20 62 69 6e 61 72 79 2d 33 39 2e 36 test binary-39.6
33a0: 20 7b 53 63 61 6e 4e 75 6d 62 65 72 3a 20 6e 6f {ScanNumber: no
33b0: 20 73 69 67 6e 20 65 78 74 65 6e 73 69 6f 6e 7d sign extension}
33c0: 20 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b {.+ catch {
33d0: 75 6e 73 65 74 20 61 72 67 31 7d 0a 2b 20 20 20 unset arg1}.+
33e0: 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 73 list [binary s
33f0: 63 61 6e 20 5c 78 35 32 5c 78 61 33 20 63 75 32 can \x52\xa3 cu2
3400: 20 61 72 67 31 5d 20 24 61 72 67 31 0a 2b 20 7d arg1] $arg1.+ }
3410: 20 7b 31 20 7b 38 32 20 31 36 33 7d 7d 0a 2b 20 {1 {82 163}}.+
3420: 74 65 73 74 20 62 69 6e 61 72 79 2d 33 39 2e 37 test binary-39.7
3430: 20 7b 53 63 61 6e 4e 75 6d 62 65 72 3a 20 6e 6f {ScanNumber: no
3440: 20 73 69 67 6e 20 65 78 74 65 6e 73 69 6f 6e 7d sign extension}
3450: 20 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b {.+ catch {
3460: 75 6e 73 65 74 20 61 72 67 31 7d 0a 2b 20 20 20 unset arg1}.+
3470: 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 20 73 list [binary s
3480: 63 61 6e 20 5c 78 30 31 5c 78 30 32 5c 78 30 31 can \x01\x02\x01
3490: 5c 78 38 31 5c 78 38 32 5c 78 30 31 5c 78 38 31 \x81\x82\x01\x81
34a0: 5c 78 38 32 20 73 75 34 20 61 72 67 31 5d 20 24 \x82 su4 arg1] $
34b0: 61 72 67 31 0a 2b 20 7d 20 7b 31 20 7b 35 31 33 arg1.+ } {1 {513
34c0: 20 33 33 30 32 35 20 33 38 36 20 33 33 34 30 39 33025 386 33409
34d0: 7d 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 }}.+ test binary
34e0: 2d 33 39 2e 38 20 7b 53 63 61 6e 4e 75 6d 62 65 -39.8 {ScanNumbe
34f0: 72 3a 20 6e 6f 20 73 69 67 6e 20 65 78 74 65 6e r: no sign exten
3500: 73 69 6f 6e 7d 20 7b 0a 2b 20 20 20 20 20 63 61 sion} {.+ ca
3510: 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 31 7d tch {unset arg1}
3520: 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b 62 69 6e .+ list [bin
3530: 61 72 79 20 73 63 61 6e 20 5c 78 30 31 5c 78 30 ary scan \x01\x0
3540: 32 5c 78 30 31 5c 78 38 31 5c 78 38 32 5c 78 30 2\x01\x81\x82\x0
3550: 31 5c 78 38 31 5c 78 38 32 20 53 75 34 20 61 72 1\x81\x82 Su4 ar
3560: 67 31 5d 20 24 61 72 67 31 0a 2b 20 7d 20 7b 31 g1] $arg1.+ } {1
3570: 20 7b 32 35 38 20 33 38 35 20 33 33 32 38 31 20 {258 385 33281
3580: 33 33 31 35 34 7d 7d 0a 2b 20 74 65 73 74 20 62 33154}}.+ test b
3590: 69 6e 61 72 79 2d 33 39 2e 39 20 7b 53 63 61 6e inary-39.9 {Scan
35a0: 4e 75 6d 62 65 72 3a 20 6e 6f 20 73 69 67 6e 20 Number: no sign
35b0: 65 78 74 65 6e 73 69 6f 6e 7d 20 7b 0a 2b 20 20 extension} {.+
35c0: 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 catch {unset
35d0: 61 72 67 31 7d 0a 2b 20 20 20 20 20 6c 69 73 74 arg1}.+ list
35e0: 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c 78 [binary scan \x
35f0: 30 31 5c 78 30 31 5c 78 30 31 5c 78 30 32 5c 78 01\x01\x01\x02\x
3600: 38 31 5c 78 30 31 5c 78 30 31 5c 78 30 31 5c 78 81\x01\x01\x01\x
3610: 30 31 5c 78 38 32 5c 78 30 31 5c 78 30 31 5c 78 01\x82\x01\x01\x
3620: 30 31 5c 78 30 31 5c 78 38 32 5c 78 30 31 5c 78 01\x01\x82\x01\x
3630: 30 31 5c 78 30 31 5c 78 30 31 5c 78 38 31 20 69 01\x01\x01\x81 i
3640: 75 35 20 61 72 67 31 5d 20 24 61 72 67 31 0a 2b u5 arg1] $arg1.+
3650: 20 7d 20 7b 31 20 7b 33 33 36 32 30 32 32 35 20 } {1 {33620225
3660: 31 36 38 34 33 31 33 37 20 31 36 38 37 36 30 33 16843137 1687603
3670: 33 20 32 35 32 39 37 31 35 33 20 32 31 36 34 33 3 25297153 21643
3680: 32 36 36 35 37 7d 7d 0a 2b 20 74 65 73 74 20 62 26657}}.+ test b
3690: 69 6e 61 72 79 2d 33 39 2e 31 30 20 7b 53 63 61 inary-39.10 {Sca
36a0: 6e 4e 75 6d 62 65 72 3a 20 6e 6f 20 73 69 67 6e nNumber: no sign
36b0: 20 65 78 74 65 6e 73 69 6f 6e 7d 20 7b 0a 2b 20 extension} {.+
36c0: 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 catch {unset
36d0: 20 61 72 67 31 7d 0a 2b 20 20 20 20 20 6c 69 73 arg1}.+ lis
36e0: 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c t [binary scan \
36f0: 78 30 31 5c 78 30 31 5c 78 30 31 5c 78 30 32 5c x01\x01\x01\x02\
3700: 78 38 31 5c 78 30 31 5c 78 30 31 5c 78 30 31 5c x81\x01\x01\x01\
3710: 78 30 31 5c 78 38 32 5c 78 30 31 5c 78 30 31 5c x01\x82\x01\x01\
3720: 78 30 31 5c 78 30 31 5c 78 38 32 5c 78 30 31 5c x01\x01\x82\x01\
3730: 78 30 31 5c 78 30 31 5c 78 30 31 5c 78 38 31 20 x01\x01\x01\x81
3740: 49 75 35 20 61 72 67 31 5d 20 24 61 72 67 31 0a Iu5 arg1] $arg1.
3750: 2b 20 7d 20 7b 31 20 7b 31 36 38 34 33 30 31 30 + } {1 {16843010
3760: 20 32 31 36 34 33 32 36 36 35 37 20 32 35 32 39 2164326657 2529
3770: 37 31 35 33 20 31 36 38 37 36 30 33 33 20 31 36 7153 16876033 16
3780: 38 34 33 31 33 37 7d 7d 0a 20 20 0a 20 20 74 65 843137}}. . te
3790: 73 74 20 62 69 6e 61 72 79 2d 34 30 2e 33 20 7b st binary-40.3 {
37a0: 53 63 61 6e 4e 75 6d 62 65 72 3a 20 4e 61 4e 7d ScanNumber: NaN}
37b0: 20 5c 0a 20 20 20 20 20 20 2d 62 6f 64 79 20 7b \. -body {
37c0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .***************
37d0: 0a 2a 2a 2a 20 31 34 36 33 2c 31 34 36 38 20 2a .*** 1463,1468 *
37e0: 2a 2a 2a 0a 2d 2d 2d 20 31 35 35 35 2c 31 35 38 ***.--- 1555,158
37f0: 30 20 2d 2d 2d 2d 0a 20 20 20 20 20 20 62 69 6e 0 ----. bin
3800: 61 72 79 20 73 63 61 6e 20 5b 62 69 6e 61 72 79 ary scan [binary
3810: 20 66 6f 72 6d 61 74 20 57 20 5b 65 78 70 72 20 format W [expr
3820: 7b 77 69 64 65 28 33 29 20 3c 3c 20 33 31 7d 5d {wide(3) << 31}]
3830: 5d 20 57 20 78 0a 20 20 20 20 20 20 73 65 74 20 ] W x. set
3840: 78 0a 20 20 7d 20 36 34 34 32 34 35 30 39 34 34 x. } 6442450944
3850: 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d 34 .+ test binary-4
3860: 33 2e 35 20 7b 54 63 6c 5f 42 69 6e 61 72 79 4f 3.5 {Tcl_BinaryO
3870: 62 6a 43 6d 64 3a 20 73 63 61 6e 20 77 69 64 65 bjCmd: scan wide
3880: 20 69 6e 74 7d 20 7b 7d 20 7b 0a 2b 20 20 20 20 int} {} {.+
3890: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 61 72 catch {unset ar
38a0: 67 31 7d 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b g1}.+ list [
38b0: 62 69 6e 61 72 79 20 73 63 61 6e 20 5c 78 38 30 binary scan \x80
38c0: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 5c [string repeat \
38d0: 78 30 30 20 37 5d 20 57 20 61 72 67 31 5d 20 24 x00 7] W arg1] $
38e0: 61 72 67 31 0a 2b 20 7d 20 7b 31 20 2d 39 32 32 arg1.+ } {1 -922
38f0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 3372036854775808
3900: 7d 0a 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d }.+ test binary-
3910: 34 33 2e 36 20 7b 54 63 6c 5f 42 69 6e 61 72 79 43.6 {Tcl_Binary
3920: 4f 62 6a 43 6d 64 3a 20 73 63 61 6e 20 75 6e 73 ObjCmd: scan uns
3930: 69 67 6e 65 64 20 77 69 64 65 20 69 6e 74 7d 20 igned wide int}
3940: 7b 7d 20 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 {} {.+ catch
3950: 20 7b 75 6e 73 65 74 20 61 72 67 31 7d 0a 2b 20 {unset arg1}.+
3960: 20 20 20 20 6c 69 73 74 20 5b 62 69 6e 61 72 79 list [binary
3970: 20 73 63 61 6e 20 5c 78 38 30 5b 73 74 72 69 6e scan \x80[strin
3980: 67 20 72 65 70 65 61 74 20 5c 78 30 30 20 37 5d g repeat \x00 7]
3990: 20 57 75 20 61 72 67 31 5d 20 24 61 72 67 31 0a Wu arg1] $arg1.
39a0: 2b 20 7d 20 7b 31 20 39 32 32 33 33 37 32 30 33 + } {1 922337203
39b0: 36 38 35 34 37 37 35 38 30 38 7d 0a 2b 20 74 65 6854775808}.+ te
39c0: 73 74 20 62 69 6e 61 72 79 2d 34 33 2e 37 20 7b st binary-43.7 {
39d0: 54 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d 64 Tcl_BinaryObjCmd
39e0: 3a 20 73 63 61 6e 20 75 6e 73 69 67 6e 65 64 20 : scan unsigned
39f0: 77 69 64 65 20 69 6e 74 7d 20 7b 7d 20 7b 0a 2b wide int} {} {.+
3a00: 20 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 catch {unse
3a10: 74 20 61 72 67 31 7d 0a 2b 20 20 20 20 20 6c 69 t arg1}.+ li
3a20: 73 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 st [binary scan
3a30: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 5c [string repeat \
3a40: 78 30 30 20 37 5d 5c 78 38 30 20 77 75 20 61 72 x00 7]\x80 wu ar
3a50: 67 31 5d 20 24 61 72 67 31 0a 2b 20 7d 20 7b 31 g1] $arg1.+ } {1
3a60: 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 922337203685477
3a70: 35 38 30 38 7d 0a 2b 20 74 65 73 74 20 62 69 6e 5808}.+ test bin
3a80: 61 72 79 2d 34 33 2e 38 20 7b 54 63 6c 5f 42 69 ary-43.8 {Tcl_Bi
3a90: 6e 61 72 79 4f 62 6a 43 6d 64 3a 20 73 63 61 6e naryObjCmd: scan
3aa0: 20 75 6e 73 69 67 6e 65 64 20 77 69 64 65 20 69 unsigned wide i
3ab0: 6e 74 7d 20 7b 7d 20 7b 0a 2b 20 20 20 20 20 63 nt} {} {.+ c
3ac0: 61 74 63 68 20 7b 75 6e 73 65 74 20 61 72 67 31 atch {unset arg1
3ad0: 20 61 72 67 32 7d 0a 2b 20 20 20 20 20 6c 69 73 arg2}.+ lis
3ae0: 74 20 5b 62 69 6e 61 72 79 20 73 63 61 6e 20 5c t [binary scan \
3af0: 78 38 30 5b 73 74 72 69 6e 67 20 72 65 70 65 61 x80[string repea
3b00: 74 20 5c 78 30 30 20 37 5d 5c 78 38 30 5b 73 74 t \x00 7]\x80[st
3b10: 72 69 6e 67 20 72 65 70 65 61 74 20 5c 78 30 30 ring repeat \x00
3b20: 20 37 5d 20 57 75 57 20 61 72 67 31 20 61 72 67 7] WuW arg1 arg
3b30: 32 5d 20 24 61 72 67 31 20 24 61 72 67 32 0a 2b 2] $arg1 $arg2.+
3b40: 20 7d 20 7b 32 20 39 32 32 33 33 37 32 30 33 36 } {2 9223372036
3b50: 38 35 34 37 37 35 38 30 38 20 2d 39 32 32 33 33 854775808 -92233
3b60: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 7d 0a 72036854775808}.
3b70: 2b 20 74 65 73 74 20 62 69 6e 61 72 79 2d 34 33 + test binary-43
3b80: 2e 39 20 7b 54 63 6c 5f 42 69 6e 61 72 79 4f 62 .9 {Tcl_BinaryOb
3b90: 6a 43 6d 64 3a 20 73 63 61 6e 20 75 6e 73 69 67 jCmd: scan unsig
3ba0: 6e 65 64 20 77 69 64 65 20 69 6e 74 7d 20 7b 7d ned wide int} {}
3bb0: 20 7b 0a 2b 20 20 20 20 20 63 61 74 63 68 20 7b {.+ catch {
3bc0: 75 6e 73 65 74 20 61 72 67 31 20 61 72 67 32 7d unset arg1 arg2}
3bd0: 0a 2b 20 20 20 20 20 6c 69 73 74 20 5b 62 69 6e .+ list [bin
3be0: 61 72 79 20 73 63 61 6e 20 5b 73 74 72 69 6e 67 ary scan [string
3bf0: 20 72 65 70 65 61 74 20 5c 78 30 30 20 37 5d 5c repeat \x00 7]\
3c00: 78 38 30 5b 73 74 72 69 6e 67 20 72 65 70 65 61 x80[string repea
3c10: 74 20 5c 78 30 30 20 37 5d 5c 78 38 30 20 77 75 t \x00 7]\x80 wu
3c20: 77 20 61 72 67 31 20 61 72 67 32 5d 20 24 61 72 w arg1 arg2] $ar
3c30: 67 31 20 24 61 72 67 32 0a 2b 20 7d 20 7b 32 20 g1 $arg2.+ } {2
3c40: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 9223372036854775
3c50: 38 30 38 20 2d 39 32 32 33 33 37 32 30 33 36 38 808 -92233720368
3c60: 35 34 37 37 35 38 30 38 7d 0a 20 20 0a 20 20 74 54775808}. . t
3c70: 65 73 74 20 62 69 6e 61 72 79 2d 34 35 2e 31 20 est binary-45.1
3c80: 7b 54 63 6c 5f 42 69 6e 61 72 79 4f 62 6a 43 6d {Tcl_BinaryObjCm
3c90: 64 3a 20 63 6f 6d 62 69 6e 65 64 20 77 69 64 65 d: combined wide
3ca0: 20 69 6e 74 20 68 61 6e 64 6c 69 6e 67 7d 20 7b int handling} {
3cb0: 0a 20 20 20 20 20 20 62 69 6e 61 72 79 20 73 63 . binary sc
3cc0: 61 6e 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 an [binary forma
3cd0: 74 20 73 77 73 20 31 36 34 35 30 20 2d 31 20 31 t sws 16450 -1 1
3ce0: 39 35 32 31 5d 20 63 2a 20 78 0a 9521] c* x.