Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch nettool Excluding Merge-Ins
This is equivalent to a diff from d9d86cd9ff to 35b23abc2e
2014-11-27
| ||
01:09 | fileutil 1.14.9 - Fixed issue with symlink handling of the "find" command. While the original code broke cycles it also broke (i.e. skipped) non-cycle symlinks. The new code breaks only cycles. fileutil::traverse 0.4.4 - Ditto. Updated tests, docs. No ticket associated with this. check-in: e4cc97ecc8 user: aku tags: trunk | |
00:04 | Extended testsuite of fileutil::traverse demonstrating a problem with its symlink handling. While it properly breaks cycles, it can also break non-cycle links if the referenced path is handled before the link. And vice versa, if the link is handled the non-link path is not traversed. The fileutil package's find command is likely affected in the same manner. Opened branch to fix this. check-in: e3bc24a81e user: andreask tags: ak-fix-traverse-symlinks | |
2014-11-25
| ||
14:50 | Create branch for working on modules for JSON Web Token (JWT) support. Leaf check-in: 783e8f3bf8 user: neilmadden tags: nmadden-json-web-token | |
2014-11-20
| ||
19:57 | Closing the nettool branch check-in: 1a20e85930 user: hypnotoad tags: odie | |
19:56 | Merging branch in preparation for closing it Closed-Leaf check-in: 35b23abc2e user: hypnotoad tags: nettool | |
06:06 | Eliminated all external dependencies on nettool. (Or at least restricted those depenedencies to other well defined packages in Tcllib) Adapted the file structure for nettool to play nicer with others. The files of the platform/ file system have been moved to the root of nettool, and given _ delimted file names. Moved cron to it's own module check-in: bae4ea2260 user: hypnotoad tags: odie | |
2014-11-19
| ||
16:23 | Checking in 2 new utilities into the odie module. Adding the codebale module into tcllib as there are a pile of routines we will probably want from there, and while we are de-odie-er-izing code, we might as well get the whole thing. (Checked into the feature branch first so I can have a version that arrives "as imported from odielib"). check-in: d9bb3642b1 user: hypnotoad tags: nettool | |
04:49 | Get lastest from trunk check-in: 24cd9d7b26 user: aku tags: nettool | |
04:29 | Merged pooryorick's original work and branch check-in: d9d86cd9ff user: aku tags: trunk | |
01:09 | Ticket [ba3b0d913c] - Extended configure(.in) to enable specification of the path to the tclsh to use. Thanks to pooryorick for the patch. check-in: 262292fc92 user: andreask tags: trunk | |
2014-11-14
| ||
23:34 | add --with-tclsh to configure, see issue ba3b0d91 Closed-Leaf check-in: e08de35f0a user: pooryorick tags: pyk-withtclsh-ba3b0d91 | |
Changes to configure.
1 2 | #! /bin/sh # Guess values for system-dependent variables and create Makefiles. | | > > > | > > | | | | > | | > > | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | | > > > > > > | > | > > > > > > > > > | > > > > > > | > > > > | > > | > > > > | > | | > > | > > > > > > > > > > > > > > > > > > > > > > | > > > > > > | > > > > > > > > > > > > > > | | > > > > > > > | > > > > > > > > > | > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > > < | | < | | > > > | > > > | | | | > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < | | < | | < < < < < < > | < < < < | | < < < < < < < | > > > > < | | | < | | < | | | > > | > | > | > > | < > | < > < > > < < | | < < < < | < > > > > > | < | | | | | > > > | > | > > > > > > > > > > > > > > > > > > > > > | < < < < < | < < | | < < > > < < < < < < > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 | #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell [email protected] about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="ChangeLog" ac_subst_vars='LTLIBOBJS LIBOBJS VERSION PACKAGE TCLSH_PROG EXEEXT CYGPATH target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE |
︙ | ︙ | |||
296 297 298 299 300 301 302 303 304 305 | x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' | > | > < > | > > > > > > | > | > | > > > | > > | 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 | x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) |
︙ | ︙ | |||
345 346 347 348 349 350 351 | -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; | | | > > > | > > > | | | | > > > > > > > > > > | > > > > | > > > | | | | | | | > | | > > | | 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 | -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ |
︙ | ︙ | |||
397 398 399 400 401 402 403 404 405 406 407 408 409 410 | -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; | > > > > > > | 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 | -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; |
︙ | ︙ | |||
421 422 423 424 425 426 427 428 429 | -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | > > > > > | < | < | 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 | -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; |
︙ | ︙ | |||
492 493 494 495 496 497 498 499 500 501 502 503 504 505 | | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; | > > > > > > > > > > | 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 | | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; |
︙ | ︙ | |||
543 544 545 546 547 548 549 | -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) | | | | | | | > | | > > | | | | < > | > > | > > > > > | | < > | | < | | | | | > | > > > > > > < > | > > > | > < > > | < < < | < < < < | | < > | | > > > > > > > > | | | | | | < | | > > > | > > > | > > > | > > > | | | | < < < | < | > > > > > > > > > > | < < | < | < | | | | | < < | < | 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 | -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. |
︙ | ︙ | |||
731 732 733 734 735 736 737 | Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit | | < < < | | | | | < | | | | | | > > | > | > > > > > < < < < | > < > > | | > > | | | > > > > | | | > > | < | < | < | | > | | | < | < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < | | | | | | | < < | < < | | | | > > | | | > > > | | > | | | > | 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 | Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## |
︙ | ︙ | |||
947 948 949 950 951 952 953 | # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= | < | | | | | < < | | | | < | | < > > > > | > > > > > > > > > > > | | | | | < | | < > > < | | < | > > > | < | | | < | > > > | < | | < | | | | | | | | | | < < < < > > > > | > > | > > > > > > | | > | | > | < | > > | | | | > > > > | | | | | | | | | | < | | | | | | > > > > | | > > > > > > | | | | < < | | > > | | < | < > > > < < < < < < < < < < < < < < < < < < < < < < < < | | | | < < | | < < < < < < < < < < < < < < < | | | | < | < < < | > | > > > > > > > > > > > > > > > > | | | | | | < | | > | > | | | | | | > > > | < < < < < < < < < < < < < < < | | > > > > > > | | | < > | | | | | > > > > > > | < < < < < < < < > > | < > < | > | > | | > | | > | > | | | | | | | > | | > > | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | | > > > > > > | > | > > > > > > > > > | > > > > > > | > > > > | > > | > > > < | < | > | | > > | | > > > > > | > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > > < | | < | | > > > | > > > | | | | > | | < < < < < < < < < < < | | < < < < < < < | > | < < < < < < < | | | < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < > > < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < | | < < < < < < < < < < > > < < | | < < < < | < > > > > > | < | | | | | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > | | | | < < | | | < | | | < < < < < < < < | | < | > | < | | < > < < < < < < < | > | | > | | > | | > > | | | | < > | > | | | > > | > | | < > > > > > | | | | < < < < < < | | | < < < < < < < | | | < < > > | | > > < < | | < | > | < | > > > > > | | | > > > > > > > > > | > > | < | | | < > | | > > > | > > | < | | | | | | > > > | | > > > > > > > > > > > > > > | | > > > > > > > > > > | > > > > | > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | | | < < > | < < < < < < < | | < < < < < < | < > > | < | | | | | | | | | < < < < < < < < < < > > > > | | > | > > > | < < > | | < < | > > | | > > > > | < > > > > > > > > | < > > > > > > > | | > > | | < < < < > | < | > | > | | < > > | > > > > > | > > > | > > > | > | > > > > > | | | | > > > > > > < < > > > > > > | > > > > > > > > > > > | | < | | < < < | > < | | < | | | > > | | < < < < < < < < < < < < < < < < > > | | > > | > > > | < < < < < | | > > | | | > > > > | | | > > | < | < | < | | > | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < | < < < < < < < < < < < < < < < < < < < < | < < > > | > | > | < < | | | | > | < > > > > | > | < > > > > | | < < > > > > > > > > > | < > > > > | | | | > > | | | | | | | > > > > | > > > > > > > | | | | > | > > | | | > | < < | < > > > | > > > > | 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 | # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case "`uname -s`" in *win32* | *WIN32* | *CYGWIN_NT* | *CYGWIN_98* | *CYGWIN_95*) CYGPATH="cygpath -w" ;; *) CYGPATH=echo ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking executable extension based on host type" >&5 $as_echo_n "checking executable extension based on host type... " >&6; } case "`uname -s`" in *win32* | *WIN32* | *CYGWIN_NT* |*CYGWIN_98*|*CYGWIN_95*|*MSYS*) EXEEXT=".exe" ;; *) EXEEXT="" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${EXEEXT}" >&5 $as_echo "${EXEEXT}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 $as_echo_n "checking for tclsh... " >&6; } if test "${ac_cv_path_tclsh+set}" = set; then : $as_echo_n "(cached) " >&6 else search_path=`echo ${exec_prefix}/bin:${prefix}/bin:${TCL_BIN_DIR}:${TCL_BIN_DIR}/../bin:${PATH} | sed -e 's/:/ /g'` for dir in $search_path ; do for j in `ls -r $dir/tclsh[8-9]*${EXEEXT} 2> /dev/null` \ `ls -r $dir/tclsh*${EXEEXT} 2> /dev/null` ; do if test x"$ac_cv_path_tclsh" = x ; then if test -f "$j" ; then ac_cv_path_tclsh=$j break fi fi done done fi if test -f "$ac_cv_path_tclsh" ; then TCLSH_PROG=$ac_cv_path_tclsh { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TCLSH_PROG" >&5 $as_echo "$TCLSH_PROG" >&6; } else as_fn_error $? "No tclsh found in PATH: $search_path" "$LINENO" 5 fi # ### ######### ########################### SAK=`$CYGPATH ${srcdir}/sak.tcl` PACKAGE=`$TCLSH_PROG "${SAK}" name` MAJOR_VERSION=`$TCLSH_PROG "${SAK}" major` MINOR_VERSION=`$TCLSH_PROG "${SAK}" minor` PATCHLEVEL="" VERSION=${MAJOR_VERSION}.${MINOR_VERSION}${PATCHLEVEL} NODOT_VERSION=${MAJOR_VERSION}${MINOR_VERSION} # ### ######### ########################### ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi |
Changes to configure.in.
1 2 3 4 5 6 7 8 9 10 11 12 | AC_INIT(ChangeLog) case "`uname -s`" in *win32* | *WIN32* | *CYGWIN_NT* | *CYGWIN_98* | *CYGWIN_95*) CYGPATH="cygpath -w" ;; *) CYGPATH=echo ;; esac AC_SUBST(CYGPATH) | < < < < < < < < < < < < < < < | < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | AC_INIT(ChangeLog) case "`uname -s`" in *win32* | *WIN32* | *CYGWIN_NT* | *CYGWIN_98* | *CYGWIN_95*) CYGPATH="cygpath -w" ;; *) CYGPATH=echo ;; esac AC_SUBST(CYGPATH) SC_SIMPLE_EXEEXT SC_PROG_TCLSH # ### ######### ########################### SAK=`$CYGPATH ${srcdir}/sak.tcl` PACKAGE=`$TCLSH_PROG "${SAK}" name` MAJOR_VERSION=`$TCLSH_PROG "${SAK}" major` |
︙ | ︙ |
Changes to embedded/man/files/modules/rest/rest.n.
︙ | ︙ | |||
520 521 522 523 524 525 526 | twitter yahoo boss yahoo weather google calendar facebook del\&.icio\&.us read the file or source it and use \fBdescribe\fR for more information\&. also see the | | < | 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 | twitter yahoo boss yahoo weather google calendar facebook del\&.icio\&.us read the file or source it and use \fBdescribe\fR for more information\&. also see the developers documentation on the respective sites\&..SH "TLS SECURITY CONSIDERATIONS" This package uses the \fBTLS\fR package to handle the security for \fBhttps\fR urls and other socket connections\&. .PP Policy decisions like the set of protocols to support and what ciphers to use are not the responsibility of \fBTLS\fR, nor of this package itself however\&. Such decisions are the responsibility of whichever application is |
︙ | ︙ |
Added modules/codebale/autobuild.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 | ### # Utilities for automating the build process of C extensions ### ::namespace eval ::cthulhu {} ### # topic: 9c0c2d73c1afa8ef83a739c5d01309d0 # title: Signal for a C header to be read with mkhdr ### proc ::cthulhu::add_cheader {filename {trace 0}} { set hfilename [fileutil::relative $::project(src) $filename] if {$hfilename in $::project(headers_verbatim)} { return } if {$hfilename ni $::project(headers)} { lappend ::project(headers) $hfilename #::cthulhu::read_csourcefile $file } } ### # topic: c52ea7e1ff44f11f960d99a55e4ab998 # title: Add the contents of a header file verbatim to the internal headers and public headers ### proc ::cthulhu::add_cheader_verbatim {filename {trace 0}} { set hfilename [fileutil::relative $::project(src) $filename] ldelete ::project(headers) $hfilename if {$hfilename ni $::project(headers_verbatim)} { lappend ::project(headers_verbatim) $hfilename #::cthulhu::read_csourcefile $file } } ### # topic: 91e4d7da8dd82d78af41561360deab10 # title: Signal for a C source to be read with mkhdr ### proc ::cthulhu::add_csource {filename {trace 0}} { set cfilename [fileutil::relative $::project(src) $filename] if {$cfilename ni $::project(sources)} { lappend ::project(sources) $cfilename #::cthulhu::read_csourcefile $file } } ### # topic: f11da5f705442524715e8f8fe9af5276 # title: Add a path containing C code ### proc ::cthulhu::add_directory {here config} { set cthulhu-ignore-hfiles {} set cthulhu-ignore-cfiles {} set build-ignore-cfiles {} set cthulhu-trace-cfiles {} dict with config {} ### # Execute any .tcl scripts in the generic directory ### foreach file [lsort -dictionary [glob -nocomplain [file join $here *.tcl]]] { if {[file tail $file] eq "pkgIndex.tcl"} continue cd $here uplevel #0 [list source $file] } ### # Build a list of all public header files that # need to be amalgamated into the publicly exported # version ### foreach file [lsort -dictionary [glob -nocomplain [file join $here *.h]]] { if { $here ni $::project(include_paths) } { lappend ::project(include_paths) $here } set fname [file tail $file] if {${cthulhu-ignore-hfiles} eq "*"} continue if { $fname in ${cthulhu-ignore-hfiles} } continue if {[string match *_cases.h $fname]} continue add_cheader $file } foreach file [lsort -dictionary [glob -nocomplain [file join $here *.c]]] { if {[file tail $file] in ${build-ignore-cfiles} } continue add_csource $file } } ### # topic: 1d3a911fd58337df92205759a6d092c3 # title: Add a source file in Tcl that produces a C file ### proc ::cthulhu::add_dynamic {csource tclscript} { set cfilename [fileutil::relative $::project(src) $csource] set tclfilename [fileutil::relative $::project(src) $tclscript] dict set ::thesources $cfilename tclscript $tclfilename #dict set ::thesources $csource tclscript $tclscript } ### # topic: d10665e8da4dd0781bb0a9ced5486e40 # title: Add a pure-tcl library ### proc ::cthulhu::add_library {here config} { set cthulhu-ignore-tclfiles {} dict with config {} foreach file [lsort -dictionary [glob $here/*.tcl]] { if {[file tail $file] in ${cthulhu-ignore-tclfiles}} continue set libfilename [fileutil::relative $::project(src) $libfilename] } } ### # topic: ccfe65b26705afc498e08d3004031066 # title: Detect where we need to produce a _cases.h file to automate a C source ### proc ::cthulhu::detect_cases filename { set cfilename [fileutil::relative $::project(src) $filename] set cases [codebale::detect_cases $filename] if {![llength $cases]} return set dirname [file dirname $cfilename] foreach case $cases { lappend result [file join $dirname $case] } dict set ::thesources $cfilename cases $result } ### # topic: 41d95037e5a1cab76939150efdef8939 # title: Declare an end to modifications of ::project # description: # This directive is placed after the last set ::project(X) Y # but before the first ::cthulhu::add_* ### proc ::cthulhu::init {} { set ::project(strlen) [string length $::project(path)/] set ::project(cases) {} set ::project(sources) {} set ::project(headers) {} set ::project(headers_verbatim) {} add_cheader_verbatim [file join $::odie(odie_src_dir) scripts cthulhu.h] } ### # topic: 17c9931c3ec5ba115efafaaaa3cf61ed ### proc ::cthulhu::mk_lib_init.c outfile { global project cout set cout [open $outfile w] fconfigure $cout -translation crlf puts $cout $::project(standard_header) puts $cout "#include \"$::project(h_file_int)\"" puts $cout " /* ** Provide a dummy Tcl_InitStubs if we are using this as a static ** library. */ #ifndef USE_TCL_STUBS # undef Tcl_InitStubs # define Tcl_InitStubs(a,b,c) TCL_VERSION #endif extern int DLLEXPORT ${project(init_funct)}( Tcl_Interp *interp ) \{ Tcl_Namespace *modPtr\; " puts $cout { /* Initialise the stubs tables. */ #ifdef USE_TCL_STUBS if ( !Tcl_InitStubs(interp, "8.3", 0) ) { return TCL_ERROR; } #endif } foreach module $::project(modules) { puts $cout " if(${module}(interp)) return TCL_ERROR\;" } foreach {nspace cmds} [lsort -stride 2 -dictionary [array get namespace_commands]] { puts $cout " modPtr=Tcl_FindNamespace(interp,\"$nspace\",NULL,TCL_NAMESPACE_ONLY)\; if(!modPtr) { modPtr = Tcl_CreateNamespace(interp, \"$nspace\", NULL, NULL); } " foreach {command cfunct} [lsort -stride 2 -dictionary $cmds] { puts $cout " Tcl_CreateObjCommand(interp,\"::${nspace}::${command}\",(Tcl_ObjCmdProc *)$cfunct,NULL,NULL);" } puts $cout { Tcl_CreateEnsemble(interp, modPtr->fullName, modPtr, TCL_ENSEMBLE_PREFIX); Tcl_Export(interp, modPtr, "[a-z]*", 1); } } puts $cout { /* Register the package. */} puts $cout " if (Tcl_PkgProvide(interp, \"${project(pkgname)}\", \"${project(pkgvers)}\")) return TCL_ERROR\;" puts $cout " return TCL_OK\;\n\}" close $cout } ### # topic: 06bca7e2bddebdca69537fc3a9a0735f ### proc ::cthulhu::mk_sources outfile { global project set fout [open $outfile w] fconfigure $fout -translation crlf set pkg_sources {} set pkg_objects {} foreach {csource} $::project(sources) { set ofile build/[string map {/ _ .c .o .. {}} $csource] lappend pkg_sources $csource lappend pkg_objects $ofile dict set ::thesources $csource ofile $ofile } set ILINE "MYINCLUDES=" foreach ipath $::project(include_paths) { append ILINE " -I\"$ipath\"" } puts $fout $ILINE puts $fout "PKG_OBJECTS=[lsort -dictionary $pkg_objects]" puts $fout "PKG_SOURCES=[lsort -dictionary $pkg_sources]\n" #puts $fout "build/$project(c_file):" #puts $fout "\t\${TCLSH} scripts/cthulhu.tcl\n" foreach {csource cinfo} $::thesources { if {[dict exists $cinfo ofile]} { set ofile [dict get $cinfo ofile] } else { set ofile {} } set hfiles {} if {[dict exists $cinfo cases]} { foreach hfile [dict get $cinfo cases] { puts $fout "$hfile:" puts $fout "\t\$(TCLSH) scripts/mktclopts.tcl $csource\n" lappend hfiles $hfile } } if {[dict exists $cinfo tclscript]} { puts $fout "$csource:" puts $fout "\t\$(TCLSH) [dict get $cinfo tclscript] $csource\n" if {$ofile != {}} { puts $fout "$ofile: $csource $hfiles" puts $fout "\t\$(COMPILE) \$(MYINCLUDES) -c $csource -o $ofile\n" } } else { if {$ofile != {}} { puts $fout "$ofile: $hfiles" puts $fout "\t\$(COMPILE) \$(MYINCLUDES) -c $csource -o $ofile\n" } } } close $fout } ### # topic: f7eec240dada25d73c1f68a877fa40be # title: Produce the PROJECT.decls file # description: Tools for automating the process of building stubs libraries ### proc ::cthulhu::mk_stub_decls {pkgname mkhdrfile path} { set outfile [file join $path/$pkgname.decls] ### # Build the decls file ### set fout [open $outfile w] puts $fout [subst {### # $outfile # # This file was generated by [info script] ### library $pkgname interface $pkgname }] set fin [open $mkhdrfile r] set thisline {} set functcount 0 while {[gets $fin line]>=0} { append thisline \n $line if {![info complete $thisline]} continue set readline $thisline set thisline {} set type [lindex $readline 1] if { $type ne "f" } continue set infodict [lindex $readline end] if {![dict exists $infodict definition]} continue set def [dict get $infodict definition] set def [string trim $def] set def [string trimright $def \;] if {![string match "*STUB_EXPORT*" $def]} continue puts $fout [list declare [incr functcount] $def] } close $fin close $fout ### # Build [package]Decls.h ### set hout [open [file join $path ${pkgname}Decls.h] w] close $hout set cout [open [file join $path ${pkgname}StubInit.c] w] puts $cout [string map [list %pkgname% $pkgname %PkgName% [string totitle $pkgname]] { #ifndef USE_TCL_STUBS #define USE_TCL_STUBS #endif #undef USE_TCL_STUB_PROCS #include "tcl.h" #include "%pkgname%.h" /* ** Ensure that Tdom_InitStubs is built as an exported symbol. The other stub ** functions should be built as non-exported symbols. */ #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLEXPORT %PkgName%Stubs *%pkgname%StubsPtr; /* **---------------------------------------------------------------------- ** ** %PkgName%_InitStubs -- ** ** Checks that the correct version of %PkgName% is loaded and that it ** supports stubs. It then initialises the stub table pointers. ** ** Results: ** The actual version of %PkgName% that satisfies the request, or ** NULL to indicate that an error occurred. ** ** Side effects: ** Sets the stub table pointers. ** **---------------------------------------------------------------------- */ char * %PkgName%_InitStubs (Tcl_Interp *interp, char *version, int exact) { char *actualVersion; actualVersion = Tcl_PkgRequireEx(interp, "%pkgname%", version, exact, (ClientData *) &%pkgname%StubsPtr); if (!actualVersion) { return NULL; } if (!%pkgname%StubsPtr) { Tcl_SetResult(interp, "This implementation of %PkgName% does not support stubs", TCL_STATIC); return NULL; } return actualVersion; } }] close $cout } ### # topic: ba1d2c7e8eab96029e434d54f917ef5a ### proc ::cthulhu::mkhdr_index {hout docfileout} { global project set scanlist {} foreach file $::project(headers) { lappend scanlist [file join $::project(src) $file] } foreach file $::project(sources) { lappend scanlist [file join $::project(src) $file] } ldelete scanlist $::project(src)/generic/$::project(h_file_int) ldelete scanlist $::project(src)/generic/$::project(c_file) set fout [open $hout w] puts $fout "/* ** DO NOT EDIT THIS FILE ** It is automagically generated by scripts/cthulhu.tcl */" fconfigure $fout -translation crlf foreach file $::project(headers_verbatim) { puts $fout "/* Verbatim headers */" set fullname [file join $::project(src) $file] set type [file type $fullname] if {$type ne "file"} continue puts $fout "/*\n *$file \n*/" set fin [open $fullname r] puts $fout [read $fin] close $fin } puts $fout "/* FUNCTION DECLARATIONS */" ### # Do get around platform line breaks, we output to a tmp file # and concat in Tcl ### set crscanlist {} foreach file $scanlist { set crfile $file.cr[file extension $file] set rawfin [open $file r] set rawfout [open $crfile w] fconfigure $rawfout -translation lf puts $rawfout [read $rawfin] close $rawfout close $rawfin lappend crscanlist $crfile } exec $::odie(mkhdr) -h -- {*}$crscanlist > $hout.cr set rawfin [open $hout.cr r] puts $fout [read $rawfin] close $rawfin file delete $hout.cr close $fout exec $::odie(mkhdr) -doc -- {*}$scanlist > $docfileout foreach file $crscanlist { file delete $file } foreach {prefix cases} $::project(cases) { ::codebale::cases_generate $prefix $cases } set fin [open $hout r] while {[gets $fin line]>=0} { if {[regexp TCL_MODULE $line]} { foreach regexp { {(.*) ([a-zA-Z_][a-zA-Z0-9_]*) *\((.*)\)} {(.*) (\x2a[a-zA-Z_][a-zA-Z0-9_]*) *\((.*)\)} } { if {[regexp $regexp $line all keywords funcname arglist]} { lappend ::project(modules) $funcname break } } } } } ### # topic: 5b6897b1d60450332ff9f389b5ca952d ### proc ::doexec args { exec {*}$args >&@ stdout } array set ::project { include_paths {} sources {} tcl_sources {} modules {} } if {[info command ::ldelete] eq {}} { proc ::ldelete {varname args} { upvar 1 $varname var if ![info exists var] { return } foreach item [lsort -unique $args] { while {[set i [lsearch $var $item]]>=0} { set var [lreplace $var $i $i] } } return $var } } |
Added modules/codebale/autodoc.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 | package provide codebale::autodoc 0.1 ::namespace eval ::codebale {} ::namespace eval ::codebale::doctools {} ### # topic: 07388c9cf3874e1c0ce049e07be8a5b7 ### proc ::codebale::autodoc {info args} { ### # This script parses through TCL files # and systematically adds template entries # for the auto-documenter, and captures # any information filled out for the # auto-documenter to ../lib/classes.rc ### package require md5 package require sqlite3 package require tao-sqlite if {[dict exists $info local-root:]} { set base [dict get $info local-root:] } elseif {[dict exists $info base]} { set base [dict get $info base] } else { #set base [file normalize [file join [file dirname [info script]] ..]] set base [pwd] } if {![dict exists $info rewrite]} { dict set info rewrite 0 } if {![dict exists $info repo]} { dict set info repo [file tail $base] } ### # Build a database file ### set docfile [file join $base helpdoc.sqlite] set exists [file exists $docfile] tao.yggdrasil create ::helpdoc $docfile if {!$exists} { set rcfile [file join $base helpdoc.rc] if {[file exists $rcfile]} { source $rcfile #helpdoc eval {update file set hash=NULL} } } set pathlist {} if {[llength $args]} { #helpdoc eval {update file set hash=NULL} foreach path $args { lappend pathlist [file join $base $path] } } else { foreach path {src lib modules} { lappend pathlist [file join $base $path] } } ::codebale::parse_path $info $base {*}$pathlist ::codebale::meta_output $base/helpdoc.rc } ### # topic: 8dec84ee6bf00a39a72d93510d94354d ### proc ::codebale::doctools::cmdout {cmdname info} { set buffer "\[call \[method $cmdname\]" if {[dict exists $info darglist]} { puts [list darglist [dict get $info darglist]] append buffer " [dict get $info darglist]" \n } elseif {[dict exists $info arglist]} { foreach arg [dict get $info arglist] { if {[string index $arg 0] eq "-"} { append buffer " \[opt \[option \"$arg\"\]\]" } elseif {[string index $arg 0] eq "?"} { append buffer " \[opt \[arg \"[string trim $arg ?]\"\]\]" } else { append buffer " \[arg \"$arg\"\]" } } } append buffer "\]\n" return $buffer } ### # topic: 537b338abcd70051ec54a930ad13e599 ### proc ::codebale::doctools::maketoc base { set lastmodule {} set idx [string length $::odielib(srcroot)] helpdoc eval { drop table if exists contents; CREATE TABLE contents ( filename primary key, module string, category string, label string unique, title text ); } cd $base foreach file [lsort -dictionary [::fileutil::find [file join $::odielib(srcroot) doc doctool]]] { if {[file extension $file] != ".man"} continue set module [file tail [file dirname $file]] set fname [string range $file $idx+1 end] set label [file rootname [file tail $file]] set info [lindex [manpage_meta $module $fname] 1] set category {} puts $fname puts $info puts {} dict with info {} puts [list $fname $module $category $fid $desc] helpdoc eval { insert into contents(filename,module,category,label,title) VALUES (:fname,:module,:category,:fid,:desc);} } set fout [open [file join $base toc.txt] w] puts $fout {[toc_begin {Table Of Contents} {}]} puts $fout {[division_start Modules]} puts $fout {[division_start null]} set priormodule {} set priorcat {} ::helpdoc eval {select * from contents order by module,title} { if { $priormodule != $module } { puts $fout {[division_end]} puts $fout "\[division_start $module\]" } puts $fout "\[[list item $filename $label $title]\]" set priormodule $module } puts $fout {[division_end]} puts $fout {[division_end]} puts $fout {[toc_end]} close $fout set fout [open [file join $base toc_class.txt] w] puts $fout {[toc_begin {Table Of Contents} {}]} puts $fout {[division_start Modules]} puts $fout {[division_start null]} set priormodule {} set priorcat {} ::helpdoc eval {select * from contents where category='Class' order by title} { if { $priormodule != $module } { puts $fout {[division_end]} puts $fout "\[division_start $module\]" } puts $fout "\[[list item $filename $label $title]\]" set priormodule $module } puts $fout {[division_end]} puts $fout {[division_end]} puts $fout {[toc_end]} close $fout set fout [open [file join $base toc_category.txt] w] puts $fout {[toc_begin {Table Of Contents} {}]} puts $fout {[division_start Categories]} puts $fout {[division_start null]} set priormodule {} set pcategory {} ::helpdoc eval {select * from contents order by category,title} { if { $pcategory != $category } { puts $fout {[division_end]} puts $fout "\[division_start $category\]" } puts $fout "\[[list item $filename $label $title]\]" set pcategory $module } puts $fout {[division_end]} puts $fout {[division_end]} puts $fout {[toc_end]} close $fout } ### # topic: 881574a52dee232f2f04231808d4c152 ### proc ::codebale::doctools::manpage_meta {module file} { ::doctools::new dtmeta \ -format list \ -module $module \ -file $file set data [dtmeta format [read_in $file]] dtmeta destroy return $data } ### # topic: 47db648e32d9bdbaec90e6d3f597b61b ### proc ::codebale::doctools::mkclassfiles {module mpath docpath} { set found 0 ::helpdoc eval {select entryid,class,name from entry where class='class' and entryid in (select entryid from module_index where module=:module) and parent is null or parent='' order by name} { set fname $docpath/$entryid.man set fout [open $fname w] puts $fout [string map [list %module% $module %class% $name %uuid% $entryid] { [comment {-*- Class %class% uuid %uuid% -*-}] [manpage_begin %class% n 9.1] [keywords %module%] [keywords %class%] [keywords odielib] [category Class] [copyright {2000-2014 Sean Woods <[email protected]>}] [titledesc {Class %class%}] [description] }] set classsname ::$name set alist {} ::tao::db eval {select ancestor from class_ancestor where class=:classsname order by seq} { lappend alist "[string trimleft $ancestor :]" } puts $fout "Ancestors: [join $alist ", "]" set info [::helpdoc eval {select field,value from property where entryid=:entryid}] foreach field {title description} { if {[dict exists $info $field]} { puts $fout [string map {<p> [para]} [dict get $info $field]] puts $fout "\[para\]" } } #puts " $class $name - $entryid" if {[helpdoc exists {select entryid as childid,class as childclass,name as childname from entry where parent=:entryid and class='class_method'}]} { puts $fout {[subsection {Class Methods}] Methods available to the class object, as well as objects of the class. [list_begin definitions] } ::helpdoc eval {select entryid as childid,class as childclass,name as childname from entry where parent=:entryid and class='class_method'} { set info [::helpdoc eval {select field,value from property where entryid=:childid}] puts $fout [cmdout $childname $info] foreach field {title description} { if {[dict exists $info $field]} { puts $fout [string map {<p> [para]} [dict get $info $field]] puts $fout "\[para\]" } } } puts $fout {[list_end]} } puts $fout {[subsection Methods] [list_begin definitions]} #puts " $class $name - $entryid" ::helpdoc eval {select entryid as childid,class as childclass,name as childname from entry where parent=:entryid} { set info [::helpdoc eval {select field,value from property where entryid=:childid}] puts $fout [cmdout $childname $info] foreach field {title description} { if {[dict exists $info $field]} { puts $fout [string map {<p> [para]} [dict get $info $field]] puts $fout "\[para\]" } } } puts $fout {[list_end]} set buffer { [section "REFERENCES"] [section AUTHORS] Sean Woods [vset CATEGORY %module%] } append buffer [::codebale::doctools::read_in $::odielib(srcroot)/scripts/feedback.inc] append buffer { [manpage_end] } puts $fout [string map [list %module% $module] $buffer] close $fout incr found } } ### # topic: 85303670f7293fadcd8da5e9545ed119 # description: Generate automated help documentation from comment scraping ### proc ::codebale::doctools::mkprocfiles {module mpath docpath} { set procfile $docpath/${module}_procs.man set fout [open $procfile w] puts $fout [string map [list %module% $module] { [comment {-*- %module%_procs -*-}] [manpage_begin %module%_procs n 9.1] [keywords %module%] [keywords odielib] [copyright {2000-2014 Sean Woods <[email protected]>}] [moddesc {Module %module% procs}] [titledesc {Module %module% procs}] [category Procs] [description] [section COMMANDS] [list_begin definitions] }] set found 0 ::helpdoc eval {select entryid,class,name from entry where class='proc' and entryid in (select entryid from module_index where module=:module) and parent is null or parent='' order by name} { set info [::helpdoc eval {select field,value from property where entryid=:entryid}] puts $fout [cmdout $name $info] foreach field {title description} { if {[dict exists $info $field]} { puts $fout [string map {<p> [para]} [dict get $info $field]] puts $fout "\[para\]" } } incr found } puts $fout {[list_end]} set buffer { [section "REFERENCES"] [section AUTHORS] Sean Woods [vset CATEGORY %module%] } append buffer [::codebale::doctools::read_in $::odielib(srcroot)/scripts/feedback.inc] append buffer { [manpage_end] } puts $fout [string map [list %module% $module] $buffer] close $fout if {!$found} { file delete $procfile } } ### # topic: f6b4ff0b701cde0d8f5c14e80c9016b1 # description: Generate human-edited documentation ### proc ::codebale::doctools::path {fmt ext module mpath} { set fl [glob -nocomplain [file join $mpath *.man]] if {[llength $fl] == 0} { return } ::doctools::new dt \ -format $fmt \ -module $module foreach f $fl { set target [file join $::odielib(srcroot) doc $fmt $module \ [file rootname [file tail $f]].$ext] if {[file exists $target] && [file mtime $target] > [file mtime $f]} { continue } dt configure -file $f #dt configure -file $f set fail [catch { set data [dt format [::codebale::doctools::read_in $f]] } msg] set warnings [dt warnings] if {[llength $warnings] > 0} { puts stderr [join $warnings \n] } if {$fail} { puts stderr $msg continue } write_out $target $data } dt destroy } ### # topic: 6c3e4328a95c435c46e41a462ee10525 ### proc ::codebale::doctools::read_in f {return [read [set if [open $f r]]][close $if]} ### # topic: beae9f668725187788972d2dd0915ccd ### proc ::codebale::doctools::write_out {f text} { catch {file delete -force $f} puts -nonewline [set of [open $f w]] $text close $of } ### # topic: a019728317a414badf7b1ec955d4014e ### proc ::codebale::doctools::write_toc {fmt ext tocfile docroot} { ::doctools::toc::new dtoc \ -format $fmt \ -module $module foreach f $fl { set target [file join $::odielib(srcroot) doc $fmt $module \ [file rootname [file tail $f]].$ext] if {[file exists $target] && [file mtime $target] > [file mtime $f]} { continue } dt configure -file $f #dt configure -file $f set fail [catch { set data [dt format [read_in $f]] } msg] set warnings [dt warnings] if {[llength $warnings] > 0} { puts stderr [join $warnings \n] } if {$fail} { puts stderr $msg continue } write_out $target $data } dt destroy } ### # topic: bc003494fd515f8eba72b49e58ada5e0 # title: Create an html manpage filesystem for a repository ### proc ::codebale::mkdoc_embedded_html {base modules docpath args} { package require cmdline package require fileutil package require textutil::repeat package require doctools package require dtplite package require doctools package require doctools::toc set repo [file tail $base] set info [list \ base $base \ rewrite 0 \ repo $repo ] ::codebale::autodoc $info modules ### # Index entries by module ### ::helpdoc eval { drop table if exists module_index; create temporary table module_index ( module text, entryid text, unique (module,entryid) on conflict ignore ); } foreach module $modules { set mpat modules/$module/% ::helpdoc eval { insert into module_index (module,entryid) select :module,entryid from property where field='filename' and value like :mpat } set mpath [file join $::odielib(srcroot) modules $module] file mkdir $docpath ::codebale::doctools::mkprocfiles $module $mpath $docpath ::codebale::doctools::mkclassfiles $module $mpath $docpath } cd $base set map { .man .html modules/ tcllib/files/modules/ apps/ tcllib/files/apps/ } puts "Generating HTML... Pass 1, draft..." set baseconfig {} set config $baseconfig lappend config -exclude {*.vfs} lappend config -exclude {*/doctools/tests/*} lappend config -exclude {*/support/*} #lappend config -toc $toc #lappend config -post+toc Categories $toc_cats #lappend config -post+toc Classes $toc_class #lappend config -post+toc Modules $mods #lappend config -post+toc Applications $apps lappend config -merge lappend config {*}$args lappend config html . puts $config dtplite::do $config puts "Generating HTML... Pass 2, resolving cross-references..." dtplite::do $config } |
Added modules/codebale/buildtools.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 | set col 0 ::namespace eval ::codebale {} ### # topic: e1d75c45e58cc525a0a70ce6f767717c ### proc ::codebale::_isdirectory name { return [file isdirectory $name] } ### # topic: d0663852b31759ce78f33cbc63379d84 ### proc ::codebale::_istcl name { return [string match *.tcl $name] } ### # topic: ea4ac0a84ae990dafee965b995f48e63 ### proc ::codebale::_istm name { return [string match *.tm $name] } ### # topic: ec0fd469c986351ea0d5a287d6f040d8 ### proc ::codebale::cases_finalize f { global col if {$col>0} {puts $f {}} set col 0 } ### # topic: 78728b1f05577d4bc1276e7294ff2cc7 ### proc ::codebale::cases_generate {prefix cases} { global col set col 0 set f [open [file join $::project(path) build [string tolower ${prefix}_cases].h] w] fconfigure $f -translation crlf puts $f $::project(standard_header) puts $f " const static char *${prefix}_strs\[\] = \173" set lx [lsort -dictionary $cases] foreach item $lx { cases_put $f \"[string tolower $item]\", } cases_put $f 0 cases_finalize $f puts $f " \175;" puts $f " enum ${prefix}_enum \173" foreach name $lx { regsub -all {@} $name {} name cases_put $f ${prefix}_[string toupper $name], } cases_finalize $f puts $f " \175;" puts $f "\ int index; if( objc<2 ){ Tcl_WrongNumArgs(interp, 1, objv, \"METHOD ?ARG ...?\"); return TCL_ERROR; } if( Tcl_GetIndexFromObj(interp, objv\[1\], ${prefix}_strs,\ \"option\", 0, &index)){ return TCL_ERROR; } switch( (enum ${prefix}_enum)index )" close $f } ### # topic: 545596e62faedfeda638c8bb703882b1 ### proc ::codebale::cases_put {f x} { global col if {$col==0} {puts -nonewline $f " "} if {$col<2} { puts -nonewline $f [format " %-21s" $x] incr col } else { puts $f $x set col 0 } } ### # topic: 9dd91e4b98b001260e30671883da494b # description: Generate function declarations ### proc ::codebale::headers_csourcefile file { ### # Skip huge files ### if {[file size $file] > 500000} {return {}} set fin [open $file r] set dat [read $fin] close $fin set result [digest_csource $dat] set functions {} if [catch { foreach {funcname info} [lsort -dictionary -stride 2 [dict getnull $result function]] { dict with info { if { "static" in $keywords } continue append functions "$keywords $funcname\([join $arglist ", "]\)\x3b" \n } } } err] { puts "ERROR Parsing $file: $err" return "/* ** $file ** Process cancelled because of errors ** $err ** Line number: $::readinglinenumber ** Line: $::readingline */ " } return $functions } ### # topic: c0304a049be6f31206a02d15813720ce ### proc ::codebale::meta_output outfile { set fout [open $outfile w] puts "SAVING TO $outfile" #puts $fout "array set filemd5 \x7b" #array set temp [array get ::filemd5] #foreach {file md5} [lsort -dictionary [array names temp]] { # set md5 $temp($file) # puts $fout " [list $file $md5]" #} #array unset temp #puts $fout "\x7d" puts $fout "helpdoc eval {begin transaction}" helpdoc eval { select handle,localpath from repository } { puts $fout [list ::helpdoc repository_restore $handle [list localpath $localpath]] } helpdoc eval { select hash,fileid from file } { puts $fout [helpdoc file_serialize $fileid] } puts $fout [helpdoc node_serialize 0] helpdoc eval { select entryid from entry where class='section' order by name } { puts $fout [helpdoc node_serialize $entryid] } helpdoc eval { select entryid from entry where class!='section' order by parent,class,name } { puts $fout [helpdoc node_serialize $entryid] } puts $fout "helpdoc eval {commit}" close $fout } ### # topic: cd6e815c2e68b751656a4c9bbe8918dd # description: Filters extranous fields from meta data ### proc ::codebale::meta_scrub {aliases info} { foreach {c alist} $aliases { foreach a $alist { set canonical($a) $c } } set outfo {} foreach {field val} $info { if {[info exists canonical($field)]} { set cname $canonical($field) } else { set cname $field } if {$cname eq {}} continue if {[string length [string trim $val]]} { dict set outfo $cname $val } } return $outfo } ### # topic: 51380132b6f872ed01830e34431931d4 ### proc ::codebale::pkg_mkIndex base { set stack {} if {[file exists [file join $base pkgIndex.tcl]]} { return #file delete [file join $base pkgIndex.tcl] } set fout [open [file join $base pkgIndex.tcl.new] w] fconfigure $fout -translation crlf set result [::codebale::sniffPath $base stack] puts $fout {# Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. } while {[llength $stack]} { set stackpath [lindex $stack 0] set stack [lrange $stack 1 end] foreach {type file} [::codebale::sniffPath $stackpath stack] { lappend result $type $file } } set i [string length $base] foreach {type file} $result { switch $type { module { set fname [file rootname [file tail $file]] set package [lindex [split $fname -] 0] set version [lindex [split $fname -] 1] set dir [string trimleft [string range [file dirname $file] $i end] /] puts $fout "package ifneeded $package $version \[list source \[file join \$dir $dir [file tail $file]\]\]" #::codebale::read_tclsourcefile $file } source { if { $file == "$base/pkgIndex.tcl" } continue if { $file == "$base/packages.tcl" } continue if { $file == "$base/main.tcl" } continue if { [file tail $file] == "version_info.tcl" } continue set fin [open $file r] set dat [read $fin] close $fin if {[regexp "package provide" $dat]} { set fname [file rootname [file tail $file]] set dir [string trimleft [string range [file dirname $file] $i end] /] foreach line [split $dat \n] { set line [string trim $line] if { [string range $line 0 14] != "package provide" } continue set package [lindex $line 2] set version [lindex $line 3] if { $dir eq {} } { puts $fout "package ifneeded $package $version \[list source \[file join \$dir [file tail $file]\]\]" } else { puts $fout "package ifneeded $package $version \[list source \[file join \$dir $dir [file tail $file]\]\]" } break } } #::codebale::read_tclsourcefile $file } } } close $fout file rename -force [file join $base pkgIndex.tcl.new] [file join $base pkgIndex.tcl] } ### # topic: 924caf1f68529d8dbc329b85e391a1c1 ### proc ::codebale::pkgindex_manifest base { set stack {} set output {} set base [file normalize $base] set i [string length $base] foreach {file} [fileutil::find $base _istm] { set file [file normalize $file] set fname [file rootname [file tail $file]] ### # Assume the package is correct in the filename ### set package [lindex [split $fname -] 0] set version [lindex [split $fname -] 1] set path [string trimleft [string range [file dirname $file] $i end] /] ### # Read the file, and override assumptions as needed ### set fin [open $file r] set dat [read $fin] close $fin foreach line [split $dat \n] { set line [string trim $line] if { [string range $line 0 9] != "# Package " } continue set package [lindex $line 2] set version [lindex $line 3] break } lappend output $package $version } foreach {file} [fileutil::find $base _istcl] { set file [file normalize $file] set fin [open $file r] set dat [read $fin] close $fin if {![regexp "package provide" $dat]} continue set fname [file rootname [file tail $file]] set dir [string trimleft [string range [file dirname $file] $i end] /] foreach line [split $dat \n] { set line [string trim $line] if { [string range $line 0 14] != "package provide" } continue set package [lindex $line 2] set version [lindex $line 3] lappend output $package $version break } } return $output } ### # topic: 929629f0ebaa554710f66410dfa51f8a ### proc ::codebale::pkgindex_path base { set stack {} set buffer { lappend ::PATHSTACK $dir } set base [file normalize $base] set i [string length $base] # Build a list of all of the paths set paths [fileutil::find $base _isdirectory] foreach path $paths { if {$path eq $base} continue set path_indexed($path) 0 foreach idxname {pkgIndex.tcl} { if {[file exists [file join $path $idxname]]} { incr path_indexed($path) set dir [string trimleft [string range $path $i end] /] append buffer "set dir \[file join \[lindex \$::PATHSTACK end\] $dir\] \; source \[file join \[lindex \$::PATHSTACK end\] $dir $idxname\]" append buffer \n } } } foreach path $paths { if {$path_indexed($path)} continue foreach file [glob -nocomplain $path/*.tm] { set file [file normalize $file] set fname [file rootname [file tail $file]] ### # Assume the package is correct in the filename ### set package [lindex [split $fname -] 0] set version [lindex [split $fname -] 1] set path [string trimleft [string range [file dirname $file] $i end] /] ### # Read the file, and override assumptions as needed ### set fin [open $file r] set dat [read $fin] close $fin foreach line [split $dat \n] { set line [string trim $line] if { [string range $line 0 9] != "# Package " } continue set package [lindex $line 2] set version [lindex $line 3] break } append buffer "package ifneeded $package $version \[list source \[file join \[lindex \$::PATHSTACK end\] $path [file tail $file]\]\]" append buffer \n } foreach file [glob -nocomplain $path/*.tcl] { set file [file normalize $file] if { $file == [file join $base tcl8.6 package.tcl] } continue if { $file == [file join $base packages.tcl] } continue if { $file == [file join $base main.tcl] } continue if { [file tail $file] == "version_info.tcl" } continue set fin [open $file r] set dat [read $fin] close $fin if {![regexp "package provide" $dat]} continue set fname [file rootname [file tail $file]] set dir [string trimleft [string range [file dirname $file] $i end] /] foreach line [split $dat \n] { set line [string trim $line] if { [string range $line 0 14] != "package provide" } continue set package [lindex $line 2] set version [lindex $line 3] append buffer "package ifneeded $package $version \[list source \[file join \[lindex \$::PATHSTACK end\] $dir [file tail $file]\]\]" append buffer \n break } } } append buffer { set dir [lindex $::PATHSTACK end] set ::PATHSTACK [lrange $::PATHSTACK 0 end-1] } return $buffer } ### # topic: 3a00781665184d1efb9e292dbdd1b35c # title: Read the contents of an rc conf file # description: # This style of conf file is assumed to contain lines formatted # set VARNAME VALUE ### proc ::codebale::read_rc_file fname { if {![file exists $fname]} { return {} } if {![catch {source $fname} err]} { # Could read as a Tcl file # Fill the result with the contents of # all of the local variables defined by # that file set vars [info vars] ldelete vars fname foreach var $vars { dict set result $var [set $var] } return $result } # Parse the file the hard way... set fin [open $fname r] set thisline {} while {[gets $fin line] >= 0} { set line [string trim $line] if {[string index $line 0] eq "#"} continue append thisline \n $line if {![info complete $thisline]} continue # Remove leading \n set thisline [string trimleft $thisline] if {[string range $line 0 2] == "set"} { dict set result [lindex $line 1] [lindex $line 2] } else { if {[llength $line] eq 2} { dict set result [lindex $line 0] [lindex $line 1] } } } return $result } ### # topic: cbb00d37108708e5968c8a38f73ec38a ### proc ::codebale::read_sh_file {filename {localdat {}}} { set fin [open $filename r] set result {} if {$localdat eq {}} { set top 1 set local [array get ::env] dict set local EXE {} } else { set top 0 set local $localdat } while {[gets $fin line] >= 0} { set line [string trim $line] if {[string index $line 0] eq "#"} continue if {$line eq {}} continue catch { if {[string range $line 0 6] eq "export "} { set eq [string first "=" $line] set field [string trim [string range $line 6 [expr {$eq - 1}]]] set value [read_sh_subst [string range $line [expr {$eq+1}] end] $local] dict set result $field [read_sh_subst $value $local] dict set local $field $value } elseif {[string range $line 0 7] eq "include "} { set subfile [read_sh_subst [string range $line 7 end] $local] foreach {field value} [read_sh_file $subfile $local] { dict set result $field $value } } else { set eq [string first "=" $line] if {$eq > 0} { set field [read_sh_subst [string range $line 0 [expr {$eq - 1}]] $local] set value [read_sh_subst [string range $line [expr {$eq+1}] end] $local] dict set local $field $value dict set result $field $value } } } err opts if {[dict get $opts -code] != 0} { #puts $opts puts "Error reading line:\n$line\nerr: $err\n***" return $err {*}$opts } } return $result } ### # topic: 22c2e7ae33fbe0d87784ca9b16df0de4 # description: Converts a XXX.sh file into a series of Tcl variables ### proc ::codebale::read_sh_subst {line info} { regsub -all {\x28} $line \x7B line regsub -all {\x29} $line \x7D line #set line [string map $key [string trim $line]] foreach {field value} $info { catch {set $field $value} } if [catch {subst $line} result] { return {} } set result [string trim $result] return [string trim $result '] } ### # topic: 45a5b1e3f8a8372363f1670642972c62 ### proc ::codebale::shlib_fname {os pkgname pkgvers} { if { $os eq "windows" } { return lib${pkgname}[string map {. {}} ${pkgvers}].dll } else { switch $os { macosx { set suffix .dylib } default { set suffix .so } } return lib${pkgname}${pkgvers}$suffix } } |
Added modules/codebale/codebale.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | ### # codebale.tcl # # This file defines routines used to bundle and manage Tcl and C # code repositories # # Copyright (c) 2014 Sean Woods # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. ### ::namespace eval ::codebale {} ### # topic: a5992c7f8340ba02d40e386aac95b1b8 # description: Records an alias for a Tcl keyword ### proc ::codebale::alias {alias cname} { variable cnames set cnames($alias) $cname } ### # topic: 0e883f3583c0ccd3eddc6b297ac2ea77 ### proc ::codebale::buffer_append {varname args} { upvar 1 $varname result if {![info exists result]} { set result {} } if {[string length $result]} { set result [string trimright $result \n] append result \n } set priorarg {} foreach arg $args { if {[string length [string trim $arg]]==0} continue #if {[string match $arg $priorarg]} continue set priorarg $arg append result \n [string trim $arg \n] \n } set result [string trim $result \n] append result \n return $result } ### # topic: 926c564aa67884986f7489f37da3fb32 ### proc ::codebale::buffer_merge args { set result {} set priorarg {} foreach arg $args { if {[string length [string trim $arg]]==0} continue if {[string match $arg $priorarg]} continue set priorarg $arg append result [string trim $arg \n] \n } set result [string trim $result \n] return $result } ### # topic: c1e66f4a20e397a5d2541714575c165f ### proc ::codebale::buffer_puts {varname args} { upvar 1 $varname result if {![info exists result]} { set result {} } set result [string trimright $result \n] #if {[string length $result]} { # set result [string trimright $result \n] #} set priorarg {} foreach arg $args { #if {[string length [string trim $arg]]==0} continue #if {[string match $arg $priorarg]} continue #set priorarg $arg append result \n $arg #[string trim $arg \n] } #set result [string trim $result \n] #append result \n return $result } ### # topic: 951f31f2cb24992f34d97e3deb16b43f # description: Reports back the canonical name of a tcl keyword ### proc ::codebale::canonical alias { variable cnames if {[info exists cnames($alias)]} { return $cnames($alias) } return $alias } ### # topic: aacfe07625f74f93dada2159f53fca32 ### proc ::codebale::detect_cases cfile { set fin [open $cfile r] while {[gets $fin line] >= 0} { if {[regexp {^ *case *([A-Z]+)_([A-Z0-9_]+):} $line all prefix label]} { lappend cases($prefix) $label } } close $fin set result {} foreach item [array names cases] { lappend result [string tolower ${item}_cases.h] } return $result } ### # topic: ead7e6fe566070cc79f0eb2f5182465e ### proc ::codebale::normalize_tabbing {rawblock {newspace 0}} { set result {} ### # clean up spaces ### set block [string map [list \t " "] $rawblock] set spaces -1 while {[string index $block [incr spaces]] eq " " } {} if { $spaces < 0} { return $rawblock } set count 0 foreach line [split $block \n] { if {[string first " " $line] > 0} { set spaces -1 break } incr count set i [string last " " $line] if { ($i+1) < $spaces } { set spaces [expr $i + 1] } } if {$spaces <= 0} { return $rawblock } set head [string repeat " " $newspace] foreach line [split $block \n] { append result $head [string range $line $spaces end] \n } return $result } ### # topic: 7958a706b48a9bc44cbbef73813e0fb2 ### proc ::codebale::rewrite_comment {spaces topic info} { set result {} set head [string repeat " " $spaces] set class [helpdoc one {select class from entry where entryid=:topic}] if { $class eq [dict getnull $info type] } { dict unset info type } set order [dict keys $info] logicset remove order type description arguments returns yields title set order [linsert order 0 title type] lappend order description arguments returns yields darglist usage example foreach {field} $order { set val [dict getnull $info $field] ### # Fields to drop for meta-data ### set dtext [split [string trim $val] \n] if {![llength $dtext]} { continue } if {[llength $dtext] == 1} { append result \n "${head}# ${field}: [string trim [lindex $dtext 0]]" } else { append result \n "${head}# ${field}:" foreach dline $dtext { append result \n "${head}# [string trim $dline]" } } } set result [buffer_merge "${head}###" "${head}# topic: $topic" $result "${head}###"] } ### # topic: 003ce0c0d69b74076e8433492deac920 # description: # Descends into a directory structure, returning # a list of items found in the form of: # type object # where type is one of: csource source parent_name # and object is the full path to the file ### proc ::codebale::sniffPath {spath stackvar} { upvar 1 $stackvar stack set result {} if { ![file isdirectory $spath] } { switch [file extension $spath] { .tm { return [list parent_name $spath] } .tcl { return [list source $spath] } .h { return [list cheader $spath] } .c { return [list csource $spath] } } return } foreach f [glob -nocomplain $spath/*] { if {[file isdirectory $f]} { if {[file tail $f] in {CVS build} } continue if {[file extension $f] eq ".vfs" } continue set stack [linsert $stack 0 $f] } } set idx 0 foreach idxtype { pkgIndex.tcl tclIndex } { if {[file exists [file join $spath $idxtype]]} { lappend result index [file join $spath $idxtype] } } if {[llength $result]} { return $result } foreach f [glob -nocomplain $spath/*] { if {![file isdirectory $f]} { set stack [linsert $stack 0 $f] } } return {} } ### # topic: 47266d90061e780e234ec3245d85c176 ### proc ::codebale::strip_ccoments string { set result {} set idx 0 if {![complete_ccomment $string]} { error "Incomplete C comment: $string" } while {[set ndx [string first "/*" $string $idx]] >=0 } { append result [string range $string $idx [expr {$ndx-1}]] set idx [string first */ $string [expr {$ndx+2}]] if { $idx < 0 } { break } incr idx 2 } append result [string range $string $idx end] } set ::force_check 0 |
Added modules/codebale/index.tcl.
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package provide codebale 0.2 package require odie #package require odielib ::namespace eval ::codebale {} ### # We use the fileutil package from tcllib, extensively ### package require fileutil foreach file [lsort -dictionary [glob [file join [file dirname [file normalize [info script]]] *.tcl]]] { if {[file tail $file] eq "index.tcl"} continue source $file } |
Added modules/codebale/parser.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 | ::namespace eval ::codebale {} ::namespace eval ::codebale::parse {} ### # topic: 547fa005713946cd8f2c395a28f9353c ### proc ::codebale::complete_ccomment string { set result {} set opened 0 set closed 0 set idx 0 while {1} { set idx [string first "/*" $string $idx] if {$idx < 0} break incr idx 2 incr opened } if {!$opened} { return 1 } set idx 0 while {1} { set idx [string first "*/" $string $idx] if {$idx < 0} break incr idx 2 incr closed } if { $opened > $closed } { return 0 } return 1 } ### # topic: b1e5e6caf0bf9e78695f995a35af7c2f # description: Provide a keyword handler to the autodoc parser ### proc ::codebale::define {name info} { global cmdref foreach {var val} $info { dict set cmdref($name) $var $val } } ### # topic: 9cca11ca444743a321d3ad5ac85538b1 # description: # A simpler implementation of digest_comment, this proc # takes in the raw buffer and returns a dict of the annotations # it found ### proc ::codebale::digest_comment {buffer {properties {}}} { set result(description) {} set appendto description foreach line [split $buffer \n] { set line [string trimleft [string range $line [string first # $line] end] #] set line [string trimright [string trim $line] -] set rawline $line if [catch {lindex $line 0} token] { append result($appendto) $rawline \n #set result($appendto) [buffer_merge $result($appendto) $line] continue } if {[string index $token end] ne ":"} { append result($appendto) $rawline \n #buffer_puts result($appendto) $line } else { set field [string tolower [string trimright $token :]] set vstart [string first : $rawline] set value [string trim [string range $rawline $vstart+1 end]] switch $field { topic { set result(topic) [lrange $line 1 end] append result(description) \n set appendto description } comment - desc - description { #append result(description) [lrange $line 1 end] \n set result(description) [buffer_merge $result(description) $value] append result(description) \n set appendto description } title - headline { set result(title) $value append result(description) \n set appendto description } ensemble_method { set result(type) proc append result(description) \n set appendto description } ensemble - nspace - namespace - class - agent_class - task - subtask - method - class_function - class_method - phase - function - action { set result(type) $field set result(arglist) [lrange $field 1 end] append result(description) \n set appendto description } darglist { set result($field) $value } default { set result($field) $value append result($field) \n set appendto $field } } } } foreach {field} [array names result] { set result($field) [string trim $result($field)] } return [array get result] } ### # topic: 4971b1be85962744bfb3869375d60357 ### proc ::codebale::digest_csource {dat {trace 0}} { set ::readinglinenumber 0 set ::readingline {} set result {} set funcregexp {(.*) ([a-zA-Z_][a-zA-Z0-9_]*) *\((.*)\)} set funcregexp2 {(.*) (\x2a[a-zA-Z_][a-zA-Z0-9_]*) *\((.*)\)} set priorline {} set thisline {} set rawblock {} set continueline 0 set inknrdef 0 set infunct 0 set isfunct 0 set inparen 0 set intypedef 0 set instruct 0 set psplit 0 set incomment 0 set instatement 0 set parseline {} set thisfunct {} set priorcomment {} ### # Place to store code that surrounds the functions ### dict set result code {} foreach rawline [split $dat \n] { incr ::readinglinenumber set ::readingline $rawline append rawblock $rawline \n set wasincomment $incomment if {[regexp {^ *case *([A-Z]+)_([A-Z0-9_]+):} $rawline all prefix label]} { lappend cases($prefix) $label } regsub -all \x7b $rawline \x20\x7b line if { $trace } {puts "$continueline $instatement $infunct $inparen $incomment [string length $priorcomment] | $line"} if {$incomment} { append thisline \n [string trim $line] if {[string first "*/" $thisline] <0} continue append priorcomment \n $rawblock set incomment 0 set isfunct -1 } elseif {$inparen} { set funcname {} append thisline \n " [string trim $line]" set parenidx [string first ")" $thisline] set lastchar [string index [string trim $thisline] end] if {$trace} { puts [list $parenidx $lastchar] } ### # Wait for the trailing parenthesis and starting curly ### if {$parenidx < 0} continue if {$lastchar ne "\;" } { if {[string first "\{" $thisline $idx] < 0} continue } set psplit 1 set inparen 0 } elseif {$instatement} { append thisline \n [string trim $line] if {[info complete $thisline]} { if { $trace } { puts "ENDOFSTATEMENT ***\n$thisline\n***" } set rawblock {} set infunct 0 set isfunct 0 set instatement 0 if { [string match "*const*Tcl_ObjType*=*" $thisline] } { set pline [string range $thisline 0 [string first "=" $thisline]-1] if { $trace } {puts "TCL OBJ TYPE DECLARED $pline "} dict lappend result objtypes_defined [lindex $pline end] } if { [string match "*const*Tk_PhotoImageFormat*=*" $thisline] } { set pline [string range $thisline 0 [string first "=" $thisline]-1] if { $trace } {puts "TCL PHOTO TYPE DECLARED $pline "} dict lappend result phototypes_defined [lindex $pline end] } set thisline {} continue } else { continue } } elseif {$infunct} { append thisline \n [string trim $line] if {[info complete $thisline]} { if { $trace } { puts "ENDOFFUNCTION" } if { $thisfunct ne {} } { dict set result function $thisfunct body $rawblock } set rawblock {} set thisline {} set infunct 0 set isfunct 0 continue } else { continue } } elseif {$continueline} { append thisline " " [string trim $line] } else { append thisline \n [string trim $line] } if {[string range [string trim $line] 0 1] eq "//"} { set isfunct -1 } elseif {[string range [string trim $line] 0 1] eq "/*"} { # Handle comments set isfunct -1 if {[string first "*/" $thisline] <0} { set incomment 1 set comment 1 continue } } elseif {[set idx [string first "(" $thisline]] > 0} { if {[string first ")" $thisline] < 0} { set inparen 1 continue } } set parseline [string trim $thisline] if {[string range $parseline 0 1] eq "//"} { set isfunct -1 } if {[string index $parseline 0] eq "#"} { set isfunct -1 } if {![::codebale::complete_ccomment $parseline]} { continue } set parseline [::codebale::strip_ccoments $parseline] if {[string index $parseline end] eq "\;" } { set isfunct -1 set priorcomment {} if { $trace } { puts "CSTATEMENT" } } if {$isfunct == 0} { set isfunct [regexp $funcregexp $parseline all keywords funcname arglist] if { $isfunct == 0 } { set isfunct [regexp $funcregexp2 $parseline all keywords funcname arglist] } } if {$isfunct > 0} { if {[string first "\{" $parseline] < 0} { incr continueline continue } set all [string trim $all] set declargs {} foreach item [split $arglist ,] { lappend declargs [string trim $item] } if { $trace } { puts "$keywords $funcname\([join $declargs ", "]\) | $arglist" } set thisfunct $funcname dict set result function $thisfunct comment $priorcomment dict set result function $thisfunct keywords $keywords dict set result function $thisfunct arglist $declargs set priorcomment {} set infunct 1 set isfunct 0 set continueline 0 } elseif { $isfunct == 0 } { if {![info complete $thisline]} { set instatement 1 continue } if {![regexp (void|unsigned|static|int|char|inline|extern) $thisline]} { if { $trace } { puts "!KEYWORDS" } dict append result code "$rawblock" set priorcomment {} set thisline {} set rawblock {} set infunct 0 set isfunct 0 set continueline 0 } else { incr continueline continue } } else { if { $trace } { puts "KILLTERM" } dict append result code "$rawblock" set thisline {} set rawblock {} set infunct 0 set isfunct 0 set continueline 0 } } if { $infunct } { error "Stopped waiting for end of function $thisfunct" } if {[info exists cases]} { dict set result cases [array get cases] } return $result } ### # topic: 44c147047b298a349863145642f3c0b2 ### proc ::codebale::first_autoconf_token line { set line [string trim $line] set idx [string first "(" $line] if { $idx < 0 } { return {} } return [string range $line 0 $idx-1] } ### # topic: a6ee7ffd7430c9ccd6669addf08fd039 # description: # Parses a script, namespace body, or class # definition. ### proc ::codebale::parse_body {meta body modvar} { upvar 1 $modvar match set match 0 set patterns [parser_patterns [dict getnull $meta scope]] foreach {pat info} $patterns { if {[regexp $pat $body]} { set match 1 break } } ### # Pass through if we don't see any patterns to match ### if {!$match} { return [list body $body] } set thisline {} set thiscomment {} set incomment 0 set linecount 0 set inheader 1 array set result { namespace {} header {} body {} command {} comment {} } dict set meta comment {} foreach line [split $body \n] { append thisline \n $line if {![info complete $thisline]} continue set parseline [string range $thisline 1 end] set thisline {} if { $incomment } { if {[string index [string trimleft $parseline] 0] ne "#"} { set incomment 0 set thiscomment [string trimright $thiscomment \n] } else { append thiscomment $parseline \n continue } } elseif {[string index [string trimleft $parseline] 0] eq "#"} { set incomment 1 if {$inheader} { if {[string length $thiscomment]} { append result(header) $thiscomment \n } } else { if {[string length $thiscomment]} { append result(body) $thiscomment \n } } set thiscomment {} append thiscomment $parseline \n continue } set cmd [pattern_match $patterns $parseline] if {$cmd eq {}} { set var body if {$inheader} { set var header } else { set var body } if {[string length $thiscomment]} { append result($var) [string trimright $thiscomment \n] \n set thiscomment {} } append result($var) $parseline \n } else { set inheader 0 set info $meta dict set info comment [string trim $thiscomment] if {[catch {{*}$cmd $info $parseline} lresult]} { puts "Error: [list {*}$cmd $info $parseline]" puts "$lresult" puts $::errorInfo exit error DIE } foreach {type info} $lresult { switch $type { header - body { #append result($type) $info \n buffer_append result($type) $info } command { foreach {pname pinfo} $info { dict set result($type) $pname $pinfo } } namespace { logicset add result(namespace) {*}$info } default { append result($type) $info \n } } } } set thiscomment {} } return [array get result] } ### # topic: a18c537125594150a50c0a21013ba712 # description: # Parses a namespace and redeclares any procs as # glob procs pointing to the current namespace ### proc ::codebale::parse_namespace {meta def} { global cmdref base block fileinfo set nspace [lindex $def end-1] set body [lindex $def end] set nspace [string trim $nspace :] if { $nspace eq {} } { set Nspace Global } else { set Nspace $nspace } set thisline {} array set result { command {} body {} header {} } dict set aliases {} [list topic subtopic proc namespace nspace class arglist method] set info [digest_comment [dict get $meta comment] $meta] set info [meta_scrub $aliases $info] dict set aliases darglist darglist dict set aliases usage usage dict set aliases example example dict set info type namespace helpdoc node_define namespace $Nspace $info nodeid set result(meta) [helpdoc node_properties $nodeid] set comment [rewrite_comment 0 $nodeid $result(meta)] array set result [parse_body [list {*}$meta namespace $nspace parent $nodeid] $body mod] buffer_append newbody [get result(header)] [get result(body)] set result(header) {} if {[string length [string trim $newbody]]} { set result(body) [buffer_merge $comment "[list namespace eval ::$nspace] \{\n$newbody\}"] } else { logicset add result(namespace) $nspace set result(body) {} #[dict get $meta comment] } set result(comment) $comment return [array get result] } ### # topic: bab541dc7ab25960b7b375553ef388aa ### proc ::codebale::parse_ooclass {meta def} { set nspace [lindex $def end-1] set body [lindex $def end] set nspace [string trim $nspace :] set thisline {} array set result { command {} body {} header {} } set info [digest_comment [dict get $meta comment] $meta] dict set aliases {} [list topic subtopic proc namespace nspace class arglist method] dict set aliases darglist darglist dict set aliases usage usage dict set aliases example example set info [meta_scrub $aliases $info] dict set info type class if {[dict exists $meta filename]} { dict set info filename [dict get $meta filename] } helpdoc node_define class $nspace $info nodeid set result(meta) [helpdoc node_properties $nodeid] set comment [rewrite_comment 0 $nodeid $result(meta)] ### # Write in the results ### array set result [parse_body [list {*}$meta class $nspace parent $nodeid scope ooclass] $body mod] buffer_append newbody [get result(header)] [get result(body)] set result(header) {} foreach {mname} [lsort -dictionary [dict keys $result(command)]] { buffer_append newbody [dict get $result(command) $mname] } unset result(command) set result(body) [buffer_merge $comment "[list {*}[lrange $def 0 end-1]] \{\n$newbody\}"] set result(comment) $comment return [array get result] } ### # topic: 16fbb45b8e9aa13b0b892270fd7537ff # description: # This procedure reads in the definition of a method, # marks it up in the help documentation, and seeds the # re-writer so that this method is creates in sorted order ### proc ::codebale::parse_oomethod {meta def} { set token [lindex $def 0] if {[string range $token 0 5]=="class_"} { set cmd "class_method" set class class_method } else { set cmd "method" set class method } set def " [list $cmd {*}[lrange $def 1 end-1]] \{[lindex $def end]\}" set def [normalize_tabbing $def 2] set token [lindex $def 0] set procname [string trim [lindex $def 1] :] set fullname [string trimleft $class :]::$procname if {[llength $def] < 4} { set arglist dictargs set darglist dictargs set body [lindex $def 3] } else { set arglist [lindex $def 2] set body [lindex $def 4] ### # Clean up args ### set darglist {} foreach n $arglist { if [catch { if {[llength $n] > 1} { lappend darglist "?[lindex $n 0]?" } else { lappend darglist [lindex $n 0] } } err] { lappend darglist $n } } } ### # Document ### set info [digest_comment [dict get $meta comment] $meta] set type [dict getnull $info type] if {$type eq {}} { set type [string trim $token :] if { $type ne "method" } { dict set info type $type } } dict set aliases returns {return yields} dict set aliases darglist darglist dict set aliases usage usage dict set aliases example example dict set aliases {} [list topic subtopic proc namespace nspace class arglist method $type] set info [meta_scrub $aliases $info] dict set info type $type dict set info arglist $darglist if {[dict exists $meta filename]} { dict set info filename [dict get $meta filename] } helpdoc node_define_child [dict getnull $meta parent] $class $procname $info nodeid set result(meta) [helpdoc node_properties $nodeid] set result(comment) [rewrite_comment 2 $nodeid $result(meta)] set result(command) $def return [list command [list ${class}::${procname} [buffer_merge $result(comment) $result(command)]]] } ### # topic: 2e9b9100a28c1d6dd42195779706ad24 # description: # This procedure reads in the definition of a method, # marks it up the ancestors for this object ### proc ::codebale::parse_oosuperclass {meta def} { set parentid [dict getnull $meta parent] foreach class [lrange $def 1 end] { set ancestor [helpdoc node_id [list class $class] 1] helpdoc link_create $parentid $ancestor class_ancestor } return [list header $def] } ### # topic: 0360b37868575d302ab6f15e88365266 ### proc ::codebale::parse_path {info base args} { set rewrite 0 set repo source dict with info {} set pathlist $args if {[llength $pathlist]==0} { set pathlist $base } set stack {} foreach path $pathlist { stack push stack $path } set filelist {} while {[stack pop stack stackpath]} { lappend filelist {*}[sniffPath $stackpath stack] } set meta [list repo $repo rewrite $rewrite base $base] if {![helpdoc exists {select localpath from repository where handle=:repo}]} { helpdoc eval {insert into repository (handle,localpath) VALUES (:repo,:base);} } else { helpdoc eval {update repository set localpath=:base where handle=:repo;} } foreach {type file} $filelist { switch $type { parent_name - source { if { [file tail $file] in {version_info.tcl packages.tcl lutils.tcl}} continue if {[catch { parse_tclsourcefile $meta $file $rewrite } err]} { puts [list $file $err] puts $::errorInfo if {[file exists $file.new]} { puts "X $file.new" file delete $file.new } } } csource { if {[catch { read_csourcefile $file } err]} { puts [list $file $err] } } index { continue } } } } ### # topic: 70a6c102860ad99677f3c4f2021a5308 # description: # This procedure reads in the definition of a procedures, # marks it up in the help documentation, and seeds the # re-writer so that this procedure is defined from the # global namespace ### proc ::codebale::parse_procedure {meta def} { set def [normalize_tabbing $def] foreach {token procname arglist body} $def break; set rawproc $procname set proc [namespace tail $procname] set nspace [string trimleft [proc_nspace $rawproc] :] if { $nspace eq {} } { set nspace [dict getnull $meta namespace] } if {$nspace in {{} ::}} { set fullname [string trim $proc :] } else { set fullname ${nspace}::${proc} } set result(namespace) $nspace set result(command) [list $token ::$fullname $arglist] append result(command) " \{$body\}" ### # Document ### set type [string trim $token :] dict set aliases yields return dict set aliases darglist darglist dict set aliases usage usage dict set aliases example example dict set aliases {} [list topic subtopic proc namespace nspace class arglist $type] set info [digest_comment [dict get $meta comment] $meta] set info [meta_scrub $aliases $info] dict set info type $type ### # Clean up args ### set darglist {} foreach n $arglist { if {[llength $n] > 1} { lappend darglist "?[lindex $n 0]?" } else { lappend darglist [lindex $n 0] } } dict set info arglist $darglist if {[dict exists $meta filename]} { dict set info filename [dict get $meta filename] } helpdoc node_define proc $fullname $info nodeid set result(meta) [helpdoc node_properties $nodeid] set result(comment) [rewrite_comment 0 $nodeid $result(meta)] return [list command [list $fullname [buffer_merge $result(comment) $result(command)]] namespace $result(namespace)] } ### # topic: 7c9f9cea78297eef903b3f711033a993 ### proc ::codebale::parse_tclsourcefile {meta file {rewrite 0}} { global classes block filename fileinfo variable parser_patterns array unset filestore dict with meta {} set i [string length $base] set fname [file rootname [file tail $file]] set dir [string trimleft [string range [file dirname $file] $i end] /] set fpath $dir/[file tail $file] set filename $fpath set md5 [::md5::md5 -hex -file $file] set fileid [::helpdoc file_id [list $repo $fpath] 1] set repomd5 [helpdoc one {select hash from file where fileid=:fileid}] if {!$::force_check} { if { $md5 eq $repomd5} { return 0 } } set info {} dict set info mtime [file mtime $file] dict set info hash $md5 dict set info path $fpath dict set info filename $fpath dict set info repo $repo dict set info localpath $fpath ::helpdoc file_restore $fileid $info dict with info {} #set ::filemd5($fpath) $md5 set fin [open $file r] set dat [read $fin] close $fin puts "<< $fpath r:$repomd5 l:$md5" set fileinfo {} set result [parse_body [list namespace {} file $file filename $filename] $dat patmatch] if {!$rewrite || !$patmatch} { return $patmatch } ### # Rewrite the tcl sourcefile ### set buffer {} set ndefined {} set header {} set body {} set command {} set namespace {} set buffer {} dict with result {} buffer_append buffer $header foreach ns [lsort -dictionary $namespace] { if { $ns ne {} } { append buffer \n [list ::namespace eval ::$ns {}] \n } } if {[llength $command]} { foreach {nsproc} [lsort -dictionary [dict keys $command]] { buffer_append buffer [dict get $command $nsproc] } } buffer_append buffer $body set oldlines [split $dat \n] set newlines [split $buffer \n] set idx -1 set identical 1 foreach oldline $oldlines { set newline [lindex $newlines [incr idx]] if {[string trim $oldline] ne [string trim $newline]} { set identical 0 break } } if {$identical} { if {[file exists $file.new]} { puts "~ $file.new" file delete $file.new } return $patmatch } puts ">> $fpath.new" set fout [open $file.new w] fconfigure $fout -translation crlf puts $fout $buffer close $fout return $patmatch } ### # topic: 233756d1a3b76fa93023ccae156e0ec5 ### proc ::codebale::parser_addpattern args { variable parser_patterns dict set parser_patterns {*}$args } ### # topic: d086f77979bde4d7f60d41af050c529d ### proc ::codebale::parser_patterns scope { variable parser_patterns set result {} foreach {pat info} [dict getnull $parser_patterns $scope] { dict set result $pat $info } return $result } ### # topic: 6fd968f42730f701c0fa3ca32b8f7785 ### proc ::codebale::pattern_match {patterns parseline} { set parseline [string trimleft $parseline :] foreach {pat patinfo} $patterns { set idx -1 set match 1 foreach a $pat { incr idx if [catch {lindex $parseline $idx} token] { set match 0 break } if {![string match $token $a] } { set match 0 break } } if { $match } { return $patinfo } } return {} } ### # topic: f9b3ce3aafc972b55e330ac9b62c31db ### proc ::codebale::proc_nspace procname { set rawproc $procname set proc [namespace tail $procname] set n [string last $proc $rawproc] if { $n == 0 } { set nspace {} } else { set nspace [string range $rawproc 0 [expr {$n - 1}]] set nspace [string trimleft $nspace :] set nspace [string trimright $nspace :] } return $nspace } ### # topic: 27a7f1698a00fb294f2c700a8d8acb7e ### proc ::codebale::read_csourcefile file { global classes base filename ### # Skip huge files ### if {[file size $file] > 500000} {return 0} set i [string length $base] set fname [file rootname [file tail $file]] set dir [string trimleft [string range [file dirname $file] $i end] /] set fpath $dir/[file tail $file] set filename $dir/[file tail $file] set fin [open $file r] set dat [read $fin] close $fin set found 0 set thisline {} set thiscomment {} set incomment 0 set parentid tclcmd foreach line [split $dat \n] { set line [string trim $line] if {[string range $line 0 1] == "/*" } { set incomment 1 } if { $incomment } { set pline [string trimleft $line "/"] set pline [string trimleft $pline "*"] set pline [string trimright $pline "/"] set pline [string trimright $pline "*"] append thiscomment $pline \n if {[string range $line end-1 end] eq "*/" } { set incomment 0 set info [digest_comment $thiscomment [list file $fpath]] set thiscomment {} set nodeid {} set found 0 foreach {var val} $info { switch $var { topic { set nodeid $val dict unset info $var } tclcmd - tclmod { if { $nodeid eq {} } { set nodeid [helpdoc node_id [list tclcmd [lindex $val 0]] 1] } set parentid $nodeid helpdoc node_property_set $nodeid usage $val dict unset info $var } tclmethod - tclsubcmd { if { $nodeid eq {} } { set nodeid [helpdoc node_id [list tclcmd [lindex $val 0] method [lindex $val 1]] 1] } dict unset info $var helpdoc node_property_set $nodeid usage $val helpdoc node_property_set $nodeid arglist [lrange $val 2 end] } } } if { $nodeid ne {} } { #puts [list $nodeid $info] helpdoc node_property_set $nodeid file $fpath dict set info file $fpath foreach {var val} $info { switch $var { topic - tclcmd - tclmod - tclmethod - tclsubcmd {} default { helpdoc node_property_set $nodeid $var $val } } } } } } } return 1 } ### # topic: 2e99acd975c8dcb5b24e617d1a4697db ### proc ::codebale::rewrite_autoconf {} { ### # Update the AC_INIT line in configure.in ### set fout [open [file join $::project(path) configure.in.new] w] set fin [open [file join $::project(path) configure.in] r] set wrote_sources 0 while {[gets $fin line]>=0} { switch [first_autoconf_token $line] { "AC_INIT" { puts $fout "AC_INIT(\[$::project(pkgname)\], \[$::project(pkgvers)\])" } "m4_include" - "TEA_ADD_HEADERS" - "TEA_ADD_SOURCES" { if { !$wrote_sources } { puts $fout "TEA_ADD_HEADERS(\[generic/${::project(h_file)}\])" #puts $fout "TEA_ADD_SOURCES(\[generic/${project(c_file)}\])" set wrote_sources 1 foreach file $::project(tcl_sources) { puts $fout "TEA_ADD_TCL_SOURCES(\[$file\])" } } } default { puts $fout $line } } } close $fin close $fout file rename -force [file join $::project(path) configure.in.new] [file join $::project(path) configure.in] } ### # topic: c790d2a5043a5f76a476143db91bd729 ### namespace eval ::codebale { alias nspace namespace parser_addpattern {} {namespace eval} ::codebale::parse_namespace parser_addpattern {} proc ::codebale::parse_procedure parser_addpattern {} ensemble_method ::codebale::parse_procedure parser_addpattern {} odie::class ::codebale::parse_ooclass parser_addpattern {} tao::class ::codebale::parse_ooclass parser_addpattern {} {oo::class create} ::codebale::parse_ooclass parser_addpattern ooclass method ::codebale::parse_oomethod parser_addpattern ooclass proc ::codebale::parse_oomethod parser_addpattern ooclass class_method ::codebale::parse_oomethod parser_addpattern ooclass superclasses ::codebale::parse_oosuperclass } |
Added modules/codebale/project.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | ::namespace eval ::codebale {} ### # topic: 297048c11cac778e1b5b7d3dcb41b546 ### proc ::codebale::_project_detect_root path { set here [file normalize $path] while 1 { if {[file dirname $here] eq $::odie(sandbox)} { return $here } if {[file dirname $here] eq $::odie(local_repo)} { error "Could not detect project root" } if {[file dirname $here] eq "/"} { error "Could not detect project" } if {[file dirname $here] eq ""} { error "Could not detect project" } if {[file exists [file join $here sherpa.txt]]} { return $here } if {[file exists [file join $here .fslckout]]} { return $here } if {[file exists [file join $here _FOSSIL_]]} { return $here } if {[file exists [file join $here .git]]} { return $here } set here [file dirname $here] } error "Could not detect project" } ### # topic: 7bb613fd690a29ecf89e8923c152c166 ### proc ::codebale::_project_fossil_info {} { set dat [exec $::odie(fossil) info] set result {} foreach line [split $dat \n] { set n [string first ":" $line] if { $n < 0 } break set keyword [string range $line 0 $n] switch $keyword { parent: { dict lappend result parent: [lindex $line end-3] } checkout: { dict set result checkout: [lindex $line end-3] dict set result timestamp: [lrange $line end-2 end] } comment: { break } default { dict set result $keyword [string trim [string range $line $n+1 end]] } } } return $result } ### # topic: f154056d71dcbbd481fac3c0ed71c8b4 ### proc ::codebale::_project_teapot_info teapotfile { set fin [open $teapotfile] set fd [open $teapot r] set result {} set package_requires {} set description {} for {gets $fd line} {![eof $fd]} {gets $fd line} { if {[string match "Package *" $line]} { dict set info package-name: [lindex $line 1] dict set info package-version: [lindex $line 2] } elseif {[string match "Meta description *" $line]} { append description \n [string range $line 16 end] } elseif {[string match "Meta *" $line]} { if {![info complete $line]} continue set field [lindex $line 1] switch $field { as::author { dict set result author: [lrange $line 2 end] } as::origin { dict set result url: [lrange $line 2 end] } require { lappend package_requires {*}[lrange $line 2 end] } default { dict set result [lindex $line 1] [lrange $line 2 end] } } } elseif {[string match "Meta plaform *"]} } dict set result package-requires: ${package_requires} dict set result description: ${description} } ### # topic: 55101762c3907b5b5f9acbe761dba7d6 # description: Codebale project management tools ### proc ::codebale::project_detect path { set root [_project_detect_root $path] dict set result local-root: $root cd $root dict set result package-name: [file tail $root] # Detect info from Fossil if {[file exists [file join $root $::odie(fskckout)]]} { foreach {field val} [_project_fossil_info] { dict set result $field $val } } # Detect info from teapot if {[file exists [file join $root teapot.txt]]} { foreach {field val} [_project_teapot_info [file join $root teapot.txt]] { dict set result $field $val } } # Detect Modules set modules {} foreach item [lsort -dictionary [glob -nocomplain [file join $root modules *]]] { if {[file isdirectory $item]} { lappend modules [file tail $item] } } dict set result modules: $modules return $result } |
Added modules/cron/cron.man.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | [comment {-*- tcl -*- doctools manpage}] [vset PACKAGE_VERSION 0.1] [manpage_begin cron n [vset PACKAGE_VERSION]] [keywords {cron}] [keywords {odie}] [copyright {2014 Sean Woods <[email protected]>}] [moddesc {cron}] [titledesc {Tool for automating the period callback of commands}] [category System] [require Tcl 8.5] [require cron [opt [vset PACKAGE_VERSION]]] [description] [para] The [package cron] package provides a Pure-tcl set of tools to allow programs to schedule tasks to occur at regular intervals. Rather than force each task to issue it's own call to the event loop, the cron system mimics the cron utility in Unix: on task periodically checks to see if something is to be done, and issues all commands for a given time step at once. The cron package is intended to work in time scales greater than 1 second. [section Commands] [list_begin definitions] [call [cmd ::cron::at] [arg processname] [arg timecode] [arg command]] This command registers a [arg command] to be called at the time specified by [arg timecode]. If [arg timecode] is expressed as an integer, the timecode is assumed to be in unixtime. All other inputs will be interpreted by [clock scan] and converted to unix time. This task can be modified by subsequent calls to this package's commands by referencing [arg processname]. If [art processname] exists, it will be replaced. [example_begin] ::cron::at start_coffee {Tomorrow at 9:00am} {remote::exec::coffeepot power on} ::cron::at shutdown_coffee {Tomorrow at 12:00pm} {remote::exec::coffeepot power off} [example_end] [call [cmd ::cron::cancel] [arg processname]] This command unregisters the process [arg processname] and cancels any pending commands. Note: processname can be a process created by either [cmd ::cron::at] or [cmd ::cron::every]. [example_begin] ::cron::cancel check_mail [example_end] [call [cmd ::cron::every] [arg processname] [arg frequency] [arg command]] This command registers a [arg command] to be called at the interval of [arg frequency]. [arg frequency] is given in seconds. This task can be modified by subsequent calls to this package's commands by referencing [arg processname]. If [art processname] exists, it will be replaced. [example_begin] ::cron::every check_mail 900 ::imap_client::check_mail ::cron::every backup_db 3600 {::backup_procedure ::mydb} [example_end] [list_end] [para] [vset CATEGORY odie] [include ../doctools2base/include/feedback.inc] [manpage_end] |
Added modules/cron/cron.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | ### # This file implements a process table # Instead of having individual components try to maintain their own timers # we centrally manage how often tasks should be kicked off here. ### # # Author: Sean Woods (for T&E Solutions) package provide cron 0.1 ::namespace eval ::cron {} proc ::cron::at {process timecode command} { variable processTable if {[string is integer -strict $timecode]} { set scheduled $timecode } else { set scheduled [clock scan $timecode] } set now [clock seconds] set info [list process $process frequency 0 command $command scheduled $scheduled lastevent $now] if ![info exists processTable($process)] { lappend info lastrun 0 err 0 result {} } foreach {field value} $info { dict set processTable($process) $field $value } ::cron::runTasks } ### # topic: 0776dccd7e84530fa6412e507c02487c ### proc ::cron::every {process frequency command} { variable processTable set now [clock seconds] set info [list process $process frequency $frequency command $command scheduled [expr {$now + $frequency}] lastevent $now] if ![info exists processTable($process)] { lappend info lastrun 0 err 0 result {} } foreach {field value} $info { dict set processTable($process) $field $value } ::cron::runTasks } proc ::cron::cancel {process} { variable processTable unset -nocomplain processTable($process) } ### # topic: 97015814408714af539f35856f85bce6 ### proc ::cron::run process { variable processTable dict set processTable($process) lastrun 0 } ### # topic: 1f8d4726623321acc311734c1dadcd8e # description: # Run through our process table and # kick off overdue tasks ### proc ::cron::runProcesses {} { variable processTable set now [clock seconds] ### # Determine what tasks to run this timestep ### set tasks {} set cancellist {} foreach {process} [array names processTable] { dict with processTable($process) { if { $scheduled <= $now } { lappend tasks $process if { $frequency <= 0 } { lappend cancellist $process } else { set scheduled [expr {$frequency + $lastrun}] if { $scheduled <= $now } { set scheduled [expr {$frequency + $now}] } } set lastrun $now } set lastevent $now } } foreach task $tasks { dict with processTable($task) { set err [catch {uplevel #0 $command} result] if $err { puts $result } } } foreach {task} $cancellist { unset -nocomplain processTable($task) } } ### # topic: 2f5a33d28948c4514764bd2f58b750fc # description: # Called once per second, and timed to ensure # we run in roughly realtime ### proc ::cron::runTasks {} { variable lastcall after cancel $lastcall ### # Run the processes before we kick off another task... ### catch {runProcesses} variable processTable ### # Look at our schedule and book the next timeslot # or 15 minutes, whichever is sooner ### set now [clock seconds] set nexttime [expr {$now - ($now % 900) + 900}] foreach {process} [array names processTable] { dict with processTable($process) { if {$scheduled > $now && $scheduled < $nexttime} { set nexttime $scheduled } } } ### # Try to get the event to fire off on the border of the # nearest second ### if { $nexttime > $now } { set ctime [clock milliseconds] set next [expr {($nexttime-$now)*1000-1000+($ctime % 1000)}] } else { set next 0 } set lastcall [after $next [namespace current]::runTasks] } ### # topic: 4a891d0caabc6e25fbec9514ea8104dd # description: # This file implements a process table # Instead of having individual components try to maintain their own timers # we centrally manage how often tasks should be kicked off here. ### namespace eval ::cron { variable lastcall 0 variable processTable } ::cron::runTasks |
Added modules/cron/cron.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | # Tests for the cron module # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 2014 by Sean Woods # (Insert BSDish style "use at your own risk" license text) package require tcltest source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.4 testsNeedTcltest 1.0 testing { useLocal cron.tcl cron } set timecounter 0 ::cron::every timecounter 1 {incr timecounter} set now [clock seconds] # Test at set timerevent 0 ::cron::at timeevent1 [expr {$now + 5}] {set ::timerevent 1} ::cron::at timeevent2 [expr {$now + 6}] {set ::eventpause 0} ::cron::at timeevent3 [expr {$now + 10}] {set ::timerevent 2} ::cron::at timeevent4 [expr {$now + 11}] {set ::pause 0} test cron-1.1 {cron::every} { set ::timecounter } 0 test cron-1.2 {cron::at1} { set ::timerevent } 0 vwait eventpause test cron-1.3 {cron::at1} { set ::timerevent } 1 # Test that in X seconds our timer # was incremented X times vwait pause test cron-1.4 {cron::every} { set ::timecounter } [expr {[clock seconds]-$now}] test cron-1.5 {cron::at2} { set ::timerevent } 2 ### # Confirm cancel works ::cron::cancel timecounter set timecounterfinal $::timecounter after 2000 {set pause 0} vwait pause test cron-1.6 {cron::cancel} { set ::timecounter } $::timecounterfinal testsuiteCleanup return |
Changes to modules/ftpd/ftpd.tcl.
︙ | ︙ | |||
417 418 419 420 421 422 423 424 | # # Side Effects: # A listener is setup on the specified port which will call # ::ftpd::accept when it is connected to. proc ::ftpd::server {{myaddr {}}} { variable port if {[string length $myaddr]} { | > | | | > | 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 | # # Side Effects: # A listener is setup on the specified port which will call # ::ftpd::accept when it is connected to. proc ::ftpd::server {{myaddr {}}} { variable port variable serviceSock if {[string length $myaddr]} { set serviceSock [socket -server ::ftpd::accept -myaddr $myaddr $port] } else { set serviceSock [socket -server ::ftpd::accept $port] } set port [lindex [fconfigure $serviceSock -sockname] 2] return } # ::ftpd::accept -- # # Checks if the connecting IP is authorized to connect or not. If not # the socket is closed and failure is logged. Otherwise, a welcome is # printed out, and a ftpd::Read filevent is placed on the socket. # |
︙ | ︙ |
Added modules/nettool/available_ports.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 | ### # topic: 868a79cedf28924191fd86aa85f6dd1d ### namespace eval ::nettool { set blocks {} } lappend ::nettool::blocks 1028 1028 lappend ::nettool::blocks 1067 1068 lappend ::nettool::blocks 1109 1109 lappend ::nettool::blocks 1138 1138 lappend ::nettool::blocks 1313 1313 lappend ::nettool::blocks 1382 1382 lappend ::nettool::blocks 1385 1385 lappend ::nettool::blocks 1416 1416 lappend ::nettool::blocks 1454 1454 lappend ::nettool::blocks 1461 1461 lappend ::nettool::blocks 1464 1464 lappend ::nettool::blocks 1486 1486 lappend ::nettool::blocks 1491 1491 lappend ::nettool::blocks 1493 1493 lappend ::nettool::blocks 1528 1528 lappend ::nettool::blocks 1556 1556 lappend ::nettool::blocks 1587 1587 lappend ::nettool::blocks 1651 1651 lappend ::nettool::blocks 1783 1783 lappend ::nettool::blocks 1895 1895 lappend ::nettool::blocks 2083 2083 lappend ::nettool::blocks 2194 2196 lappend ::nettool::blocks 2222 2222 lappend ::nettool::blocks 2259 2259 lappend ::nettool::blocks 2340 2340 lappend ::nettool::blocks 2346 2349 lappend ::nettool::blocks 2369 2369 lappend ::nettool::blocks 2377 2378 lappend ::nettool::blocks 2395 2395 lappend ::nettool::blocks 2426 2426 lappend ::nettool::blocks 2446 2446 lappend ::nettool::blocks 2528 2528 lappend ::nettool::blocks 2640 2640 lappend ::nettool::blocks 2654 2654 lappend ::nettool::blocks 2682 2682 lappend ::nettool::blocks 2693 2693 lappend ::nettool::blocks 2794 2794 lappend ::nettool::blocks 2825 2825 lappend ::nettool::blocks 2873 2873 lappend ::nettool::blocks 2916 2917 lappend ::nettool::blocks 2925 2925 lappend ::nettool::blocks 3014 3014 lappend ::nettool::blocks 3016 3019 lappend ::nettool::blocks 3024 3024 lappend ::nettool::blocks 3027 3029 lappend ::nettool::blocks 3050 3050 lappend ::nettool::blocks 3080 3080 lappend ::nettool::blocks 3092 3092 lappend ::nettool::blocks 3126 3126 lappend ::nettool::blocks 3300 3301 lappend ::nettool::blocks 3396 3396 lappend ::nettool::blocks 3403 3404 lappend ::nettool::blocks 3546 3546 lappend ::nettool::blocks 3693 3694 lappend ::nettool::blocks 3876 3876 lappend ::nettool::blocks 3900 3900 lappend ::nettool::blocks 3938 3938 lappend ::nettool::blocks 3970 3970 lappend ::nettool::blocks 3986 3986 lappend ::nettool::blocks 3994 3994 lappend ::nettool::blocks 4000 4000 lappend ::nettool::blocks 4048 4048 lappend ::nettool::blocks 4060 4060 lappend ::nettool::blocks 4065 4065 lappend ::nettool::blocks 4120 4120 lappend ::nettool::blocks 4132 4133 lappend ::nettool::blocks 4140 4140 lappend ::nettool::blocks 4144 4144 lappend ::nettool::blocks 4151 4152 lappend ::nettool::blocks 4184 4184 lappend ::nettool::blocks 4194 4198 lappend ::nettool::blocks 4315 4315 lappend ::nettool::blocks 4317 4319 lappend ::nettool::blocks 4332 4332 lappend ::nettool::blocks 4334 4339 lappend ::nettool::blocks 4363 4367 lappend ::nettool::blocks 4370 4370 lappend ::nettool::blocks 4380 4388 lappend ::nettool::blocks 4397 4399 lappend ::nettool::blocks 4412 4424 lappend ::nettool::blocks 4434 4440 lappend ::nettool::blocks 4459 4483 lappend ::nettool::blocks 4489 4499 lappend ::nettool::blocks 4501 4501 lappend ::nettool::blocks 4503 4533 lappend ::nettool::blocks 4539 4544 lappend ::nettool::blocks 4560 4562 lappend ::nettool::blocks 4564 4565 lappend ::nettool::blocks 4569 4569 lappend ::nettool::blocks 4571 4589 lappend ::nettool::blocks 4606 4657 lappend ::nettool::blocks 4693 4699 lappend ::nettool::blocks 4705 4724 lappend ::nettool::blocks 4734 4736 lappend ::nettool::blocks 4746 4746 lappend ::nettool::blocks 4748 4748 lappend ::nettool::blocks 4754 4783 lappend ::nettool::blocks 4792 4799 lappend ::nettool::blocks 4805 4826 lappend ::nettool::blocks 4828 4836 lappend ::nettool::blocks 4846 4846 lappend ::nettool::blocks 4852 4866 lappend ::nettool::blocks 4872 4875 lappend ::nettool::blocks 4886 4893 lappend ::nettool::blocks 4895 4898 lappend ::nettool::blocks 4903 4911 lappend ::nettool::blocks 4916 4935 lappend ::nettool::blocks 4938 4939 lappend ::nettool::blocks 4943 4948 lappend ::nettool::blocks 4954 4968 lappend ::nettool::blocks 4971 4983 lappend ::nettool::blocks 4992 4998 lappend ::nettool::blocks 5016 5019 lappend ::nettool::blocks 5033 5041 lappend ::nettool::blocks 5076 5077 lappend ::nettool::blocks 5088 5089 lappend ::nettool::blocks 5095 5098 lappend ::nettool::blocks 5107 5110 lappend ::nettool::blocks 5113 5113 lappend ::nettool::blocks 5118 5119 lappend ::nettool::blocks 5121 5132 lappend ::nettool::blocks 5138 5145 lappend ::nettool::blocks 5147 5149 lappend ::nettool::blocks 5151 5151 lappend ::nettool::blocks 5158 5160 lappend ::nettool::blocks 5165 5165 lappend ::nettool::blocks 5169 5171 lappend ::nettool::blocks 5173 5189 lappend ::nettool::blocks 5197 5199 lappend ::nettool::blocks 5204 5208 lappend ::nettool::blocks 5210 5214 lappend ::nettool::blocks 5216 5220 lappend ::nettool::blocks 5238 5244 lappend ::nettool::blocks 5254 5263 lappend ::nettool::blocks 5266 5268 lappend ::nettool::blocks 5273 5279 lappend ::nettool::blocks 5283 5297 lappend ::nettool::blocks 5311 5311 lappend ::nettool::blocks 5316 5316 lappend ::nettool::blocks 5319 5319 lappend ::nettool::blocks 5322 5342 lappend ::nettool::blocks 5345 5348 lappend ::nettool::blocks 5365 5396 lappend ::nettool::blocks 5438 5442 lappend ::nettool::blocks 5444 5444 lappend ::nettool::blocks 5446 5452 lappend ::nettool::blocks 5457 5460 lappend ::nettool::blocks 5466 5499 lappend ::nettool::blocks 5507 5552 lappend ::nettool::blocks 5558 5565 lappend ::nettool::blocks 5570 5572 lappend ::nettool::blocks 5576 5578 lappend ::nettool::blocks 5587 5596 lappend ::nettool::blocks 5606 5617 lappend ::nettool::blocks 5619 5626 lappend ::nettool::blocks 5640 5645 lappend ::nettool::blocks 5647 5669 lappend ::nettool::blocks 5685 5686 lappend ::nettool::blocks 5690 5692 lappend ::nettool::blocks 5694 5695 lappend ::nettool::blocks 5697 5712 lappend ::nettool::blocks 5731 5740 lappend ::nettool::blocks 5749 5749 lappend ::nettool::blocks 5751 5754 lappend ::nettool::blocks 5756 5756 lappend ::nettool::blocks 5758 5765 lappend ::nettool::blocks 5772 5776 lappend ::nettool::blocks 5778 5779 lappend ::nettool::blocks 5788 5792 lappend ::nettool::blocks 5795 5812 lappend ::nettool::blocks 5815 5840 lappend ::nettool::blocks 5843 5858 lappend ::nettool::blocks 5860 5862 lappend ::nettool::blocks 5864 5867 lappend ::nettool::blocks 5869 5882 lappend ::nettool::blocks 5884 5899 lappend ::nettool::blocks 5901 5909 lappend ::nettool::blocks 5914 5962 lappend ::nettool::blocks 5964 5967 lappend ::nettool::blocks 5970 5983 lappend ::nettool::blocks 5993 5998 lappend ::nettool::blocks 6067 6067 lappend ::nettool::blocks 6078 6080 lappend ::nettool::blocks 6089 6098 lappend ::nettool::blocks 6119 6120 lappend ::nettool::blocks 6125 6129 lappend ::nettool::blocks 6131 6132 lappend ::nettool::blocks 6134 6139 lappend ::nettool::blocks 6150 6158 lappend ::nettool::blocks 6164 6199 lappend ::nettool::blocks 6202 6221 lappend ::nettool::blocks 6223 6240 lappend ::nettool::blocks 6245 6250 lappend ::nettool::blocks 6254 6266 lappend ::nettool::blocks 6270 6299 lappend ::nettool::blocks 6301 6305 lappend ::nettool::blocks 6307 6314 lappend ::nettool::blocks 6318 6319 lappend ::nettool::blocks 6323 6323 lappend ::nettool::blocks 6327 6342 lappend ::nettool::blocks 6345 6345 lappend ::nettool::blocks 6348 6349 lappend ::nettool::blocks 6351 6354 lappend ::nettool::blocks 6356 6359 lappend ::nettool::blocks 6361 6362 lappend ::nettool::blocks 6364 6369 lappend ::nettool::blocks 6371 6381 lappend ::nettool::blocks 6383 6388 lappend ::nettool::blocks 6391 6399 lappend ::nettool::blocks 6411 6416 lappend ::nettool::blocks 6422 6431 lappend ::nettool::blocks 6433 6441 lappend ::nettool::blocks 6444 6445 lappend ::nettool::blocks 6447 6454 lappend ::nettool::blocks 6457 6470 lappend ::nettool::blocks 6472 6479 lappend ::nettool::blocks 6490 6499 lappend ::nettool::blocks 6501 6508 lappend ::nettool::blocks 6512 6512 lappend ::nettool::blocks 6516 6542 lappend ::nettool::blocks 6545 6546 lappend ::nettool::blocks 6552 6557 lappend ::nettool::blocks 6559 6565 lappend ::nettool::blocks 6569 6578 lappend ::nettool::blocks 6584 6599 lappend ::nettool::blocks 6603 6618 lappend ::nettool::blocks 6629 6631 lappend ::nettool::blocks 6635 6639 lappend ::nettool::blocks 6641 6652 lappend ::nettool::blocks 6654 6654 lappend ::nettool::blocks 6658 6664 lappend ::nettool::blocks 6672 6677 lappend ::nettool::blocks 6680 6686 lappend ::nettool::blocks 6690 6695 lappend ::nettool::blocks 6698 6700 lappend ::nettool::blocks 6707 6713 lappend ::nettool::blocks 6717 6766 lappend ::nettool::blocks 6772 6776 lappend ::nettool::blocks 6779 6783 lappend ::nettool::blocks 6792 6800 lappend ::nettool::blocks 6802 6816 lappend ::nettool::blocks 6818 6830 lappend ::nettool::blocks 6832 6840 lappend ::nettool::blocks 6843 6849 lappend ::nettool::blocks 6851 6867 lappend ::nettool::blocks 6869 6887 lappend ::nettool::blocks 6889 6900 lappend ::nettool::blocks 6902 6934 lappend ::nettool::blocks 6937 6945 lappend ::nettool::blocks 6947 6950 lappend ::nettool::blocks 6952 6960 lappend ::nettool::blocks 6967 6968 lappend ::nettool::blocks 6971 6996 lappend ::nettool::blocks 7016 7017 lappend ::nettool::blocks 7026 7029 lappend ::nettool::blocks 7032 7039 lappend ::nettool::blocks 7041 7069 lappend ::nettool::blocks 7072 7072 lappend ::nettool::blocks 7074 7079 lappend ::nettool::blocks 7081 7094 lappend ::nettool::blocks 7096 7098 lappend ::nettool::blocks 7102 7106 lappend ::nettool::blocks 7108 7120 lappend ::nettool::blocks 7122 7127 lappend ::nettool::blocks 7130 7160 lappend ::nettool::blocks 7175 7180 lappend ::nettool::blocks 7182 7199 lappend ::nettool::blocks 7202 7226 lappend ::nettool::blocks 7230 7234 lappend ::nettool::blocks 7238 7261 lappend ::nettool::blocks 7263 7271 lappend ::nettool::blocks 7284 7299 lappend ::nettool::blocks 7360 7364 lappend ::nettool::blocks 7366 7390 lappend ::nettool::blocks 7396 7396 lappend ::nettool::blocks 7398 7399 lappend ::nettool::blocks 7403 7409 lappend ::nettool::blocks 7412 7420 lappend ::nettool::blocks 7422 7425 lappend ::nettool::blocks 7432 7436 lappend ::nettool::blocks 7438 7442 lappend ::nettool::blocks 7444 7470 lappend ::nettool::blocks 7472 7472 lappend ::nettool::blocks 7475 7490 lappend ::nettool::blocks 7492 7499 lappend ::nettool::blocks 7502 7507 lappend ::nettool::blocks 7512 7541 lappend ::nettool::blocks 7551 7559 lappend ::nettool::blocks 7561 7562 lappend ::nettool::blocks 7564 7565 lappend ::nettool::blocks 7567 7568 lappend ::nettool::blocks 7571 7573 lappend ::nettool::blocks 7575 7587 lappend ::nettool::blocks 7589 7623 lappend ::nettool::blocks 7625 7625 lappend ::nettool::blocks 7632 7632 lappend ::nettool::blocks 7634 7647 lappend ::nettool::blocks 7649 7671 lappend ::nettool::blocks 7678 7679 lappend ::nettool::blocks 7681 7688 lappend ::nettool::blocks 7690 7696 lappend ::nettool::blocks 7698 7699 lappend ::nettool::blocks 7701 7706 lappend ::nettool::blocks 7709 7719 lappend ::nettool::blocks 7721 7723 lappend ::nettool::blocks 7728 7733 lappend ::nettool::blocks 7735 7737 lappend ::nettool::blocks 7739 7740 lappend ::nettool::blocks 7745 7746 lappend ::nettool::blocks 7748 7776 lappend ::nettool::blocks 7780 7780 lappend ::nettool::blocks 7782 7785 lappend ::nettool::blocks 7788 7788 lappend ::nettool::blocks 7790 7793 lappend ::nettool::blocks 7795 7796 lappend ::nettool::blocks 7803 7809 lappend ::nettool::blocks 7811 7844 lappend ::nettool::blocks 7848 7868 lappend ::nettool::blocks 7873 7877 lappend ::nettool::blocks 7879 7879 lappend ::nettool::blocks 7881 7886 lappend ::nettool::blocks 7888 7899 lappend ::nettool::blocks 7904 7912 lappend ::nettool::blocks 7914 7931 lappend ::nettool::blocks 7934 7961 lappend ::nettool::blocks 7963 7966 lappend ::nettool::blocks 7968 7978 lappend ::nettool::blocks 7983 7996 lappend ::nettool::blocks 8004 8004 lappend ::nettool::blocks 8006 8007 lappend ::nettool::blocks 8009 8018 lappend ::nettool::blocks 8023 8024 lappend ::nettool::blocks 8027 8031 lappend ::nettool::blocks 8035 8039 lappend ::nettool::blocks 8041 8041 lappend ::nettool::blocks 8045 8050 lappend ::nettool::blocks 8061 8065 lappend ::nettool::blocks 8067 8073 lappend ::nettool::blocks 8075 8079 lappend ::nettool::blocks 8084 8085 lappend ::nettool::blocks 8089 8090 lappend ::nettool::blocks 8092 8096 lappend ::nettool::blocks 8098 8099 lappend ::nettool::blocks 8103 8114 lappend ::nettool::blocks 8119 8120 lappend ::nettool::blocks 8123 8127 lappend ::nettool::blocks 8133 8139 lappend ::nettool::blocks 8141 8147 lappend ::nettool::blocks 8150 8152 lappend ::nettool::blocks 8154 8159 lappend ::nettool::blocks 8163 8180 lappend ::nettool::blocks 8185 8190 lappend ::nettool::blocks 8193 8193 lappend ::nettool::blocks 8196 8198 lappend ::nettool::blocks 8203 8203 lappend ::nettool::blocks 8209 8229 lappend ::nettool::blocks 8231 8242 lappend ::nettool::blocks 8244 8275 lappend ::nettool::blocks 8277 8279 lappend ::nettool::blocks 8281 8291 lappend ::nettool::blocks 8295 8299 lappend ::nettool::blocks 8302 8312 lappend ::nettool::blocks 8314 8319 lappend ::nettool::blocks 8322 8350 lappend ::nettool::blocks 8352 8375 lappend ::nettool::blocks 8381 8382 lappend ::nettool::blocks 8384 8399 lappend ::nettool::blocks 8406 8414 lappend ::nettool::blocks 8418 8441 lappend ::nettool::blocks 8446 8449 lappend ::nettool::blocks 8451 8456 lappend ::nettool::blocks 8458 8469 lappend ::nettool::blocks 8475 8499 lappend ::nettool::blocks 8503 8553 lappend ::nettool::blocks 8556 8566 lappend ::nettool::blocks 8568 8599 lappend ::nettool::blocks 8601 8608 lappend ::nettool::blocks 8616 8664 lappend ::nettool::blocks 8667 8674 lappend ::nettool::blocks 8676 8685 lappend ::nettool::blocks 8687 8687 lappend ::nettool::blocks 8689 8698 lappend ::nettool::blocks 8700 8710 lappend ::nettool::blocks 8712 8731 lappend ::nettool::blocks 8734 8749 lappend ::nettool::blocks 8751 8762 lappend ::nettool::blocks 8767 8769 lappend ::nettool::blocks 8771 8777 lappend ::nettool::blocks 8779 8785 lappend ::nettool::blocks 8788 8792 lappend ::nettool::blocks 8794 8799 lappend ::nettool::blocks 8801 8803 lappend ::nettool::blocks 8805 8872 lappend ::nettool::blocks 8874 8879 lappend ::nettool::blocks 8882 8882 lappend ::nettool::blocks 8884 8887 lappend ::nettool::blocks 8895 8898 lappend ::nettool::blocks 8902 8909 lappend ::nettool::blocks 8914 8936 lappend ::nettool::blocks 8938 8952 lappend ::nettool::blocks 8955 8988 lappend ::nettool::blocks 8992 8997 lappend ::nettool::blocks 9003 9006 lappend ::nettool::blocks 9011 9019 lappend ::nettool::blocks 9027 9049 lappend ::nettool::blocks 9052 9079 lappend ::nettool::blocks 9081 9081 lappend ::nettool::blocks 9094 9099 lappend ::nettool::blocks 9108 9118 lappend ::nettool::blocks 9120 9121 lappend ::nettool::blocks 9124 9130 lappend ::nettool::blocks 9132 9159 lappend ::nettool::blocks 9165 9190 lappend ::nettool::blocks 9192 9199 lappend ::nettool::blocks 9218 9221 lappend ::nettool::blocks 9223 9254 lappend ::nettool::blocks 9256 9276 lappend ::nettool::blocks 9288 9291 lappend ::nettool::blocks 9296 9299 lappend ::nettool::blocks 9301 9305 lappend ::nettool::blocks 9307 9311 lappend ::nettool::blocks 9313 9317 lappend ::nettool::blocks 9319 9320 lappend ::nettool::blocks 9322 9342 lappend ::nettool::blocks 9345 9345 lappend ::nettool::blocks 9347 9373 lappend ::nettool::blocks 9375 9379 lappend ::nettool::blocks 9381 9386 lappend ::nettool::blocks 9391 9395 lappend ::nettool::blocks 9398 9399 lappend ::nettool::blocks 9403 9417 lappend ::nettool::blocks 9419 9442 lappend ::nettool::blocks 9446 9449 lappend ::nettool::blocks 9451 9499 lappend ::nettool::blocks 9501 9521 lappend ::nettool::blocks 9523 9534 lappend ::nettool::blocks 9537 9554 lappend ::nettool::blocks 9556 9591 lappend ::nettool::blocks 9601 9611 lappend ::nettool::blocks 9613 9613 lappend ::nettool::blocks 9615 9615 lappend ::nettool::blocks 9619 9627 lappend ::nettool::blocks 9633 9639 lappend ::nettool::blocks 9641 9665 lappend ::nettool::blocks 9669 9693 lappend ::nettool::blocks 9696 9699 lappend ::nettool::blocks 9701 9746 lappend ::nettool::blocks 9748 9749 lappend ::nettool::blocks 9751 9752 lappend ::nettool::blocks 9754 9761 lappend ::nettool::blocks 9763 9799 lappend ::nettool::blocks 9803 9874 lappend ::nettool::blocks 9877 9877 lappend ::nettool::blocks 9879 9887 lappend ::nettool::blocks 9890 9897 lappend ::nettool::blocks 9904 9908 lappend ::nettool::blocks 9910 9910 lappend ::nettool::blocks 9912 9924 lappend ::nettool::blocks 9926 9949 lappend ::nettool::blocks 9957 9965 lappend ::nettool::blocks 9967 9977 lappend ::nettool::blocks 9979 9986 lappend ::nettool::blocks 9989 9989 lappend ::nettool::blocks 10003 10003 lappend ::nettool::blocks 10011 10022 lappend ::nettool::blocks 10024 10049 lappend ::nettool::blocks 10052 10054 lappend ::nettool::blocks 10056 10079 lappend ::nettool::blocks 10082 10099 lappend ::nettool::blocks 10105 10106 lappend ::nettool::blocks 10108 10109 lappend ::nettool::blocks 10112 10112 lappend ::nettool::blocks 10118 10127 lappend ::nettool::blocks 10130 10159 lappend ::nettool::blocks 10163 10199 lappend ::nettool::blocks 10202 10251 lappend ::nettool::blocks 10253 10259 lappend ::nettool::blocks 10261 10287 lappend ::nettool::blocks 10289 10320 lappend ::nettool::blocks 10322 10438 lappend ::nettool::blocks 10440 10499 lappend ::nettool::blocks 10501 10539 lappend ::nettool::blocks 10545 10630 lappend ::nettool::blocks 10632 10799 lappend ::nettool::blocks 10801 10804 lappend ::nettool::blocks 10806 10808 lappend ::nettool::blocks 10811 10859 lappend ::nettool::blocks 10861 10879 lappend ::nettool::blocks 10881 10989 lappend ::nettool::blocks 10991 10999 lappend ::nettool::blocks 11002 11094 lappend ::nettool::blocks 11096 11102 lappend ::nettool::blocks 11107 11107 lappend ::nettool::blocks 11113 11160 lappend ::nettool::blocks 11166 11170 lappend ::nettool::blocks 11176 11200 lappend ::nettool::blocks 11203 11207 lappend ::nettool::blocks 11209 11210 lappend ::nettool::blocks 11212 11318 lappend ::nettool::blocks 11322 11366 lappend ::nettool::blocks 11368 11370 lappend ::nettool::blocks 11372 11429 lappend ::nettool::blocks 11431 11488 lappend ::nettool::blocks 11490 11599 lappend ::nettool::blocks 11601 11622 lappend ::nettool::blocks 11624 11719 lappend ::nettool::blocks 11721 11722 lappend ::nettool::blocks 11724 11750 lappend ::nettool::blocks 11752 11795 lappend ::nettool::blocks 11797 11875 lappend ::nettool::blocks 11878 11966 lappend ::nettool::blocks 11968 11996 lappend ::nettool::blocks 12011 12011 lappend ::nettool::blocks 12014 12108 lappend ::nettool::blocks 12110 12120 lappend ::nettool::blocks 12122 12167 lappend ::nettool::blocks 12169 12171 lappend ::nettool::blocks 12173 12299 lappend ::nettool::blocks 12301 12301 lappend ::nettool::blocks 12303 12320 lappend ::nettool::blocks 12323 12344 lappend ::nettool::blocks 12346 12752 lappend ::nettool::blocks 12754 12864 lappend ::nettool::blocks 12866 13159 lappend ::nettool::blocks 13161 13215 lappend ::nettool::blocks 13219 13222 lappend ::nettool::blocks 13225 13399 lappend ::nettool::blocks 13401 13719 lappend ::nettool::blocks 13723 13723 lappend ::nettool::blocks 13725 13781 lappend ::nettool::blocks 13784 13784 lappend ::nettool::blocks 13787 13817 lappend ::nettool::blocks 13824 13893 lappend ::nettool::blocks 13895 13928 lappend ::nettool::blocks 13931 13999 lappend ::nettool::blocks 14003 14032 lappend ::nettool::blocks 14035 14140 lappend ::nettool::blocks 14143 14144 lappend ::nettool::blocks 14146 14148 lappend ::nettool::blocks 14151 14153 lappend ::nettool::blocks 14155 14249 lappend ::nettool::blocks 14251 14413 lappend ::nettool::blocks 14415 14935 lappend ::nettool::blocks 14938 14999 lappend ::nettool::blocks 15001 15001 lappend ::nettool::blocks 15003 15117 lappend ::nettool::blocks 15119 15344 lappend ::nettool::blocks 15346 15362 lappend ::nettool::blocks 15364 15554 lappend ::nettool::blocks 15556 15659 lappend ::nettool::blocks 15661 15739 lappend ::nettool::blocks 15741 15997 lappend ::nettool::blocks 16004 16019 lappend ::nettool::blocks 16022 16160 lappend ::nettool::blocks 16163 16308 lappend ::nettool::blocks 16312 16359 lappend ::nettool::blocks 16362 16366 lappend ::nettool::blocks 16369 16383 lappend ::nettool::blocks 16385 16618 lappend ::nettool::blocks 16620 16664 lappend ::nettool::blocks 16667 16899 lappend ::nettool::blocks 16901 16949 lappend ::nettool::blocks 16951 16990 lappend ::nettool::blocks 16996 17006 lappend ::nettool::blocks 17008 17183 lappend ::nettool::blocks 17186 17218 lappend ::nettool::blocks 17223 17233 lappend ::nettool::blocks 17236 17499 lappend ::nettool::blocks 17501 17554 lappend ::nettool::blocks 17556 17728 lappend ::nettool::blocks 17730 17753 lappend ::nettool::blocks 17757 17776 lappend ::nettool::blocks 17778 17999 lappend ::nettool::blocks 18001 18103 lappend ::nettool::blocks 18105 18135 lappend ::nettool::blocks 18137 18180 lappend ::nettool::blocks 18188 18240 lappend ::nettool::blocks 18244 18261 lappend ::nettool::blocks 18263 18462 lappend ::nettool::blocks 18464 18633 lappend ::nettool::blocks 18636 18768 lappend ::nettool::blocks 18770 18880 lappend ::nettool::blocks 18882 18887 lappend ::nettool::blocks 18889 18999 lappend ::nettool::blocks 19001 19006 lappend ::nettool::blocks 19008 19019 lappend ::nettool::blocks 19021 19190 lappend ::nettool::blocks 19192 19193 lappend ::nettool::blocks 19195 19282 lappend ::nettool::blocks 19284 19314 lappend ::nettool::blocks 19316 19397 lappend ::nettool::blocks 19399 19409 lappend ::nettool::blocks 19413 19538 lappend ::nettool::blocks 19542 19787 lappend ::nettool::blocks 19789 19997 lappend ::nettool::blocks 20004 20004 lappend ::nettool::blocks 20006 20011 lappend ::nettool::blocks 20015 20045 lappend ::nettool::blocks 20047 20047 lappend ::nettool::blocks 20050 20166 lappend ::nettool::blocks 20168 20201 lappend ::nettool::blocks 20203 20221 lappend ::nettool::blocks 20223 20479 lappend ::nettool::blocks 20481 20669 lappend ::nettool::blocks 20671 20998 lappend ::nettool::blocks 21001 21009 lappend ::nettool::blocks 21011 21552 lappend ::nettool::blocks 21555 21589 lappend ::nettool::blocks 21591 21799 lappend ::nettool::blocks 21801 21844 lappend ::nettool::blocks 21850 21999 lappend ::nettool::blocks 22006 22124 lappend ::nettool::blocks 22126 22127 lappend ::nettool::blocks 22129 22221 lappend ::nettool::blocks 22223 22272 lappend ::nettool::blocks 22274 22304 lappend ::nettool::blocks 22306 22342 lappend ::nettool::blocks 22344 22346 lappend ::nettool::blocks 22348 22349 lappend ::nettool::blocks 22352 22536 lappend ::nettool::blocks 22538 22554 lappend ::nettool::blocks 22556 22762 lappend ::nettool::blocks 22764 22799 lappend ::nettool::blocks 22801 22950 lappend ::nettool::blocks 22952 22999 lappend ::nettool::blocks 23006 23052 lappend ::nettool::blocks 23054 23271 lappend ::nettool::blocks 23273 23332 lappend ::nettool::blocks 23334 23399 lappend ::nettool::blocks 23403 23455 lappend ::nettool::blocks 23458 23545 lappend ::nettool::blocks 23547 23999 lappend ::nettool::blocks 24007 24241 lappend ::nettool::blocks 24243 24248 lappend ::nettool::blocks 24250 24320 lappend ::nettool::blocks 24323 24464 lappend ::nettool::blocks 24466 24553 lappend ::nettool::blocks 24555 24576 lappend ::nettool::blocks 24578 24675 lappend ::nettool::blocks 24679 24679 lappend ::nettool::blocks 24681 24753 lappend ::nettool::blocks 24755 24849 lappend ::nettool::blocks 24851 24921 lappend ::nettool::blocks 24923 24999 lappend ::nettool::blocks 25010 25470 lappend ::nettool::blocks 25472 25575 lappend ::nettool::blocks 25577 25603 lappend ::nettool::blocks 25605 25792 lappend ::nettool::blocks 25794 25899 lappend ::nettool::blocks 25904 25953 lappend ::nettool::blocks 25956 25999 lappend ::nettool::blocks 26001 26132 lappend ::nettool::blocks 26134 26207 lappend ::nettool::blocks 26209 26259 lappend ::nettool::blocks 26264 26485 lappend ::nettool::blocks 26488 26488 lappend ::nettool::blocks 26490 26999 lappend ::nettool::blocks 27010 27344 lappend ::nettool::blocks 27346 27441 lappend ::nettool::blocks 27443 27503 lappend ::nettool::blocks 27505 27781 lappend ::nettool::blocks 27783 27875 lappend ::nettool::blocks 27877 27998 lappend ::nettool::blocks 28002 28118 lappend ::nettool::blocks 28120 28199 lappend ::nettool::blocks 28201 28239 lappend ::nettool::blocks 28241 29117 lappend ::nettool::blocks 29119 29166 lappend ::nettool::blocks 29170 29998 lappend ::nettool::blocks 30005 30259 lappend ::nettool::blocks 30261 30831 lappend ::nettool::blocks 30833 30998 lappend ::nettool::blocks 31000 31019 lappend ::nettool::blocks 31021 31028 lappend ::nettool::blocks 31030 31399 lappend ::nettool::blocks 31401 31415 lappend ::nettool::blocks 31417 31456 lappend ::nettool::blocks 31458 31619 lappend ::nettool::blocks 31621 31684 lappend ::nettool::blocks 31686 31764 lappend ::nettool::blocks 31766 32033 lappend ::nettool::blocks 32035 32248 lappend ::nettool::blocks 32250 32482 lappend ::nettool::blocks 32484 32634 lappend ::nettool::blocks 32637 32766 lappend ::nettool::blocks 32778 32800 lappend ::nettool::blocks 32802 32810 lappend ::nettool::blocks 32812 32895 lappend ::nettool::blocks 32897 33122 lappend ::nettool::blocks 33124 33330 lappend ::nettool::blocks 33332 33332 lappend ::nettool::blocks 33335 33433 lappend ::nettool::blocks 33435 33655 lappend ::nettool::blocks 33657 34248 lappend ::nettool::blocks 34250 34377 lappend ::nettool::blocks 34380 34566 lappend ::nettool::blocks 34568 34961 lappend ::nettool::blocks 34965 34979 lappend ::nettool::blocks 34981 34999 lappend ::nettool::blocks 35007 35353 lappend ::nettool::blocks 35358 36000 lappend ::nettool::blocks 36002 36411 lappend ::nettool::blocks 36413 36421 lappend ::nettool::blocks 36423 36442 lappend ::nettool::blocks 36445 36523 lappend ::nettool::blocks 36525 36601 lappend ::nettool::blocks 36603 36699 lappend ::nettool::blocks 36701 36864 lappend ::nettool::blocks 36866 37474 lappend ::nettool::blocks 37476 37482 lappend ::nettool::blocks 37484 37653 lappend ::nettool::blocks 37655 37999 lappend ::nettool::blocks 38002 38200 lappend ::nettool::blocks 38204 38799 lappend ::nettool::blocks 38801 38864 lappend ::nettool::blocks 38866 39680 lappend ::nettool::blocks 39682 39999 lappend ::nettool::blocks 40001 40403 lappend ::nettool::blocks 40405 40840 lappend ::nettool::blocks 40844 40852 lappend ::nettool::blocks 40854 41110 lappend ::nettool::blocks 41112 41120 lappend ::nettool::blocks 41122 41793 lappend ::nettool::blocks 41798 42507 lappend ::nettool::blocks 42511 42999 lappend ::nettool::blocks 43001 44320 lappend ::nettool::blocks 44323 44443 lappend ::nettool::blocks 44445 44543 lappend ::nettool::blocks 44545 44552 lappend ::nettool::blocks 44554 44599 lappend ::nettool::blocks 44601 44899 lappend ::nettool::blocks 44901 44999 lappend ::nettool::blocks 45002 45044 lappend ::nettool::blocks 45046 45053 lappend ::nettool::blocks 45055 45677 lappend ::nettool::blocks 45679 45823 lappend ::nettool::blocks 45826 45965 lappend ::nettool::blocks 45967 46997 lappend ::nettool::blocks 47002 47099 lappend ::nettool::blocks 47101 47556 lappend ::nettool::blocks 47558 47623 lappend ::nettool::blocks 47625 47805 lappend ::nettool::blocks 47807 47807 lappend ::nettool::blocks 47810 47999 lappend ::nettool::blocks 48006 48048 lappend ::nettool::blocks 48051 48127 lappend ::nettool::blocks 48130 48555 lappend ::nettool::blocks 48557 48618 lappend ::nettool::blocks 48620 48652 lappend ::nettool::blocks 48654 48999 lappend ::nettool::blocks 49001 65535 |
Added modules/nettool/generic.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | ::namespace eval ::nettool {} ### # topic: 825cd25953c2cc896a96006b7f454e00 # title: Return pairings of MAC numbers to IP addresses on the local network ### proc ::nettool::arp_table {} {} ### # topic: 92ebbfa155883ad41c37d3f843392be4 # title: Return list of broadcast addresses for local networks ### proc ::nettool::broadcast_list {} {} ### # topic: 15d9bc96ec6ce31d4c8f99a425a9c02c # description: Return Processor utilization ### proc ::nettool::busy {} {} ### # topic: 187cfa1827097c5cdf1c40c656cedfcc # description: Return time since booted ### proc ::nettool::cpuinfo {} {} ### # topic: 58295f2544f43827e855d09dc3ee625a ### proc ::nettool::diskless_client {} { return 0 } ### # topic: 57fdc331bc60c7bf2bd3f3214e9a906f ### proc ::nettool::hwaddr_to_ipaddr {hwaddr args} {} ### # topic: dd2e2c0810cea69909399808f2a68949 # title: Return a list of unique hardware ids ### proc ::nettool::hwid_list {} { set result {} foreach mac [::nettool::mac_list] { lappend result 0x[string map {: {}} $num] } if {[llength $result]} { return $result } return 0x010203040506 } ### # topic: 4b87d977492bd10802bfc0327cd07ac2 # title: Return list of network interfaces ### proc ::nettool::if_list {} {} ### # topic: d2932eb0ea8cc9f6a865c1ab7cdd4572 # description: # Called on package load to build any static # structures to cache data that would be time # consuming to call on the fly ### proc ::nettool::init {} {} ### # topic: 417672d3f31b80d749588365af88baf6 # title: Return list of ip addresses for this computer (primary first) ### proc ::nettool::ip_list {} {} ### # topic: ac9d6815d47f60d45930f0c8c8ae8f16 # title: Return list of mac numbers for this computer (primary first) ### proc ::nettool::mac_list {} {} ### # topic: c42343f20e3afd2884a5dd1c219e4415 ### proc ::nettool::platform {} { variable platform return $platform } ### # Provide empty implementations ### |
Added modules/nettool/locateport.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | package provide nettool::available_ports 0.1 ::namespace eval ::nettool {} ### # topic: 4a6ac5d7529bac9a223872dd7566e0b3 ### proc ::nettool::allocate_port startingport { foreach {start end} $::nettool::blocks { if { $end <= $startingport } continue if { $start > $startingport } { set i $start } else { set i $startingport } for {} {$i <= $end} {incr i} { if {[string is true -strict [get ::nettool::used_ports($i)]]} continue if {[catch {socket -server NOOP $i} chan]} continue close $chan set ::nettool::used_ports($i) 1 return $i } } error "Could not locate a port" } ### # topic: ce8e812f4c4548cdae7b055c36f39b77 ### proc ::nettool::claim_port {port {protocol tcp}} { set ::nettool::used_ports($port) 1 } ### # topic: ebafbb52e53e0600dd30e386de5fa5c9 ### proc ::nettool::find_port startingport { foreach {start end} $::nettool::blocks { if { $end <= $startingport } continue if { $start > $startingport } { set i $start } else { set i $startingport } for {} {$i <= $end} {incr i} { if {[string is true -strict [get ::nettool::used_ports($i)]]} continue return $i } } error "Could not locate a port" } ### # topic: d01f726e91e49aea83f74d5f602674bb ### proc ::nettool::port_busy port { ### # Check our private list of used ports ### if {[string is true -strict [get ::nettool::used_ports($port)]]} { return 1 } foreach {start end} $::nettool::blocks { if { $port >= $start && $port <= $end } { return 0 } } return 1 } ### # topic: 9356fda270fe7d83373c6ab20cd4b03e ### proc ::nettool::release_port {port {protocol tcp}} { set ::nettool::used_ports($port) 0 } set here [file dirname [file normalize [info script]]] if {[file exists [file join $here available_ports.tcl]]} { source [file join $here available_ports.tcl] } |
Added modules/nettool/nettool.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package provide nettool 0.3 package require platform # Uses the "ip" package from tcllib package require ip if {[info command ::ladd] eq {}} { proc ::ladd {varname args} { upvar 1 $varname var if ![info exists var] { set var {} } foreach item $args { if {$item in $var} continue lappend var $item } return $var } } if {[info command ::get] eq {}} { proc ::get varname { upvar 1 $varname var if {[info exists var]} { return [set var] } return {} } } set here [file dirname [file normalize [info script]]] ::namespace eval ::nettool {} set genus [lindex [split [::platform::generic] -] 0] dict set ::nettool::platform tcl_os $::tcl_platform(os) dict set ::nettool::platform odie_class $::tcl_platform(platform) dict set ::nettool::platform odie_genus $genus dict set ::nettool::platform odie_target [::platform::generic] dict set ::nettool::platform odie_species [::platform::identify] source [file join $here generic.tcl] set platfile [file join $here platform_$::tcl_platform(platform).tcl] if {[file exists $platfile]} { source $platfile } set genfile [file join $here platform_$::tcl_platform(platform)_$genus.tcl] if {[file exists $genfile]} { source $genfile } ::nettool::init |
Added modules/nettool/nettool.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | set here [file dirname [file normalize [info script]]] source $here/nettool.tcl source $here/locateport.tcl # Test that known port is busy if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import ::tcltest::* } # Test known busy ports foreach port { 80 3020 21 7794 } { ::tcltest::test port-busy-$port \ "Test that port busy returns true for known port $port" \ [list ::nettool::port_busy $port] 1 } # Test known free ports # And test the full range at 7790-7792 to ensure there # are now edge cases at the start and end of a range foreach port { 1028 2446 7790 7791 7792 7792 } { ::tcltest::test port-free-$port \ "Test that port busy returns false for known port $port" \ [list ::nettool::port_busy $port] 0 } # Test that "next" for block 7790 return 7790 ::tcltest::test port-find-0001 \ "Test that port find returns the first port in unclaimed block starting at 7790" \ [list ::nettool::find_port 7790] 7790 foreach {port nextport comment} { 7790 7791 {Start of block} 7791 7792 {...} 7792 7793 {End of block} 7793 7795 {Start of new block} } { ::nettool::claim_port $port ::tcltest::test port-claim-0001 \ "Test that port busy returns true after $port is claimed" \ [list ::nettool::port_busy $port] 1 # Test that claiming a port makes it busy ::tcltest::test port-find-0002 \ "Test that port find returns the next port in unclaimed block starting at $port following claim" \ [list ::nettool::find_port $port] $nextport } set port 7790 ::nettool::claim_port $port ::tcltest::test port-claim-0002 \ "Test that port busy returns true after $port is claimed" \ [list ::nettool::port_busy $port] 1 ::nettool::release_port $port ::tcltest::test port-claim-0003 \ "Test that port busy returns false after $port is release" \ [list ::nettool::port_busy $port] 0 # Test that claiming a port makes it busy ::tcltest::test port-find-0004 \ "Test that port find returns the next port in released block starting at $port following claim" \ [list ::nettool::find_port 7790] 7790 foreach {port nextport comment} { 7790 7791 {Start of block} 7791 7792 {...} 7792 7793 {End of block} 7793 7795 {Start of new block} } { ::nettool::release_port $port } # Test that claiming a port makes it busy ::tcltest::test port-allocate-0004 \ "Test allocate port returns the address of an unclaimed spot and claims it" \ [list ::nettool::allocate_port 7790] 7790 ::tcltest::test port-allocate-0005 \ "Test allocate port returns the next address of an claimed spot and claims it" \ [list ::nettool::allocate_port 7790] 7791 ::tcltest::test port-allocate-0006 \ "Test allocate port returns the next address of an claimed spot and claims it" \ [list ::nettool::allocate_port 7790] 7792 |
Added modules/nettool/pkgIndex.tcl.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded nettool 0.3 [list source [file join $dir nettool.tcl]] package ifneeded nettool::available_ports 0.1 [list source [file join $dir available_ports.tcl]] |
Added modules/nettool/platform_unix.tcl.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ### # Generic answers that can be answered on most if not all unix platforms ### ::namespace eval ::nettool {} ### # topic: 825cd25953c2cc896a96006b7f454e00 # title: Return pairings of MAC numbers to IP addresses on the local network # description: Under unix, we call the arp command for arp table resolution ### proc ::nettool::arp_table {} { set result {} set dat [exec arp -a] foreach line [split $dat \n] { set host [lindex $line 0] set ip [lindex $line 1] set macid [lindex $line 3] lappend result $macid [string range $ip 1 end-1] } return $result } |
Added modules/nettool/platform_unix_linux.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | ::namespace eval ::nettool {} ### # topic: c592732bb435d83ab1f70259fc56dbd7 ### proc ::cat filename { set fin [open $filename r] set dat [read $fin] close $fin return $dat } ### # topic: 92ebbfa155883ad41c37d3f843392be4 # title: Return list of broadcast addresses for local networks ### proc ::nettool::broadcast_list {} { set result {} foreach {iface info} [dump] { if {[dict exists $info ipv4 Bcast:]} { lappend result [dict get $info ipv4 Bcast:] } } return [lsort -unique $result] } ### # topic: 187cfa1827097c5cdf1c40c656cedfcc # description: Return time since booted ### proc ::nettool::cpuinfo args { variable cpuinfo if {![info exists cpuinfo]} { set cpuinfo {} set dat [cat /proc/meminfo] foreach line [split $dat \n] { switch [lindex $line 0] { MemTotal: { # Normalize to MB dict set cpuinfo memory [lindex $line 1]/1024 } } } set cpus 0 set dat [cat /proc/cpuinfo] foreach line [split $dat \n] { set idx [string first : $line] set field [string trim [string range $line 0 $idx-1]] set value [string trim [string range $line $idx+1 end]] switch $field { processor { incr cpus } {cpu family} { dict set cpuinfo family $value } model { dict set cpuinfo model $value } stepping { dict set cpuinfo stepping $value } vendor_id { dict set cpuinfo vendor $value } {model name} { dict set cpuinfo brand $value } {cpu MHz} { dict set cpuinfo speed $value } flags { dict set cpuinfo features $value } } } dict set cpuinfo cpus $cpus } if {$args eq "<list>"} { return [dict keys $cpuinfo] } if {[llength $args]==0} { return $cpuinfo } if {[llength $args]==1} { return [dict get $cpuinfo [lindex $args 0]] } set result {} foreach item $args { if {[dict exists $cpuinfo $item]} { dict set result $item [dict get $cpuinfo $item] } else { dict set result $item {} } } return $result } ### # topic: aa8eda4fb59296a1a34d8d600ca54e28 # description: Dump interfaces ### proc ::nettool::dump {} { set data [exec ifconfig] set iface {} set result {} foreach line [split $data \n] { if {[string index $line 0] in {" " "\t"} } { # Indented line appends the prior iface switch [lindex $line 0] { inet { foreach tuple [lrange $line 1 end] { set idx [string first : $tuple] set field [string trim [string range $tuple 0 $idx]] set value [string trim [string range $tuple $idx+1 end]] dict set result $iface ipv4 [string trim $field] [string trim $value] } } inet6 { dict set result $iface ipv6 addr: [lindex $line 2] foreach tuple [lrange $line 3 end] { set idx [string first : $tuple] set field [string trim [string range $tuple 0 $idx]] set value [string trim [string range $tuple $idx+1 end]] dict set result $iface ipv6 [string trim $field] [string trim $value] } } } } else { # Non-intended line - new iface set iface [lindex $line 0] set idx [lsearch $line HWaddr] if {$idx >= 0 } { dict set result $iface ether: [lindex $line $idx+1] } } } return $result } ### # topic: 417672d3f31b80d749588365af88baf6 # title: Return list of ip addresses for this computer (primary first) ### proc ::nettool::ip_list {} { set result {} foreach {iface info} [dump] { if {[dict exists $info ipv4 addr:]} { lappend result [dict get $info ipv4 addr:] } } ldelete result 127.0.0.1 return $result } ### # topic: ac9d6815d47f60d45930f0c8c8ae8f16 # title: Return list of mac numbers for this computer (primary first) ### proc ::nettool::mac_list {} { set result {} foreach {iface info} [dump] { if {[dict exists $info ether:]} { lappend result [dict get $info ether:] } } return $result } ### # topic: a43b6f42141820e0ba1094840d0f6fc0 ### proc ::nettool::network_list {} { foreach {iface info} [dump] { if {![dict exists $info ipv4 addr:]} continue if {![dict exists $info ipv4 Mask:]} continue #set mask [::ip::maskToInt $netmask] set addr [dict get $info ipv4 addr:] set mask [dict get $info ipv4 Mask:] set addri [::ip::toInteger $addr] lappend result [ip::nativeToPrefix [list [expr {$addri & $mask}] $mask] -ipv4] } return $result } ### # topic: e7db1ae1b5b98a1bb4384f0a4fe81f42 ### proc ::nettool::status {} { set result {} set dat [cat /proc/loadavg] dict set result load_average [lrange $dat 0 2] set cpus [cpuinfo cpus].0 dict set result load [expr {[lindex $dat 0]/$cpus}] set processes [split [lindex $dat 3] /] dict set result processes_running [lindex $processes 0] dict set result processes_total [lindex $processes 1] set dat [cat /proc/meminfo] foreach line [split $dat \n] { switch [lindex $line 0] { MemTotal: { # Normalize to MB dict set result memory_total [expr {[lindex $line 1]/1024}] } MemFree: { # Normalize to MB dict set result memory_free [expr {[lindex $line 1]/1024}] } } } return $result } ### # topic: 59bf977ad7287b4d90346fad639aed34 ### proc ::nettool::uptime_report {} { set result {} set dat [split [exec uptime] ,] puts $dat dict set result time [lindex [lindex $dat 0] 0] dict set result uptime [lrange [lindex $dat 0] 1 end] dict set result users [lindex [lindex $dat 2] 0] dict set result load_1_minute [lindex [lindex $dat 3] end] dict set result load_5_minute [lindex [lindex $dat 4] end] dict set result load_15_minute [lindex [lindex $dat 5] end] return $result } unset -nocomplain ::nettool::cpuinfo |
Added modules/nettool/platform_unix_macosx.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | ::namespace eval ::nettool {} ### # topic: 825cd25953c2cc896a96006b7f454e00 # title: Return pairings of MAC numbers to IP addresses on the local network # description: Under macosx, we call the arp command for arp table resolution ### proc ::nettool::arp_table {} { set result {} set dat [exec arp -a] foreach line [split $dat \n] { set host [lindex $line 0] set ip [lindex $line 1] set macid [lindex $line 3] lappend result $macid [string range $ip 1 end-1] } return $result } ### # topic: 92ebbfa155883ad41c37d3f843392be4 # title: Return list of broadcast addresses for local networks ### proc ::nettool::broadcast_list {} { set result {} foreach {iface info} [dump] { if {[dict exists $info broadcast:]} { lappend result [dict get $info broadcast:] } } return [lsort -unique $result] } ### # topic: 187cfa1827097c5cdf1c40c656cedfcc # description: Return time since booted ### proc ::nettool::cpuinfo args { variable cpuinfo if {![info exists cpuinfo]} { set cpuinfo {} dict set cpuinfo machine [exec sysctl -n hw.machine] dict set cpuinfo cpus [exec sysctl -n hw.ncpu] # Normalize to MB dict set cpuinfo memory [expr {[exec sysctl -n hw.memsize] / 1048576}] dict set cpuinfo vendor [exec sysctl -n machdep.cpu.vendor] dict set cpuinfo brand [exec sysctl -n machdep.cpu.brand_string] dict set cpuinfo model [exec sysctl -n machdep.cpu.model] dict set cpuinfo speed [expr {[exec sysctl -n hw.cpufrequency]/1000000}] dict set cpuinfo family [exec sysctl -n machdep.cpu.family] dict set cpuinfo stepping [exec sysctl -n machdep.cpu.stepping] dict set cpuinfo features [exec sysctl -n machdep.cpu.features] dict set cpuinfo diskless [] } if {$args eq "<list>"} { return [dict keys $cpuinfo] } if {[llength $args]==0} { return $cpuinfo } if {[llength $args]==1} { return [dict get $cpuinfo [lindex $args 0]] } set result {} foreach item $args { if {[dict exists $cpuinfo $item]} { dict set result $item [dict get $cpuinfo $item] } else { dict set result $item {} } } return $result } ### # topic: aa8eda4fb59296a1a34d8d600ca54e28 # description: Dump interfaces ### proc ::nettool::dump {} { set data [exec ifconfig] set iface {} set result {} foreach line [split $data \n] { if {[string index $line 0] in {" " "\t"} } { # Indented line appends the prior iface foreach {field value} $line { dict set result $iface [string trimright $field :]: $value } } else { # Non-intended line - new iface set iface [lindex $line 0] } } return $result } ### # topic: dd2e2c0810cea69909399808f2a68949 # title: Return a list of unique hardware addresses ### proc ::nettool::hwid_list {} { variable cached_data set result {} if {![info exists cached_data]} { set cached_data [exec system_profiler SPHardwareDataType] } set serial {} set hwuuid {} set result {} catch { foreach line [split $cached_data \n] { if { [lindex $line 0] == "Serial" && [lindex $line 1] == "Number" } { set serial [lindex $line end] } if { [lindex $line 0] == "Hardware" && [lindex $line 1] == "UUID:" } { set hwuuid [lindex $line end] } } } if { $hwuuid != {} } { lappend result 0x[string map {- {}} $hwuuid] } # Blank serial number? if { $serial != {} } { set sn [binary scan $serial H* hash] lappend result 0x$hash } if {[llength $result]} { return $result } foreach mac [::nettool::mac_list] { lappend result 0x[string map {: {}} $num] } if {[llength $result]} { return $result } return 0x010203040506 } ### # topic: d2932eb0ea8cc9f6a865c1ab7cdd4572 # description: # Called on package load to build any static # structures to cache data that would be time # consuming to call on the fly ### proc ::nettool::init {} { unset -nocomplain [namespace current]::cpuinfo } ### # topic: 417672d3f31b80d749588365af88baf6 # title: Return list of ip addresses for this computer (primary first) ### proc ::nettool::ip_list {} { set result {} foreach {iface info} [dump] { if {[dict exists $info inet:]} { lappend result [dict get $info inet:] } } ldelete result 127.0.0.1 return $result } ### # topic: ac9d6815d47f60d45930f0c8c8ae8f16 # title: Return list of mac numbers for this computer (primary first) ### proc ::nettool::mac_list {} { set result {} foreach {iface info} [dump] { if {[dict exists $info ether:]} { lappend result [dict get $info ether:] } } return $result } ### # topic: a43b6f42141820e0ba1094840d0f6fc0 ### proc ::nettool::network_list {} { foreach {iface info} [dump] { if {![dict exists $info inet:]} continue if {![dict exists $info netmask:]} continue #set mask [::ip::maskToInt $netmask] set addr [dict get $info inet:] set mask [dict get $info netmask:] set addri [::ip::toInteger $addr] lappend result [ip::nativeToPrefix [list [expr {$addri & $mask}] $mask] -ipv4] } return $result } ### # topic: e7db1ae1b5b98a1bb4384f0a4fe81f42 ### proc ::nettool::status {} { set result {} set loaddat [lindex [exec sysctl -n vm.loadavg] 0] set cpus [cpuinfo cpus].0 dict set result load [expr {[lindex $loaddat 0]/$cpus}] dict set result load_average_1 [lindex $loaddat 0] dict set result load_average_5 [lindex $loaddat 1] dict set result load_average_15 [lindex $loaddat 2] set total [exec sysctl -n hw.memsize] dict set result memory_total [expr {$total / 1048576}] set used 0 foreach {amt} [exec sysctl -n sysctl -n machdep.memmap] { incr used $amt } dict set result memory_free [expr {($total - $used) / 1048576}] return $result } |
Added modules/nettool/platform_windows.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | package require twapi ::namespace eval ::nettool {} ### # topic: 825cd25953c2cc896a96006b7f454e00 # title: Return pairings of MAC numbers to IP addresses on the local network # description: Under macosx, we call the arp command for arp table resolution ### proc ::nettool::arp_table {} { set result {} catch { foreach element [::twapi::get_arp_table] { foreach {ifidx macid ipaddr type} { lappend result [string map {- :} $macid] $ipaddr } } } return $result } ### # topic: 92ebbfa155883ad41c37d3f843392be4 # title: Return list of broadcast addresses for local networks ### proc ::nettool::broadcast_list {} { set result {} foreach iface [::twapi::get_netif_indices] { set dat [::twapi::GetIpAddrTable $iface] foreach element $dat { foreach {addr ifindx netmask broadcast reamsize} $element break; lappend result [::ip::broadcastAddress $addr/$netmask] } } return [lsort -unique $result] } ### # topic: 57fdc331bc60c7bf2bd3f3214e9a906f ### proc ::nettool::hwaddr_to_ipaddr args { return [::twapi::hwaddr_to_ipaddr {*}$args] } ### # topic: dd2e2c0810cea69909399808f2a68949 # title: Return a list of unique hardware ids ### proc ::nettool::hwid_list {} { # Use the serial number on the hard drive catch {exec {*}[auto_execok vol] c:} voldat set num [lindex [lindex [split $voldat \n] end] end] return 0x[string map {- {}} $num] } ### # topic: 4b87d977492bd10802bfc0327cd07ac2 # title: Return list of network interfaces ### proc ::nettool::if_list {} { return [::twapi::get_netif_indices] } ### # topic: 417672d3f31b80d749588365af88baf6 # title: Return list of ip addresses for this computer (primary first) ### set body {} if {[::twapi::get_ip_addresses] ne {}} { set body { set result [::twapi::get_ip_addresses] ldelete result 127.0.0.1 return $result } } elseif {[info command ::twapi::get_system_ipaddrs] ne {}} { # They changed commands names on me... set body { set result [::twapi::get_system_ipaddrs] ldelete result 127.0.0.1 return $result } } proc ::nettool::ip_list {} $body ### # topic: ac9d6815d47f60d45930f0c8c8ae8f16 # title: Return list of mac numbers for this computer (primary first) ### proc ::nettool::mac_list {} { set result {} foreach iface [::twapi::get_netif_indices] { foreach {field value} [::twapi::get_netif_info $iface -physicaladdress] { if { $value eq {} } continue lappend result [string map {- :} $value] } } return $result } ### # topic: a43b6f42141820e0ba1094840d0f6fc0 ### proc ::nettool::network_list {} { set result {} foreach iface [::twapi::get_netif_indices] { set dat [::twapi::GetIpAddrTable $iface] foreach element $dat { foreach {addr ifindx netmask broadcast reamsize} $element break; set mask [::ip::maskToInt $netmask] set addri [::ip::toInteger $addr] lappend result [ip::nativeToPrefix [list [expr {$addri & $mask}] $netmask] -ipv4] } } return [lsort -unique $result] } package provide nettool::platform::windows 0.1 |
Added modules/nettool/scripts/build_services.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | ### # topic: 1b090f3648b8120c7df65ecbac65d548 # description: # This script digests the raw data from # http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv # And produces a summary ### proc ::record {service port type usage} { if { $port eq {} } return if {$service eq {} && $type in {tcp udp {}} && $usage != "Reserved"} { ladd ::available_port($port) {*}$type return } unset -nocomplain ::available_port($port) lappend ::busy_port($port) $type $usage #puts [list busy $service $port $type $usage] } for {set x 0} {$x < 65536} {incr x} { set ::available_port($x) {} } package require listutil package require csv set fin [open [lindex $argv 0] r] set headers [gets $fin] set thisline {} while {[gets $fin line]>=0} { append thisline \n$line if {![csv::iscomplete $line]} continue set lline [csv::split $line] if [catch { set service [lindex $lline 0] set port [lindex $lline 1] set type [lindex $lline 2] set usage [lindex $lline 3] }] continue if {![string is integer -strict $port]} { set startport [lindex [split $port -] 0] set endport [lindex [split $port -] 1] if {[string is integer -strict $startport] && [string is integer -strict $endport]} { for {set i $startport} {$i<=$endport} {incr i} { record $service $i $type $usage } continue } } record $service $port $type $usage } close $fin set fout [open available_ports.tcl w] puts $fout { package provide nettool::available_ports 0.1 namespace eval ::nettool { set blocks {} } } set startport 0 set endport 0 foreach {port avail} [lsort -integer -stride 2 [array get available_port]] { # Don't bother with ports below 1024 # Most operating systems won't let us access them anyway if {$port < 1024 } continue if { $endport == ($port-1) } { set endport $port continue } if {$startport} { puts $fout [list lappend ::nettool::blocks $startport $endport] } set startport $port set endport $port } if { $startport } { puts $fout [list lappend ::nettool::blocks $startport $endport] } close $fout exit |
Added modules/nettool/service-names-port-numbers.csv.
more than 10,000 changes
Added modules/odie/global.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | ### # global.tcl # # This file defines Global functions that are genuinely useful # # Copyright (c) 2012 Sean Woods # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. ### ### # topic: 4dffef8f-9697-b8e7-e868-c3ad6cae2f00 # description: Export a namespace as an ensemble command ### proc ::ensemble_build namespace { #if {[info command $namespace] ne {}} { # return #} namespace eval $namespace { namespace export * namespace ensemble create } } ### # topic: 74aa80cd-d83e-751b-aa89-c413b6834b12 # description: # Provide an implementation in Tcl # for a function if none exists already in C ### proc ::ensemble_method {name args body} { #puts [list ensemble_method $name [info script]] if {[info command $name] ne {}} return #proc $name $args "puts $name \n $body" proc $name $args $body } ### # topic: b5d61f3f-0b7b-1501-3a31-36f8bb51d09a # type: ensemble_method ### ensemble_method ::dictGet {dictvar args} { if {[dict exists $dictvar {*}$args]} { return [dict get $dictvar {*}$args] } return {} } ### # topic: 58ef6deb-c315-edf9-c8ec-fe5ed710b07d # type: ensemble_method ### ensemble_method ::get varname { upvar 1 $varname var if {[info exists var]} { return [set var] } return {} } ### # topic: 84ff222d-9f57-4a40-5804-0b99485cd6ff # type: ensemble_method ### ensemble_method ::ladd {varname args} { upvar 1 $varname var if ![info exists var] { set var {} } foreach item $args { if { $item ni $var} { lappend var $item } } return $var } ### # topic: 9591fb2c-2d1d-be3e-b92d-6e993589a452 # type: ensemble_method ### ensemble_method ::ladd_sorted {varname args} { upvar 1 $varname var if ![info exists var] { set var {} } foreach item $args { lappend var $item } set var [lsort -dictionary -unique $var] return $var } ### # topic: f0367444-a3ae-9186-1ee8-31f757fc4621 # type: ensemble_method ### ensemble_method ::ldelete {varname args} { upvar 1 $varname var if ![info exists var] { return } foreach item [lsort -unique $args] { while {[set i [lsearch $var $item]]>=0} { set var [lreplace $var $i $i] } } } ### # topic: 7eb9cd40-c276-2439-3938-445605f3aca2 # type: ensemble_method ### ensemble_method ::noop args { } |
Added modules/odie/index.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | ### # index.tcl # # This file loads the rest of the odie package # # Copyright (c) 2012 Sean Woods # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. ### ### # This version is always higher than the one embedded with # the odie core to better exploit the C accellerated tools ### package provide odie 0.2 ### # topic: 8b8d3c47197b0abe5005b2a644ebcb7d ### proc ::load_path {path {ordered_files {}}} { lappend loaded index.tcl pkgIndex.tcl if {[file exists [file join $path baseclass.tcl]]} { lappend loaded baseclass.tcl uplevel #0 [list source [file join $path baseclass.tcl]] } foreach file $ordered_files { lappend loaded $file uplevel #0 [list source [file join $path $file]] } foreach file [glob -nocomplain [file join $path *.tcl]] { if {[file tail $file] in $loaded} continue lappend loaded [file tail $file] uplevel #0 [list source $file] } } set loaded {pkgIndex.tcl index.tcl} set odie_path [file dirname [info script]] load_path $odie_path { global.tcl stack.tcl } ### # Load the C accellerated modules ### catch {package require odielib} |
Added modules/odie/listutil.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 | ### BEGIN COPYRIGHT BLURB # # TAO - Tcl Architecture of Objects # Copyright (C) 2003 Sean Woods # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # ### END COPYRIGHT BLURB package provide listutil 1.7 proc ::tcl::mathfunc::pi {} [list return [expr 4.0*atan(1.0)]] proc ::tcl::mathfunc::pio2 {} [list return [expr 2.0*atan(1.0)]] proc ::tcl::mathfunc::sqrt2 {} [list return [expr sqrt(2)]] proc ::tcl::mathfunc::e {} [list return [expr exp(1)]] # [dict getnull] is like [dict get] but returns empty string for missing keys. proc ::tcl::dict::getnull {dictionary args} { if {[exists $dictionary {*}$args]} { get $dictionary {*}$args } } namespace ensemble configure dict -map [dict replace\ [namespace ensemble configure dict -map] getnull ::tcl::dict::getnull] if 0 { proc ::string::capitalize word { # Return $word with its first letter capitalized # Needed because sometimes [string totitle] plays games with us return [string toupper [string index $word 0]][string range $word 1 end] } } proc iscommand {name} { expr {([string length [info command $name]] > 0) || [auto_load $name]} } proc makeproc {name arglist body} { if {![iscommand $name]} { proc $name $arglist $body } } ### # Make a new md5 command that # behaves like the one in tobe ### if {[info command ::md5::md5] != {} } { makeproc md5Hash string { return [string tolower [::md5::md5 -hex $string]] } } else { makeproc md5Hash string { return [irmmd5 $string] } } ### # proc: ::is_zero value # title: Returns 1 if the value is zero or null ### makeproc is_zero value { if {[string is false $value]} { return 1 } if { $value == 0.0 } { return 1 } return 0 } ### # proc: ::is_zero value # title: Returns 1 if the value is zero or null ### makeproc if_zero {value replace} { if {[string is false $value]} { return $replace } if { $value == 0.0 } { return $replace } return $value } ### # proc: ::is_zero value # title: Returns 1 if the value is zero or null ### makeproc if_null {value replace} { if {[string is false $value]} { return $replace } if { $value == 0.0 } { return $replace } return $value } ### # Print a dict to the screen ### makeproc pdict value { puts *** foreach {var val} $value { puts "$var: [list $val]" } puts *** } ############################################################## # General use procedures # proc: unique # title: Returns a unique number # makeproc unique {{val 0}} { incr val makeproc unique "{val $val}" [info body unique] return $val } makeproc setIfHigher {varname value} { upvar 1 $varname var if { $var < $value } { set var $value } } makeproc now {} { return [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"] } makeproc dflt {varname i b} { upvar 1 $varname a if {![info exists a($i)] || $a($i)==""} { return $b } if {$a($i)<0.0} { return 0 } return [expr {int($a($i))}] } makeproc setVarsFromDict {dictval varlist} { foreach var $varlist { upvar 1 $var $var if ![info exists $var] { set $var {} } if [dict exists $dictval $var] { set $var [dict get $dictval $var] } } } makeproc addAutoPath path { set path [file normalize $path] if ![file exists $path] return if { $path in $::auto_path } return foreach item $::auto_path { if { [file normalize $item] == $path } return } lappend ::auto_path $path } makeproc K {x y} { return $x } makeproc combine args { foreach i $args { set c [llength $i] if { $c % 2 != 0 } { foreach {var val} $i { puts [list $var $val] } error [list Unbalanced Dict: $i $args] } lappend outstr $c } foreach {var val} [lindex $args 0] { dict set result $var $val } #set result [lindex $args 0] foreach item [lrange $args 1 end] { foreach {var val} $item { if { $val == {} } { if ![dict exists $result $var] { dict set result $var $val continue } } if { $val == "NULL" } { dict set result $var {} continue } dict set result $var $val } } return $result } makeproc dictGet {dict args} { if {[dict exists $dict {*}$args]} { return [dict get $dict {*}$args] } return {} } ### Sets or unsets a flag value makeproc flag {cmnd varname {val {}} {cd 0}} { upvar 1 $varname var if ![info exists var] { set var {} } if [regexp , $var] { set cd 1 set var [split $var ,] } switch $cmnd { add { ladd var $val } remove { ldelete var $val } fix { set cd 1 } } if $cd { set var [join $var ,] } } # # A Pure Tcl implementation of the lutil command # makeproc lutil {command varname args} { upvar 1 $varname stack if ![info exists stack] { set stack {} } set result {} switch $command { pop { set result [lindex $stack 0] set stack [lrange $stack 1 end] set setvarn [lindex $args 0] if { $setvarn != {} } { upvar 1 $setvarn setvar set setvar $result update idletasks set result [expr [llength $stack] > 0] } } queue { lappend stack [lindex $args 0] } push { set stack [linsert [K $stack [set stack {}]] 0 [lindex $args 0]] } peek { set result [lindex $stack 0] } } return $result } makeproc ldelete {varname args} { upvar 1 $varname var if ![info exists var] { return } foreach item [lsort -unique $args] { while {[set i [lsearch $var $item]]>=0} { set var [lreplace $var $i $i] } } } makeproc ladd {varname args} { upvar 1 $varname var if ![info exists var] { set var {} } foreach item $args { if {$item in $var} continue lappend var $item } return $var } makeproc ladd_sorted {varname item} { upvar 1 $varname var lappend var $item set var [lsort -dictionary -unique $var] return $var } makeproc lset {varname fieldlist datalist} { upvar 1 $varname var set idx -1 foreach field $fieldlist { set var($field) [lindex $datalist [incr idx]] } } makeproc listset {datalist varlist} { set idx -1 foreach fieldVar $varlist { upvar 1 $fieldVar $fieldVar set $fieldVar [lindex $datalist [incr idx]] } } makeproc stripList arglist { set lastitem $arglist while { [llength $arglist] == 1 } { set lastitem $arglist set arglist [lindex $arglist 0] } if { [llength $arglist] == 0 } { set arglist $lastitem } return $arglist } ### # Reverse the order of a list ### makeproc lreverse {list} { set result {} foreach item $list { set result [linsert [K $result [set result {}]] 0 $item] } return $result } makeproc lmerge {varname valuelist} { upvar 1 $varname var if ![info exists var] { set var {} } set result {} foreach a $var { if { [lsearch $result $a] < 0 } { lappend result $a } } foreach a $valuelist { if { [lsearch $result $a] < 0 } { lappend result $a } } set var $result return $result } makeproc get varname { upvar 1 $varname var if [info exists var] { return [set var] } } makeproc dictget {dict field} { if [dict exists $dict $field] { return [dict get $dict $field] } } makeproc pop {stackvar resultvar} { upvar 1 $stackvar stack upvar 1 $resultvar result if { [set len [llength $stack]] == 0 } { set result {} return 0 } set result [lindex $stack end] if { $len == 1 } { set stack {} } else { set stack [lrange $stack 0 end-1] } return 1 } makeproc peek {stackvar} { upvar 1 $stackvar stack return [lindex $stack end] } makeproc push {stackvar value} { upvar 1 $stackvar stack lappend stack $value } makeproc queue {stackvar val} { upvar 1 $stackvar stack lappend stack $val } makeproc lintersect {list value} { foreach item $value { if {[lsearch $list $item] >= 0} { return true } } return false } |
Added modules/odie/logicset.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | ### # logicset.tcl # # This file defines the method needed for the tcl inplementation # of logical sets # # Copyright (c) 2012 Sean Woods # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. ### ::namespace eval ::logicset {} ### # topic: bd1fdea7e32f113f6b4bb1fe7455d5fd # type: ensemble_method ### ensemble_method ::logicset::cartesian_product {A B} { set result {} foreach alement [sort $A] { foreach blement [sort $B] { lappend result $alement $blement } } return $result } ### # topic: d3032d6ab1d1656eafaba99bb80e09a9 # type: ensemble_method ### ensemble_method ::logicset::contains {setval args} { foreach arg $args { if { $arg ni $setval } { return 0 } } return 1 } ### # topic: d642d345929481a0cd8838b825966629 # type: ensemble_method ### ensemble_method ::logicset::empty setval { if {[llength $setval] == 0} { return 1 } return 0 } ### # topic: aaf4612470853353aba388d113cd0e78 # type: ensemble_method ### ensemble_method ::logicset::intersection {A B} { set result {} foreach element $B { if { $element in $A } { add result $element } } return $result } ### # topic: 1a95091f2c9c788e2af75cb815d3b5d2 # type: ensemble_method ### ensemble_method ::logicset::permutation items { set l [llength $items] if {[llength $items] < 2} { return $items } else { for {set j 0} {$j < $l} {incr j} { foreach subcomb [permutation [lreplace $items $j $j]] { lappend res [concat [lindex $items $j] $subcomb] } } return $res } } ### # topic: 5ff774e03ce3fd9638e03c83a0c7b1a4 # type: ensemble_method ### ensemble_method ::logicset::remove {setvar args} { upvar 1 $setvar result if {![info exists result]} { set result {} } foreach arg $args { while {[set idx [lsearch $result $arg]] >= 0} { set result [lreplace $result $idx $idx] } } return $result } ### # topic: ca1ffbc9d3fffbc44a2ed63ed823573d # type: ensemble_method ### ensemble_method ::logicset::set_difference {U A} { set result {} foreach element $A { if { $element ni $U } { add result $element } } return $result } ### # topic: ddb930853ab4a3b361e1fc2133a7c79a # type: ensemble_method ### ensemble_method ::logicset::sort A { return [lsort -dictionary -unique $A] } ### # topic: 13e4ecbf7e85e27fc293a4b42ad48c30 # type: ensemble_method ### ensemble_method ::logicset::symmetric_difference {A B} { set result {} foreach element $A { if { $element ni $B } { add result $element } } foreach element $B { if { $element ni $A } { add result $element } } return $result } ### # topic: 490744282a40261f0d63192290657d9b # type: ensemble_method ### ensemble_method ::logicset::union {A B} { set result {} add result {*}$A add result {*}$B return $result } ### # topic: 30386566-6238-3764-3963-3962333665383 # type: ensemble_method ### #ensemble_method ::logicset::add {setvar args} { # upvar 1 $setvar result # if {![info exists result]} { # set result {} # } # foreach arg $args { # if { $args ni $result } { # lappend result $arg # } # } # return $result #} ensemble_build ::logicset |
Added modules/odie/queue.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | ### # queue.tcl # # This file defines the method needed for the tcl inplementation # of queues # # Copyright (c) 2012 Sean Woods # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. ### ::namespace eval ::queue {} ### # topic: faf2fff48cce65a91aa9aebbd88abb93 # type: ensemble_method ### ensemble_method ::queue::add {queuevar value} { upvar 1 $queuevar queue lappend queue $value } ### # topic: efe3829e743557ee356a2e454a035da1 # type: ensemble_method ### ensemble_method ::queue::head_insert {queuevar value} { upvar 1 $queuevar queue set queue [linsert $queue 0 $value] } ### # topic: 19078eef4bc4b4949b90eabf7e88ac1d # type: ensemble_method ### ensemble_method ::queue::next {queuevar resultvar} { upvar 1 $queuevar queue upvar 1 $resultvar result if { [set len [llength $queue]] == 0 } { set result {} return 0 } set result [lindex $queue 0] if { $len == 1 } { set queue {} } else { set queue [lrange $queue 1 end] } return 1 } ensemble_build ::queue |
Added modules/odie/stack.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | ### # queue.tcl # # This file defines the method needed for the tcl inplementation # of stacks # # Copyright (c) 2012 Sean Woods # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. ### ::namespace eval ::stack {} ### # topic: 31fdcfe670ebf4542963201fa6d15d70 # type: ensemble_method ### ensemble_method ::stack::head_insert {stackvar value} { upvar 1 $stackvar stack set stack [linsert $stack 0 $value] } ### # topic: dc304faab514d4bac7a5f14287c4a710 # type: ensemble_method ### ensemble_method ::stack::peek stackvar { upvar 1 $stackvar stack if {[info exists stack]} { return [lindex $stack end] } return {} } ### # topic: 798279561a8bedda397cf9d076b9d8a9 # type: ensemble_method ### ensemble_method ::stack::pop {stackvar resultvar} { upvar 1 $stackvar stack upvar 1 $resultvar result if { [set len [llength $stack]] == 0 } { set result {} return 0 } set result [lindex $stack end] if { $len == 1 } { set stack {} } else { set stack [lrange $stack 0 end-1] } return 1 } ### # topic: de540806071f5e11d27034e040a4b46c # type: ensemble_method ### ensemble_method ::stack::push {stackvar args} { upvar 1 $stackvar stack lappend stack {*}$args } ensemble_build ::stack |
Added modules/odie/urlget.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ### # Tool to download file from the web # Enhacements to http ### package provide http::wget 0.1 package require http ::namespace eval ::http {} ### # topic: 1ed971e03ae89415e2f25d20e59b765c # description: this proc contributed by Donal Fellows ### proc ::http::_followRedirects {url args} { while 1 { set token [geturl $url -validate 1] set ncode [ncode $token] if { $ncode eq "404" } { error "URL Not found" } switch -glob $ncode { 30[1237] {### redirect - see below ###} default {cleanup $token ; return $url} } upvar #0 $token state array set meta [set ${token}(meta)] cleanup $token if {![info exists meta(Location)]} { return $url } set url $meta(Location) unset meta } return $url } ### # topic: fced7bc395596569ac225a719c686dcc ### proc ::http::wget {url destfile {verbose 1}} { set tmpchan [open $destfile w] fconfigure $tmpchan -translation binary if { $verbose } { puts [list GETTING [file tail $destfile] from $url] } set real_url [_followRedirects $url] set token [geturl $real_url -channel $tmpchan -binary yes] if {[ncode $token] != "200"} { error "DOWNLOAD FAILED" } cleanup $token close $tmpchan } |
Changes to modules/zip/decode.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 | # -*- tcl -*- # ### ### ### ######### ######### ######### ## Copyright (c) 2008-2012 ActiveState Software Inc. ## Andreas Kupries ## BSD License ## # Package providing commands for the decoding of basic zip-file # structures. package require Tcl 8.4 package require fileutil::magic::mimetype ; # Tcllib. File type determination via magic constants package require fileutil::decode 0.2 ; # Framework for easy decoding of files. | > > > | | > > > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # -*- tcl -*- # ### ### ### ######### ######### ######### ## Copyright (c) 2008-2012 ActiveState Software Inc. ## Andreas Kupries ## BSD License ## # Package providing commands for the decoding of basic zip-file # structures. package require Tcl 8.4 package require fileutil::magic::mimetype ; # Tcllib. File type determination via magic constants package require fileutil::decode 0.2 ; # Framework for easy decoding of files. namespace eval ::zipfile::decode {} if {[package vcompare $tcl_patchLevel "8.6"] < 0} { # Only needed pre-8.6 package require Trf ; # Wrapper to zlib package require zlibtcl ; # Zlib usage. No commands, access through Trf set ::zipfile::decode::native_zip_functs 0 } else { set ::zipfile::decode::native_zip_functs 1 } namespace eval ::zipfile::decode { namespace import ::fileutil::decode::* } # ### ### ### ######### ######### ######### ## Convenience command, decode and copy to dir |
︙ | ︙ | |||
161 162 163 164 165 166 167 | } deflate { go $fd(fileloc) nbytes $fd(csize) set out [::open $dst w] fconfigure $out -translation binary -encoding binary -eofchar {} | > | > > > > | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | } deflate { go $fd(fileloc) nbytes $fd(csize) set out [::open $dst w] fconfigure $out -translation binary -encoding binary -eofchar {} if {$::zipfile::decode::native_zip_functs} { puts -nonewline $out \ [zlib inflate [getval]] } else { puts -nonewline $out \ [zip -mode decompress -nowrap 1 -- \ [getval]] } ::close $out } default { return -code error -errorcode {ZIP DECODE BAD COMPRESSION} \ "Unable to handle file \"$src\" compressed with method \"$fd(cm)\"" } } |
︙ | ︙ |
Changes to modules/zip/encode.tcl.
1 2 3 4 5 6 7 8 9 10 11 | # -*- tcl -*- # ### ### ### ######### ######### ######### ## Copyright (c) 2008-2009 ActiveState Software Inc. ## Andreas Kupries ## BSD License ## # Package providing commands for the generation of a zip archive. # FUTURE: Write convenience command to zip up a whole directory. package require Tcl 8.4 | | > > > > > > > > > > > < > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # -*- tcl -*- # ### ### ### ######### ######### ######### ## Copyright (c) 2008-2009 ActiveState Software Inc. ## Andreas Kupries ## BSD License ## # Package providing commands for the generation of a zip archive. # FUTURE: Write convenience command to zip up a whole directory. package require Tcl 8.4 namespace eval ::zipfile {} namespace eval ::zipfile::decode {} namespace eval ::zipfile::encode {} if {[package vcompare $tcl_patchLevel "8.6"] < 0} { # Pre-8.6 Implementation package require Trf ; # Wrapper to zlib package require zlibtcl package require logger ; # Tracing package require crc32 ; # Tcllib, crc calculation package require snit ; # Tcllib, OO core package require fileutil ; # zipdir convenience method ; # Zlib usage. No commands, access through Trf # ### ### ### ######### ######### ######### ## logger::initNamespace ::zipfile::encode snit::type ::zipfile::encode { |
︙ | ︙ | |||
129 130 131 132 133 134 135 | if {$size == 0} { set csize $size ; # compressed size is uncompressed set cm 0 ; # uncompressed set gpbf 0 ; # No flags } else { set temp [fileutil::tempfile] | > | | < | < | | | | | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | if {$size == 0} { set csize $size ; # compressed size is uncompressed set cm 0 ; # uncompressed set gpbf 0 ; # No flags } else { set temp [fileutil::tempfile] set in [setbinary [open $src r]] set out [setbinary [open $temp w]] # Go for maximum compression zip -mode compress -nowrap 1 -level 9 -attach $out fcopy $in $out close $in close $out set csize [file size $temp] if {$csize < $size} { # Compression is good. Throw away the incoming file, # should we own it, then switch the upcoming copy # operation over to the compressed file. Which we do # own. |
︙ | ︙ | |||
361 362 363 364 365 366 367 368 369 370 371 | file mkdir [file dirname $dst] $z write $dst $z destroy return } } # ### ### ### ######### ######### ######### ## Ready package provide zipfile::encode 0.3 return | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 | file mkdir [file dirname $dst] $z write $dst $z destroy return } } } else { # mkzip.tcl -- Copyright (C) 2009 Pat Thoyts <[email protected]> # # Create ZIP archives in Tcl. # # Create a zipkit using mkzip filename.zkit -zipkit -directory xyz.vfs # or a zipfile using mkzip filename.zip -directory dirname -exclude "*~" # # version 1.2 package require Tcl 8.6 namespace eval zip {} proc ::zipfile::encode::setbinary chan { fconfigure $chan \ -encoding binary \ -translation binary \ -eofchar {} } # zip::timet_to_dos # # Convert a unix timestamp into a DOS timestamp for ZIP times. # # DOS timestamps are 32 bits split into bit regions as follows: # 24 16 8 0 # +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ # |Y|Y|Y|Y|Y|Y|Y|m| |m|m|m|d|d|d|d|d| |h|h|h|h|h|m|m|m| |m|m|m|s|s|s|s|s| # +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ # proc ::zipfile::encode::timet_to_dos {time_t} { set s [clock format $time_t -format {%Y %m %e %k %M %S}] scan $s {%d %d %d %d %d %d} year month day hour min sec expr {(($year-1980) << 25) | ($month << 21) | ($day << 16) | ($hour << 11) | ($min << 5) | ($sec >> 1)} } # zip::pop -- # # Pop an element from a list # proc ::zipfile::encode::pop {varname {nth 0}} { upvar $varname args set r [lindex $args $nth] set args [lreplace $args $nth $nth] return $r } # zip::walk -- # # Walk a directory tree rooted at 'path'. The excludes list can be # a set of glob expressions to match against files and to avoid. # The match arg is internal. # eg: walk library {CVS/* *~ .#*} to exclude CVS and emacs cruft. # proc ::zipfile::encode::walk {base {excludes ""} {match *} {path {}}} { set result {} set imatch [file join $path $match] set files [glob -nocomplain -tails -types f -directory $base $imatch] foreach file $files { set excluded 0 foreach glob $excludes { if {[string match $glob $file]} { set excluded 1 break } } if {!$excluded} {lappend result $file} } foreach dir [glob -nocomplain -tails -types d -directory $base $imatch] { set subdir [walk $base $excludes $match $dir] if {[llength $subdir]>0} { set result [concat $result [list $dir] $subdir] } } return $result } # zipfile::encode::add_file_to_archive -- # # Add a single file to a zip archive. The zipchan channel should # already be open and binary. You may provide a comment for the # file The return value is the central directory record that # will need to be used when finalizing the zip archive. # # FIX ME: should handle the current offset for non-seekable channels # proc ::zipfile::encode::add_file_to_archive {zipchan base path {comment ""}} { set fullpath [file join $base $path] set mtime [timet_to_dos [file mtime $fullpath]] if {[file isdirectory $fullpath]} { append path / } set utfpath [encoding convertto utf-8 $path] set utfcomment [encoding convertto utf-8 $comment] set flags [expr {(1<<11)}] ;# utf-8 comment and path set method 0 ;# store 0, deflate 8 set attr 0 ;# text or binary (default binary) set version 20 ;# minumum version req'd to extract set extra "" set crc 0 set size 0 set csize 0 set data "" set seekable [expr {[tell $zipchan] != -1}] if {[file isdirectory $fullpath]} { set attrex 0x41ff0010 ;# 0o040777 (drwxrwxrwx) } elseif {[file executable $fullpath]} { set attrex 0x81ff0080 ;# 0o100777 (-rwxrwxrwx) } else { set attrex 0x81b60020 ;# 0o100666 (-rw-rw-rw-) if {[file extension $fullpath] in {".tcl" ".txt" ".c"}} { set attr 1 ;# text } } if {[file isfile $fullpath]} { set size [file size $fullpath] if {!$seekable} {set flags [expr {$flags | (1 << 3)}]} } set offset [tell $zipchan] set local [binary format a4sssiiiiss PK\03\04 \ $version $flags $method $mtime $crc $csize $size \ [string length $utfpath] [string length $extra]] append local $utfpath $extra puts -nonewline $zipchan $local if {[file isfile $fullpath]} { # If the file is under 2MB then zip in one chunk, otherwize we use # streaming to avoid requiring excess memory. This helps to prevent # storing re-compressed data that may be larger than the source when # handling PNG or JPEG or nested ZIP files. if {$size < 0x00200000} { set fin [::open $fullpath rb] setbinary $fin set data [::read $fin] set crc [::zlib crc32 $data] set cdata [::zlib deflate $data] if {[string length $cdata] < $size} { set method 8 set data $cdata } close $fin set csize [string length $data] puts -nonewline $zipchan $data } else { set method 8 set fin [::open $fullpath rb] setbinary $fin set zlib [::zlib stream deflate] while {![eof $fin]} { set data [read $fin 4096] set crc [zlib crc32 $data $crc] $zlib put $data if {[string length [set zdata [$zlib get]]]} { incr csize [string length $zdata] puts -nonewline $zipchan $zdata } } close $fin $zlib finalize set zdata [$zlib get] incr csize [string length $zdata] puts -nonewline $zipchan $zdata $zlib close } if {$seekable} { # update the header if the output is seekable set local [binary format a4sssiiii PK\03\04 \ $version $flags $method $mtime $crc $csize $size] set current [tell $zipchan] seek $zipchan $offset puts -nonewline $zipchan $local seek $zipchan $current } else { # Write a data descriptor record set ddesc [binary format a4iii PK\7\8 $crc $csize $size] puts -nonewline $zipchan $ddesc } } set hdr [binary format a4ssssiiiisssssii PK\01\02 0x0317 \ $version $flags $method $mtime $crc $csize $size \ [string length $utfpath] [string length $extra]\ [string length $utfcomment] 0 $attr $attrex $offset] append hdr $utfpath $extra $utfcomment return $hdr } # zipfile::encode::mkzip -- # # Create a zip archive in 'filename'. If a file already exists it will be # overwritten by a new file. If '-directory' is used, the new zip archive # will be rooted in the provided directory. # -runtime can be used to specify a prefix file. For instance, # zip myzip -runtime unzipsfx.exe -directory subdir # will create a self-extracting zip archive from the subdir/ folder. # The -comment parameter specifies an optional comment for the archive. # # eg: zip my.zip -directory Subdir -runtime unzipsfx.exe *.txt # proc ::zipfile::encode::mkzip {filename args} { array set opts { -zipkit 0 -runtime "" -comment "" -directory "" -exclude {CVS/* */CVS/* *~ ".#*" "*/.#*"} } while {[string match -* [set option [lindex $args 0]]]} { switch -exact -- $option { -zipkit { set opts(-zipkit) 1 } -comment { set opts(-comment) [encoding convertto utf-8 [pop args 1]] } -runtime { set opts(-runtime) [pop args 1] } -directory {set opts(-directory) [file normalize [pop args 1]] } -exclude {set opts(-exclude) [pop args 1] } -- { pop args ; break } default { break } } pop args } set zf [::open $filename wb] setbinary $zf if {$opts(-runtime) ne ""} { set rt [::open $opts(-runtime) rb] setbinary $rt fcopy $rt $zf close $rt } elseif {$opts(-zipkit)} { set zkd "#!/usr/bin/env tclkit\n\# This is a zip-based Tcl Module\n" append zkd "package require vfs::zip\n" append zkd "vfs::zip::Mount \[info script\] \[info script\]\n" append zkd "if {\[file exists \[file join \[info script\] main.tcl\]\]} \{\n" append zkd " source \[file join \[info script\] main.tcl\]\n" append zkd "\}\n" append zkd \x1A puts -nonewline $zf $zkd } set count 0 set cd "" if {$opts(-directory) ne ""} { set paths [walk $opts(-directory) $opts(-exclude)] } else { set paths [glob -nocomplain {*}$args] } foreach path $paths { puts $path append cd [add_file_to_archive $zf $opts(-directory) $path] incr count } set cdoffset [tell $zf] set endrec [binary format a4ssssiis PK\05\06 0 0 \ $count $count [string length $cd] $cdoffset\ [string length $opts(-comment)]] append endrec $opts(-comment) puts -nonewline $zf $cd puts -nonewline $zf $endrec close $zf return } } # ### ### ### ######### ######### ######### ## Ready package provide zipfile::encode 0.3 return |
Changes to support/devel/sak/doc/toc_mods.txt.
︙ | ︙ | |||
38 39 40 41 42 43 44 45 46 47 48 49 50 51 | [division_end] [division_start blowfish] [item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}] [division_end] [division_start cache] [item modules/cache/async.man cache::async {Asynchronous in-memory cache}] [division_end] [division_start clock] [item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}] [item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}] [division_end] [division_start cmdline] [item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}] [division_end] | > > > | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | [division_end] [division_start blowfish] [item modules/blowfish/blowfish.man blowfish {Implementation of the Blowfish block cipher}] [division_end] [division_start cache] [item modules/cache/async.man cache::async {Asynchronous in-memory cache}] [division_end] [division_start cron] [item modules/odie/cron.man cron {Schedule recurring events in clock time}] [division_end] [division_start clock] [item modules/clock/iso8601.man clock_iso8601 {Parsing ISO 8601 dates/times}] [item modules/clock/rfc2822.man clock_rfc2822 {Parsing ISO 8601 dates/times}] [division_end] [division_start cmdline] [item modules/cmdline/cmdline.man cmdline {Procedures to process command lines and options.}] [division_end] |
︙ | ︙ |
Changes to support/installation/modules.tcl.
︙ | ︙ | |||
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | Module bench _tcl _null _null Module bibtex _tcl _man _exa Module blowfish _tcl _man _null Module cache _tcl _man _null Module calendar _tci _man _null Module clock _tcl _man _null Module cmdline _tcl _man _null Module comm _tcl _man _null Module control _tci _man _null Module coroutine _tcl _null _null Module counter _tcl _man _null Module crc _tcl _man _null Module csv _tcl _man _exa Module debug _tcl _null _null Module des _tcl _man _null Module dns _msg _man _exa Module docstrip _tcl _man _null Module doctools _doc _man _exa Module doctools2base _tcl _man _null | > > | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | Module bench _tcl _null _null Module bibtex _tcl _man _exa Module blowfish _tcl _man _null Module cache _tcl _man _null Module calendar _tci _man _null Module clock _tcl _man _null Module cmdline _tcl _man _null Module codebale _tcl _null _null Module comm _tcl _man _null Module control _tci _man _null Module coroutine _tcl _null _null Module counter _tcl _man _null Module crc _tcl _man _null Module cron _tcl _man _null Module csv _tcl _man _exa Module debug _tcl _null _null Module des _tcl _man _null Module dns _msg _man _exa Module docstrip _tcl _man _null Module doctools _doc _man _exa Module doctools2base _tcl _man _null |
︙ | ︙ | |||
98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Module multiplexer _tcl _man _null Module namespacex _tcl _man _null Module ncgi _tcl _man _null Module nmea _tcl _man _null Module nns _tcl _man _null Module nntp _tcl _man _exa Module ntp _tcl _man _exa Module oauth _tcl _man _null Module ooutil _tcl _man _null Module otp _tcl _man _null Module page _trt _man _null Module pki _tcl _man _null Module pluginmgr _tcl _man _null Module png _tcl _man _null | > > | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | Module multiplexer _tcl _man _null Module namespacex _tcl _man _null Module ncgi _tcl _man _null Module nmea _tcl _man _null Module nns _tcl _man _null Module nntp _tcl _man _exa Module ntp _tcl _man _exa Module nettool _tcl _null _null Module odie _tcl _man _null Module oauth _tcl _man _null Module ooutil _tcl _man _null Module otp _tcl _man _null Module page _trt _man _null Module pki _tcl _man _null Module pluginmgr _tcl _man _null Module png _tcl _man _null |
︙ | ︙ |