Tcl Source Code

Hex Artifact Content
Login

Artifact 8c65b21f2b96f3a575bbdabd65acc443c5b76572:

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.