Artifact 875fe25bc72ca017813d7a62fa65a6fbe23e44db:
File
tools/cvs2fossil/lib/log.tcl
part of check-in
[47d52d1efd]
- Added convenience method for assertions and used it in place of the existing if/trouble internal constructions. Changed API of 'log write' so that we can defer substituation of the message to when the write actually happen, and converted all places which would be hit by double-substitution. The remaining 'log write' calls will be converted incrementally.
by
aku on
2007-11-28 05:39:49.
0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69 07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65 tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69 d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20 SE, which.# you
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 ived as part of
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74 n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72 voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79 ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75 many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20 als. For exact
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73 contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65 tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79 vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66 able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23 com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 55 74 69 ########..## Uti
0200: 6c 69 74 79 20 70 61 63 6b 61 67 65 2c 20 62 61 lity package, ba
0210: 73 69 63 20 75 73 65 72 20 66 65 65 64 62 61 63 sic user feedbac
0220: 6b 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 k..# # ## ### ##
0230: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
0240: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0260: 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 .## Requirements
0270: 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 ..package requir
0280: 65 20 54 63 6c 20 38 2e 34 20 3b 20 23 20 52 65 e Tcl 8.4 ; # Re
0290: 71 75 69 72 65 64 20 72 75 6e 74 69 6d 65 0a 70 quired runtime.p
02a0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 ackage require s
02b0: 6e 69 74 20 20 20 20 3b 20 23 20 4f 4f 20 73 79 nit ; # OO sy
02c0: 73 74 65 6d 2e 0a 0a 23 20 23 20 23 23 20 23 23 stem...# # ## ##
02d0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
02e0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# #
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0300: 23 23 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 ####.##..snit::t
0310: 79 70 65 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ype ::vc::tools:
0320: 3a 6c 6f 67 20 7b 0a 20 20 20 20 23 20 23 20 23 :log {. # # #
0330: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
0340: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
0350: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 ##. ## Public
0360: 20 41 50 49 2c 20 4d 65 74 68 6f 64 73 0a 0a 20 API, Methods..
0370: 20 20 20 23 20 57 72 69 74 65 20 74 68 65 20 6d # Write the m
0380: 65 73 73 61 67 65 20 27 74 65 78 74 27 20 74 6f essage 'text' to
0390: 20 6c 6f 67 2c 20 66 6f 72 20 74 68 65 20 6e 61 log, for the na
03a0: 6d 65 64 20 27 73 79 73 74 65 6d 27 2e 20 54 68 med 'system'. Th
03b0: 65 0a 20 20 20 20 23 20 6d 65 73 73 61 67 65 20 e. # message
03c0: 69 73 20 77 72 69 74 74 65 6e 20 69 66 20 61 6e is written if an
03d0: 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 6d 65 d only if the me
03e0: 73 73 61 67 65 20 76 65 72 62 6f 73 69 74 79 20 ssage verbosity
03f0: 69 73 20 6c 65 73 73 0a 20 20 20 20 23 20 6f 72 is less. # or
0400: 20 65 71 75 61 6c 20 74 68 65 20 63 68 6f 73 65 equal the chose
0410: 6e 20 76 65 72 62 6f 73 69 74 79 2e 20 41 20 6d n verbosity. A m
0420: 65 73 73 61 67 65 20 6f 66 20 76 65 72 62 6f 73 essage of verbos
0430: 69 74 79 20 30 20 63 61 6e 6e 6f 74 0a 20 20 20 ity 0 cannot.
0440: 20 23 20 62 65 20 62 6c 6f 63 6b 65 64 2e 0a 0a # be blocked...
0450: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 77 typemethod w
0460: 72 69 74 65 20 7b 76 65 72 62 6f 73 69 74 79 20 rite {verbosity
0470: 73 79 73 74 65 6d 20 74 65 78 74 7d 20 7b 0a 09 system text} {..
0480: 69 66 20 7b 24 76 65 72 62 6f 73 69 74 79 20 3e if {$verbosity >
0490: 20 24 6d 79 6c 6f 67 6c 65 76 65 6c 7d 20 72 65 $myloglevel} re
04a0: 74 75 72 6e 0a 09 75 70 6c 65 76 65 6c 20 23 30 turn..uplevel #0
04b0: 20 5b 6c 69 6e 73 65 72 74 20 24 6d 79 6c 6f 67 [linsert $mylog
04c0: 63 6d 64 20 65 6e 64 20 77 72 69 74 65 20 5b 53 cmd end write [S
04d0: 79 73 74 65 6d 20 24 73 79 73 74 65 6d 5d 20 5c ystem $system] \
04e0: 0a 09 20 20 20 20 5b 75 70 6c 65 76 65 6c 20 31 .. [uplevel 1
04f0: 20 5b 6c 69 73 74 20 3a 3a 73 75 62 73 74 20 24 [list ::subst $
0500: 74 65 78 74 5d 5d 5d 0a 09 72 65 74 75 72 6e 0a text]]]..return.
0510: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 53 69 6d }.. # Sim
0520: 69 6c 61 72 20 74 6f 20 77 72 69 74 65 2c 20 65 ilar to write, e
0530: 73 70 65 63 69 61 6c 6c 79 20 69 6e 20 74 68 65 specially in the
0540: 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 74 68 65 handling of the
0550: 20 76 65 72 62 6f 73 69 74 79 2c 0a 20 20 20 20 verbosity,.
0560: 23 20 74 6f 20 64 72 69 76 65 20 70 72 6f 67 72 # to drive progr
0570: 65 73 73 20 64 69 73 70 6c 61 79 73 2e 20 49 74 ess displays. It
0580: 20 73 69 67 6e 61 6c 73 20 74 68 61 74 20 66 6f signals that fo
0590: 72 20 73 6f 6d 65 20 6c 6f 6e 67 0a 20 20 20 20 r some long.
05a0: 23 20 72 75 6e 6e 69 6e 67 20 6f 70 65 72 61 74 # running operat
05b0: 69 6f 6e 20 77 65 20 61 72 65 20 61 74 20 74 69 ion we are at ti
05c0: 63 6b 20 27 6e 27 20 6f 66 20 61 74 20 6d 6f 73 ck 'n' of at mos
05d0: 74 20 27 6d 61 78 27 20 74 69 63 6b 73 2e 20 41 t 'max' ticks. A
05e0: 6e 0a 20 20 20 20 23 20 65 6d 70 74 79 20 27 6d n. # empty 'm
05f0: 61 78 27 20 69 6e 64 69 63 61 74 65 73 20 61 6e ax' indicates an
0600: 20 69 6e 66 69 6e 69 74 65 20 70 72 6f 67 72 65 infinite progre
0610: 73 73 20 64 69 73 70 6c 61 79 2e 0a 0a 20 20 20 ss display...
0620: 20 74 79 70 65 6d 65 74 68 6f 64 20 70 72 6f 67 typemethod prog
0630: 72 65 73 73 20 7b 76 65 72 62 6f 73 69 74 79 20 ress {verbosity
0640: 73 79 73 74 65 6d 20 6e 20 6d 61 78 7d 20 7b 0a system n max} {.
0650: 09 69 66 20 7b 21 24 6d 79 70 72 6f 67 72 65 73 .if {!$myprogres
0660: 73 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 72 s} r
0670: 65 74 75 72 6e 0a 09 69 66 20 7b 24 76 65 72 62 eturn..if {$verb
0680: 6f 73 69 74 79 20 3e 20 24 6d 79 6c 6f 67 6c 65 osity > $mylogle
0690: 76 65 6c 7d 20 72 65 74 75 72 6e 0a 09 75 70 6c vel} return..upl
06a0: 65 76 65 6c 20 23 30 20 5b 6c 69 6e 73 65 72 74 evel #0 [linsert
06b0: 20 24 6d 79 6c 6f 67 63 6d 64 20 65 6e 64 20 70 $mylogcmd end p
06c0: 72 6f 67 72 65 73 73 20 5b 53 79 73 74 65 6d 20 rogress [System
06d0: 24 73 79 73 74 65 6d 5d 20 24 6e 20 24 6d 61 78 $system] $n $max
06e0: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ]..return. }.
06f0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
0700: 76 69 73 69 62 6c 65 3f 20 7b 76 65 72 62 6f 73 visible? {verbos
0710: 69 74 79 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b ity} {..return [
0720: 65 78 70 72 20 7b 24 76 65 72 62 6f 73 69 74 79 expr {$verbosity
0730: 20 3c 3d 20 24 6d 79 6c 6f 67 6c 65 76 65 6c 7d <= $myloglevel}
0740: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 ]. }.. # #
0750: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
0760: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0770: 23 23 23 23 0a 20 20 20 20 23 20 50 75 62 6c 69 ####. # Publi
0780: 63 20 41 50 49 2c 20 41 64 6d 69 6e 69 73 74 72 c API, Administr
0790: 61 74 69 76 65 20 6d 65 74 68 6f 64 73 0a 0a 20 ative methods..
07a0: 20 20 20 23 20 53 65 74 20 76 65 72 62 6f 73 69 # Set verbosi
07b0: 74 79 20 74 6f 20 74 68 65 20 63 68 6f 73 65 6e ty to the chosen
07c0: 20 27 6c 65 76 65 6c 27 2e 20 4f 6e 6c 79 20 6d 'level'. Only m
07d0: 65 73 73 61 67 65 73 20 77 69 74 68 20 61 20 6c essages with a l
07e0: 65 76 65 6c 0a 20 20 20 20 23 20 6c 65 73 73 20 evel. # less
07f0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 69 73 or equal to this
0800: 20 6f 6e 65 20 77 69 6c 6c 20 62 65 20 73 68 6f one will be sho
0810: 77 6e 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 wn... typemet
0820: 68 6f 64 20 76 65 72 62 6f 73 69 74 79 20 7b 6c hod verbosity {l
0830: 65 76 65 6c 7d 20 7b 0a 09 69 66 20 7b 24 6c 65 evel} {..if {$le
0840: 76 65 6c 20 3c 20 31 7d 20 7b 73 65 74 20 6c 65 vel < 1} {set le
0850: 76 65 6c 20 30 7d 0a 09 73 65 74 20 6d 79 6c 6f vel 0}..set mylo
0860: 67 6c 65 76 65 6c 20 24 6c 65 76 65 6c 0a 09 72 glevel $level..r
0870: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
0880: 20 74 79 70 65 6d 65 74 68 6f 64 20 76 65 72 62 typemethod verb
0890: 6f 73 65 20 7b 7d 20 7b 0a 09 69 6e 63 72 20 6d ose {} {..incr m
08a0: 79 6c 6f 67 6c 65 76 65 6c 0a 09 72 65 74 75 72 yloglevel..retur
08b0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 n. }.. typ
08c0: 65 6d 65 74 68 6f 64 20 6e 6f 70 72 6f 67 72 65 emethod noprogre
08d0: 73 73 20 7b 7d 20 7b 0a 09 73 65 74 20 6d 79 70 ss {} {..set myp
08e0: 72 6f 67 72 65 73 73 20 30 0a 09 72 65 74 75 72 rogress 0..retur
08f0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 n. }.. typ
0900: 65 6d 65 74 68 6f 64 20 71 75 69 65 74 20 7b 7d emethod quiet {}
0910: 20 7b 0a 09 69 66 20 7b 24 6d 79 6c 6f 67 6c 65 {..if {$mylogle
0920: 76 65 6c 20 3c 20 31 7d 20 72 65 74 75 72 6e 0a vel < 1} return.
0930: 09 69 6e 63 72 20 6d 79 6c 6f 67 6c 65 76 65 6c .incr myloglevel
0940: 20 2d 31 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 -1..return.
0950: 7d 0a 0a 20 20 20 20 23 20 51 75 65 72 79 20 74 }.. # Query t
0960: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 73 65 74 he currently set
0970: 20 76 65 72 62 6f 73 69 74 79 2e 0a 0a 20 20 20 verbosity...
0980: 20 74 79 70 65 6d 65 74 68 6f 64 20 76 65 72 62 typemethod verb
0990: 6f 73 69 74 79 3f 20 7b 7d 20 7b 0a 09 72 65 74 osity? {} {..ret
09a0: 75 72 6e 20 20 24 6d 79 6c 6f 67 6c 65 76 65 6c urn $myloglevel
09b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 53 65 . }.. # Se
09c0: 74 20 74 68 65 20 6c 6f 67 20 63 61 6c 6c 62 61 t the log callba
09d0: 63 6b 20 68 61 6e 64 6c 69 6e 67 20 74 68 65 20 ck handling the
09e0: 61 63 74 75 61 6c 20 6f 75 74 70 75 74 20 6f 66 actual output of
09f0: 20 6d 65 73 73 61 67 65 73 20 67 6f 69 6e 67 0a messages going.
0a00: 20 20 20 20 23 20 74 68 72 6f 75 67 68 20 74 68 # through th
0a10: 65 20 70 61 63 6b 61 67 65 2e 0a 0a 20 20 20 20 e package...
0a20: 74 79 70 65 6d 65 74 68 6f 64 20 63 6f 6d 6d 61 typemethod comma
0a30: 6e 64 20 7b 63 6d 64 70 72 65 66 69 78 7d 20 7b nd {cmdprefix} {
0a40: 0a 09 76 61 72 69 61 62 6c 65 20 6d 79 6c 6f 67 ..variable mylog
0a50: 63 6d 64 20 24 63 6d 64 70 72 65 66 69 78 0a 09 cmd $cmdprefix..
0a60: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
0a70: 20 20 23 20 52 65 67 69 73 74 65 72 20 61 20 73 # Register a s
0a80: 79 73 74 65 6d 20 6e 61 6d 65 2c 20 74 6f 20 65 ystem name, to e
0a90: 6e 61 62 6c 65 20 74 61 62 75 6c 61 72 20 66 6f nable tabular fo
0aa0: 72 6d 61 74 74 69 6e 67 2e 20 54 68 69 73 20 69 rmatting. This i
0ab0: 73 0a 20 20 20 20 23 20 64 6f 6e 65 20 62 79 20 s. # done by
0ac0: 73 65 74 74 69 6e 67 20 75 70 20 61 20 66 6f 72 setting up a for
0ad0: 6d 61 74 20 73 70 65 63 69 66 69 65 72 20 77 69 mat specifier wi
0ae0: 74 68 20 61 20 70 72 6f 70 65 72 20 77 69 64 74 th a proper widt
0af0: 68 2e 20 54 68 69 73 0a 20 20 20 20 23 20 69 73 h. This. # is
0b00: 20 68 61 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 handled in the
0b10: 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 6d 6d 61 generation comma
0b20: 6e 64 2c 20 62 65 66 6f 72 65 20 74 68 65 20 6f nd, before the o
0b30: 75 74 70 75 74 20 63 61 6c 6c 62 61 63 6b 0a 20 utput callback.
0b40: 20 20 20 23 20 69 73 20 69 6e 76 6f 6b 65 64 2e # is invoked.
0b50: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
0b60: 20 72 65 67 69 73 74 65 72 20 7b 6e 61 6d 65 7d register {name}
0b70: 20 7b 0a 09 73 65 74 20 6e 6c 65 6e 20 5b 73 74 {..set nlen [st
0b80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d ring length $nam
0b90: 65 5d 0a 09 69 66 20 7b 24 6e 6c 65 6e 20 3c 20 e]..if {$nlen <
0ba0: 24 6d 79 73 79 73 6c 65 6e 7d 20 72 65 74 75 72 $mysyslen} retur
0bb0: 6e 0a 09 73 65 74 20 6d 79 73 79 73 6c 65 6e 20 n..set mysyslen
0bc0: 24 6e 6c 65 6e 0a 09 73 65 74 20 6d 79 73 79 73 $nlen..set mysys
0bd0: 66 6d 74 20 25 2d 24 7b 6d 79 73 79 73 6c 65 6e fmt %-${mysyslen
0be0: 7d 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }s..return. }
0bf0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
0c00: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
0c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
0c20: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 2c 20 73 ## Internal, s
0c30: 74 61 74 65 0a 0a 20 20 20 20 74 79 70 65 76 61 tate.. typeva
0c40: 72 69 61 62 6c 65 20 6d 79 6c 6f 67 6c 65 76 65 riable mylogleve
0c50: 6c 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 l 2
0c60: 20 20 20 20 20 20 20 20 3b 20 23 20 53 6f 6d 65 ; # Some
0c70: 20 76 65 72 62 6f 73 69 74 79 2c 20 6e 6f 74 20 verbosity, not
0c80: 74 6f 6f 20 6d 75 63 68 0a 20 20 20 20 74 79 70 too much. typ
0c90: 65 76 61 72 69 61 62 6c 65 20 6d 79 6c 6f 67 63 evariable mylogc
0ca0: 6d 64 20 20 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 md ::vc::tools
0cb0: 3a 3a 6c 6f 67 3a 3a 4f 55 54 20 3b 20 23 20 53 ::log::OUT ; # S
0cc0: 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 74 tandard output t
0cd0: 6f 20 73 74 64 6f 75 74 2e 0a 20 20 20 20 74 79 o stdout.. ty
0ce0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 73 79 73 pevariable mysys
0cf0: 66 6d 74 20 20 20 25 73 20 20 20 20 20 20 20 20 fmt %s
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 ; #
0d10: 4e 6f 6e 2d 74 61 62 75 6c 61 72 20 66 6f 72 6d Non-tabular form
0d20: 61 74 74 69 6e 67 2e 0a 20 20 20 20 74 79 70 65 atting.. type
0d30: 76 61 72 69 61 62 6c 65 20 6d 79 73 79 73 6c 65 variable mysysle
0d40: 6e 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 n 0
0d50: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 44 69 ; # Di
0d60: 74 74 6f 2e 0a 20 20 20 20 74 79 70 65 76 61 72 tto.. typevar
0d70: 69 61 62 6c 65 20 6d 79 70 72 6f 67 72 65 73 73 iable myprogress
0d80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1
0d90: 20 20 20 20 20 20 20 3b 20 23 20 50 72 6f 67 72 ; # Progr
0da0: 65 73 73 20 6f 75 74 70 75 74 20 69 73 20 73 74 ess output is st
0db0: 61 6e 64 61 72 64 2e 0a 0a 20 20 20 20 23 20 23 andard... # #
0dc0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
0dd0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0de0: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 ####. ## Inte
0df0: 72 6e 61 6c 2c 20 68 65 6c 70 65 72 20 6d 65 74 rnal, helper met
0e00: 68 6f 64 73 20 28 66 6f 72 6d 61 74 74 69 6e 67 hods (formatting
0e10: 2c 20 64 69 73 70 61 74 63 68 29 0a 0a 20 20 20 , dispatch)..
0e20: 20 70 72 6f 63 20 53 79 73 74 65 6d 20 7b 73 7d proc System {s}
0e30: 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d {..::variable m
0e40: 79 73 79 73 66 6d 74 0a 09 72 65 74 75 72 6e 20 ysysfmt..return
0e50: 5b 66 6f 72 6d 61 74 20 24 6d 79 73 79 73 66 6d [format $mysysfm
0e60: 74 20 24 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 t $s]. }..
0e70: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
0e80: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0e90: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
0ea0: 53 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 Standard output
0eb0: 63 61 6c 6c 62 61 63 6b 2c 20 6d 6f 64 75 6c 65 callback, module
0ec0: 20 69 6e 74 65 72 6e 61 6c 0a 0a 20 20 20 20 23 internal.. #
0ed0: 20 44 69 73 70 61 74 63 68 20 74 6f 20 74 68 65 Dispatch to the
0ee0: 20 68 61 6e 64 6c 65 72 73 20 6f 66 20 74 68 65 handlers of the
0ef0: 20 70 6f 73 73 69 62 6c 65 20 6f 70 65 72 61 74 possible operat
0f00: 69 6f 6e 73 2e 0a 0a 20 20 20 20 70 72 6f 63 20 ions... proc
0f10: 4f 55 54 20 7b 6f 70 20 61 72 67 73 7d 20 7b 0a OUT {op args} {.
0f20: 09 65 76 61 6c 20 5b 6c 69 6e 73 65 72 74 20 24 .eval [linsert $
0f30: 61 72 67 73 20 30 20 3a 3a 76 63 3a 3a 74 6f 6f args 0 ::vc::too
0f40: 6c 73 3a 3a 6c 6f 67 3a 3a 4f 55 54 2f 24 6f 70 ls::log::OUT/$op
0f50: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ]..return. }.
0f60: 0a 20 20 20 20 23 20 57 72 69 74 65 20 68 61 6e . # Write han
0f70: 64 6c 65 72 2e 20 45 61 63 68 20 6d 65 73 73 61 dler. Each messa
0f80: 67 65 20 69 73 20 61 20 6c 69 6e 65 2e 0a 0a 20 ge is a line...
0f90: 20 20 20 70 72 6f 63 20 4f 55 54 2f 77 72 69 74 proc OUT/writ
0fa0: 65 20 7b 73 79 73 74 65 6d 20 74 65 78 74 7d 20 e {system text}
0fb0: 7b 0a 09 70 75 74 73 20 22 24 73 79 73 74 65 6d {..puts "$system
0fc0: 20 24 74 65 78 74 22 0a 09 72 65 74 75 72 6e 0a $text"..return.
0fd0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 50 72 6f }.. # Pro
0fe0: 67 72 65 73 73 20 68 61 6e 64 6c 65 72 2e 20 55 gress handler. U
0ff0: 73 65 73 20 5c 72 20 74 6f 20 72 65 74 75 72 6e ses \r to return
1000: 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e to the beginnin
1010: 67 20 6f 66 20 74 68 65 0a 20 20 20 20 23 20 63 g of the. # c
1020: 75 72 72 65 6e 74 20 6c 69 6e 65 20 77 69 74 68 urrent line with
1030: 6f 75 74 20 61 64 76 61 6e 63 69 6e 67 2e 0a 0a out advancing...
1040: 20 20 20 20 70 72 6f 63 20 4f 55 54 2f 70 72 6f proc OUT/pro
1050: 67 72 65 73 73 20 7b 73 79 73 74 65 6d 20 6e 20 gress {system n
1060: 6d 61 78 7d 20 7b 0a 09 69 66 20 7b 24 6d 61 78 max} {..if {$max
1070: 20 65 71 20 7b 7d 7d 20 7b 0a 09 20 20 20 20 70 eq {}} {.. p
1080: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 uts -nonewline "
1090: 24 73 79 73 74 65 6d 20 24 6e 5c 72 22 0a 09 7d $system $n\r"..}
10a0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 70 75 74 else {.. put
10b0: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 24 73 s -nonewline "$s
10c0: 79 73 74 65 6d 20 5b 66 6f 72 6d 61 74 20 25 5b ystem [format %[
10d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d string length $m
10e0: 61 78 5d 73 20 24 6e 5d 2f 24 6d 61 78 5c 72 22 ax]s $n]/$max\r"
10f0: 0a 09 7d 0a 09 66 6c 75 73 68 20 73 74 64 6f 75 ..}..flush stdou
1100: 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a t..return. }.
1110: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
1120: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
1130: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
1140: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ## Configuratio
1150: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 n.. pragma -h
1160: 61 73 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f asinstances no
1170: 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 ; # singleton.
1180: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 pragma -hasty
1190: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 peinfo no ; #
11a0: 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f no introspectio
11b0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 n. pragma -ha
11c0: 73 74 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 stypedestroy no
11d0: 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 ; # immortal..
11e0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
11f0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
1200: 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d #########.}..nam
1210: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 espace eval ::vc
1220: 3a 3a 74 6f 6f 6c 73 20 7b 0a 20 20 20 20 6e 61 ::tools {. na
1230: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 6c mespace export l
1240: 6f 67 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d og.}..# --------
1250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1290: 2d 2d 2d 2d 2d 0a 23 20 52 65 61 64 79 0a 0a 70 -----.# Ready..p
12a0: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 ackage provide v
12b0: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 31 2e c::tools::log 1.
12c0: 30 0a 72 65 74 75 72 6e 0a 0.return.