System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 73810f3fe1ca506b184e66b9cfa00ffb6d42bec1:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 73 6f 75 72 63 65 54 61 67 2e  .#..# sourceTag.
0060: 65 61 67 6c 65 20 2d 2d 20 53 6f 75 72 63 65 20  eagle -- Source 
0070: 56 65 72 73 69 6f 6e 20 54 61 67 20 54 6f 6f 6c  Version Tag Tool
0080: 0d 0a 23 0d 0a 23 20 57 72 69 74 74 65 6e 20 62  ..#..# Written b
0090: 79 20 4a 6f 65 20 4d 69 73 74 61 63 68 6b 69 6e  y Joe Mistachkin
00a0: 2e 0d 0a 23 20 52 65 6c 65 61 73 65 64 20 74 6f  ...# Released to
00b0: 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61   the public doma
00c0: 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20  in, use at your 
00d0: 6f 77 6e 20 72 69 73 6b 21 0d 0a 23 0d 0a 23 23  own risk!..#..##
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0120: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
0130: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0140: 20 45 61 67 6c 65 0d 0a 0c 0d 0a 70 72 6f 63 20   Eagle.....proc 
0150: 75 73 61 67 65 20 7b 20 65 72 72 6f 72 20 7d 20  usage { error } 
0160: 7b 0d 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  {..  if {[string
0170: 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 5d 20   length $error] 
0180: 3e 20 30 7d 20 74 68 65 6e 20 7b 70 75 74 73 20  > 0} then {puts 
0190: 73 74 64 6f 75 74 20 24 65 72 72 6f 72 7d 0d 0a  stdout $error}..
01a0: 0d 0a 20 20 70 75 74 73 20 73 74 64 6f 75 74 20  ..  puts stdout 
01b0: 22 75 73 61 67 65 3a 5c 0d 0a 5b 66 69 6c 65 20  "usage:\..[file 
01c0: 74 61 69 6c 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f  tail [info nameo
01d0: 66 65 78 65 63 75 74 61 62 6c 65 5d 5d 5c 0d 0a  fexecutable]]\..
01e0: 5b 66 69 6c 65 20 74 61 69 6c 20 5b 69 6e 66 6f  [file tail [info
01f0: 20 73 63 72 69 70 74 5d 5d 20 3c 53 6f 75 72 63   script]] <Sourc
0200: 65 49 64 4d 6f 64 65 3e 20 3c 66 69 6c 65 4e 61  eIdMode> <fileNa
0210: 6d 65 3e 22 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  me>"....  #..  #
0220: 20 4e 4f 54 45 3a 20 49 6e 64 69 63 61 74 65 20   NOTE: Indicate 
0230: 74 6f 20 74 68 65 20 63 61 6c 6c 65 72 2c 20 69  to the caller, i
0240: 66 20 61 6e 79 2c 20 74 68 61 74 20 77 65 20 68  f any, that we h
0250: 61 76 65 20 66 61 69 6c 65 64 2e 0d 0a 20 20 23  ave failed...  #
0260: 0d 0a 20 20 65 78 69 74 20 31 0d 0a 7d 0d 0a 0c  ..  exit 1..}...
0270: 0d 0a 73 65 74 20 6d 6f 64 65 73 20 5b 6c 69 73  ..set modes [lis
0280: 74 20 5c 22 53 6f 75 72 63 65 49 64 4d 6f 64 65  t \"SourceIdMode
0290: 5c 22 5d 0d 0a 73 65 74 20 61 72 67 63 20 5b 6c  \"]..set argc [l
02a0: 6c 65 6e 67 74 68 20 24 61 72 67 76 5d 0d 0a 0d  length $argv]...
02b0: 0a 69 66 20 7b 24 61 72 67 63 20 3d 3d 20 32 7d  .if {$argc == 2}
02c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 23 0d 0a 20 20   then {..  #..  
02d0: 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 65 20 75  # NOTE: Are we u
02e0: 70 64 61 74 69 6e 67 20 74 68 65 20 22 50 61 74  pdating the "Pat
02f0: 63 68 4c 65 76 65 6c 2e 63 73 22 20 66 69 6c 65  chLevel.cs" file
0300: 3f 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20 6d 6f  ?..  #..  set mo
0310: 64 65 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76  de [lindex $argv
0320: 20 30 5d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 73 74   0]....  if {[st
0330: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64  ring length $mod
0340: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
0350: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
0360: 45 3a 20 47 65 74 20 74 68 65 20 66 69 6c 65 20  E: Get the file 
0370: 6e 61 6d 65 20 74 6f 20 72 65 61 64 2f 75 70 64  name to read/upd
0380: 61 74 65 2f 77 72 69 74 65 2e 0d 0a 20 20 20 20  ate/write...    
0390: 23 0d 0a 20 20 20 20 73 65 74 20 66 69 6c 65 4e  #..    set fileN
03a0: 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 61 72 67  ame [lindex $arg
03b0: 76 20 31 5d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20  v 1]....    #.. 
03c0: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20     # NOTE: Make 
03d0: 73 75 72 65 20 74 68 65 20 66 69 6c 65 20 6e 61  sure the file na
03e0: 6d 65 20 70 72 6f 76 69 64 65 64 20 69 73 20 6e  me provided is n
03f0: 6f 74 20 6f 62 76 69 6f 75 73 6c 79 0d 0a 20 20  ot obviously..  
0400: 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69    #       invali
0410: 64 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69  d...    #..    i
0420: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
0430: 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  h $fileName] > 0
0440: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
0450: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
0460: 20 52 65 61 64 20 61 6c 6c 20 74 68 65 20 64 61   Read all the da
0470: 74 61 20 6f 75 74 20 6f 66 20 74 68 65 20 74 65  ta out of the te
0480: 78 74 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  xt file...      
0490: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 61 74  #..      set dat
04a0: 61 20 5b 72 65 61 64 46 69 6c 65 20 24 66 69 6c  a [readFile $fil
04b0: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....      
04c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
04d0: 20 4e 6f 72 6d 61 6c 69 7a 65 20 74 6f 20 55 6e   Normalize to Un
04e0: 69 78 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 73 2e  ix line-endings.
04f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
0500: 20 73 65 74 20 64 61 74 61 20 5b 73 74 72 69 6e   set data [strin
0510: 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e  g map [list \r\n
0520: 20 5c 6e 5d 20 24 64 61 74 61 5d 3b 20 23 20 55   \n] $data]; # U
0530: 6e 69 78 2e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  nix.....      #.
0540: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
0550: 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20 6d  igure out what m
0560: 6f 64 65 20 77 65 20 61 72 65 20 69 6e 2e 0d 0a  ode we are in...
0570: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
0580: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f  witch -exact -no
0590: 63 61 73 65 20 2d 2d 20 24 6d 6f 64 65 20 7b 0d  case -- $mode {.
05a0: 0a 20 20 20 20 20 20 20 20 53 6f 75 72 63 65 49  .        SourceI
05b0: 64 4d 6f 64 65 20 7b 0d 0a 20 20 20 20 20 20 20  dMode {..       
05c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
05d0: 23 20 4e 4f 54 45 3a 20 51 75 65 72 79 20 74 68  # NOTE: Query th
05e0: 65 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  e source identif
05f0: 69 65 72 20 66 72 6f 6d 20 46 6f 73 73 69 6c 2c  ier from Fossil,
0600: 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   if available...
0610: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
0620: 20 20 49 66 20 77 65 20 61 72 65 20 6e 6f 74 20    If we are not 
0630: 77 69 74 68 69 6e 20 61 6e 20 61 63 74 69 76 65  within an active
0640: 20 63 68 65 63 6b 6f 75 74 2c 20 74 68 69 73 20   checkout, this 
0650: 77 69 6c 6c 20 66 61 69 6c 2e 0d 0a 20 20 20 20  will fail...    
0660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
0670: 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b     set pattern {
0680: 5e 63 68 65 63 6b 6f 75 74 3a 5c 73 2b 28 5b 5e  ^checkout:\s+([^
0690: 5c 73 5d 2b 29 5c 73 2b 28 2e 2a 29 5c 73 2b 24  \s]+)\s+(.*)\s+$
06a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
06b0: 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 65  f {[catch {set e
06c0: 78 65 63 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  xec [string map 
06d0: 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 5b  [list \n \r\n] [
06e0: 65 78 65 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  exec \..        
06f0: 20 20 20 20 20 20 20 20 20 20 2d 73 75 63 63 65            -succe
0700: 73 73 20 53 75 63 63 65 73 73 20 2d 6e 6f 63 61  ss Success -noca
0710: 72 72 69 61 67 65 72 65 74 75 72 6e 73 20 2d 64  rriagereturns -d
0720: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..    
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
0740: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 66 69 6c  ile dirname $fil
0750: 65 4e 61 6d 65 5d 20 2d 2d 20 66 6f 73 73 69 6c  eName] -- fossil
0760: 20 69 6e 66 6f 5d 5d 7d 5d 20 7c 7c 20 5c 0d 0a   info]]}] || \..
0770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 72                [r
0780: 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24  egexp -line -- $
0790: 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75  pattern $exec du
07a0: 6d 6d 79 20 69 64 20 74 69 6d 65 53 74 61 6d 70  mmy id timeStamp
07b0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
07d0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
07e0: 45 3a 20 57 65 20 63 6f 75 6c 64 20 6e 6f 74 20  E: We could not 
07f0: 71 75 65 72 79 20 74 68 65 20 73 6f 75 72 63 65  query the source
0800: 20 69 64 65 6e 74 69 66 69 65 72 28 73 29 3b 20   identifier(s); 
0810: 74 68 65 72 65 66 6f 72 65 2c 0d 0a 20 20 20 20  therefore,..    
0820: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #       
0830: 75 73 65 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e  use obviously in
0840: 76 61 6c 69 64 20 6f 6e 65 73 2e 20 20 57 65 20  valid ones.  We 
0850: 77 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 61 62  would also be ab
0860: 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  le to..         
0870: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 6e     #       use n
0880: 75 6c 6c 20 76 61 6c 75 65 73 20 68 65 72 65 20  ull values here 
0890: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 73  except that thes
08a0: 65 20 76 61 6c 75 65 73 20 65 6e 64 20 75 70 20  e values end up 
08b0: 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
08c0: 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 43  #       native C
08d0: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
08e0: 20 77 65 6c 6c 20 28 69 2e 65 2e 20 6e 6f 74 20   well (i.e. not 
08f0: 6a 75 73 74 20 6d 61 6e 61 67 65 64 0d 0a 20 20  just managed..  
0900: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
0910: 20 20 61 73 73 65 6d 62 6c 79 20 61 74 74 72 69    assembly attri
0920: 62 75 74 65 20 76 61 6c 75 65 73 29 2e 0d 0a 20  bute values)... 
0930: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
0940: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 64            set id
0950: 20 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30   000000000000000
0960: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0970: 30 30 30 30 30 30 30 30 30 0d 0a 20 20 20 20 20  000000000..     
0980: 20 20 20 20 20 20 20 73 65 74 20 74 69 6d 65 53         set timeS
0990: 74 61 6d 70 20 22 30 30 30 30 2d 30 30 2d 30 30  tamp "0000-00-00
09a0: 20 30 30 3a 30 30 3a 30 30 20 55 54 43 22 0d 0a   00:00:00 UTC"..
09b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
09c0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
09d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61        # NOTE: Ma
09e0: 74 63 68 20 61 67 61 69 6e 73 74 20 74 68 69 73  tch against this
09f0: 20 70 61 74 74 65 72 6e 20 69 6e 20 74 68 65 20   pattern in the 
0a00: 22 50 61 74 63 68 4c 65 76 65 6c 2e 63 73 22 0d  "PatchLevel.cs".
0a10: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #    
0a20: 20 20 20 66 69 6c 65 20 28 74 68 69 73 20 70 61     file (this pa
0a30: 74 74 65 72 6e 20 69 73 20 66 61 69 72 6c 79 20  ttern is fairly 
0a40: 73 74 72 69 63 74 20 74 6f 20 70 72 65 76 65 6e  strict to preven
0a50: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  t..          #  
0a60: 20 20 20 20 20 66 61 6c 73 65 2d 70 6f 73 69 74       false-posit
0a70: 69 76 65 73 29 2e 0d 0a 20 20 20 20 20 20 20 20  ives)...        
0a80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
0a90: 65 74 20 70 61 74 74 65 72 6e 31 20 7b 41 73 73  et pattern1 {Ass
0aa0: 65 6d 62 6c 79 53 6f 75 72 63 65 49 64 5c 28 2e  emblySourceId\(.
0ab0: 2a 3f 5c 29 7d 0d 0a 20 20 20 20 20 20 20 20 20  *?\)}..         
0ac0: 20 73 65 74 20 70 61 74 74 65 72 6e 32 20 7b 41   set pattern2 {A
0ad0: 73 73 65 6d 62 6c 79 53 6f 75 72 63 65 54 69 6d  ssemblySourceTim
0ae0: 65 53 74 61 6d 70 5c 28 2e 2a 3f 5c 29 7d 0d 0a  eStamp\(.*?\)}..
0af0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61            set pa
0b00: 74 74 65 72 6e 33 20 7b 49 4e 54 45 52 4f 50 5f  ttern3 {INTEROP_
0b10: 53 4f 55 52 43 45 5f 49 44 5c 73 2b 22 2e 2a 3f  SOURCE_ID\s+".*?
0b20: 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  "}..          se
0b30: 74 20 70 61 74 74 65 72 6e 34 20 7b 49 4e 54 45  t pattern4 {INTE
0b40: 52 4f 50 5f 53 4f 55 52 43 45 5f 54 49 4d 45 53  ROP_SOURCE_TIMES
0b50: 54 41 4d 50 5c 73 2b 22 2e 2a 3f 22 7d 0d 0a 0d  TAMP\s+".*?"}...
0b60: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
0b70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
0b80: 42 75 69 6c 64 20 74 68 65 20 66 69 6e 61 6c 20  Build the final 
0b90: 72 65 70 6c 61 63 65 6d 65 6e 74 20 73 70 65 63  replacement spec
0ba0: 69 66 69 63 61 74 69 6f 6e 20 73 74 72 69 6e 67  ification string
0bb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
0bc0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 75            set su
0bd0: 62 53 70 65 63 31 20 5b 61 70 70 65 6e 64 41 72  bSpec1 [appendAr
0be0: 67 73 20 41 73 73 65 6d 62 6c 79 53 6f 75 72 63  gs AssemblySourc
0bf0: 65 49 64 28 5c 22 20 24 69 64 20 5c 22 20 29 5d  eId(\" $id \" )]
0c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set 
0c10: 73 75 62 53 70 65 63 32 20 5b 61 70 70 65 6e 64  subSpec2 [append
0c20: 41 72 67 73 20 41 73 73 65 6d 62 6c 79 53 6f 75  Args AssemblySou
0c30: 72 63 65 54 69 6d 65 53 74 61 6d 70 28 5c 22 20  rceTimeStamp(\" 
0c40: 24 74 69 6d 65 53 74 61 6d 70 20 5c 22 20 29 5d  $timeStamp \" )]
0c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set 
0c60: 73 75 62 53 70 65 63 33 20 5b 61 70 70 65 6e 64  subSpec3 [append
0c70: 41 72 67 73 20 49 4e 54 45 52 4f 50 5f 53 4f 55  Args INTEROP_SOU
0c80: 52 43 45 5f 49 44 20 22 20 20 20 20 20 20 20 20  RCE_ID "        
0c90: 5c 22 22 20 24 69 64 20 5c 22 5d 0d 0a 20 20 20  \"" $id \"]..   
0ca0: 20 20 20 20 20 20 20 73 65 74 20 73 75 62 53 70         set subSp
0cb0: 65 63 34 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ec4 [appendArgs 
0cc0: 49 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45 5f 54  INTEROP_SOURCE_T
0cd0: 49 4d 45 53 54 41 4d 50 20 22 20 5c 22 22 20 24  IMESTAMP " \"" $
0ce0: 74 69 6d 65 53 74 61 6d 70 20 5c 22 5d 0d 0a 0d  timeStamp \"]...
0cf0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
0d00: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
0d10: 50 65 72 66 6f 72 6d 20 74 68 65 20 72 65 70 6c  Perform the repl
0d20: 61 63 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  acements in the 
0d30: 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 0d 0a 20  original data.. 
0d40: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #      
0d50: 20 28 66 69 72 73 74 20 6d 61 74 63 68 20 6f 6e   (first match on
0d60: 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ly)...          
0d70: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
0d80: 20 63 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20   count 0....    
0d90: 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e 74        incr count
0da0: 20 5b 72 65 67 73 75 62 20 2d 6e 6f 63 61 73 65   [regsub -nocase
0db0: 20 2d 2d 20 24 70 61 74 74 65 72 6e 31 20 24 64   -- $pattern1 $d
0dc0: 61 74 61 20 24 73 75 62 53 70 65 63 31 20 64 61  ata $subSpec1 da
0dd0: 74 61 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ta]..          i
0de0: 6e 63 72 20 63 6f 75 6e 74 20 5b 72 65 67 73 75  ncr count [regsu
0df0: 62 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 24 70 61  b -nocase -- $pa
0e00: 74 74 65 72 6e 32 20 24 64 61 74 61 20 24 73 75  ttern2 $data $su
0e10: 62 53 70 65 63 32 20 64 61 74 61 5d 0d 0a 20 20  bSpec2 data]..  
0e20: 20 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75          incr cou
0e30: 6e 74 20 5b 72 65 67 73 75 62 20 2d 6e 6f 63 61  nt [regsub -noca
0e40: 73 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 33 20  se -- $pattern3 
0e50: 24 64 61 74 61 20 24 73 75 62 53 70 65 63 33 20  $data $subSpec3 
0e60: 64 61 74 61 5d 0d 0a 20 20 20 20 20 20 20 20 20  data]..         
0e70: 20 69 6e 63 72 20 63 6f 75 6e 74 20 5b 72 65 67   incr count [reg
0e80: 73 75 62 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 24  sub -nocase -- $
0e90: 70 61 74 74 65 72 6e 34 20 24 64 61 74 61 20 24  pattern4 $data $
0ea0: 73 75 62 53 70 65 63 34 20 64 61 74 61 5d 0d 0a  subSpec4 data]..
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #.. 
0ec0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
0ed0: 20 49 66 20 77 65 20 61 63 74 75 61 6c 6c 79 20   If we actually 
0ee0: 72 65 70 6c 61 63 65 64 20 61 6e 79 74 68 69 6e  replaced anythin
0ef0: 67 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 77 72  g, we need to wr
0f00: 69 74 65 20 62 61 63 6b 0d 0a 20 20 20 20 20 20  ite back..      
0f10: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74      #       to t
0f20: 68 65 20 6f 72 69 67 69 6e 61 6c 20 66 69 6c 65  he original file
0f30: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6c 65 61  ; otherwise, lea
0f40: 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0d 0a 20 20  ve it alone...  
0f50: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
0f60: 20 20 20 20 20 69 66 20 7b 24 63 6f 75 6e 74 20       if {$count 
0f70: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..   
0f80: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
0f90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
0fa0: 53 68 6f 77 20 68 6f 77 20 77 65 20 74 61 67 67  Show how we tagg
0fb0: 65 64 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  ed it...        
0fc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
0fd0: 20 20 20 70 75 74 73 20 73 74 64 6f 75 74 20 5b     puts stdout [
0fe0: 61 70 70 65 6e 64 41 72 67 73 20 22 74 61 67 67  appendArgs "tagg
0ff0: 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  ed \"" $fileName
1000: 20 22 5c 22 20 22 20 24 6d 6f 64 65 20 5c 0d 0a   "\" " $mode \..
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 22 20 22 20 24 69 64 20 22 20 22 20 24 74 69 6d  " " $id " " $tim
1030: 65 53 74 61 6d 70 5d 0d 0a 0d 0a 20 20 20 20 20  eStamp]....     
1040: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
1050: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
1060: 2d 77 72 69 74 65 20 74 68 65 20 6f 72 69 67 69  -write the origi
1070: 6e 61 6c 20 66 69 6c 65 20 77 69 74 68 20 74 68  nal file with th
1080: 65 20 6d 6f 64 69 66 69 65 64 20 64 61 74 61 2e  e modified data.
1090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
10a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 72 69  .            wri
10b0: 74 65 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  teFile $fileName
10c0: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69   [string map [li
10d0: 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 24 64 61 74  st \n \r\n] $dat
10e0: 61 5d 3b 20 23 20 44 4f 53 2e 0d 0a 20 20 20 20  a]; # DOS...    
10f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1100: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
1110: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
1120: 45 3a 20 57 65 20 63 6f 75 6c 64 20 6e 6f 74 20  E: We could not 
1130: 72 65 70 6c 61 63 65 20 74 68 65 20 73 74 72 69  replace the stri
1140: 6e 67 2e 20 20 54 68 69 73 20 69 73 20 63 6f 6e  ng.  This is con
1150: 73 69 64 65 72 65 64 0d 0a 20 20 20 20 20 20 20  sidered..       
1160: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20       #       an 
1170: 6f 76 65 72 61 6c 6c 20 66 61 69 6c 75 72 65 2e  overall failure.
1180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 61  .            usa
11a0: 67 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  ge [appendArgs "
11b0: 70 61 74 74 65 72 6e 20 5c 22 22 20 24 70 61 74  pattern \"" $pat
11c0: 74 65 72 6e 20 22 5c 22 20 6e 6f 74 20 66 6f 75  tern "\" not fou
11d0: 6e 64 20 69 6e 20 5c 22 22 20 5c 0d 0a 20 20 20  nd in \"" \..   
11e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69               $fi
11f0: 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20  leName \"]..    
1200: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1210: 20 7d 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61   }..        defa
1220: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ult {..         
1230: 20 75 73 61 67 65 20 5b 61 70 70 65 6e 64 41 72   usage [appendAr
1240: 67 73 20 22 75 6e 6b 6e 6f 77 6e 20 6d 6f 64 65  gs "unknown mode
1250: 2c 20 6d 75 73 74 20 62 65 20 22 20 5b 6a 6f 69  , must be " [joi
1260: 6e 20 24 6d 6f 64 65 73 20 22 20 22 5d 5d 0d 0a  n $modes " "]]..
1270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1280: 20 7d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b   }..    } else {
1290: 0d 0a 20 20 20 20 20 20 75 73 61 67 65 20 22 69  ..      usage "i
12a0: 6e 76 61 6c 69 64 20 66 69 6c 65 20 6e 61 6d 65  nvalid file name
12b0: 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 20 65 6c  "..    }..  } el
12c0: 73 65 20 7b 0d 0a 20 20 20 20 75 73 61 67 65 20  se {..    usage 
12d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 69 6e 76  [appendArgs "inv
12e0: 61 6c 69 64 20 6d 6f 64 65 2c 20 6d 75 73 74 20  alid mode, must 
12f0: 62 65 20 22 20 5b 6a 6f 69 6e 20 24 6d 6f 64 65  be " [join $mode
1300: 73 20 22 20 22 5d 5d 0d 0a 20 20 7d 0d 0a 7d 20  s " "]]..  }..} 
1310: 65 6c 73 65 20 7b 0d 0a 20 20 75 73 61 67 65 20  else {..  usage 
1320: 22 22 0d 0a 7d 0d 0a                             ""..}..