Hex Artifact Content

Artifact a1538ac5fc680773d697b1d2233731c3755dfe17:


0000: 2f 2a 20 0a 20 2a 20 74 6b 4d 61 69 6e 2e 63 20  /* . * tkMain.c 
0010: 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20 2a 09 54  (CTk) --. *. *.T
0020: 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  his file contain
0030: 73 20 61 20 67 65 6e 65 72 69 63 20 6d 61 69 6e  s a generic main
0040: 20 70 72 6f 67 72 61 6d 20 66 6f 72 20 54 6b 2d   program for Tk-
0050: 62 61 73 65 64 20 61 70 70 6c 69 63 61 74 69 6f  based applicatio
0060: 6e 73 2e 0a 20 2a 09 49 74 20 63 61 6e 20 62 65  ns.. *.It can be
0070: 20 75 73 65 64 20 61 73 2d 69 73 20 66 6f 72 20   used as-is for 
0080: 6d 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  many application
0090: 73 2c 20 6a 75 73 74 20 62 79 20 73 75 70 70 6c  s, just by suppl
00a0: 79 69 6e 67 20 61 0a 20 2a 09 64 69 66 66 65 72  ying a. *.differ
00b0: 65 6e 74 20 61 70 70 49 6e 69 74 50 72 6f 63 20  ent appInitProc 
00c0: 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 65 61  procedure for ea
00d0: 63 68 20 73 70 65 63 69 66 69 63 20 61 70 70 6c  ch specific appl
00e0: 69 63 61 74 69 6f 6e 2e 0a 20 2a 09 4f 72 2c 20  ication.. *.Or, 
00f0: 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  it can be used a
0100: 73 20 61 20 74 65 6d 70 6c 61 74 65 20 66 6f 72  s a template for
0110: 20 63 72 65 61 74 69 6e 67 20 6e 65 77 20 6d 61   creating new ma
0120: 69 6e 20 70 72 6f 67 72 61 6d 73 0a 20 2a 09 66  in programs. *.f
0130: 6f 72 20 54 6b 20 61 70 70 6c 69 63 61 74 69 6f  or Tk applicatio
0140: 6e 73 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69  ns.. *. * Copyri
0150: 67 68 74 20 28 63 29 20 31 39 39 30 2d 31 39 39  ght (c) 1990-199
0160: 34 20 54 68 65 20 52 65 67 65 6e 74 73 20 6f 66  4 The Regents of
0170: 20 74 68 65 20 55 6e 69 76 65 72 73 69 74 79 20   the University 
0180: 6f 66 20 43 61 6c 69 66 6f 72 6e 69 61 2e 0a 20  of California.. 
0190: 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20  * Copyright (c) 
01a0: 31 39 39 34 2d 31 39 39 35 20 53 75 6e 20 4d 69  1994-1995 Sun Mi
01b0: 63 72 6f 73 79 73 74 65 6d 73 2c 20 49 6e 63 2e  crosystems, Inc.
01c0: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63  . * Copyright (c
01d0: 29 20 31 39 39 34 2d 31 39 39 35 20 43 6c 65 76  ) 1994-1995 Clev
01e0: 65 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75  eland Clinic Fou
01f0: 6e 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65  ndation. *. * Se
0200: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
0210: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
0220: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
0230: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
0240: 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69  bution. * of thi
0250: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
0260: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
0270: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
0280: 20 2a 0a 20 2a 20 40 28 23 29 20 24 49 64 3a 20   *. * @(#) $Id: 
0290: 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e 35 30 20  ctk.shar,v 1.50 
02a0: 31 39 39 36 2f 30 31 2f 31 35 20 31 34 3a 34 37  1996/01/15 14:47
02b0: 3a 31 36 20 61 6e 64 72 65 77 6d 20 45 78 70 20  :16 andrewm Exp 
02c0: 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f 0a 0a 0a  andrewm $. */...
02d0: 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e  #include <ctype.
02e0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
02f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
0300: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
0310: 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 69 6e 63 6c  de <tcl.h>.#incl
0320: 75 64 65 20 22 74 6b 2e 68 22 0a 23 69 66 64 65  ude "tk.h".#ifde
0330: 66 20 4e 4f 5f 53 54 44 4c 49 42 5f 48 0a 23 20  f NO_STDLIB_H.# 
0340: 20 20 69 6e 63 6c 75 64 65 20 22 63 6f 6d 70 61    include "compa
0350: 74 2f 73 74 64 6c 69 62 2e 68 22 0a 23 65 6c 73  t/stdlib.h".#els
0360: 65 0a 23 20 20 20 69 6e 63 6c 75 64 65 20 3c 73  e.#   include <s
0370: 74 64 6c 69 62 2e 68 3e 0a 23 65 6e 64 69 66 0a  tdlib.h>.#endif.
0380: 0a 2f 2a 0a 20 2a 20 44 65 63 6c 61 72 61 74 69  ./*. * Declarati
0390: 6f 6e 73 20 66 6f 72 20 76 61 72 69 6f 75 73 20  ons for various 
03a0: 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 75 72  library procedur
03b0: 65 73 20 61 6e 64 20 76 61 72 69 61 62 6c 65 73  es and variables
03c0: 20 28 64 6f 6e 27 74 20 77 61 6e 74 0a 20 2a 20   (don't want. * 
03d0: 74 6f 20 69 6e 63 6c 75 64 65 20 74 6b 49 6e 74  to include tkInt
03e0: 2e 68 20 6f 72 20 74 6b 50 6f 72 74 2e 68 20 68  .h or tkPort.h h
03f0: 65 72 65 2c 20 62 65 63 61 75 73 65 20 70 65 6f  ere, because peo
0400: 70 6c 65 20 6d 69 67 68 74 20 63 6f 70 79 20 74  ple might copy t
0410: 68 69 73 0a 20 2a 20 66 69 6c 65 20 6f 75 74 20  his. * file out 
0420: 6f 66 20 74 68 65 20 54 6b 20 73 6f 75 72 63 65  of the Tk source
0430: 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 6d 61   directory to ma
0440: 6b 65 20 74 68 65 69 72 20 6f 77 6e 20 6d 6f 64  ke their own mod
0450: 69 66 69 65 64 20 76 65 72 73 69 6f 6e 73 29 2e  ified versions).
0460: 0a 20 2a 20 4e 6f 74 65 3a 20 64 6f 6e 27 74 20  . * Note: don't 
0470: 64 65 63 6c 61 72 65 20 22 65 78 69 74 22 20 68  declare "exit" h
0480: 65 72 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  ere even though 
0490: 61 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 69 73  a declaration is
04a0: 20 72 65 61 6c 6c 79 0a 20 2a 20 6e 65 65 64 65   really. * neede
04b0: 64 2c 20 62 65 63 61 75 73 65 20 69 74 20 77 69  d, because it wi
04c0: 6c 6c 20 63 6f 6e 66 6c 69 63 74 20 77 69 74 68  ll conflict with
04d0: 20 61 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 65   a declaration e
04e0: 6c 73 65 77 68 65 72 65 20 6f 6e 0a 20 2a 20 73  lsewhere on. * s
04f0: 6f 6d 65 20 73 79 73 74 65 6d 73 2e 0a 20 2a 2f  ome systems.. */
0500: 0a 0a 65 78 74 65 72 6e 20 69 6e 74 09 09 69 73  ..extern int..is
0510: 61 74 74 79 20 5f 41 4e 53 49 5f 41 52 47 53 5f  atty _ANSI_ARGS_
0520: 28 28 69 6e 74 20 66 64 29 29 3b 0a 65 78 74 65  ((int fd));.exte
0530: 72 6e 20 69 6e 74 09 09 72 65 61 64 20 5f 41 4e  rn int..read _AN
0540: 53 49 5f 41 52 47 53 5f 28 28 69 6e 74 20 66 64  SI_ARGS_((int fd
0550: 2c 20 63 68 61 72 20 2a 62 75 66 2c 20 73 69 7a  , char *buf, siz
0560: 65 5f 74 20 73 69 7a 65 29 29 3b 0a 65 78 74 65  e_t size));.exte
0570: 72 6e 20 63 68 61 72 20 2a 09 09 73 74 72 72 63  rn char *..strrc
0580: 68 72 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  hr _ANSI_ARGS_((
0590: 43 4f 4e 53 54 20 63 68 61 72 20 2a 73 74 72 69  CONST char *stri
05a0: 6e 67 2c 20 69 6e 74 20 63 29 29 3b 0a 0a 2f 2a  ng, int c));../*
05b0: 0a 20 2a 20 47 6c 6f 62 61 6c 20 76 61 72 69 61  . * Global varia
05c0: 62 6c 65 73 20 75 73 65 64 20 62 79 20 74 68 65  bles used by the
05d0: 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 3a 0a 20   main program:. 
05e0: 2a 2f 0a 0a 73 74 61 74 69 63 20 54 6b 5f 57 69  */..static Tk_Wi
05f0: 6e 64 6f 77 20 6d 61 69 6e 57 69 6e 64 6f 77 3b  ndow mainWindow;
0600: 09 2f 2a 20 54 68 65 20 6d 61 69 6e 20 77 69 6e  ./* The main win
0610: 64 6f 77 20 66 6f 72 20 74 68 65 20 61 70 70 6c  dow for the appl
0620: 69 63 61 74 69 6f 6e 2e 20 20 49 66 0a 09 09 09  ication.  If....
0630: 09 20 2a 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  . * NULL then th
0640: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6e 6f  e application no
0650: 20 6c 6f 6e 67 65 72 0a 09 09 09 09 20 2a 20 65   longer..... * e
0660: 78 69 73 74 73 2e 20 2a 2f 0a 73 74 61 74 69 63  xists. */.static
0670: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
0680: 65 72 70 3b 09 2f 2a 20 49 6e 74 65 72 70 72 65  erp;./* Interpre
0690: 74 65 72 20 66 6f 72 20 74 68 69 73 20 61 70 70  ter for this app
06a0: 6c 69 63 61 74 69 6f 6e 2e 20 2a 2f 0a 73 74 61  lication. */.sta
06b0: 74 69 63 20 54 63 6c 5f 44 53 74 72 69 6e 67 20  tic Tcl_DString 
06c0: 63 6f 6d 6d 61 6e 64 3b 09 2f 2a 20 55 73 65 64  command;./* Used
06d0: 20 74 6f 20 61 73 73 65 6d 62 6c 65 20 6c 69 6e   to assemble lin
06e0: 65 73 20 6f 66 20 74 65 72 6d 69 6e 61 6c 20 69  es of terminal i
06f0: 6e 70 75 74 0a 09 09 09 09 20 2a 20 69 6e 74 6f  nput..... * into
0700: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 73 2e 20 2a   Tcl commands. *
0710: 2f 0a 73 74 61 74 69 63 20 54 63 6c 5f 44 53 74  /.static Tcl_DSt
0720: 72 69 6e 67 20 6c 69 6e 65 3b 09 2f 2a 20 55 73  ring line;./* Us
0730: 65 64 20 74 6f 20 72 65 61 64 20 74 68 65 20 6e  ed to read the n
0740: 65 78 74 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68  ext line from th
0750: 65 0a 09 09 09 09 20 2a 20 74 65 72 6d 69 6e 61  e..... * termina
0760: 6c 20 69 6e 70 75 74 2e 20 2a 2f 0a 73 74 61 74  l input. */.stat
0770: 69 63 20 69 6e 74 20 74 74 79 3b 09 09 09 2f 2a  ic int tty;.../*
0780: 20 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20   Non-zero means 
0790: 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74 20 69  standard input i
07a0: 73 20 61 0a 09 09 09 09 20 2a 20 74 65 72 6d 69  s a..... * termi
07b0: 6e 61 6c 2d 6c 69 6b 65 20 64 65 76 69 63 65 2e  nal-like device.
07c0: 20 20 5a 65 72 6f 20 6d 65 61 6e 73 20 69 74 27    Zero means it'
07d0: 73 0a 09 09 09 09 20 2a 20 61 20 66 69 6c 65 2e  s..... * a file.
07e0: 20 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20   */.static char 
07f0: 65 72 72 6f 72 45 78 69 74 43 6d 64 5b 5d 20 3d  errorExitCmd[] =
0800: 20 22 65 78 69 74 20 31 22 3b 0a 0a 2f 2a 0a 20   "exit 1";../*. 
0810: 2a 20 43 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  * Command-line o
0820: 70 74 69 6f 6e 73 3a 0a 20 2a 2f 0a 0a 73 74 61  ptions:. */..sta
0830: 74 69 63 20 63 68 61 72 20 2a 66 69 6c 65 4e 61  tic char *fileNa
0840: 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69  me = NULL;.stati
0850: 63 20 63 68 61 72 20 2a 6e 61 6d 65 20 3d 20 4e  c char *name = N
0860: 55 4c 4c 3b 0a 73 74 61 74 69 63 20 63 68 61 72  ULL;.static char
0870: 20 2a 64 69 73 70 6c 61 79 20 3d 20 4e 55 4c 4c   *display = NULL
0880: 3b 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 67  ;.static char *g
0890: 65 6f 6d 65 74 72 79 20 3d 20 4e 55 4c 4c 3b 0a  eometry = NULL;.
08a0: 73 74 61 74 69 63 20 69 6e 74 20 72 65 73 74 20  static int rest 
08b0: 3d 20 30 3b 0a 0a 73 74 61 74 69 63 20 54 6b 5f  = 0;..static Tk_
08c0: 41 72 67 76 49 6e 66 6f 20 61 72 67 54 61 62 6c  ArgvInfo argTabl
08d0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 22 2d 64  e[] = {.    {"-d
08e0: 69 73 70 6c 61 79 22 2c 20 54 4b 5f 41 52 47 56  isplay", TK_ARGV
08f0: 5f 53 54 52 49 4e 47 2c 20 28 63 68 61 72 20 2a  _STRING, (char *
0900: 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29  ) NULL, (char *)
0910: 20 26 64 69 73 70 6c 61 79 2c 0a 09 22 44 69 73   &display,.."Dis
0920: 70 6c 61 79 20 74 6f 20 75 73 65 22 7d 2c 0a 20  play to use"},. 
0930: 20 20 20 7b 22 2d 67 65 6f 6d 65 74 72 79 22 2c     {"-geometry",
0940: 20 54 4b 5f 41 52 47 56 5f 53 54 52 49 4e 47 2c   TK_ARGV_STRING,
0950: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20   (char *) NULL, 
0960: 28 63 68 61 72 20 2a 29 20 26 67 65 6f 6d 65 74  (char *) &geomet
0970: 72 79 2c 0a 09 22 49 6e 69 74 69 61 6c 20 67 65  ry,.."Initial ge
0980: 6f 6d 65 74 72 79 20 66 6f 72 20 77 69 6e 64 6f  ometry for windo
0990: 77 22 7d 2c 0a 20 20 20 20 7b 22 2d 6e 61 6d 65  w"},.    {"-name
09a0: 22 2c 20 54 4b 5f 41 52 47 56 5f 53 54 52 49 4e  ", TK_ARGV_STRIN
09b0: 47 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  G, (char *) NULL
09c0: 2c 20 28 63 68 61 72 20 2a 29 20 26 6e 61 6d 65  , (char *) &name
09d0: 2c 0a 09 22 4e 61 6d 65 20 74 6f 20 75 73 65 20  ,.."Name to use 
09e0: 66 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 22  for application"
09f0: 7d 2c 0a 20 20 20 20 7b 22 2d 2d 22 2c 20 54 4b  },.    {"--", TK
0a00: 5f 41 52 47 56 5f 52 45 53 54 2c 20 28 63 68 61  _ARGV_REST, (cha
0a10: 72 20 2a 29 20 31 2c 20 28 63 68 61 72 20 2a 29  r *) 1, (char *)
0a20: 20 26 72 65 73 74 2c 0a 09 22 50 61 73 73 20 61   &rest,.."Pass a
0a30: 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 61 72 67  ll remaining arg
0a40: 75 6d 65 6e 74 73 20 74 68 72 6f 75 67 68 20 74  uments through t
0a50: 6f 20 73 63 72 69 70 74 22 7d 2c 0a 20 20 20 20  o script"},.    
0a60: 7b 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20  {(char *) NULL, 
0a70: 54 4b 5f 41 52 47 56 5f 45 4e 44 2c 20 28 63 68  TK_ARGV_END, (ch
0a80: 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61  ar *) NULL, (cha
0a90: 72 20 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68 61  r *) NULL,..(cha
0aa0: 72 20 2a 29 20 4e 55 4c 4c 7d 0a 7d 3b 0a 0a 2f  r *) NULL}.};../
0ab0: 2a 0a 20 2a 20 46 6f 72 77 61 72 64 20 64 65 63  *. * Forward dec
0ac0: 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 70 72  larations for pr
0ad0: 6f 63 65 64 75 72 65 73 20 64 65 66 69 6e 65 64  ocedures defined
0ae0: 20 6c 61 74 65 72 20 69 6e 20 74 68 69 73 20 66   later in this f
0af0: 69 6c 65 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69 63  ile:. */..static
0b00: 20 76 6f 69 64 09 09 50 72 6f 6d 70 74 20 5f 41   void..Prompt _A
0b10: 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49  NSI_ARGS_((Tcl_I
0b20: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
0b30: 6e 74 20 70 61 72 74 69 61 6c 29 29 3b 0a 73 74  nt partial));.st
0b40: 61 74 69 63 20 76 6f 69 64 09 09 53 74 64 69 6e  atic void..Stdin
0b50: 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f  Proc _ANSI_ARGS_
0b60: 28 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69  ((ClientData cli
0b70: 65 6e 74 44 61 74 61 2c 0a 09 09 09 20 20 20 20  entData,....    
0b80: 69 6e 74 20 6d 61 73 6b 29 29 3b 0a 0c 0a 2f 2a  int mask));.../*
0b90: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
0ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
0be0: 54 6b 5f 4d 61 69 6e 20 2d 2d 0a 20 2a 0a 20 2a  Tk_Main --. *. *
0bf0: 09 4d 61 69 6e 20 70 72 6f 67 72 61 6d 20 66 6f  .Main program fo
0c00: 72 20 57 69 73 68 20 61 6e 64 20 6d 6f 73 74 20  r Wish and most 
0c10: 6f 74 68 65 72 20 54 6b 2d 62 61 73 65 64 20 61  other Tk-based a
0c20: 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 2a 0a  pplications.. *.
0c30: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e   * Results:. *.N
0c40: 6f 6e 65 2e 20 54 68 69 73 20 70 72 6f 63 65 64  one. This proced
0c50: 75 72 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ure never return
0c60: 73 20 28 69 74 20 65 78 69 74 73 20 74 68 65 20  s (it exits the 
0c70: 70 72 6f 63 65 73 73 20 77 68 65 6e 0a 20 2a 09  process when. *.
0c80: 69 74 27 73 20 64 6f 6e 65 2e 0a 20 2a 0a 20 2a  it's done.. *. *
0c90: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
0ca0: 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  *.This procedure
0cb0: 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65   initializes the
0cc0: 20 54 6b 20 77 6f 72 6c 64 20 61 6e 64 20 74 68   Tk world and th
0cd0: 65 6e 20 73 74 61 72 74 73 0a 20 2a 09 69 6e 74  en starts. *.int
0ce0: 65 72 70 72 65 74 69 6e 67 20 63 6f 6d 6d 61 6e  erpreting comman
0cf0: 64 73 3b 20 20 61 6c 6d 6f 73 74 20 61 6e 79 74  ds;  almost anyt
0d00: 68 69 6e 67 20 63 6f 75 6c 64 20 68 61 70 70 65  hing could happe
0d10: 6e 2c 20 64 65 70 65 6e 64 69 6e 67 0a 20 2a 09  n, depending. *.
0d20: 6f 6e 20 74 68 65 20 73 63 72 69 70 74 20 62 65  on the script be
0d30: 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65 64 2e  ing interpreted.
0d40: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *. *----------
0d50: 2d 2d 2d 2d 2d 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 0a 20 2a 2f  ------------. */
0d90: 0a 0a 76 6f 69 64 0a 54 6b 5f 4d 61 69 6e 28 61  ..void.Tk_Main(a
0da0: 72 67 63 2c 20 61 72 67 76 2c 20 61 70 70 49 6e  rgc, argv, appIn
0db0: 69 74 50 72 6f 63 29 0a 20 20 20 20 69 6e 74 20  itProc).    int 
0dc0: 61 72 67 63 3b 09 09 09 09 2f 2a 20 4e 75 6d 62  argc;..../* Numb
0dd0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
0de0: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a 61   */.    char **a
0df0: 72 67 76 3b 09 09 09 2f 2a 20 41 72 72 61 79 20  rgv;.../* Array 
0e00: 6f 66 20 61 72 67 75 6d 65 6e 74 20 73 74 72 69  of argument stri
0e10: 6e 67 73 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f  ngs. */.    Tcl_
0e20: 41 70 70 49 6e 69 74 50 72 6f 63 20 2a 61 70 70  AppInitProc *app
0e30: 49 6e 69 74 50 72 6f 63 3b 09 2f 2a 20 41 70 70  InitProc;./* App
0e40: 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69  lication-specifi
0e50: 63 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  c initialization
0e60: 0a 09 09 09 09 09 20 2a 20 70 72 6f 63 65 64 75  ...... * procedu
0e70: 72 65 20 74 6f 20 63 61 6c 6c 20 61 66 74 65 72  re to call after
0e80: 20 6d 6f 73 74 0a 09 09 09 09 09 20 2a 20 69 6e   most...... * in
0e90: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 62 75 74  itialization but
0ea0: 20 62 65 66 6f 72 74 20 73 74 61 72 74 69 6e 67   befort starting
0eb0: 0a 09 09 09 09 09 20 2a 20 74 6f 20 65 78 65 63  ...... * to exec
0ec0: 75 74 65 20 63 6f 6d 6d 61 6e 64 73 2e 20 2a 2f  ute commands. */
0ed0: 0a 7b 0a 20 20 20 20 63 68 61 72 20 2a 61 72 67  .{.    char *arg
0ee0: 73 2c 20 2a 70 2c 20 2a 6d 73 67 2c 20 2a 61 72  s, *p, *msg, *ar
0ef0: 67 76 30 2c 20 2a 63 6c 61 73 73 3b 0a 20 20 20  gv0, *class;.   
0f00: 20 63 68 61 72 20 62 75 66 5b 32 30 5d 3b 0a 20   char buf[20];. 
0f10: 20 20 20 69 6e 74 20 63 6f 64 65 3b 0a 20 20 20     int code;.   
0f20: 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a   size_t length;.
0f30: 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20      Tcl_Channel 
0f40: 69 6e 43 68 61 6e 6e 65 6c 2c 20 6f 75 74 43 68  inChannel, outCh
0f50: 61 6e 6e 65 6c 2c 20 65 72 72 43 68 61 6e 6e 65  annel, errChanne
0f60: 6c 2c 20 63 68 61 6e 3b 0a 0a 20 20 20 20 69 6e  l, chan;..    in
0f70: 74 65 72 70 20 3d 20 54 63 6c 5f 43 72 65 61 74  terp = Tcl_Creat
0f80: 65 49 6e 74 65 72 70 28 29 3b 0a 23 69 66 64 65  eInterp();.#ifde
0f90: 66 20 54 43 4c 5f 4d 45 4d 5f 44 45 42 55 47 0a  f TCL_MEM_DEBUG.
0fa0: 20 20 20 20 54 63 6c 5f 49 6e 69 74 4d 65 6d 6f      Tcl_InitMemo
0fb0: 72 79 28 69 6e 74 65 72 70 29 3b 0a 23 65 6e 64  ry(interp);.#end
0fc0: 69 66 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  if..    /*.     
0fd0: 2a 20 50 61 72 73 65 20 63 6f 6d 6d 61 6e 64 2d  * Parse command-
0fe0: 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 2e 20  line arguments. 
0ff0: 20 41 20 6c 65 61 64 69 6e 67 20 22 2d 66 69 6c   A leading "-fil
1000: 65 22 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 20  e" argument is. 
1010: 20 20 20 20 2a 20 69 67 6e 6f 72 65 64 20 28 61      * ignored (a
1020: 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 6c 69   historical reli
1030: 63 20 66 72 6f 6d 20 74 68 65 20 64 69 73 74 61  c from the dista
1040: 6e 74 20 70 61 73 74 29 2e 20 20 49 66 20 74 68  nt past).  If th
1050: 65 0a 20 20 20 20 20 2a 20 6e 65 78 74 20 61 72  e.     * next ar
1060: 67 75 6d 65 6e 74 20 64 6f 65 73 6e 27 74 20 73  gument doesn't s
1070: 74 61 72 74 20 77 69 74 68 20 61 20 22 2d 22 20  tart with a "-" 
1080: 74 68 65 6e 20 73 74 72 69 70 20 69 74 20 6f 66  then strip it of
1090: 66 20 61 6e 64 0a 20 20 20 20 20 2a 20 75 73 65  f and.     * use
10a0: 20 69 74 20 61 73 20 74 68 65 20 6e 61 6d 65 20   it as the name 
10b0: 6f 66 20 61 20 73 63 72 69 70 74 20 66 69 6c 65  of a script file
10c0: 20 74 6f 20 70 72 6f 63 65 73 73 2e 20 20 41 6c   to process.  Al
10d0: 73 6f 20 63 68 65 63 6b 0a 20 20 20 20 20 2a 20  so check.     * 
10e0: 66 6f 72 20 6f 74 68 65 72 20 73 74 61 6e 64 61  for other standa
10f0: 72 64 20 61 72 67 75 6d 65 6e 74 73 2c 20 73 75  rd arguments, su
1100: 63 68 20 61 73 20 22 2d 67 65 6f 6d 65 74 72 79  ch as "-geometry
1110: 22 2c 20 61 6e 79 77 68 65 72 65 0a 20 20 20 20  ", anywhere.    
1120: 20 2a 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65   * in the argume
1130: 6e 74 20 6c 69 73 74 2e 0a 20 20 20 20 20 2a 2f  nt list..     */
1140: 0a 0a 20 20 20 20 61 72 67 76 30 20 3d 20 61 72  ..    argv0 = ar
1150: 67 76 5b 30 5d 3b 0a 20 20 20 20 69 66 20 28 61  gv[0];.    if (a
1160: 72 67 63 20 3e 20 31 29 20 7b 0a 09 6c 65 6e 67  rgc > 1) {..leng
1170: 74 68 20 3d 20 73 74 72 6c 65 6e 28 61 72 67 76  th = strlen(argv
1180: 5b 31 5d 29 3b 0a 09 69 66 20 28 28 6c 65 6e 67  [1]);..if ((leng
1190: 74 68 20 3e 3d 20 32 29 20 26 26 20 28 73 74 72  th >= 2) && (str
11a0: 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 2d  ncmp(argv[1], "-
11b0: 66 69 6c 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d  file", length) =
11c0: 3d 20 30 29 29 20 7b 0a 09 20 20 20 20 61 72 67  = 0)) {..    arg
11d0: 63 2d 2d 3b 0a 09 20 20 20 20 61 72 67 76 2b 2b  c--;..    argv++
11e0: 3b 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69  ;..}.    }.    i
11f0: 66 20 28 28 61 72 67 63 20 3e 20 31 29 20 26 26  f ((argc > 1) &&
1200: 20 28 61 72 67 76 5b 31 5d 5b 30 5d 20 21 3d 20   (argv[1][0] != 
1210: 27 2d 27 29 29 20 7b 0a 09 66 69 6c 65 4e 61 6d  '-')) {..fileNam
1220: 65 20 3d 20 61 72 67 76 5b 31 5d 3b 0a 09 61 72  e = argv[1];..ar
1230: 67 63 2d 2d 3b 0a 09 61 72 67 76 2b 2b 3b 0a 20  gc--;..argv++;. 
1240: 20 20 20 7d 0a 20 20 20 20 69 66 20 28 54 6b 5f     }.    if (Tk_
1250: 50 61 72 73 65 41 72 67 76 28 69 6e 74 65 72 70  ParseArgv(interp
1260: 2c 20 28 54 6b 5f 57 69 6e 64 6f 77 29 20 4e 55  , (Tk_Window) NU
1270: 4c 4c 2c 20 26 61 72 67 63 2c 20 61 72 67 76 2c  LL, &argc, argv,
1280: 20 61 72 67 54 61 62 6c 65 2c 20 30 29 0a 09 20   argTable, 0).. 
1290: 20 20 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a     != TCL_OK) {.
12a0: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  .fprintf(stderr,
12b0: 20 22 25 73 5c 6e 22 2c 20 54 63 6c 5f 47 65 74   "%s\n", Tcl_Get
12c0: 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74  StringResult(int
12d0: 65 72 70 29 29 3b 0a 09 65 78 69 74 28 31 29 3b  erp));..exit(1);
12e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6e  .    }.    if (n
12f0: 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ame == NULL) {..
1300: 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d 20  if (fileName != 
1310: 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 70 20 3d  NULL) {..    p =
1320: 20 66 69 6c 65 4e 61 6d 65 3b 0a 09 7d 20 65 6c   fileName;..} el
1330: 73 65 20 7b 0a 09 20 20 20 20 70 20 3d 20 61 72  se {..    p = ar
1340: 67 76 5b 30 5d 3b 0a 09 7d 0a 09 6e 61 6d 65 20  gv[0];..}..name 
1350: 3d 20 73 74 72 72 63 68 72 28 70 2c 20 27 2f 27  = strrchr(p, '/'
1360: 29 3b 0a 09 69 66 20 28 6e 61 6d 65 20 21 3d 20  );..if (name != 
1370: 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 6e 61 6d  NULL) {..    nam
1380: 65 2b 2b 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  e++;..} else {..
1390: 20 20 20 20 6e 61 6d 65 20 3d 20 70 3b 0a 09 7d      name = p;..}
13a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20  .    }..    /*. 
13b0: 20 20 20 20 2a 20 4d 61 6b 65 20 63 6f 6d 6d 61      * Make comma
13c0: 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
13d0: 73 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  s available in t
13e0: 68 65 20 54 63 6c 20 76 61 72 69 61 62 6c 65 73  he Tcl variables
13f0: 20 22 61 72 67 63 22 0a 20 20 20 20 20 2a 20 61   "argc".     * a
1400: 6e 64 20 22 61 72 67 76 22 2e 0a 20 20 20 20 20  nd "argv"..     
1410: 2a 2f 0a 0a 20 20 20 20 61 72 67 73 20 3d 20 54  */..    args = T
1420: 63 6c 5f 4d 65 72 67 65 28 61 72 67 63 2d 31 2c  cl_Merge(argc-1,
1430: 20 61 72 67 76 2b 31 29 3b 0a 20 20 20 20 54 63   argv+1);.    Tc
1440: 6c 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c  l_SetVar(interp,
1450: 20 22 61 72 67 76 22 2c 20 61 72 67 73 2c 20 54   "argv", args, T
1460: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1470: 0a 20 20 20 20 63 6b 66 72 65 65 28 61 72 67 73  .    ckfree(args
1480: 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62  );.    sprintf(b
1490: 75 66 2c 20 22 25 64 22 2c 20 61 72 67 63 2d 31  uf, "%d", argc-1
14a0: 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 56 61  );.    Tcl_SetVa
14b0: 72 28 69 6e 74 65 72 70 2c 20 22 61 72 67 63 22  r(interp, "argc"
14c0: 2c 20 62 75 66 2c 20 54 43 4c 5f 47 4c 4f 42 41  , buf, TCL_GLOBA
14d0: 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 20 20 54 63 6c  L_ONLY);.    Tcl
14e0: 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20  _SetVar(interp, 
14f0: 22 61 72 67 76 30 22 2c 20 28 66 69 6c 65 4e 61  "argv0", (fileNa
1500: 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 3f 20 66 69  me != NULL) ? fi
1510: 6c 65 4e 61 6d 65 20 3a 20 61 72 67 76 30 2c 0a  leName : argv0,.
1520: 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  .    TCL_GLOBAL_
1530: 4f 4e 4c 59 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20  ONLY);..    /*. 
1540: 20 20 20 20 2a 20 49 66 20 61 20 64 69 73 70 6c      * If a displ
1550: 61 79 20 77 61 73 20 73 70 65 63 69 66 69 65 64  ay was specified
1560: 2c 20 70 75 74 20 69 74 20 69 6e 74 6f 20 74 68  , put it into th
1570: 65 20 43 54 4b 5f 44 49 53 50 4c 41 59 0a 20 20  e CTK_DISPLAY.  
1580: 20 20 20 2a 20 65 6e 76 69 72 6f 6e 6d 65 6e 74     * environment
1590: 20 76 61 72 69 61 62 6c 65 20 73 6f 20 74 68 61   variable so tha
15a0: 74 20 69 74 20 77 69 6c 6c 20 62 65 20 61 76 61  t it will be ava
15b0: 69 6c 61 62 6c 65 20 66 6f 72 0a 20 20 20 20 20  ilable for.     
15c0: 2a 20 61 6e 79 20 73 75 62 2d 70 72 6f 63 65 73  * any sub-proces
15d0: 73 65 73 20 63 72 65 61 74 65 64 20 62 79 20 75  ses created by u
15e0: 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  s..     */..    
15f0: 69 66 20 28 64 69 73 70 6c 61 79 20 21 3d 20 4e  if (display != N
1600: 55 4c 4c 29 20 7b 0a 09 54 63 6c 5f 53 65 74 56  ULL) {..Tcl_SetV
1610: 61 72 32 28 69 6e 74 65 72 70 2c 20 22 65 6e 76  ar2(interp, "env
1620: 22 2c 20 22 43 54 4b 5f 44 49 53 50 4c 41 59 22  ", "CTK_DISPLAY"
1630: 2c 20 64 69 73 70 6c 61 79 2c 20 54 43 4c 5f 47  , display, TCL_G
1640: 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 20  LOBAL_ONLY);.   
1650: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
1660: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  * Initialize the
1670: 20 54 6b 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e   Tk application.
1680: 20 20 49 66 20 61 20 2d 6e 61 6d 65 20 6f 70 74    If a -name opt
1690: 69 6f 6e 20 77 61 73 20 70 72 6f 76 69 64 65 64  ion was provided
16a0: 2c 0a 20 20 20 20 20 2a 20 75 73 65 20 69 74 3b  ,.     * use it;
16b0: 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 66 20    otherwise, if 
16c0: 61 20 66 69 6c 65 20 6e 61 6d 65 20 77 61 73 20  a file name was 
16d0: 70 72 6f 76 69 64 65 64 2c 20 75 73 65 20 74 68  provided, use th
16e0: 65 20 6c 61 73 74 0a 20 20 20 20 20 2a 20 65 6c  e last.     * el
16f0: 65 6d 65 6e 74 20 6f 66 20 69 74 73 20 70 61 74  ement of its pat
1700: 68 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  h as the name of
1710: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
1720: 3b 20 6f 74 68 65 72 77 69 73 65 0a 20 20 20 20  ; otherwise.    
1730: 20 2a 20 75 73 65 20 74 68 65 20 6c 61 73 74 20   * use the last 
1740: 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 70  element of the p
1750: 72 6f 67 72 61 6d 20 6e 61 6d 65 2e 20 20 46 6f  rogram name.  Fo
1760: 72 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  r the applicatio
1770: 6e 27 73 0a 20 20 20 20 20 2a 20 63 6c 61 73 73  n's.     * class
1780: 2c 20 63 61 70 69 74 61 6c 69 7a 65 20 74 68 65  , capitalize the
1790: 20 66 69 72 73 74 20 6c 65 74 74 65 72 20 6f 66   first letter of
17a0: 20 74 68 65 20 6e 61 6d 65 2e 0a 20 20 20 20 20   the name..     
17b0: 2a 2f 0a 0a 20 20 20 20 69 66 20 28 6e 61 6d 65  */..    if (name
17c0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 70 20 3d   == NULL) {..p =
17d0: 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d 20 4e 55   (fileName != NU
17e0: 4c 4c 29 20 3f 20 66 69 6c 65 4e 61 6d 65 20 3a  LL) ? fileName :
17f0: 20 61 72 67 76 30 3b 0a 09 6e 61 6d 65 20 3d 20   argv0;..name = 
1800: 73 74 72 72 63 68 72 28 70 2c 20 27 2f 27 29 3b  strrchr(p, '/');
1810: 0a 09 69 66 20 28 6e 61 6d 65 20 21 3d 20 4e 55  ..if (name != NU
1820: 4c 4c 29 20 7b 0a 09 20 20 20 20 6e 61 6d 65 2b  LL) {..    name+
1830: 2b 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  +;..} else {..  
1840: 20 20 6e 61 6d 65 20 3d 20 70 3b 0a 09 7d 0a 20    name = p;..}. 
1850: 20 20 20 7d 0a 20 20 20 20 63 6c 61 73 73 20 3d     }.    class =
1860: 20 28 63 68 61 72 20 2a 29 20 63 6b 61 6c 6c 6f   (char *) ckallo
1870: 63 28 28 75 6e 73 69 67 6e 65 64 29 20 28 73 74  c((unsigned) (st
1880: 72 6c 65 6e 28 6e 61 6d 65 29 20 2b 20 31 29 29  rlen(name) + 1))
1890: 3b 0a 20 20 20 20 73 74 72 63 70 79 28 63 6c 61  ;.    strcpy(cla
18a0: 73 73 2c 20 6e 61 6d 65 29 3b 0a 20 20 20 20 63  ss, name);.    c
18b0: 6c 61 73 73 5b 30 5d 20 3d 20 74 6f 75 70 70 65  lass[0] = touppe
18c0: 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
18d0: 29 20 63 6c 61 73 73 5b 30 5d 29 3b 0a 20 20 20  ) class[0]);.   
18e0: 20 6d 61 69 6e 57 69 6e 64 6f 77 20 3d 20 54 6b   mainWindow = Tk
18f0: 5f 43 72 65 61 74 65 4d 61 69 6e 57 69 6e 64 6f  _CreateMainWindo
1900: 77 28 69 6e 74 65 72 70 2c 20 64 69 73 70 6c 61  w(interp, displa
1910: 79 2c 20 6e 61 6d 65 2c 20 63 6c 61 73 73 29 3b  y, name, class);
1920: 0a 20 20 20 20 63 6b 66 72 65 65 28 63 6c 61 73  .    ckfree(clas
1930: 73 29 3b 0a 20 20 20 20 69 66 20 28 6d 61 69 6e  s);.    if (main
1940: 57 69 6e 64 6f 77 20 3d 3d 20 4e 55 4c 4c 29 20  Window == NULL) 
1950: 7b 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72  {..fprintf(stder
1960: 72 2c 20 22 25 73 5c 6e 22 2c 20 54 63 6c 5f 47  r, "%s\n", Tcl_G
1970: 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69  etStringResult(i
1980: 6e 74 65 72 70 29 29 3b 0a 09 65 78 69 74 28 31  nterp));..exit(1
1990: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  );.    }..    /*
19a0: 0a 20 20 20 20 20 2a 20 53 65 74 20 74 68 65 20  .     * Set the 
19b0: 22 74 63 6c 5f 69 6e 74 65 72 61 63 74 69 76 65  "tcl_interactive
19c0: 22 20 76 61 72 69 61 62 6c 65 2e 0a 20 20 20 20  " variable..    
19d0: 20 2a 2f 0a 0a 20 20 20 20 74 74 79 20 3d 20 69   */..    tty = i
19e0: 73 61 74 74 79 28 30 29 3b 0a 20 20 20 20 54 63  satty(0);.    Tc
19f0: 6c 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c  l_SetVar(interp,
1a00: 20 22 74 63 6c 5f 69 6e 74 65 72 61 63 74 69 76   "tcl_interactiv
1a10: 65 22 2c 0a 09 20 20 20 20 28 28 66 69 6c 65 4e  e",..    ((fileN
1a20: 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 26 26 20  ame == NULL) && 
1a30: 74 74 79 29 20 3f 20 22 31 22 20 3a 20 22 30 22  tty) ? "1" : "0"
1a40: 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a50: 59 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  Y);..    /*.    
1a60: 20 2a 20 53 65 74 20 74 68 65 20 67 65 6f 6d 65   * Set the geome
1a70: 74 72 79 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  try of the main 
1a80: 77 69 6e 64 6f 77 2c 20 69 66 20 72 65 71 75 65  window, if reque
1a90: 73 74 65 64 2e 20 20 50 75 74 20 74 68 65 0a 20  sted.  Put the. 
1aa0: 20 20 20 20 2a 20 72 65 71 75 65 73 74 65 64 20      * requested 
1ab0: 67 65 6f 6d 65 74 72 79 20 69 6e 74 6f 20 74 68  geometry into th
1ac0: 65 20 22 67 65 6f 6d 65 74 72 79 22 20 76 61 72  e "geometry" var
1ad0: 69 61 62 6c 65 2e 0a 20 20 20 20 20 2a 2f 0a 0a  iable..     */..
1ae0: 20 20 20 20 69 66 20 28 67 65 6f 6d 65 74 72 79      if (geometry
1af0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54 63 6c   != NULL) {..Tcl
1b00: 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20  _SetVar(interp, 
1b10: 22 67 65 6f 6d 65 74 72 79 22 2c 20 67 65 6f 6d  "geometry", geom
1b20: 65 74 72 79 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c  etry, TCL_GLOBAL
1b30: 5f 4f 4e 4c 59 29 3b 0a 09 63 6f 64 65 20 3d 20  _ONLY);..code = 
1b40: 54 63 6c 5f 56 61 72 45 76 61 6c 28 69 6e 74 65  Tcl_VarEval(inte
1b50: 72 70 2c 20 22 77 6d 20 67 65 6f 6d 65 74 72 79  rp, "wm geometry
1b60: 20 2e 20 22 2c 20 67 65 6f 6d 65 74 72 79 2c 20   . ", geometry, 
1b70: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
1b80: 09 69 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c  .if (code != TCL
1b90: 5f 4f 4b 29 20 7b 0a 09 20 20 20 20 66 70 72 69  _OK) {..    fpri
1ba0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c  ntf(stderr, "%s\
1bb0: 6e 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  n", Tcl_GetStrin
1bc0: 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 29  gResult(interp))
1bd0: 3b 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ;..}.    }..    
1be0: 2f 2a 0a 20 20 20 20 20 2a 20 49 6e 76 6f 6b 65  /*.     * Invoke
1bf0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65   application-spe
1c00: 63 69 66 69 63 20 69 6e 69 74 69 61 6c 69 7a 61  cific initializa
1c10: 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20  tion..     */.. 
1c20: 20 20 20 69 66 20 28 28 2a 61 70 70 49 6e 69 74     if ((*appInit
1c30: 50 72 6f 63 29 28 69 6e 74 65 72 70 29 20 21 3d  Proc)(interp) !=
1c40: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 20 20 20 20   TCL_OK) {.     
1c50: 20 20 65 72 72 43 68 61 6e 6e 65 6c 20 3d 20 54    errChannel = T
1c60: 63 6c 5f 47 65 74 53 74 64 43 68 61 6e 6e 65 6c  cl_GetStdChannel
1c70: 28 54 43 4c 5f 53 54 44 45 52 52 29 3b 0a 20 20  (TCL_STDERR);.  
1c80: 20 20 20 20 20 69 66 20 28 65 72 72 43 68 61 6e       if (errChan
1c90: 6e 65 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20  nel) {.         
1ca0: 20 20 20 54 63 6c 5f 57 72 69 74 65 28 65 72 72     Tcl_Write(err
1cb0: 43 68 61 6e 6e 65 6c 2c 0a 20 20 20 20 20 20 20  Channel,.       
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 70              "app
1cd0: 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69  lication-specifi
1ce0: 63 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  c initialization
1cf0: 20 66 61 69 6c 65 64 3a 20 22 2c 20 2d 31 29 3b   failed: ", -1);
1d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c  .            Tcl
1d10: 5f 57 72 69 74 65 28 65 72 72 43 68 61 6e 6e 65  _Write(errChanne
1d20: 6c 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  l, Tcl_GetString
1d30: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20  Result(interp), 
1d40: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  -1);.           
1d50: 20 54 63 6c 5f 57 72 69 74 65 28 65 72 72 43 68   Tcl_Write(errCh
1d60: 61 6e 6e 65 6c 2c 20 22 5c 6e 22 2c 20 31 29 3b  annel, "\n", 1);
1d70: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 09 67 6f 74  .        }...got
1d80: 6f 20 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  o error;.    }..
1d90: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e      /*.     * In
1da0: 76 6f 6b 65 20 74 68 65 20 73 63 72 69 70 74 20  voke the script 
1db0: 73 70 65 63 69 66 69 65 64 20 6f 6e 20 74 68 65  specified on the
1dc0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 69   command line, i
1dd0: 66 20 61 6e 79 2e 0a 20 20 20 20 20 2a 2f 0a 0a  f any..     */..
1de0: 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65      if (fileName
1df0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63 6f 64   != NULL) {..cod
1e00: 65 20 3d 20 54 63 6c 5f 45 76 61 6c 46 69 6c 65  e = Tcl_EvalFile
1e10: 28 69 6e 74 65 72 70 2c 20 66 69 6c 65 4e 61 6d  (interp, fileNam
1e20: 65 29 3b 0a 09 69 66 20 28 63 6f 64 65 20 21 3d  e);..if (code !=
1e30: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20 20 20 20   TCL_OK) {..    
1e40: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09  goto error;..}..
1e50: 74 74 79 20 3d 20 30 3b 0a 20 20 20 20 7d 20 65  tty = 0;.    } e
1e60: 6c 73 65 20 7b 0a 09 2f 2a 0a 09 20 2a 20 43 6f  lse {../*.. * Co
1e70: 6d 6d 61 6e 64 73 20 77 69 6c 6c 20 63 6f 6d 65  mmands will come
1e80: 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69   from standard i
1e90: 6e 70 75 74 2c 20 73 6f 20 73 65 74 20 75 70 20  nput, so set up 
1ea0: 61 6e 20 65 76 65 6e 74 0a 09 20 2a 20 68 61 6e  an event.. * han
1eb0: 64 6c 65 72 20 66 6f 72 20 73 74 61 6e 64 61 72  dler for standar
1ec0: 64 20 69 6e 70 75 74 2e 20 20 45 76 61 6c 75 61  d input.  Evalua
1ed0: 74 65 20 74 68 65 20 2e 72 63 20 66 69 6c 65 2c  te the .rc file,
1ee0: 20 69 66 20 6f 6e 65 0a 09 20 2a 20 68 61 73 20   if one.. * has 
1ef0: 62 65 65 6e 20 73 70 65 63 69 66 69 65 64 2c 20  been specified, 
1f00: 73 65 74 20 75 70 20 61 6e 20 65 76 65 6e 74 20  set up an event 
1f10: 68 61 6e 64 6c 65 72 20 66 6f 72 20 73 74 61 6e  handler for stan
1f20: 64 61 72 64 0a 09 20 2a 20 69 6e 70 75 74 2c 20  dard.. * input, 
1f30: 61 6e 64 20 70 72 69 6e 74 20 61 20 70 72 6f 6d  and print a prom
1f40: 70 74 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  pt if the input 
1f50: 64 65 76 69 63 65 20 69 73 20 61 20 74 65 72 6d  device is a term
1f60: 69 6e 61 6c 2e 0a 09 20 2a 2f 0a 0a 09 66 69 6c  inal... */...fil
1f70: 65 4e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 56  eName = Tcl_GetV
1f80: 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 5f  ar(interp, "tcl_
1f90: 72 63 46 69 6c 65 4e 61 6d 65 22 2c 20 54 43 4c  rcFileName", TCL
1fa0: 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 09  _GLOBAL_ONLY);..
1fb0: 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d 20  if (fileName != 
1fc0: 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 54 63 6c  NULL) {..    Tcl
1fd0: 5f 44 53 74 72 69 6e 67 20 62 75 66 66 65 72 3b  _DString buffer;
1fe0: 0a 09 20 20 20 20 63 68 61 72 20 2a 66 75 6c 6c  ..    char *full
1ff0: 4e 61 6d 65 3b 0a 0a 20 20 20 20 20 20 20 20 20  Name;..         
2000: 20 20 20 66 75 6c 6c 4e 61 6d 65 20 3d 20 54 63     fullName = Tc
2010: 6c 5f 54 72 61 6e 73 6c 61 74 65 46 69 6c 65 4e  l_TranslateFileN
2020: 61 6d 65 28 69 6e 74 65 72 70 2c 20 66 69 6c 65  ame(interp, file
2030: 4e 61 6d 65 2c 20 26 62 75 66 66 65 72 29 3b 0a  Name, &buffer);.
2040: 09 20 20 20 20 69 66 20 28 66 75 6c 6c 4e 61 6d  .    if (fullNam
2050: 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20  e == NULL) {.   
2060: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 43              errC
2070: 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74  hannel = Tcl_Get
2080: 53 74 64 43 68 61 6e 6e 65 6c 28 54 43 4c 5f 53  StdChannel(TCL_S
2090: 54 44 45 52 52 29 3b 0a 20 20 20 20 20 20 20 20  TDERR);.        
20a0: 20 20 20 20 20 20 20 69 66 20 28 65 72 72 43 68         if (errCh
20b0: 61 6e 6e 65 6c 29 20 7b 0a 20 20 20 20 20 20 20  annel) {.       
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
20d0: 5f 57 72 69 74 65 28 65 72 72 43 68 61 6e 6e 65  _Write(errChanne
20e0: 6c 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  l, Tcl_GetString
20f0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20  Result(interp), 
2100: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  -1);.           
2110: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 69           Tcl_Wri
2120: 74 65 28 65 72 72 43 68 61 6e 6e 65 6c 2c 20 22  te(errChannel, "
2130: 5c 6e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  \n", 1);.       
2140: 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
2150: 7d 20 65 6c 73 65 20 7b 0a 0a 20 20 20 20 20 20  } else {..      
2160: 20 20 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20            /*.   
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20                * 
2180: 4e 4f 54 45 3a 20 54 68 65 20 66 6f 6c 6c 6f 77  NOTE: The follow
2190: 69 6e 67 20 72 65 6c 69 65 73 20 6f 6e 20 4f 5f  ing relies on O_
21a0: 52 44 4f 4e 4c 59 3d 3d 30 2e 0a 20 20 20 20 20  RDONLY==0..     
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a                 .
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 63 68 61 6e 20 3d 20 54 63 6c 5f 4f 70 65 6e 46  chan = Tcl_OpenF
21f0: 69 6c 65 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72  ileChannel(inter
2200: 70 2c 20 66 75 6c 6c 4e 61 6d 65 2c 20 22 72 22  p, fullName, "r"
2210: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
2220: 20 20 20 20 20 20 69 66 20 28 63 68 61 6e 20 21        if (chan !
2230: 3d 20 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 29 20  = (Tcl_Channel) 
2240: 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 20 20 20  NULL) {.        
2250: 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
2260: 43 6c 6f 73 65 28 4e 55 4c 4c 2c 20 63 68 61 6e  Close(NULL, chan
2270: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
2280: 20 20 20 20 20 20 20 69 66 20 28 54 63 6c 5f 45         if (Tcl_E
2290: 76 61 6c 46 69 6c 65 28 69 6e 74 65 72 70 2c 20  valFile(interp, 
22a0: 66 75 6c 6c 4e 61 6d 65 29 20 21 3d 20 54 43 4c  fullName) != TCL
22b0: 5f 4f 4b 29 20 7b 0a 20 20 20 20 20 20 20 20 20  _OK) {.         
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
22d0: 72 43 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47  rChannel = Tcl_G
22e0: 65 74 53 74 64 43 68 61 6e 6e 65 6c 28 54 43 4c  etStdChannel(TCL
22f0: 5f 53 54 44 45 52 52 29 3b 0a 20 20 20 20 20 20  _STDERR);.      
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 20 69 66 20 28 65 72 72 43 68 61 6e 6e 65 6c 29   if (errChannel)
2320: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2340: 63 6c 5f 57 72 69 74 65 28 65 72 72 43 68 61 6e  cl_Write(errChan
2350: 6e 65 6c 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  nel, Tcl_GetStri
2360: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
2370: 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2390: 20 20 20 54 63 6c 5f 57 72 69 74 65 28 65 72 72     Tcl_Write(err
23a0: 43 68 61 6e 6e 65 6c 2c 20 22 5c 6e 22 2c 20 31  Channel, "\n", 1
23b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
23c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
23f0: 20 20 20 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20     }..    }...  
2400: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65    Tcl_DStringFre
2410: 65 28 26 62 75 66 66 65 72 29 3b 0a 09 7d 0a 09  e(&buffer);..}..
2420: 69 66 20 28 74 74 79 20 26 26 0a 09 09 21 54 63  if (tty &&...!Tc
2430: 6c 5f 47 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_GetVar2(interp
2440: 2c 20 22 65 6e 76 22 2c 20 22 43 54 4b 5f 44 49  , "env", "CTK_DI
2450: 53 50 4c 41 59 22 2c 20 54 43 4c 5f 47 4c 4f 42  SPLAY", TCL_GLOB
2460: 41 4c 5f 4f 4e 4c 59 29 29 20 7b 0a 09 20 20 20  AL_ONLY)) {..   
2470: 20 2f 2a 0a 09 20 20 20 20 20 2a 20 49 6e 70 75   /*..     * Inpu
2480: 74 20 69 73 20 61 20 74 65 72 6d 69 6e 61 6c 2c  t is a terminal,
2490: 20 61 6e 64 20 64 69 73 70 6c 61 79 20 77 61 73   and display was
24a0: 20 6e 65 76 65 72 20 73 65 74 2e 20 20 49 6e 73   never set.  Ins
24b0: 74 65 61 64 0a 09 20 20 20 20 20 2a 20 6f 66 20  tead..     * of 
24c0: 72 65 61 64 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  reading command 
24d0: 66 72 6f 6d 20 73 74 64 69 6e 2c 20 70 6f 70 2d  from stdin, pop-
24e0: 75 70 20 61 20 63 6f 6d 6d 61 6e 64 20 64 69 61  up a command dia
24f0: 6c 6f 67 0a 09 20 20 20 20 20 2a 20 28 73 69 6e  log..     * (sin
2500: 63 65 20 77 65 20 61 72 65 20 70 72 6f 62 61 62  ce we are probab
2510: 6c 79 20 64 69 73 70 6c 61 79 69 6e 67 20 74 6f  ly displaying to
2520: 20 73 74 64 69 6e 2f 73 74 64 6f 75 74 29 2e 0a   stdin/stdout)..
2530: 09 20 20 20 20 20 2a 2f 0a 09 20 20 20 20 69 66  .     */..    if
2540: 20 28 54 63 6c 5f 45 76 61 6c 28 69 6e 74 65 72   (Tcl_Eval(inter
2550: 70 2c 20 22 63 74 6b 44 69 61 6c 6f 67 22 29 20  p, "ctkDialog") 
2560: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 67  != TCL_OK) {...g
2570: 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 20 20 20 20  oto error;..    
2580: 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  }..} else {..   
2590: 20 54 63 6c 5f 43 72 65 61 74 65 46 69 6c 65 48   Tcl_CreateFileH
25a0: 61 6e 64 6c 65 72 28 30 2c 20 54 43 4c 5f 52 45  andler(0, TCL_RE
25b0: 41 44 41 42 4c 45 2c 20 53 74 64 69 6e 50 72 6f  ADABLE, StdinPro
25c0: 63 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20  c, (ClientData) 
25d0: 30 29 3b 0a 09 20 20 20 20 69 6e 43 68 61 6e 6e  0);..    inChann
25e0: 65 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74 64 43  el = Tcl_GetStdC
25f0: 68 61 6e 6e 65 6c 28 54 43 4c 5f 53 54 44 49 4e  hannel(TCL_STDIN
2600: 29 3b 0a 09 20 20 20 20 69 66 20 28 69 6e 43 68  );..    if (inCh
2610: 61 6e 6e 65 6c 29 20 7b 0a 09 09 54 63 6c 5f 43  annel) {...Tcl_C
2620: 72 65 61 74 65 43 68 61 6e 6e 65 6c 48 61 6e 64  reateChannelHand
2630: 6c 65 72 28 69 6e 43 68 61 6e 6e 65 6c 2c 20 54  ler(inChannel, T
2640: 43 4c 5f 52 45 41 44 41 42 4c 45 2c 20 53 74 64  CL_READABLE, Std
2650: 69 6e 50 72 6f 63 2c 0a 09 09 09 09 09 28 43 6c  inProc,......(Cl
2660: 69 65 6e 74 44 61 74 61 29 20 69 6e 43 68 61 6e  ientData) inChan
2670: 6e 65 6c 29 3b 0a 09 20 20 20 20 7d 0a 09 20 20  nel);..    }..  
2680: 20 20 69 66 20 28 74 74 79 29 20 7b 0a 09 09 50    if (tty) {...P
2690: 72 6f 6d 70 74 28 69 6e 74 65 72 70 2c 20 30 29  rompt(interp, 0)
26a0: 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20  ;..    }..}.    
26b0: 7d 0a 20 20 20 20 6f 75 74 43 68 61 6e 6e 65 6c  }.    outChannel
26c0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 64 43 68 61   = Tcl_GetStdCha
26d0: 6e 6e 65 6c 28 54 43 4c 5f 53 54 44 4f 55 54 29  nnel(TCL_STDOUT)
26e0: 3b 0a 20 20 20 20 69 66 20 28 6f 75 74 43 68 61  ;.    if (outCha
26f0: 6e 6e 65 6c 29 20 7b 0a 20 20 20 20 20 20 20 54  nnel) {.       T
2700: 63 6c 5f 46 6c 75 73 68 28 6f 75 74 43 68 61 6e  cl_Flush(outChan
2710: 6e 65 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nel);.    }.    
2720: 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28  Tcl_DStringInit(
2730: 26 63 6f 6d 6d 61 6e 64 29 3b 0a 20 20 20 20 54  &command);.    T
2740: 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26  cl_DStringInit(&
2750: 6c 69 6e 65 29 3b 0a 20 20 20 20 54 63 6c 5f 52  line);.    Tcl_R
2760: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
2770: 70 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  p);..    /*.    
2780: 20 2a 20 4c 6f 6f 70 20 69 6e 66 69 6e 69 74 65   * Loop infinite
2790: 6c 79 2c 20 77 61 69 74 69 6e 67 20 66 6f 72 20  ly, waiting for 
27a0: 63 6f 6d 6d 61 6e 64 73 20 74 6f 20 65 78 65 63  commands to exec
27b0: 75 74 65 2e 20 20 57 68 65 6e 20 74 68 65 72 65  ute.  When there
27c0: 0a 20 20 20 20 20 2a 20 61 72 65 20 6e 6f 20 77  .     * are no w
27d0: 69 6e 64 6f 77 73 20 6c 65 66 74 2c 20 54 6b 5f  indows left, Tk_
27e0: 4d 61 69 6e 4c 6f 6f 70 20 72 65 74 75 72 6e 73  MainLoop returns
27f0: 20 61 6e 64 20 77 65 20 65 78 69 74 2e 0a 20 20   and we exit..  
2800: 20 20 20 2a 2f 0a 0a 20 20 20 20 54 6b 5f 4d 61     */..    Tk_Ma
2810: 69 6e 4c 6f 6f 70 28 29 3b 0a 0a 20 20 20 20 2f  inLoop();..    /
2820: 2a 0a 20 20 20 20 20 2a 20 44 6f 6e 27 74 20 65  *.     * Don't e
2830: 78 69 74 20 64 69 72 65 63 74 6c 79 2c 20 62 75  xit directly, bu
2840: 74 20 72 61 74 68 65 72 20 69 6e 76 6f 6b 65 20  t rather invoke 
2850: 74 68 65 20 54 63 6c 20 22 65 78 69 74 22 20 63  the Tcl "exit" c
2860: 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 20 54  ommand..     * T
2870: 68 69 73 20 67 69 76 65 73 20 74 68 65 20 61 70  his gives the ap
2880: 70 6c 69 63 61 74 69 6f 6e 20 74 68 65 20 6f 70  plication the op
2890: 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 72 65 64  portunity to red
28a0: 65 66 69 6e 65 20 22 65 78 69 74 22 0a 20 20 20  efine "exit".   
28b0: 20 20 2a 20 74 6f 20 64 6f 20 61 64 64 69 74 69    * to do additi
28c0: 6f 6e 61 6c 20 63 6c 65 61 6e 75 70 2e 0a 20 20  onal cleanup..  
28d0: 20 20 20 2a 2f 0a 0a 20 20 20 20 54 63 6c 5f 45     */..    Tcl_E
28e0: 76 61 6c 28 69 6e 74 65 72 70 2c 20 22 65 78 69  val(interp, "exi
28f0: 74 22 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29  t");.    exit(1)
2900: 3b 0a 0a 65 72 72 6f 72 3a 0a 20 20 20 20 2f 2a  ;..error:.    /*
2910: 0a 20 20 20 20 20 2a 20 54 68 65 20 66 6f 6c 6c  .     * The foll
2920: 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  owing statement 
2930: 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20  guarantees that 
2940: 74 68 65 20 65 72 72 6f 72 49 6e 66 6f 0a 20 20  the errorInfo.  
2950: 20 20 20 2a 20 76 61 72 69 61 62 6c 65 20 69 73     * variable is
2960: 20 73 65 74 20 70 72 6f 70 65 72 6c 79 2e 0a 20   set properly.. 
2970: 20 20 20 20 2a 2f 0a 0a 20 20 20 20 54 63 6c 5f      */..    Tcl_
2980: 41 64 64 45 72 72 6f 72 49 6e 66 6f 28 69 6e 74  AddErrorInfo(int
2990: 65 72 70 2c 20 22 22 29 3b 0a 20 20 20 20 65 72  erp, "");.    er
29a0: 72 43 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47  rChannel = Tcl_G
29b0: 65 74 53 74 64 43 68 61 6e 6e 65 6c 28 54 43 4c  etStdChannel(TCL
29c0: 5f 53 54 44 45 52 52 29 3b 0a 20 20 20 20 69 66  _STDERR);.    if
29d0: 20 28 65 72 72 43 68 61 6e 6e 65 6c 29 20 7b 0a   (errChannel) {.
29e0: 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 69 74          Tcl_Writ
29f0: 65 28 65 72 72 43 68 61 6e 6e 65 6c 2c 20 54 63  e(errChannel, Tc
2a00: 6c 5f 47 65 74 56 61 72 28 69 6e 74 65 72 70 2c  l_GetVar(interp,
2a10: 20 22 65 72 72 6f 72 49 6e 66 6f 22 2c 20 54 43   "errorInfo", TC
2a20: 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 2c 0a  L_GLOBAL_ONLY),.
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
2a40: 31 29 3b 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  1);.        Tcl_
2a50: 57 72 69 74 65 28 65 72 72 43 68 61 6e 6e 65 6c  Write(errChannel
2a60: 2c 20 22 5c 6e 22 2c 20 31 29 3b 0a 20 20 20 20  , "\n", 1);.    
2a70: 7d 0a 20 20 20 20 54 63 6c 5f 44 65 6c 65 74 65  }.    Tcl_Delete
2a80: 49 6e 74 65 72 70 28 69 6e 74 65 72 70 29 3b 0a  Interp(interp);.
2a90: 20 20 20 20 54 63 6c 5f 45 78 69 74 28 31 29 3b      Tcl_Exit(1);
2aa0: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
2ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2af0: 0a 20 2a 0a 20 2a 20 53 74 64 69 6e 50 72 6f 63  . *. * StdinProc
2b00: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
2b10: 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f  rocedure is invo
2b20: 6b 65 64 20 62 79 20 74 68 65 20 65 76 65 6e 74  ked by the event
2b30: 20 64 69 73 70 61 74 63 68 65 72 20 77 68 65 6e   dispatcher when
2b40: 65 76 65 72 0a 20 2a 09 73 74 61 6e 64 61 72 64  ever. *.standard
2b50: 20 69 6e 70 75 74 20 62 65 63 6f 6d 65 73 20 72   input becomes r
2b60: 65 61 64 61 62 6c 65 2e 20 20 49 74 20 67 72 61  eadable.  It gra
2b70: 62 73 20 74 68 65 20 6e 65 78 74 20 6c 69 6e 65  bs the next line
2b80: 20 6f 66 0a 20 2a 09 69 6e 70 75 74 20 63 68 61   of. *.input cha
2b90: 72 61 63 74 65 72 73 2c 20 61 64 64 73 20 74 68  racters, adds th
2ba0: 65 6d 20 74 6f 20 61 20 63 6f 6d 6d 61 6e 64 20  em to a command 
2bb0: 62 65 69 6e 67 20 61 73 73 65 6d 62 6c 65 64 2c  being assembled,
2bc0: 20 61 6e 64 0a 20 2a 09 65 78 65 63 75 74 65 73   and. *.executes
2bd0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 69 66 20   the command if 
2be0: 69 74 27 73 20 63 6f 6d 70 6c 65 74 65 2e 0a 20  it's complete.. 
2bf0: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
2c00: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
2c10: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 43 6f  e effects:. *.Co
2c20: 75 6c 64 20 62 65 20 61 6c 6d 6f 73 74 20 61 72  uld be almost ar
2c30: 62 69 74 72 61 72 79 2c 20 64 65 70 65 6e 64 69  bitrary, dependi
2c40: 6e 67 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  ng on the comman
2c50: 64 20 74 68 61 74 27 73 0a 20 2a 09 74 79 70 65  d that's. *.type
2c60: 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  d.. *. *--------
2c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
2cb0: 2a 2f 0a 0a 20 20 20 20 2f 2a 20 41 52 47 53 55  */..    /* ARGSU
2cc0: 53 45 44 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f  SED */.static vo
2cd0: 69 64 0a 53 74 64 69 6e 50 72 6f 63 28 63 6c 69  id.StdinProc(cli
2ce0: 65 6e 74 44 61 74 61 2c 20 6d 61 73 6b 29 0a 20  entData, mask). 
2cf0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c     ClientData cl
2d00: 69 65 6e 74 44 61 74 61 3b 09 09 2f 2a 20 4e 6f  ientData;../* No
2d10: 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 69  t used. */.    i
2d20: 6e 74 20 6d 61 73 6b 3b 09 09 09 09 2f 2a 20 4e  nt mask;..../* N
2d30: 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 7b 0a 20 20  ot used. */.{.  
2d40: 20 20 73 74 61 74 69 63 20 69 6e 74 20 67 6f 74    static int got
2d50: 50 61 72 74 69 61 6c 20 3d 20 30 3b 0a 20 20 20  Partial = 0;.   
2d60: 20 63 68 61 72 20 2a 63 6d 64 3b 0a 20 20 20 20   char *cmd;.    
2d70: 69 6e 74 20 63 6f 64 65 2c 20 63 6f 75 6e 74 3b  int code, count;
2d80: 0a 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  .    Tcl_Channel
2d90: 20 63 68 61 6e 20 3d 20 28 54 63 6c 5f 43 68 61   chan = (Tcl_Cha
2da0: 6e 6e 65 6c 29 20 63 6c 69 65 6e 74 44 61 74 61  nnel) clientData
2db0: 3b 0a 0a 20 20 20 20 63 6f 75 6e 74 20 3d 20 54  ;..    count = T
2dc0: 63 6c 5f 47 65 74 73 28 63 68 61 6e 2c 20 26 6c  cl_Gets(chan, &l
2dd0: 69 6e 65 29 3b 0a 0a 20 20 20 20 69 66 20 28 63  ine);..    if (c
2de0: 6f 75 6e 74 20 3c 20 30 29 20 7b 0a 09 69 66 20  ount < 0) {..if 
2df0: 28 21 67 6f 74 50 61 72 74 69 61 6c 29 20 7b 0a  (!gotPartial) {.
2e00: 09 20 20 20 20 69 66 20 28 74 74 79 29 20 7b 0a  .    if (tty) {.
2e10: 09 09 54 63 6c 5f 45 78 69 74 28 30 29 3b 0a 09  ..Tcl_Exit(0);..
2e20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 54      } else {...T
2e30: 63 6c 5f 44 65 6c 65 74 65 43 68 61 6e 6e 65 6c  cl_DeleteChannel
2e40: 48 61 6e 64 6c 65 72 28 63 68 61 6e 2c 20 53 74  Handler(chan, St
2e50: 64 69 6e 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74  dinProc, (Client
2e60: 44 61 74 61 29 20 63 68 61 6e 29 3b 0a 09 20 20  Data) chan);..  
2e70: 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e 3b    }..    return;
2e80: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
2e90: 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 7d 0a 20 20  count = 0;..}.  
2ea0: 20 20 7d 0a 0a 20 20 20 20 28 76 6f 69 64 29 20    }..    (void) 
2eb0: 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e  Tcl_DStringAppen
2ec0: 64 28 26 63 6f 6d 6d 61 6e 64 2c 20 54 63 6c 5f  d(&command, Tcl_
2ed0: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 6c 69  DStringValue(&li
2ee0: 6e 65 29 2c 20 2d 31 29 3b 0a 20 20 20 20 63 6d  ne), -1);.    cm
2ef0: 64 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 41  d = Tcl_DStringA
2f00: 70 70 65 6e 64 28 26 63 6f 6d 6d 61 6e 64 2c 20  ppend(&command, 
2f10: 22 5c 6e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 54  "\n", -1);.    T
2f20: 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26  cl_DStringFree(&
2f30: 6c 69 6e 65 29 3b 0a 20 20 20 20 0a 20 20 20 20  line);.    .    
2f40: 69 66 20 28 21 54 63 6c 5f 43 6f 6d 6d 61 6e 64  if (!Tcl_Command
2f50: 43 6f 6d 70 6c 65 74 65 28 63 6d 64 29 29 20 7b  Complete(cmd)) {
2f60: 0a 20 20 20 20 20 20 20 20 67 6f 74 50 61 72 74  .        gotPart
2f70: 69 61 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ial = 1;.       
2f80: 20 67 6f 74 6f 20 70 72 6f 6d 70 74 3b 0a 20 20   goto prompt;.  
2f90: 20 20 7d 0a 20 20 20 20 67 6f 74 50 61 72 74 69    }.    gotParti
2fa0: 61 6c 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 0a  al = 0;..    /*.
2fb0: 20 20 20 20 20 2a 20 44 69 73 61 62 6c 65 20 74       * Disable t
2fc0: 68 65 20 73 74 64 69 6e 20 63 68 61 6e 6e 65 6c  he stdin channel
2fd0: 20 68 61 6e 64 6c 65 72 20 77 68 69 6c 65 20 65   handler while e
2fe0: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f  valuating the co
2ff0: 6d 6d 61 6e 64 3b 0a 20 20 20 20 20 2a 20 6f 74  mmand;.     * ot
3000: 68 65 72 77 69 73 65 20 69 66 20 74 68 65 20 63  herwise if the c
3010: 6f 6d 6d 61 6e 64 20 72 65 2d 65 6e 74 65 72 73  ommand re-enters
3020: 20 74 68 65 20 65 76 65 6e 74 20 6c 6f 6f 70 20   the event loop 
3030: 77 65 20 6d 69 67 68 74 0a 20 20 20 20 20 2a 20  we might.     * 
3040: 70 72 6f 63 65 73 73 20 63 6f 6d 6d 61 6e 64 73  process commands
3050: 20 66 72 6f 6d 20 73 74 64 69 6e 20 62 65 66 6f   from stdin befo
3060: 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  re the current c
3070: 6f 6d 6d 61 6e 64 20 69 73 0a 20 20 20 20 20 2a  ommand is.     *
3080: 20 66 69 6e 69 73 68 65 64 2e 20 20 41 6d 6f 6e   finished.  Amon
3090: 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73 2c 20  g other things, 
30a0: 74 68 69 73 20 77 69 6c 6c 20 74 72 61 73 68 20  this will trash 
30b0: 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 0a  the text of the.
30c0: 20 20 20 20 20 2a 20 63 6f 6d 6d 61 6e 64 20 62       * command b
30d0: 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 2e 0a  eing evaluated..
30e0: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 54 63 6c       */..    Tcl
30f0: 5f 43 72 65 61 74 65 46 69 6c 65 48 61 6e 64 6c  _CreateFileHandl
3100: 65 72 28 63 68 61 6e 2c 20 30 2c 20 53 74 64 69  er(chan, 0, Stdi
3110: 6e 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74 44 61  nProc, (ClientDa
3120: 74 61 29 20 63 68 61 6e 29 3b 0a 20 20 20 20 63  ta) chan);.    c
3130: 6f 64 65 20 3d 20 54 63 6c 5f 52 65 63 6f 72 64  ode = Tcl_Record
3140: 41 6e 64 45 76 61 6c 28 69 6e 74 65 72 70 2c 20  AndEval(interp, 
3150: 63 6d 64 2c 20 54 43 4c 5f 45 56 41 4c 5f 47 4c  cmd, TCL_EVAL_GL
3160: 4f 42 41 4c 29 3b 0a 20 20 20 20 54 63 6c 5f 43  OBAL);.    Tcl_C
3170: 72 65 61 74 65 43 68 61 6e 6e 65 6c 48 61 6e 64  reateChannelHand
3180: 6c 65 72 28 63 68 61 6e 2c 20 54 43 4c 5f 52 45  ler(chan, TCL_RE
3190: 41 44 41 42 4c 45 2c 20 53 74 64 69 6e 50 72 6f  ADABLE, StdinPro
31a0: 63 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20  c, (ClientData) 
31b0: 63 68 61 6e 29 3b 0a 20 20 20 20 54 63 6c 5f 44  chan);.    Tcl_D
31c0: 53 74 72 69 6e 67 46 72 65 65 28 26 63 6f 6d 6d  StringFree(&comm
31d0: 61 6e 64 29 3b 0a 20 20 20 20 69 66 20 28 2a 28  and);.    if (*(
31e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
31f0: 75 6c 74 28 69 6e 74 65 72 70 29 29 20 21 3d 20  ult(interp)) != 
3200: 30 29 20 7b 0a 09 69 66 20 28 28 63 6f 64 65 20  0) {..if ((code 
3210: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7c 7c 20 28 74  != TCL_OK) || (t
3220: 74 79 29 29 20 7b 0a 09 20 20 20 20 2f 2a 0a 09  ty)) {..    /*..
3230: 20 20 20 20 20 2a 20 54 68 65 20 73 74 61 74 65       * The state
3240: 6d 65 6e 74 20 62 65 6c 6f 77 20 75 73 65 64 20  ment below used 
3250: 74 6f 20 63 61 6c 6c 20 22 70 72 69 6e 74 66 22  to call "printf"
3260: 2c 20 62 75 74 20 74 68 61 74 20 72 65 73 75 6c  , but that resul
3270: 74 65 64 0a 09 20 20 20 20 20 2a 20 69 6e 20 63  ted..     * in c
3280: 6f 72 65 20 64 75 6d 70 73 20 75 6e 64 65 72 20  ore dumps under 
3290: 53 6f 6c 61 72 69 73 20 32 2e 33 20 69 66 20 74  Solaris 2.3 if t
32a0: 68 65 20 72 65 73 75 6c 74 20 77 61 73 20 76 65  he result was ve
32b0: 72 79 20 6c 6f 6e 67 2e 0a 09 20 20 20 20 20 2a  ry long...     *
32c0: 0a 09 20 20 20 20 20 2a 20 4e 4f 54 45 3a 20 54  ..     * NOTE: T
32d0: 68 69 73 20 70 72 6f 62 61 62 6c 79 20 77 69 6c  his probably wil
32e0: 6c 20 6e 6f 74 20 77 6f 72 6b 20 75 6e 64 65 72  l not work under
32f0: 20 57 69 6e 64 6f 77 73 20 65 69 74 68 65 72 2e   Windows either.
3300: 0a 09 20 20 20 20 20 2a 2f 0a 0a 09 20 20 20 20  ..     */...    
3310: 70 75 74 73 28 54 63 6c 5f 47 65 74 53 74 72 69  puts(Tcl_GetStri
3320: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
3330: 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  );..}.    }..   
3340: 20 2f 2a 0a 20 20 20 20 20 2a 20 4f 75 74 70 75   /*.     * Outpu
3350: 74 20 61 20 70 72 6f 6d 70 74 2e 0a 20 20 20 20  t a prompt..    
3360: 20 2a 2f 0a 0a 20 20 20 20 70 72 6f 6d 70 74 3a   */..    prompt:
3370: 0a 20 20 20 20 69 66 20 28 74 74 79 29 20 7b 0a  .    if (tty) {.
3380: 09 50 72 6f 6d 70 74 28 69 6e 74 65 72 70 2c 20  .Prompt(interp, 
3390: 67 6f 74 50 61 72 74 69 61 6c 29 3b 0a 20 20 20  gotPartial);.   
33a0: 20 7d 0a 20 20 20 20 54 63 6c 5f 52 65 73 65 74   }.    Tcl_Reset
33b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a  Result(interp);.
33c0: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
33d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
33e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
33f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
3410: 20 2a 0a 20 2a 20 50 72 6f 6d 70 74 20 2d 2d 0a   *. * Prompt --.
3420: 20 2a 0a 20 2a 09 49 73 73 75 65 20 61 20 70 72   *. *.Issue a pr
3430: 6f 6d 70 74 20 6f 6e 20 73 74 61 6e 64 61 72 64  ompt on standard
3440: 20 6f 75 74 70 75 74 2c 20 6f 72 20 69 6e 76 6f   output, or invo
3450: 6b 65 20 61 20 73 63 72 69 70 74 0a 20 2a 09 74  ke a script. *.t
3460: 6f 20 69 73 73 75 65 20 74 68 65 20 70 72 6f 6d  o issue the prom
3470: 70 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  pt.. *. * Result
3480: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
3490: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
34a0: 20 2a 09 41 20 70 72 6f 6d 70 74 20 67 65 74 73   *.A prompt gets
34b0: 20 6f 75 74 70 75 74 2c 20 61 6e 64 20 61 20 54   output, and a T
34c0: 63 6c 20 73 63 72 69 70 74 20 6d 61 79 20 62 65  cl script may be
34d0: 20 65 76 61 6c 75 61 74 65 64 0a 20 2a 09 69 6e   evaluated. *.in
34e0: 20 69 6e 74 65 72 70 2e 0a 20 2a 0a 20 2a 2d 2d   interp.. *. *--
34f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3530: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63  ----. */..static
3540: 20 76 6f 69 64 0a 50 72 6f 6d 70 74 28 69 6e 74   void.Prompt(int
3550: 65 72 70 2c 20 70 61 72 74 69 61 6c 29 0a 20 20  erp, partial).  
3560: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
3570: 74 65 72 70 3b 09 09 09 2f 2a 20 49 6e 74 65 72  terp;.../* Inter
3580: 70 72 65 74 65 72 20 74 6f 20 75 73 65 20 66 6f  preter to use fo
3590: 72 20 70 72 6f 6d 70 74 69 6e 67 2e 20 2a 2f 0a  r prompting. */.
35a0: 20 20 20 20 69 6e 74 20 70 61 72 74 69 61 6c 3b      int partial;
35b0: 09 09 09 2f 2a 20 4e 6f 6e 2d 7a 65 72 6f 20 6d  .../* Non-zero m
35c0: 65 61 6e 73 20 74 68 65 72 65 20 61 6c 72 65 61  eans there alrea
35d0: 64 79 0a 09 09 09 09 09 20 2a 20 65 78 69 73 74  dy...... * exist
35e0: 73 20 61 20 70 61 72 74 69 61 6c 20 63 6f 6d 6d  s a partial comm
35f0: 61 6e 64 2c 20 73 6f 20 75 73 65 0a 09 09 09 09  and, so use.....
3600: 09 20 2a 20 74 68 65 20 73 65 63 6f 6e 64 61 72  . * the secondar
3610: 79 20 70 72 6f 6d 70 74 2e 20 2a 2f 0a 7b 0a 20  y prompt. */.{. 
3620: 20 20 20 63 68 61 72 20 2a 70 72 6f 6d 70 74 43     char *promptC
3630: 6d 64 3b 0a 20 20 20 20 69 6e 74 20 63 6f 64 65  md;.    int code
3640: 3b 0a 0a 20 20 20 20 70 72 6f 6d 70 74 43 6d 64  ;..    promptCmd
3650: 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 28 69 6e   = Tcl_GetVar(in
3660: 74 65 72 70 2c 0a 09 70 61 72 74 69 61 6c 20 3f  terp,..partial ?
3670: 20 22 74 63 6c 5f 70 72 6f 6d 70 74 32 22 20 3a   "tcl_prompt2" :
3680: 20 22 74 63 6c 5f 70 72 6f 6d 70 74 31 22 2c 20   "tcl_prompt1", 
3690: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
36a0: 3b 0a 20 20 20 20 69 66 20 28 70 72 6f 6d 70 74  ;.    if (prompt
36b0: 43 6d 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  Cmd == NULL) {..
36c0: 64 65 66 61 75 6c 74 50 72 6f 6d 70 74 3a 0a 09  defaultPrompt:..
36d0: 69 66 20 28 21 70 61 72 74 69 61 6c 29 20 7b 0a  if (!partial) {.
36e0: 09 20 20 20 20 66 70 75 74 73 28 22 25 20 22 2c  .    fputs("% ",
36f0: 20 73 74 64 6f 75 74 29 3b 0a 09 7d 0a 20 20 20   stdout);..}.   
3700: 20 7d 20 65 6c 73 65 20 7b 0a 09 63 6f 64 65 20   } else {..code 
3710: 3d 20 54 63 6c 5f 45 76 61 6c 28 69 6e 74 65 72  = Tcl_Eval(inter
3720: 70 2c 20 70 72 6f 6d 70 74 43 6d 64 29 3b 0a 09  p, promptCmd);..
3730: 69 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c 5f  if (code != TCL_
3740: 4f 4b 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41  OK) {..    Tcl_A
3750: 64 64 45 72 72 6f 72 49 6e 66 6f 28 69 6e 74 65  ddErrorInfo(inte
3760: 72 70 2c 0a 09 09 20 20 20 20 22 5c 6e 20 20 20  rp,...    "\n   
3770: 20 28 73 63 72 69 70 74 20 74 68 61 74 20 67 65   (script that ge
3780: 6e 65 72 61 74 65 73 20 70 72 6f 6d 70 74 29 22  nerates prompt)"
3790: 29 3b 0a 09 20 20 20 20 66 70 72 69 6e 74 66 28  );..    fprintf(
37a0: 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20  stderr, "%s\n", 
37b0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
37c0: 75 6c 74 28 69 6e 74 65 72 70 29 29 3b 0a 09 20  ult(interp));.. 
37d0: 20 20 20 67 6f 74 6f 20 64 65 66 61 75 6c 74 50     goto defaultP
37e0: 72 6f 6d 70 74 3b 0a 09 7d 0a 20 20 20 20 7d 0a  rompt;..}.    }.
37f0: 20 20 20 20 66 66 6c 75 73 68 28 73 74 64 6f 75      fflush(stdou
3800: 74 29 3b 0a 7d 0a                                t);.}.