Tcl Source Code

Hex Artifact Content
Login

Artifact aabceb34350ccee6dfb54c25a4ac48448d5257f6c9f7311451c65f2fbe6e3401:


0000: 2f 2a 0a 20 2a 20 74 63 6c 41 70 70 49 6e 69 74  /*. * tclAppInit
0010: 2e 63 20 2d 2d 0a 20 2a 0a 20 2a 09 50 72 6f 76  .c --. *. *.Prov
0020: 69 64 65 73 20 61 20 64 65 66 61 75 6c 74 20 76  ides a default v
0030: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6d 61  ersion of the ma
0040: 69 6e 20 70 72 6f 67 72 61 6d 20 61 6e 64 20 54  in program and T
0050: 63 6c 5f 41 70 70 49 6e 69 74 0a 20 2a 09 70 72  cl_AppInit. *.pr
0060: 6f 63 65 64 75 72 65 20 66 6f 72 20 74 63 6c 73  ocedure for tcls
0070: 68 20 61 6e 64 20 6f 74 68 65 72 20 54 63 6c 2d  h and other Tcl-
0080: 62 61 73 65 64 20 61 70 70 6c 69 63 61 74 69 6f  based applicatio
0090: 6e 73 20 28 77 69 74 68 6f 75 74 20 54 6b 29 2e  ns (without Tk).
00a0: 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74  . *. * Copyright
00b0: 20 c2 a9 20 31 39 39 33 20 54 68 65 20 52 65 67   © 1993 The Reg
00c0: 65 6e 74 73 20 6f 66 20 74 68 65 20 55 6e 69 76  ents of the Univ
00d0: 65 72 73 69 74 79 20 6f 66 20 43 61 6c 69 66 6f  ersity of Califo
00e0: 72 6e 69 61 2e 0a 20 2a 20 43 6f 70 79 72 69 67  rnia.. * Copyrig
00f0: 68 74 20 c2 a9 20 31 39 39 34 2d 31 39 39 37 20  ht © 1994-1997 
0100: 53 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d 73  Sun Microsystems
0110: 2c 20 49 6e 63 2e 0a 20 2a 20 43 6f 70 79 72 69  , Inc.. * Copyri
0120: 67 68 74 20 c2 a9 20 31 39 39 38 2d 31 39 39 39  ght © 1998-1999
0130: 20 53 63 72 69 70 74 69 63 73 20 43 6f 72 70 6f   Scriptics Corpo
0140: 72 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 53 65  ration.. *. * Se
0150: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
0160: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
0170: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
0180: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
0190: 62 75 74 69 6f 6e 20 6f 66 0a 20 2a 20 74 68 69  bution of. * thi
01a0: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
01b0: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
01c0: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
01d0: 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 22 74   */..#include "t
01e0: 63 6c 2e 68 22 0a 23 69 66 20 54 43 4c 5f 4d 41  cl.h".#if TCL_MA
01f0: 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3c 20 39 0a  JOR_VERSION < 9.
0200: 23 20 20 20 69 66 20 64 65 66 69 6e 65 64 28 55  #   if defined(U
0210: 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 0a 23 09  SE_TCL_STUBS).#.
0220: 65 72 72 6f 72 20 22 44 6f 6e 27 74 20 62 75 69  error "Don't bui
0230: 6c 64 20 77 69 74 68 20 55 53 45 5f 54 43 4c 5f  ld with USE_TCL_
0240: 53 54 55 42 53 21 22 0a 23 20 20 20 65 6e 64 69  STUBS!".#   endi
0250: 66 0a 23 20 20 20 64 65 66 69 6e 65 20 54 63 6c  f.#   define Tcl
0260: 5f 4c 69 62 72 61 72 79 49 6e 69 74 50 72 6f 63  _LibraryInitProc
0270: 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e 69 74   Tcl_PackageInit
0280: 50 72 6f 63 0a 23 20 20 20 64 65 66 69 6e 65 20  Proc.#   define 
0290: 54 63 6c 5f 53 74 61 74 69 63 4c 69 62 72 61 72  Tcl_StaticLibrar
02a0: 79 20 54 63 6c 5f 53 74 61 74 69 63 50 61 63 6b  y Tcl_StaticPack
02b0: 61 67 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  age.#endif..#ifd
02c0: 65 66 20 54 43 4c 5f 54 45 53 54 0a 23 69 66 64  ef TCL_TEST.#ifd
02d0: 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 65  ef __cplusplus.e
02e0: 78 74 65 72 6e 20 22 43 22 20 7b 0a 23 65 6e 64  xtern "C" {.#end
02f0: 69 66 0a 65 78 74 65 72 6e 20 54 63 6c 5f 50 6f  if.extern Tcl_Po
0300: 73 74 49 6e 69 74 50 72 6f 63 20 20 20 20 54 63  stInitProc    Tc
0310: 6c 74 65 73 74 53 74 61 74 69 63 49 6e 69 74 3b  ltestStaticInit;
0320: 0a 65 78 74 65 72 6e 20 54 63 6c 5f 4c 69 62 72  .extern Tcl_Libr
0330: 61 72 79 49 6e 69 74 50 72 6f 63 20 54 63 6c 74  aryInitProc Tclt
0340: 65 73 74 5f 49 6e 69 74 3b 0a 65 78 74 65 72 6e  est_Init;.extern
0350: 20 54 63 6c 5f 4c 69 62 72 61 72 79 49 6e 69 74   Tcl_LibraryInit
0360: 50 72 6f 63 20 54 63 6c 74 65 73 74 5f 53 61 66  Proc Tcltest_Saf
0370: 65 49 6e 69 74 3b 0a 23 69 66 64 65 66 20 5f 5f  eInit;.#ifdef __
0380: 63 70 6c 75 73 70 6c 75 73 0a 7d 0a 23 65 6e 64  cplusplus.}.#end
0390: 69 66 0a 23 65 6e 64 69 66 20 2f 2a 20 54 43 4c  if.#endif /* TCL
03a0: 5f 54 45 53 54 20 2a 2f 0a 0a 23 69 66 64 65 66  _TEST */..#ifdef
03b0: 20 54 43 4c 5f 58 54 5f 54 45 53 54 0a 65 78 74   TCL_XT_TEST.ext
03c0: 65 72 6e 20 76 6f 69 64 09 09 20 20 20 58 74 54  ern void..   XtT
03d0: 6f 6f 6c 6b 69 74 49 6e 69 74 69 61 6c 69 7a 65  oolkitInitialize
03e0: 28 76 6f 69 64 29 3b 0a 65 78 74 65 72 6e 20 54  (void);.extern T
03f0: 63 6c 5f 4c 69 62 72 61 72 79 49 6e 69 74 50 72  cl_LibraryInitPr
0400: 6f 63 20 54 63 6c 78 74 74 65 73 74 5f 49 6e 69  oc Tclxttest_Ini
0410: 74 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 54 43 4c  t;.#endif /* TCL
0420: 5f 58 54 5f 54 45 53 54 20 2a 2f 0a 0a 2f 2a 0a  _XT_TEST */../*.
0430: 20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   * The following
0440: 20 61 6c 6c 6f 77 73 20 63 68 61 6e 67 69 6e 67   allows changing
0450: 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 20 66   of the script f
0460: 69 6c 65 20 72 65 61 64 20 61 74 20 73 74 61 72  ile read at star
0470: 74 75 70 2e 0a 20 2a 2f 0a 23 69 66 6e 64 65 66  tup.. */.#ifndef
0480: 20 54 43 4c 5f 52 43 5f 46 49 4c 45 0a 23 69 66   TCL_RC_FILE.#if
0490: 64 65 66 20 44 4a 47 50 50 0a 23 64 65 66 69 6e  def DJGPP.#defin
04a0: 65 20 54 43 4c 5f 52 43 5f 46 49 4c 45 20 22 7e  e TCL_RC_FILE "~
04b0: 2f 74 63 6c 73 68 72 63 2e 74 63 6c 22 0a 23 65  /tclshrc.tcl".#e
04c0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 54 43 4c 5f  lse.#define TCL_
04d0: 52 43 5f 46 49 4c 45 20 22 7e 2f 2e 74 63 6c 73  RC_FILE "~/.tcls
04e0: 68 72 63 22 0a 23 65 6e 64 69 66 0a 23 65 6e 64  hrc".#endif.#end
04f0: 69 66 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 66 6f  if../*. * The fo
0500: 6c 6c 6f 77 69 6e 67 20 23 69 66 20 62 6c 6f 63  llowing #if bloc
0510: 6b 20 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20  k allows you to 
0520: 63 68 61 6e 67 65 20 74 68 65 20 41 70 70 49 6e  change the AppIn
0530: 69 74 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 75  it function by u
0540: 73 69 6e 67 0a 20 2a 20 61 20 23 64 65 66 69 6e  sing. * a #defin
0550: 65 20 6f 66 20 54 43 4c 5f 4c 4f 43 41 4c 5f 41  e of TCL_LOCAL_A
0560: 50 50 49 4e 49 54 20 69 6e 73 74 65 61 64 20 6f  PPINIT instead o
0570: 66 20 72 65 77 72 69 74 69 6e 67 20 74 68 69 73  f rewriting this
0580: 20 65 6e 74 69 72 65 20 66 69 6c 65 2e 20 54 68   entire file. Th
0590: 65 0a 20 2a 20 23 69 66 20 63 68 65 63 6b 73 20  e. * #if checks 
05a0: 66 6f 72 20 74 68 61 74 20 23 64 65 66 69 6e 65  for that #define
05b0: 20 61 6e 64 20 75 73 65 73 20 54 63 6c 5f 41 70   and uses Tcl_Ap
05c0: 70 49 6e 69 74 20 69 66 20 69 74 20 64 6f 65 73  pInit if it does
05d0: 20 6e 6f 74 20 65 78 69 73 74 2e 0a 20 2a 2f 0a   not exist.. */.
05e0: 0a 23 69 66 6e 64 65 66 20 54 43 4c 5f 4c 4f 43  .#ifndef TCL_LOC
05f0: 41 4c 5f 41 50 50 49 4e 49 54 0a 23 64 65 66 69  AL_APPINIT.#defi
0600: 6e 65 20 54 43 4c 5f 4c 4f 43 41 4c 5f 41 50 50  ne TCL_LOCAL_APP
0610: 49 4e 49 54 20 54 63 6c 5f 41 70 70 49 6e 69 74  INIT Tcl_AppInit
0620: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
0630: 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 0a 23 20   MODULE_SCOPE.# 
0640: 20 20 64 65 66 69 6e 65 20 4d 4f 44 55 4c 45 5f    define MODULE_
0650: 53 43 4f 50 45 20 65 78 74 65 72 6e 0a 23 65 6e  SCOPE extern.#en
0660: 64 69 66 0a 4d 4f 44 55 4c 45 5f 53 43 4f 50 45  dif.MODULE_SCOPE
0670: 20 69 6e 74 20 54 43 4c 5f 4c 4f 43 41 4c 5f 41   int TCL_LOCAL_A
0680: 50 50 49 4e 49 54 28 54 63 6c 5f 49 6e 74 65 72  PPINIT(Tcl_Inter
0690: 70 20 2a 29 3b 0a 4d 4f 44 55 4c 45 5f 53 43 4f  p *);.MODULE_SCO
06a0: 50 45 20 69 6e 74 20 6d 61 69 6e 28 69 6e 74 2c  PE int main(int,
06b0: 20 63 68 61 72 20 2a 2a 29 3b 0a 0a 2f 2a 0a 20   char **);../*. 
06c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
06d0: 23 69 66 20 62 6c 6f 63 6b 20 61 6c 6c 6f 77 73  #if block allows
06e0: 20 79 6f 75 20 74 6f 20 63 68 61 6e 67 65 20 68   you to change h
06f0: 6f 77 20 54 63 6c 20 66 69 6e 64 73 20 74 68 65  ow Tcl finds the
0700: 20 73 74 61 72 74 75 70 0a 20 2a 20 73 63 72 69   startup. * scri
0710: 70 74 2c 20 70 72 69 6d 65 20 74 68 65 20 6c 69  pt, prime the li
0720: 62 72 61 72 79 20 6f 72 20 65 6e 63 6f 64 69 6e  brary or encodin
0730: 67 20 70 61 74 68 73 2c 20 66 69 64 64 6c 65 20  g paths, fiddle 
0740: 77 69 74 68 20 74 68 65 20 61 72 67 76 2c 20 65  with the argv, e
0750: 74 63 2e 2c 0a 20 2a 20 77 69 74 68 6f 75 74 20  tc.,. * without 
0760: 6e 65 65 64 69 6e 67 20 74 6f 20 72 65 77 72 69  needing to rewri
0770: 74 65 20 54 63 6c 5f 4d 61 69 6e 28 29 0a 20 2a  te Tcl_Main(). *
0780: 2f 0a 0a 23 69 66 64 65 66 20 54 43 4c 5f 4c 4f  /..#ifdef TCL_LO
0790: 43 41 4c 5f 4d 41 49 4e 5f 48 4f 4f 4b 0a 4d 4f  CAL_MAIN_HOOK.MO
07a0: 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 20 54  DULE_SCOPE int T
07b0: 43 4c 5f 4c 4f 43 41 4c 5f 4d 41 49 4e 5f 48 4f  CL_LOCAL_MAIN_HO
07c0: 4f 4b 28 69 6e 74 20 2a 61 72 67 63 2c 20 63 68  OK(int *argc, ch
07d0: 61 72 20 2a 2a 2a 61 72 67 76 29 3b 0a 23 65 6e  ar ***argv);.#en
07e0: 64 69 66 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  dif.../*. *-----
07f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0830: 2d 0a 20 2a 0a 20 2a 20 54 63 6c 53 65 74 52 63  -. *. * TclSetRc
0840: 46 69 6c 65 50 61 74 68 20 2d 2d 0a 20 2a 0a 20  FilePath --. *. 
0850: 2a 09 53 65 74 73 20 74 68 65 20 70 61 74 68 20  *.Sets the path 
0860: 6f 66 20 74 68 65 20 54 63 6c 20 73 74 61 72 74  of the Tcl start
0870: 75 70 20 66 69 6c 65 20 28 75 73 75 61 6c 6c 79  up file (usually
0880: 20 22 2e 74 63 6c 73 68 72 63 22 29 2e 20 57 69   ".tclshrc"). Wi
0890: 6c 6c 0a 20 2a 09 64 6f 20 74 69 6c 64 65 20 65  ll. *.do tilde e
08a0: 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6e 6f 72  xpansion and nor
08b0: 6d 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68  malization of th
08c0: 65 20 70 61 73 73 65 64 20 70 61 74 68 20 61 6e  e passed path an
08d0: 64 20 73 65 74 0a 20 2a 09 74 68 65 20 74 63 6c  d set. *.the tcl
08e0: 52 63 46 69 6c 65 50 61 74 68 20 76 61 72 69 61  RcFilePath varia
08f0: 62 6c 65 20 74 6f 20 74 68 65 20 72 65 73 75 6c  ble to the resul
0900: 74 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  t. *. * Results:
0910: 0a 20 2a 09 41 20 54 63 6c 20 72 65 73 75 6c 74  . *.A Tcl result
0920: 20 63 6f 64 65 2e 0a 20 2a 0a 20 2a 20 53 69 64   code.. *. * Sid
0930: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 53 65  e effects:. *.Se
0940: 74 73 20 74 68 65 20 74 63 6c 52 63 46 69 6c 65  ts the tclRcFile
0950: 50 61 74 68 20 76 61 72 69 61 62 6c 65 2e 0a 20  Path variable.. 
0960: 2a 0a 20 2a 20 54 4f 44 4f 20 2d 20 74 68 69 73  *. * TODO - this
0970: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 75 70   function is dup
0980: 6c 69 63 61 74 65 64 20 69 6e 20 74 68 65 20 57  licated in the W
0990: 69 6e 64 6f 77 73 20 76 65 72 73 69 6f 6e 20 6f  indows version o
09a0: 66 20 74 63 6c 41 70 70 49 6e 69 74 2e 63 2e 0a  f tclAppInit.c..
09b0: 20 2a 20 43 6f 6e 73 69 64 65 72 20 61 64 64 69   * Consider addi
09c0: 6e 67 20 69 74 20 74 6f 20 54 63 6c 20 6c 69 62  ng it to Tcl lib
09d0: 72 61 72 79 20 61 6e 64 20 63 61 6c 6c 61 62 6c  rary and callabl
09e0: 65 20 76 69 61 20 74 68 65 20 73 74 75 62 73 20  e via the stubs 
09f0: 74 61 62 6c 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  table.. *. *----
0a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a40: 2d 2d 0a 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  --. */.static in
0a50: 74 0a 54 63 6c 53 65 74 52 63 46 69 6c 65 50 61  t.TclSetRcFilePa
0a60: 74 68 28 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65  th(.    Tcl_Inte
0a70: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20  rp *interp,.    
0a80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68  const char *path
0a90: 29 0a 7b 0a 20 20 20 20 54 63 6c 5f 44 53 74 72  ).{.    Tcl_DStr
0aa0: 69 6e 67 20 64 73 3b 0a 20 20 20 20 69 66 20 28  ing ds;.    if (
0ab0: 54 63 6c 5f 46 53 54 69 6c 64 65 45 78 70 61 6e  Tcl_FSTildeExpan
0ac0: 64 28 69 6e 74 65 72 70 2c 20 70 61 74 68 2c 20  d(interp, path, 
0ad0: 26 64 73 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  &ds) != TCL_OK) 
0ae0: 7b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  {..return TCL_ER
0af0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54  ROR;.    }.    T
0b00: 63 6c 5f 4f 62 6a 20 2a 72 63 50 61 74 68 4f 62  cl_Obj *rcPathOb
0b10: 6a 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 54  j = Tcl_DStringT
0b20: 6f 4f 62 6a 28 26 64 73 29 3b 0a 20 20 20 20 2f  oObj(&ds);.    /
0b30: 2a 20 52 65 6d 69 6e 64 65 72 3a 20 64 6f 6e 27  * Reminder: don'
0b40: 74 20 77 6f 72 72 79 20 61 62 6f 75 74 20 72 63  t worry about rc
0b50: 50 61 74 68 4f 62 6a 20 72 65 66 20 63 6f 75 6e  PathObj ref coun
0b60: 74 20 6f 6e 20 73 75 63 63 65 73 73 2f 66 61 69  t on success/fai
0b70: 6c 75 72 65 20 2a 2f 0a 20 20 20 20 69 66 20 28  lure */.    if (
0b80: 54 63 6c 5f 53 65 74 56 61 72 32 45 78 28 69 6e  Tcl_SetVar2Ex(in
0b90: 74 65 72 70 2c 20 22 74 63 6c 5f 72 63 46 69 6c  terp, "tcl_rcFil
0ba0: 65 4e 61 6d 65 22 2c 20 4e 55 4c 4c 2c 20 72 63  eName", NULL, rc
0bb0: 50 61 74 68 4f 62 6a 2c 0a 09 20 20 20 20 54 43  PathObj,..    TC
0bc0: 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 20 3d  L_GLOBAL_ONLY) =
0bd0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 72  = NULL) {..retur
0be0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
0bf0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43   }.    return TC
0c00: 4c 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d  L_OK;.}.../*. *-
0c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c50: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 6d 61 69 6e  -----. *. * main
0c60: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 69   --. *. *.This i
0c70: 73 20 74 68 65 20 6d 61 69 6e 20 70 72 6f 67 72  s the main progr
0c80: 61 6d 20 66 6f 72 20 74 68 65 20 61 70 70 6c 69  am for the appli
0c90: 63 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 52 65  cation.. *. * Re
0ca0: 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 3a 20  sults:. *.None: 
0cb0: 54 63 6c 5f 4d 61 69 6e 20 6e 65 76 65 72 20 72  Tcl_Main never r
0cc0: 65 74 75 72 6e 73 20 68 65 72 65 2c 20 73 6f 20  eturns here, so 
0cd0: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6e  this procedure n
0ce0: 65 76 65 72 20 72 65 74 75 72 6e 73 0a 20 2a 09  ever returns. *.
0cf0: 65 69 74 68 65 72 2e 0a 20 2a 0a 20 2a 20 53 69  either.. *. * Si
0d00: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4a  de effects:. *.J
0d10: 75 73 74 20 61 62 6f 75 74 20 61 6e 79 74 68 69  ust about anythi
0d20: 6e 67 2c 20 73 69 6e 63 65 20 66 72 6f 6d 20 68  ng, since from h
0d30: 65 72 65 20 77 65 20 63 61 6c 6c 20 61 72 62 69  ere we call arbi
0d40: 74 72 61 72 79 20 54 63 6c 20 63 6f 64 65 2e 0a  trary Tcl code..
0d50: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *. *-----------
0d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
0da0: 0a 69 6e 74 0a 6d 61 69 6e 28 0a 20 20 20 20 69  .int.main(.    i
0db0: 6e 74 20 61 72 67 63 2c 09 09 09 2f 2a 20 4e 75  nt argc,.../* Nu
0dc0: 6d 62 65 72 20 6f 66 20 63 6f 6d 6d 61 6e 64 2d  mber of command-
0dd0: 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 2e 20  line arguments. 
0de0: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 61 72 67  */.    char *arg
0df0: 76 5b 5d 29 09 09 2f 2a 20 56 61 6c 75 65 73 20  v[])../* Values 
0e00: 6f 66 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  of command-line 
0e10: 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 7b 0a  arguments. */.{.
0e20: 23 69 66 64 65 66 20 54 43 4c 5f 58 54 5f 54 45  #ifdef TCL_XT_TE
0e30: 53 54 0a 20 20 20 20 58 74 54 6f 6f 6c 6b 69 74  ST.    XtToolkit
0e40: 49 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 23 65  Initialize();.#e
0e50: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 54 43 4c  ndif..#ifdef TCL
0e60: 5f 4c 4f 43 41 4c 5f 4d 41 49 4e 5f 48 4f 4f 4b  _LOCAL_MAIN_HOOK
0e70: 0a 20 20 20 20 54 43 4c 5f 4c 4f 43 41 4c 5f 4d  .    TCL_LOCAL_M
0e80: 41 49 4e 5f 48 4f 4f 4b 28 26 61 72 67 63 2c 20  AIN_HOOK(&argc, 
0e90: 26 61 72 67 76 29 3b 0a 23 65 6c 69 66 20 54 43  &argv);.#elif TC
0ea0: 4c 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20  L_MAJOR_VERSION 
0eb0: 3e 20 38 20 26 26 20 28 21 64 65 66 69 6e 65 64  > 8 && (!defined
0ec0: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
0ed0: 6e 65 64 28 55 4e 49 43 4f 44 45 29 29 0a 20 20  ned(UNICODE)).  
0ee0: 20 20 2f 2a 20 4e 65 77 20 69 6e 20 54 63 6c 20    /* New in Tcl 
0ef0: 39 2e 30 2e 20 54 68 69 73 20 64 6f 65 73 6e 27  9.0. This doesn'
0f00: 74 20 77 6f 72 6b 20 6f 6e 20 57 69 6e 64 6f 77  t work on Window
0f10: 73 20 77 69 74 68 6f 75 74 20 55 4e 49 43 4f 44  s without UNICOD
0f20: 45 20 2a 2f 0a 20 20 20 20 54 63 6c 5a 69 70 66  E */.    TclZipf
0f30: 73 5f 41 70 70 48 6f 6f 6b 28 26 61 72 67 63 2c  s_AppHook(&argc,
0f40: 20 26 61 72 67 76 29 3b 0a 23 65 6e 64 69 66 0a   &argv);.#endif.
0f50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 43 4c  .#if defined(TCL
0f60: 5f 54 45 53 54 29 0a 20 20 20 20 54 63 6c 5f 52  _TEST).    Tcl_R
0f70: 65 67 69 73 74 65 72 50 6f 73 74 49 6e 69 74 50  egisterPostInitP
0f80: 72 6f 63 28 54 63 6c 74 65 73 74 53 74 61 74 69  roc(TcltestStati
0f90: 63 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23 65  cInit, NULL);.#e
0fa0: 6e 64 69 66 0a 0a 20 20 20 20 54 63 6c 5f 4d 61  ndif..    Tcl_Ma
0fb0: 69 6e 28 61 72 67 63 2c 20 61 72 67 76 2c 20 54  in(argc, argv, T
0fc0: 43 4c 5f 4c 4f 43 41 4c 5f 41 50 50 49 4e 49 54  CL_LOCAL_APPINIT
0fd0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  );.    return 0;
0fe0: 09 09 09 2f 2a 20 4e 65 65 64 65 64 20 6f 6e 6c  .../* Needed onl
0ff0: 79 20 74 6f 20 70 72 65 76 65 6e 74 20 63 6f 6d  y to prevent com
1000: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
1010: 2f 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  /.}.../*. *-----
1020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1060: 2d 0a 20 2a 0a 20 2a 20 54 63 6c 5f 41 70 70 49  -. *. * Tcl_AppI
1070: 6e 69 74 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69  nit --. *. *.Thi
1080: 73 20 70 72 6f 63 65 64 75 72 65 20 70 65 72 66  s procedure perf
1090: 6f 72 6d 73 20 61 70 70 6c 69 63 61 74 69 6f 6e  orms application
10a0: 2d 73 70 65 63 69 66 69 63 20 69 6e 69 74 69 61  -specific initia
10b0: 6c 69 7a 61 74 69 6f 6e 2e 20 4d 6f 73 74 0a 20  lization. Most. 
10c0: 2a 09 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20  *.applications, 
10d0: 65 73 70 65 63 69 61 6c 6c 79 20 74 68 6f 73 65  especially those
10e0: 20 74 68 61 74 20 69 6e 63 6f 72 70 6f 72 61 74   that incorporat
10f0: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 63  e additional pac
1100: 6b 61 67 65 73 2c 0a 20 2a 09 77 69 6c 6c 20 68  kages,. *.will h
1110: 61 76 65 20 74 68 65 69 72 20 6f 77 6e 20 76 65  ave their own ve
1120: 72 73 69 6f 6e 20 6f 66 20 74 68 69 73 20 70 72  rsion of this pr
1130: 6f 63 65 64 75 72 65 2e 0a 20 2a 0a 20 2a 20 52  ocedure.. *. * R
1140: 65 73 75 6c 74 73 3a 0a 20 2a 09 52 65 74 75 72  esults:. *.Retur
1150: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 54 63  ns a standard Tc
1160: 6c 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 6f 64  l completion cod
1170: 65 2c 20 61 6e 64 20 6c 65 61 76 65 73 20 61 6e  e, and leaves an
1180: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
1190: 6e 0a 20 2a 09 74 68 65 20 69 6e 74 65 72 70 27  n. *.the interp'
11a0: 73 20 72 65 73 75 6c 74 20 69 66 20 61 6e 20 65  s result if an e
11b0: 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 20 2a 0a  rror occurs.. *.
11c0: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
11d0: 0a 20 2a 09 44 65 70 65 6e 64 73 20 6f 6e 20 74  . *.Depends on t
11e0: 68 65 20 73 74 61 72 74 75 70 20 73 63 72 69 70  he startup scrip
11f0: 74 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  t.. *. *--------
1200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
1240: 2a 2f 0a 0a 69 6e 74 0a 54 63 6c 5f 41 70 70 49  */..int.Tcl_AppI
1250: 6e 69 74 28 0a 20 20 20 20 54 63 6c 5f 49 6e 74  nit(.    Tcl_Int
1260: 65 72 70 20 2a 69 6e 74 65 72 70 29 09 09 2f 2a  erp *interp)../*
1270: 20 49 6e 74 65 72 70 72 65 74 65 72 20 66 6f 72   Interpreter for
1280: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 2a 2f   application. */
1290: 0a 7b 0a 20 20 20 20 69 66 20 28 54 63 6c 5f 49  .{.    if (Tcl_I
12a0: 6e 69 74 28 69 6e 74 65 72 70 29 20 3d 3d 20 54  nit(interp) == T
12b0: 43 4c 5f 45 52 52 4f 52 29 20 7b 0a 09 72 65 74  CL_ERROR) {..ret
12c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12d0: 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 54 43 4c     }..#ifdef TCL
12e0: 5f 58 54 5f 54 45 53 54 0a 20 20 20 20 69 66 20  _XT_TEST.    if 
12f0: 28 54 63 6c 78 74 74 65 73 74 5f 49 6e 69 74 28  (Tclxttest_Init(
1300: 69 6e 74 65 72 70 29 20 3d 3d 20 54 43 4c 5f 45  interp) == TCL_E
1310: 52 52 4f 52 29 20 7b 0a 09 72 65 74 75 72 6e 20  RROR) {..return 
1320: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  TCL_ERROR;.    }
1330: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 0a  .#endif..    /*.
1340: 20 20 20 20 20 2a 20 43 61 6c 6c 20 74 68 65 20       * Call the 
1350: 69 6e 69 74 20 70 72 6f 63 65 64 75 72 65 73 20  init procedures 
1360: 66 6f 72 20 69 6e 63 6c 75 64 65 64 20 70 61 63  for included pac
1370: 6b 61 67 65 73 2e 20 45 61 63 68 20 63 61 6c 6c  kages. Each call
1380: 20 73 68 6f 75 6c 64 20 6c 6f 6f 6b 0a 20 20 20   should look.   
1390: 20 20 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20    * like this:. 
13a0: 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 69 66 20      *.     * if 
13b0: 28 4d 6f 64 5f 49 6e 69 74 28 69 6e 74 65 72 70  (Mod_Init(interp
13c0: 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20  ) == TCL_ERROR) 
13d0: 7b 0a 20 20 20 20 20 2a 20 20 20 20 20 72 65 74  {.     *     ret
13e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13f0: 20 20 20 20 2a 20 7d 0a 20 20 20 20 20 2a 0a 20      * }.     *. 
1400: 20 20 20 20 2a 20 77 68 65 72 65 20 22 4d 6f 64      * where "Mod
1410: 22 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  " is the name of
1420: 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 28 44 79   the module. (Dy
1430: 6e 61 6d 69 63 61 6c 6c 79 2d 6c 6f 61 64 61 62  namically-loadab
1440: 6c 65 20 70 61 63 6b 61 67 65 73 0a 20 20 20 20  le packages.    
1450: 20 2a 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74   * should have t
1460: 68 65 20 73 61 6d 65 20 65 6e 74 72 79 2d 70 6f  he same entry-po
1470: 69 6e 74 20 6e 61 6d 65 2e 29 0a 20 20 20 20 20  int name.).     
1480: 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  */..    /*.     
1490: 2a 20 43 61 6c 6c 20 54 63 6c 5f 43 72 65 61 74  * Call Tcl_Creat
14a0: 65 4f 62 6a 43 6f 6d 6d 61 6e 64 20 66 6f 72 20  eObjCommand for 
14b0: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63  application-spec
14c0: 69 66 69 63 20 63 6f 6d 6d 61 6e 64 73 2c 20 69  ific commands, i
14d0: 66 20 74 68 65 79 0a 20 20 20 20 20 2a 20 77 65  f they.     * we
14e0: 72 65 6e 27 74 20 61 6c 72 65 61 64 79 20 63 72  ren't already cr
14f0: 65 61 74 65 64 20 62 79 20 74 68 65 20 69 6e 69  eated by the ini
1500: 74 20 70 72 6f 63 65 64 75 72 65 73 20 63 61 6c  t procedures cal
1510: 6c 65 64 20 61 62 6f 76 65 2e 0a 20 20 20 20 20  led above..     
1520: 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  */..    /*.     
1530: 2a 20 53 70 65 63 69 66 79 20 61 20 75 73 65 72  * Specify a user
1540: 2d 73 70 65 63 69 66 69 63 20 73 74 61 72 74 75  -specific startu
1550: 70 20 66 69 6c 65 20 74 6f 20 69 6e 76 6f 6b 65  p file to invoke
1560: 20 69 66 20 74 68 65 20 61 70 70 6c 69 63 61 74   if the applicat
1570: 69 6f 6e 20 69 73 0a 20 20 20 20 20 2a 20 72 75  ion is.     * ru
1580: 6e 20 69 6e 74 65 72 61 63 74 69 76 65 6c 79 2e  n interactively.
1590: 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 73   Typically the s
15a0: 74 61 72 74 75 70 20 66 69 6c 65 20 69 73 20 22  tartup file is "
15b0: 7e 2f 2e 61 70 70 72 63 22 20 77 68 65 72 65 20  ~/.apprc" where 
15c0: 22 61 70 70 22 0a 20 20 20 20 20 2a 20 69 73 20  "app".     * is 
15d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
15e0: 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 49 66 20  application. If 
15f0: 74 68 69 73 20 6c 69 6e 65 20 69 73 20 64 65 6c  this line is del
1600: 65 74 65 64 20 74 68 65 6e 20 6e 6f 0a 20 20 20  eted then no.   
1610: 20 20 2a 20 75 73 65 72 2d 73 70 65 63 69 66 69    * user-specifi
1620: 63 20 73 74 61 72 74 75 70 20 66 69 6c 65 20 77  c startup file w
1630: 69 6c 6c 20 62 65 20 72 75 6e 20 75 6e 64 65 72  ill be run under
1640: 20 61 6e 79 20 63 6f 6e 64 69 74 69 6f 6e 73 2e   any conditions.
1650: 0a 20 20 20 20 20 2a 20 49 6e 20 6b 65 65 70 69  .     * In keepi
1660: 6e 67 20 77 69 74 68 20 74 68 65 20 68 69 73 74  ng with the hist
1670: 6f 72 69 63 61 6c 20 62 65 68 61 76 69 6f 72 2c  orical behavior,
1680: 20 65 72 72 6f 72 73 20 73 65 74 74 69 6e 67 20   errors setting 
1690: 74 68 65 20 6e 61 6d 65 0a 20 20 20 20 20 2a 20  the name.     * 
16a0: 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  for example, if 
16b0: 74 68 65 20 68 6f 6d 65 20 64 69 72 65 63 74 6f  the home directo
16c0: 72 79 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  ry cannot be fou
16d0: 6e 64 2c 20 61 72 65 20 69 67 6e 6f 72 65 64 2e  nd, are ignored.
16e0: 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 28 76 6f  .     */.    (vo
16f0: 69 64 29 20 54 63 6c 53 65 74 52 63 46 69 6c 65  id) TclSetRcFile
1700: 50 61 74 68 28 69 6e 74 65 72 70 2c 20 54 43 4c  Path(interp, TCL
1710: 5f 52 43 5f 46 49 4c 45 29 3b 0a 20 20 20 20 54  _RC_FILE);.    T
1720: 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69  cl_ResetResult(i
1730: 6e 74 65 72 70 29 3b 0a 20 20 20 20 72 65 74 75  nterp);.    retu
1740: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f  rn TCL_OK;.}.../
1750: 2a 0a 20 2a 20 4c 6f 63 61 6c 20 56 61 72 69 61  *. * Local Varia
1760: 62 6c 65 73 3a 0a 20 2a 20 6d 6f 64 65 3a 20 63  bles:. * mode: c
1770: 0a 20 2a 20 63 2d 62 61 73 69 63 2d 6f 66 66 73  . * c-basic-offs
1780: 65 74 3a 20 34 0a 20 2a 20 66 69 6c 6c 2d 63 6f  et: 4. * fill-co
1790: 6c 75 6d 6e 3a 20 37 38 0a 20 2a 20 45 6e 64 3a  lumn: 78. * End:
17a0: 0a 20 2a 2f 0a                                   . */.