Artifact c2ee0c05740bbe0195ac286a145ce740bad7bb2f:
File
tools/cvs2fossil/lib/log.tcl
part of check-in
[7b71f64766]
- Integrated memory tracking into the option processor for activation and configuration, and into the log system for use. The latter means that each actual output to the log is an introspection point.
by
aku on
2008-02-16 06:45:03.
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 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20 07-2008 Andreas
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69 Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69 s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69 censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 bed in the file
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23 LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72 received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69 t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73 bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73 software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20 ts of voluntary
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61 contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64 de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65 ividuals. For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74 n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69 he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20 story and logs,
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74 available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68 p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 #############..#
0200: 23 20 55 74 69 6c 69 74 79 20 70 61 63 6b 61 67 # Utility packag
0210: 65 2c 20 62 61 73 69 63 20 75 73 65 72 20 66 65 e, basic user fe
0220: 65 64 62 61 63 6b 0a 0a 23 20 23 20 23 23 20 23 edback..# # ## #
0230: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
0240: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 # #############
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0260: 23 23 23 23 23 0a 23 23 20 52 65 71 75 69 72 65 #####.## Require
0270: 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 ments..package r
0280: 65 71 75 69 72 65 20 54 63 6c 20 38 2e 34 20 20 equire Tcl 8.4
0290: 20 20 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 ; # Requir
02a0: 65 64 20 72 75 6e 74 69 6d 65 0a 70 61 63 6b 61 ed runtime.packa
02b0: 67 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20 ge require snit
02c0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 4f 4f ; # OO
02d0: 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 system..package
02e0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f require vc::too
02f0: 6c 73 3a 3a 6d 65 6d 20 3b 20 23 20 4d 65 6d 6f ls::mem ; # Memo
0300: 72 79 20 74 72 61 63 6b 69 6e 67 2e 0a 0a 23 20 ry tracking...#
0310: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
0320: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0330: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
0340: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a ###########.##..
0350: 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a snit::type ::vc:
0360: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 7b 0a 20 20 :tools::log {.
0370: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
0380: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
0390: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
03a0: 20 50 75 62 6c 69 63 20 41 50 49 2c 20 4d 65 74 Public API, Met
03b0: 68 6f 64 73 0a 0a 20 20 20 20 23 20 57 72 69 74 hods.. # Writ
03c0: 65 20 74 68 65 20 6d 65 73 73 61 67 65 20 27 74 e the message 't
03d0: 65 78 74 27 20 74 6f 20 6c 6f 67 2c 20 66 6f 72 ext' to log, for
03e0: 20 74 68 65 20 6e 61 6d 65 64 20 27 73 79 73 74 the named 'syst
03f0: 65 6d 27 2e 20 54 68 65 0a 20 20 20 20 23 20 6d em'. The. # m
0400: 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65 essage is writte
0410: 6e 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 n if and only if
0420: 20 74 68 65 20 6d 65 73 73 61 67 65 20 76 65 72 the message ver
0430: 62 6f 73 69 74 79 20 69 73 20 6c 65 73 73 0a 20 bosity is less.
0440: 20 20 20 23 20 6f 72 20 65 71 75 61 6c 20 74 68 # or equal th
0450: 65 20 63 68 6f 73 65 6e 20 76 65 72 62 6f 73 69 e chosen verbosi
0460: 74 79 2e 20 41 20 6d 65 73 73 61 67 65 20 6f 66 ty. A message of
0470: 20 76 65 72 62 6f 73 69 74 79 20 30 20 63 61 6e verbosity 0 can
0480: 6e 6f 74 0a 20 20 20 20 23 20 62 65 20 62 6c 6f not. # be blo
0490: 63 6b 65 64 2e 0a 0a 20 20 20 20 74 79 70 65 6d cked... typem
04a0: 65 74 68 6f 64 20 77 72 69 74 65 20 7b 76 65 72 ethod write {ver
04b0: 62 6f 73 69 74 79 20 73 79 73 74 65 6d 20 74 65 bosity system te
04c0: 78 74 7d 20 7b 0a 09 69 66 20 7b 24 76 65 72 62 xt} {..if {$verb
04d0: 6f 73 69 74 79 20 3e 20 24 6d 79 6c 6f 67 6c 65 osity > $mylogle
04e0: 76 65 6c 7d 20 72 65 74 75 72 6e 0a 09 75 70 6c vel} return..upl
04f0: 65 76 65 6c 20 23 30 20 5b 6c 69 6e 73 65 72 74 evel #0 [linsert
0500: 20 24 6d 79 6c 6f 67 63 6d 64 20 65 6e 64 20 77 $mylogcmd end w
0510: 72 69 74 65 20 5b 53 79 73 74 65 6d 20 24 73 79 rite [System $sy
0520: 73 74 65 6d 5d 20 5c 0a 09 20 20 20 20 5b 75 70 stem] \.. [up
0530: 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 3a 3a level 1 [list ::
0540: 73 75 62 73 74 20 24 74 65 78 74 5d 5d 5d 0a 09 subst $text]]]..
0550: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
0560: 20 20 23 20 53 69 6d 69 6c 61 72 20 74 6f 20 77 # Similar to w
0570: 72 69 74 65 2c 20 65 73 70 65 63 69 61 6c 6c 79 rite, especially
0580: 20 69 6e 20 74 68 65 20 68 61 6e 64 6c 69 6e 67 in the handling
0590: 20 6f 66 20 74 68 65 20 76 65 72 62 6f 73 69 74 of the verbosit
05a0: 79 2c 0a 20 20 20 20 23 20 74 6f 20 64 72 69 76 y,. # to driv
05b0: 65 20 70 72 6f 67 72 65 73 73 20 64 69 73 70 6c e progress displ
05c0: 61 79 73 2e 20 49 74 20 73 69 67 6e 61 6c 73 20 ays. It signals
05d0: 74 68 61 74 20 66 6f 72 20 73 6f 6d 65 20 6c 6f that for some lo
05e0: 6e 67 0a 20 20 20 20 23 20 72 75 6e 6e 69 6e 67 ng. # running
05f0: 20 6f 70 65 72 61 74 69 6f 6e 20 77 65 20 61 72 operation we ar
0600: 65 20 61 74 20 74 69 63 6b 20 27 6e 27 20 6f 66 e at tick 'n' of
0610: 20 61 74 20 6d 6f 73 74 20 27 6d 61 78 27 20 74 at most 'max' t
0620: 69 63 6b 73 2e 20 41 6e 0a 20 20 20 20 23 20 65 icks. An. # e
0630: 6d 70 74 79 20 27 6d 61 78 27 20 69 6e 64 69 63 mpty 'max' indic
0640: 61 74 65 73 20 61 6e 20 69 6e 66 69 6e 69 74 65 ates an infinite
0650: 20 70 72 6f 67 72 65 73 73 20 64 69 73 70 6c 61 progress displa
0660: 79 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 y... typemeth
0670: 6f 64 20 70 72 6f 67 72 65 73 73 20 7b 76 65 72 od progress {ver
0680: 62 6f 73 69 74 79 20 73 79 73 74 65 6d 20 6e 20 bosity system n
0690: 6d 61 78 7d 20 7b 0a 09 69 66 20 7b 21 24 6d 79 max} {..if {!$my
06a0: 70 72 6f 67 72 65 73 73 7d 20 20 20 20 20 20 20 progress}
06b0: 20 20 20 20 20 20 72 65 74 75 72 6e 0a 09 69 66 return..if
06c0: 20 7b 24 76 65 72 62 6f 73 69 74 79 20 3e 20 24 {$verbosity > $
06d0: 6d 79 6c 6f 67 6c 65 76 65 6c 7d 20 72 65 74 75 myloglevel} retu
06e0: 72 6e 0a 09 75 70 6c 65 76 65 6c 20 23 30 20 5b rn..uplevel #0 [
06f0: 6c 69 6e 73 65 72 74 20 24 6d 79 6c 6f 67 63 6d linsert $mylogcm
0700: 64 20 65 6e 64 20 70 72 6f 67 72 65 73 73 20 5b d end progress [
0710: 53 79 73 74 65 6d 20 24 73 79 73 74 65 6d 5d 20 System $system]
0720: 24 6e 20 24 6d 61 78 5d 0a 09 72 65 74 75 72 6e $n $max]..return
0730: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
0740: 6d 65 74 68 6f 64 20 76 69 73 69 62 6c 65 3f 20 method visible?
0750: 7b 76 65 72 62 6f 73 69 74 79 7d 20 7b 0a 09 72 {verbosity} {..r
0760: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 76 65 eturn [expr {$ve
0770: 72 62 6f 73 69 74 79 20 3c 3d 20 24 6d 79 6c 6f rbosity <= $mylo
0780: 67 6c 65 76 65 6c 7d 5d 0a 20 20 20 20 7d 0a 0a glevel}]. }..
0790: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
07a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
07b0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
07c0: 23 20 50 75 62 6c 69 63 20 41 50 49 2c 20 41 64 # Public API, Ad
07d0: 6d 69 6e 69 73 74 72 61 74 69 76 65 20 6d 65 74 ministrative met
07e0: 68 6f 64 73 0a 0a 20 20 20 20 23 20 53 65 74 20 hods.. # Set
07f0: 76 65 72 62 6f 73 69 74 79 20 74 6f 20 74 68 65 verbosity to the
0800: 20 63 68 6f 73 65 6e 20 27 6c 65 76 65 6c 27 2e chosen 'level'.
0810: 20 4f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20 77 Only messages w
0820: 69 74 68 20 61 20 6c 65 76 65 6c 0a 20 20 20 20 ith a level.
0830: 23 20 6c 65 73 73 20 6f 72 20 65 71 75 61 6c 20 # less or equal
0840: 74 6f 20 74 68 69 73 20 6f 6e 65 20 77 69 6c 6c to this one will
0850: 20 62 65 20 73 68 6f 77 6e 2e 0a 0a 20 20 20 20 be shown...
0860: 74 79 70 65 6d 65 74 68 6f 64 20 76 65 72 62 6f typemethod verbo
0870: 73 69 74 79 20 7b 6c 65 76 65 6c 7d 20 7b 0a 09 sity {level} {..
0880: 69 66 20 7b 24 6c 65 76 65 6c 20 3c 20 31 7d 20 if {$level < 1}
0890: 7b 73 65 74 20 6c 65 76 65 6c 20 30 7d 0a 09 73 {set level 0}..s
08a0: 65 74 20 6d 79 6c 6f 67 6c 65 76 65 6c 20 24 6c et myloglevel $l
08b0: 65 76 65 6c 0a 09 72 65 74 75 72 6e 0a 20 20 20 evel..return.
08c0: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
08d0: 6f 64 20 76 65 72 62 6f 73 65 20 7b 7d 20 7b 0a od verbose {} {.
08e0: 09 69 6e 63 72 20 6d 79 6c 6f 67 6c 65 76 65 6c .incr myloglevel
08f0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
0900: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6e typemethod n
0910: 6f 70 72 6f 67 72 65 73 73 20 7b 7d 20 7b 0a 09 oprogress {} {..
0920: 73 65 74 20 6d 79 70 72 6f 67 72 65 73 73 20 30 set myprogress 0
0930: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
0940: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 71 typemethod q
0950: 75 69 65 74 20 7b 7d 20 7b 0a 09 69 66 20 7b 24 uiet {} {..if {$
0960: 6d 79 6c 6f 67 6c 65 76 65 6c 20 3c 20 31 7d 20 myloglevel < 1}
0970: 72 65 74 75 72 6e 0a 09 69 6e 63 72 20 6d 79 6c return..incr myl
0980: 6f 67 6c 65 76 65 6c 20 2d 31 0a 09 72 65 74 75 oglevel -1..retu
0990: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
09a0: 51 75 65 72 79 20 74 68 65 20 63 75 72 72 65 6e Query the curren
09b0: 74 6c 79 20 73 65 74 20 76 65 72 62 6f 73 69 74 tly set verbosit
09c0: 79 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 y... typemeth
09d0: 6f 64 20 76 65 72 62 6f 73 69 74 79 3f 20 7b 7d od verbosity? {}
09e0: 20 7b 0a 09 72 65 74 75 72 6e 20 20 24 6d 79 6c {..return $myl
09f0: 6f 67 6c 65 76 65 6c 0a 20 20 20 20 7d 0a 0a 20 oglevel. }..
0a00: 20 20 20 23 20 53 65 74 20 74 68 65 20 6c 6f 67 # Set the log
0a10: 20 63 61 6c 6c 62 61 63 6b 20 68 61 6e 64 6c 69 callback handli
0a20: 6e 67 20 74 68 65 20 61 63 74 75 61 6c 20 6f 75 ng the actual ou
0a30: 74 70 75 74 20 6f 66 20 6d 65 73 73 61 67 65 73 tput of messages
0a40: 20 67 6f 69 6e 67 0a 20 20 20 20 23 20 74 68 72 going. # thr
0a50: 6f 75 67 68 20 74 68 65 20 70 61 63 6b 61 67 65 ough the package
0a60: 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f ... typemetho
0a70: 64 20 63 6f 6d 6d 61 6e 64 20 7b 63 6d 64 70 72 d command {cmdpr
0a80: 65 66 69 78 7d 20 7b 0a 09 76 61 72 69 61 62 6c efix} {..variabl
0a90: 65 20 6d 79 6c 6f 67 63 6d 64 20 24 63 6d 64 70 e mylogcmd $cmdp
0aa0: 72 65 66 69 78 0a 09 72 65 74 75 72 6e 0a 20 20 refix..return.
0ab0: 20 20 7d 0a 0a 20 20 20 20 23 20 52 65 67 69 73 }.. # Regis
0ac0: 74 65 72 20 61 20 73 79 73 74 65 6d 20 6e 61 6d ter a system nam
0ad0: 65 2c 20 74 6f 20 65 6e 61 62 6c 65 20 74 61 62 e, to enable tab
0ae0: 75 6c 61 72 20 66 6f 72 6d 61 74 74 69 6e 67 2e ular formatting.
0af0: 20 54 68 69 73 20 69 73 0a 20 20 20 20 23 20 64 This is. # d
0b00: 6f 6e 65 20 62 79 20 73 65 74 74 69 6e 67 20 75 one by setting u
0b10: 70 20 61 20 66 6f 72 6d 61 74 20 73 70 65 63 69 p a format speci
0b20: 66 69 65 72 20 77 69 74 68 20 61 20 70 72 6f 70 fier with a prop
0b30: 65 72 20 77 69 64 74 68 2e 20 54 68 69 73 0a 20 er width. This.
0b40: 20 20 20 23 20 69 73 20 68 61 6e 64 6c 65 64 20 # is handled
0b50: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f in the generatio
0b60: 6e 20 63 6f 6d 6d 61 6e 64 2c 20 62 65 66 6f 72 n command, befor
0b70: 65 20 74 68 65 20 6f 75 74 70 75 74 20 63 61 6c e the output cal
0b80: 6c 62 61 63 6b 0a 20 20 20 20 23 20 69 73 20 69 lback. # is i
0b90: 6e 76 6f 6b 65 64 2e 0a 0a 20 20 20 20 74 79 70 nvoked... typ
0ba0: 65 6d 65 74 68 6f 64 20 72 65 67 69 73 74 65 72 emethod register
0bb0: 20 7b 6e 61 6d 65 7d 20 7b 0a 09 73 65 74 20 6e {name} {..set n
0bc0: 6c 65 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 len [string leng
0bd0: 74 68 20 24 6e 61 6d 65 5d 0a 09 69 66 20 7b 24 th $name]..if {$
0be0: 6e 6c 65 6e 20 3c 20 24 6d 79 73 79 73 6c 65 6e nlen < $mysyslen
0bf0: 7d 20 72 65 74 75 72 6e 0a 09 73 65 74 20 6d 79 } return..set my
0c00: 73 79 73 6c 65 6e 20 24 6e 6c 65 6e 0a 09 73 65 syslen $nlen..se
0c10: 74 20 6d 79 73 79 73 66 6d 74 20 25 2d 24 7b 6d t mysysfmt %-${m
0c20: 79 73 79 73 6c 65 6e 7d 73 0a 09 72 65 74 75 72 ysyslen}s..retur
0c30: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 n. }.. # #
0c40: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
0c50: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0c60: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 ####. ## Inte
0c70: 72 6e 61 6c 2c 20 73 74 61 74 65 0a 0a 20 20 20 rnal, state..
0c80: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 typevariable my
0c90: 6c 6f 67 6c 65 76 65 6c 20 32 20 20 20 20 20 20 loglevel 2
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
0cb0: 20 23 20 53 6f 6d 65 20 76 65 72 62 6f 73 69 74 # Some verbosit
0cc0: 79 2c 20 6e 6f 74 20 74 6f 6f 20 6d 75 63 68 0a y, not too much.
0cd0: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 typevariable
0ce0: 20 6d 79 6c 6f 67 63 6d 64 20 20 20 3a 3a 76 63 mylogcmd ::vc
0cf0: 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 3a 3a 4f 55 ::tools::log::OU
0d00: 54 20 3b 20 23 20 53 74 61 6e 64 61 72 64 20 6f T ; # Standard o
0d10: 75 74 70 75 74 20 74 6f 20 73 74 64 6f 75 74 2e utput to stdout.
0d20: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c . typevariabl
0d30: 65 20 6d 79 73 79 73 66 6d 74 20 20 20 25 73 20 e mysysfmt %s
0d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0d50: 20 20 20 3b 20 23 20 4e 6f 6e 2d 74 61 62 75 6c ; # Non-tabul
0d60: 61 72 20 66 6f 72 6d 61 74 74 69 6e 67 2e 0a 20 ar formatting..
0d70: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 typevariable
0d80: 6d 79 73 79 73 6c 65 6e 20 20 20 30 20 20 20 20 mysyslen 0
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0da0: 20 3b 20 23 20 44 69 74 74 6f 2e 0a 20 20 20 20 ; # Ditto..
0db0: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 70 typevariable myp
0dc0: 72 6f 67 72 65 73 73 20 31 20 20 20 20 20 20 20 rogress 1
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
0de0: 23 20 50 72 6f 67 72 65 73 73 20 6f 75 74 70 75 # Progress outpu
0df0: 74 20 69 73 20 73 74 61 6e 64 61 72 64 2e 0a 0a t is standard...
0e00: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
0e10: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
0e20: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
0e30: 23 23 20 49 6e 74 65 72 6e 61 6c 2c 20 68 65 6c ## Internal, hel
0e40: 70 65 72 20 6d 65 74 68 6f 64 73 20 28 66 6f 72 per methods (for
0e50: 6d 61 74 74 69 6e 67 2c 20 64 69 73 70 61 74 63 matting, dispatc
0e60: 68 29 0a 0a 20 20 20 20 70 72 6f 63 20 53 79 73 h).. proc Sys
0e70: 74 65 6d 20 7b 73 7d 20 7b 0a 09 3a 3a 76 61 72 tem {s} {..::var
0e80: 69 61 62 6c 65 20 6d 79 73 79 73 66 6d 74 0a 09 iable mysysfmt..
0e90: 72 65 74 75 72 6e 20 5b 66 6f 72 6d 61 74 20 24 return [format $
0ea0: 6d 79 73 79 73 66 6d 74 20 24 73 5d 0a 20 20 20 mysysfmt $s].
0eb0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
0ec0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
0ed0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
0ee0: 20 20 20 20 23 23 20 53 74 61 6e 64 61 72 64 20 ## Standard
0ef0: 6f 75 74 70 75 74 20 63 61 6c 6c 62 61 63 6b 2c output callback,
0f00: 20 6d 6f 64 75 6c 65 20 69 6e 74 65 72 6e 61 6c module internal
0f10: 0a 0a 20 20 20 20 23 20 44 69 73 70 61 74 63 68 .. # Dispatch
0f20: 20 74 6f 20 74 68 65 20 68 61 6e 64 6c 65 72 73 to the handlers
0f30: 20 6f 66 20 74 68 65 20 70 6f 73 73 69 62 6c 65 of the possible
0f40: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 0a 20 20 operations...
0f50: 20 20 70 72 6f 63 20 4f 55 54 20 7b 6f 70 20 61 proc OUT {op a
0f60: 72 67 73 7d 20 7b 0a 09 65 76 61 6c 20 5b 6c 69 rgs} {..eval [li
0f70: 6e 73 65 72 74 20 24 61 72 67 73 20 30 20 3a 3a nsert $args 0 ::
0f80: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 3a 3a vc::tools::log::
0f90: 4f 55 54 2f 24 6f 70 5d 0a 09 72 65 74 75 72 6e OUT/$op]..return
0fa0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 57 72 . }.. # Wr
0fb0: 69 74 65 20 68 61 6e 64 6c 65 72 2e 20 45 61 63 ite handler. Eac
0fc0: 68 20 6d 65 73 73 61 67 65 20 69 73 20 61 20 6c h message is a l
0fd0: 69 6e 65 2e 0a 0a 20 20 20 20 70 72 6f 63 20 4f ine... proc O
0fe0: 55 54 2f 77 72 69 74 65 20 7b 73 79 73 74 65 6d UT/write {system
0ff0: 20 74 65 78 74 7d 20 7b 0a 09 73 65 74 20 6d 20 text} {..set m
1000: 5b 6d 6c 6f 67 5d 0a 09 72 65 67 73 75 62 20 2d [mlog]..regsub -
1010: 61 6c 6c 20 7b 5b 5e 09 5d 7d 20 24 6d 20 7b 20 all {[^.]} $m {
1020: 7d 20 62 0a 09 70 75 74 73 20 22 24 6d 24 73 79 } b..puts "$m$sy
1030: 73 74 65 6d 20 5b 6a 6f 69 6e 20 5b 73 70 6c 69 stem [join [spli
1040: 74 20 24 74 65 78 74 20 5c 6e 5d 20 22 5c 6e 24 t $text \n] "\n$
1050: 62 24 73 79 73 74 65 6d 20 22 5d 22 0a 09 6d 6c b$system "]"..ml
1060: 69 6d 69 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 imit..return.
1070: 20 7d 0a 0a 20 20 20 20 23 20 50 72 6f 67 72 65 }.. # Progre
1080: 73 73 20 68 61 6e 64 6c 65 72 2e 20 55 73 65 73 ss handler. Uses
1090: 20 5c 72 20 74 6f 20 72 65 74 75 72 6e 20 74 6f \r to return to
10a0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f the beginning o
10b0: 66 20 74 68 65 0a 20 20 20 20 23 20 63 75 72 72 f the. # curr
10c0: 65 6e 74 20 6c 69 6e 65 20 77 69 74 68 6f 75 74 ent line without
10d0: 20 61 64 76 61 6e 63 69 6e 67 2e 0a 0a 20 20 20 advancing...
10e0: 20 70 72 6f 63 20 4f 55 54 2f 70 72 6f 67 72 65 proc OUT/progre
10f0: 73 73 20 7b 73 79 73 74 65 6d 20 6e 20 6d 61 78 ss {system n max
1100: 7d 20 7b 0a 09 69 66 20 7b 24 6d 61 78 20 65 71 } {..if {$max eq
1110: 20 7b 7d 7d 20 7b 0a 09 20 20 20 20 70 75 74 73 {}} {.. puts
1120: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 24 73 79 -nonewline "$sy
1130: 73 74 65 6d 20 24 6e 5c 72 22 0a 09 7d 20 65 6c stem $n\r"..} el
1140: 73 65 20 7b 0a 09 20 20 20 20 70 75 74 73 20 2d se {.. puts -
1150: 6e 6f 6e 65 77 6c 69 6e 65 20 22 24 73 79 73 74 nonewline "$syst
1160: 65 6d 20 5b 66 6f 72 6d 61 74 20 25 5b 73 74 72 em [format %[str
1170: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 61 78 5d ing length $max]
1180: 73 20 24 6e 5d 2f 24 6d 61 78 5c 72 22 0a 09 7d s $n]/$max\r"..}
1190: 0a 09 66 6c 75 73 68 20 73 74 64 6f 75 74 0a 09 ..flush stdout..
11a0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
11b0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
11c0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
11d0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
11e0: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a Configuration..
11f0: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 pragma -hasi
1200: 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b 20 nstances no ;
1210: 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 20 # singleton.
1220: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 pragma -hastypei
1230: 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e 6f nfo no ; # no
1240: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 introspection.
1250: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 pragma -hasty
1260: 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 23 pedestroy no ; #
1270: 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 20 20 23 immortal.. #
1280: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
1290: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
12a0: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 ######.}..namesp
12b0: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 74 ace eval ::vc::t
12c0: 6f 6f 6c 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 ools {. names
12d0: 70 61 63 65 20 65 78 70 6f 72 74 20 6c 6f 67 0a pace export log.
12e0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 namespace ev
12f0: 61 6c 20 6c 6f 67 20 7b 0a 09 6e 61 6d 65 73 70 al log {..namesp
1300: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
1310: 3a 74 6f 6f 6c 73 3a 3a 6d 65 6d 3a 3a 6d 6c 6f :tools::mem::mlo
1320: 67 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 g..namespace imp
1330: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
1340: 3a 6d 65 6d 3a 3a 6d 6c 69 6d 69 74 0a 20 20 20 :mem::mlimit.
1350: 20 7d 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d }.}..# --------
1360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13a0: 2d 2d 2d 2d 2d 0a 23 20 52 65 61 64 79 0a 0a 70 -----.# Ready..p
13b0: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 ackage provide v
13c0: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 31 2e c::tools::log 1.
13d0: 30 0a 72 65 74 75 72 6e 0a 0.return.