Hex Artifact Content

Artifact 34460f486a403bfb83bccf60ae5779ba2e7b93f6:


0000: 23 69 66 64 65 66 20 4b 49 54 53 48 5f 4e 45 45  #ifdef KITSH_NEE
0010: 44 5f 57 49 4e 4d 41 49 4e 0a 2f 2a 20 0a 20 2a  D_WINMAIN./* . *
0020: 20 77 69 6e 4d 61 69 6e 2e 63 20 2d 2d 0a 20 2a   winMain.c --. *
0030: 0a 20 2a 09 4d 61 69 6e 20 65 6e 74 72 79 20 70  . *.Main entry p
0040: 6f 69 6e 74 20 66 6f 72 20 77 69 73 68 20 61 6e  oint for wish an
0050: 64 20 6f 74 68 65 72 20 54 6b 2d 62 61 73 65 64  d other Tk-based
0060: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
0070: 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28  *. * Copyright (
0080: 63 29 20 31 39 39 35 2d 31 39 39 37 20 53 75 6e  c) 1995-1997 Sun
0090: 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49   Microsystems, I
00a0: 6e 63 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74  nc.. * Copyright
00b0: 20 28 63 29 20 31 39 39 38 2d 31 39 39 39 20 62   (c) 1998-1999 b
00c0: 79 20 53 63 72 69 70 74 69 63 73 20 43 6f 72 70  y Scriptics Corp
00d0: 6f 72 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 53  oration.. *. * S
00e0: 65 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63  ee the file "lic
00f0: 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20  ense.terms" for 
0100: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75  information on u
0110: 73 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72  sage and redistr
0120: 69 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68  ibution. * of th
0130: 69 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72  is file, and for
0140: 20 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46   a DISCLAIMER OF
0150: 20 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e   ALL WARRANTIES.
0160: 0a 20 2a 0a 20 2a 20 52 43 53 3a 20 40 28 23 29  . *. * RCS: @(#)
0170: 20 24 49 64 3a 20 77 69 6e 4d 61 69 6e 2e 63 20   $Id: winMain.c 
0180: 31 36 32 39 20 32 30 30 37 2d 30 36 2d 30 39 20  1629 2007-06-09 
0190: 31 33 3a 35 39 3a 33 31 5a 20 6a 63 77 20 24 0a  13:59:31Z jcw $.
01a0: 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 74   */..#include <t
01b0: 6b 2e 68 3e 0a 23 64 65 66 69 6e 65 20 57 49 4e  k.h>.#define WIN
01c0: 33 32 5f 4c 45 41 4e 5f 41 4e 44 5f 4d 45 41 4e  32_LEAN_AND_MEAN
01d0: 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e 64 6f  .#include <windo
01e0: 77 73 2e 68 3e 0a 23 75 6e 64 65 66 20 57 49 4e  ws.h>.#undef WIN
01f0: 33 32 5f 4c 45 41 4e 5f 41 4e 44 5f 4d 45 41 4e  32_LEAN_AND_MEAN
0200: 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 6c 6c 6f  .#include <mallo
0210: 63 2e 68 3e 0a 0a 23 69 66 6e 64 65 66 20 55 4e  c.h>..#ifndef UN
0220: 44 45 52 5f 43 45 0a 23 69 6e 63 6c 75 64 65 20  DER_CE.#include 
0230: 3c 6c 6f 63 61 6c 65 2e 68 3e 0a 23 65 6e 64 69  <locale.h>.#endi
0240: 66 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 66 6f 6c  f../*. * The fol
0250: 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69  lowing declarati
0260: 6f 6e 73 20 72 65 66 65 72 20 74 6f 20 69 6e 74  ons refer to int
0270: 65 72 6e 61 6c 20 54 6b 20 72 6f 75 74 69 6e 65  ernal Tk routine
0280: 73 2e 20 20 54 68 65 73 65 0a 20 2a 20 69 6e 74  s.  These. * int
0290: 65 72 66 61 63 65 73 20 61 72 65 20 61 76 61 69  erfaces are avai
02a0: 6c 61 62 6c 65 20 66 6f 72 20 75 73 65 2c 20 62  lable for use, b
02b0: 75 74 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  ut are not suppo
02c0: 72 74 65 64 2e 0a 20 2a 2f 0a 0a 0a 2f 2a 0a 20  rted.. */.../*. 
02d0: 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
02e0: 61 74 69 6f 6e 73 20 66 6f 72 20 70 72 6f 63 65  ations for proce
02f0: 64 75 72 65 73 20 64 65 66 69 6e 65 64 20 6c 61  dures defined la
0300: 74 65 72 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ter in this file
0310: 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f  :. */..static vo
0320: 69 64 09 09 73 65 74 61 72 67 76 20 5f 41 4e 53  id..setargv _ANS
0330: 49 5f 41 52 47 53 5f 28 28 69 6e 74 20 2a 61 72  I_ARGS_((int *ar
0340: 67 63 50 74 72 2c 20 63 68 61 72 20 2a 2a 2a 61  gcPtr, char ***a
0350: 72 67 76 50 74 72 29 29 3b 0a 73 74 61 74 69 63  rgvPtr));.static
0360: 20 54 63 6c 5f 50 61 6e 69 63 50 72 6f 63 09 57   Tcl_PanicProc.W
0370: 69 73 68 50 61 6e 69 63 3b 0a 0a 73 74 61 74 69  ishPanic;..stati
0380: 63 20 42 4f 4f 4c 20 63 6f 6e 73 6f 6c 65 52 65  c BOOL consoleRe
0390: 71 75 69 72 65 64 20 3d 20 54 52 55 45 3b 0a 0a  quired = TRUE;..
03a0: 2f 2a 0a 20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*. * The follow
03b0: 69 6e 67 20 23 69 66 20 62 6c 6f 63 6b 20 61 6c  ing #if block al
03c0: 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63 68 61 6e  lows you to chan
03d0: 67 65 20 74 68 65 20 41 70 70 49 6e 69 74 0a 20  ge the AppInit. 
03e0: 2a 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 75 73  * function by us
03f0: 69 6e 67 20 61 20 23 64 65 66 69 6e 65 20 6f 66  ing a #define of
0400: 20 54 43 4c 5f 4c 4f 43 41 4c 5f 41 50 50 49 4e   TCL_LOCAL_APPIN
0410: 49 54 20 69 6e 73 74 65 61 64 0a 20 2a 20 6f 66  IT instead. * of
0420: 20 72 65 77 72 69 74 69 6e 67 20 74 68 69 73 20   rewriting this 
0430: 65 6e 74 69 72 65 20 66 69 6c 65 2e 20 20 54 68  entire file.  Th
0440: 65 20 23 69 66 20 63 68 65 63 6b 73 20 66 6f 72  e #if checks for
0450: 20 74 68 61 74 0a 20 2a 20 23 64 65 66 69 6e 65   that. * #define
0460: 20 61 6e 64 20 75 73 65 73 20 54 63 6c 5f 41 70   and uses Tcl_Ap
0470: 70 49 6e 69 74 20 69 66 20 69 74 20 64 6f 65 73  pInit if it does
0480: 6e 27 74 20 65 78 69 73 74 2e 0a 20 2a 2f 0a 20  n't exist.. */. 
0490: 20 20 20 0a 23 69 66 6e 64 65 66 20 54 4b 5f 4c     .#ifndef TK_L
04a0: 4f 43 41 4c 5f 41 50 50 49 4e 49 54 0a 23 64 65  OCAL_APPINIT.#de
04b0: 66 69 6e 65 20 54 4b 5f 4c 4f 43 41 4c 5f 41 50  fine TK_LOCAL_AP
04c0: 50 49 4e 49 54 20 54 63 6c 5f 41 70 70 49 6e 69  PINIT Tcl_AppIni
04d0: 74 20 20 20 20 0a 23 65 6e 64 69 66 0a 65 78 74  t    .#endif.ext
04e0: 65 72 6e 20 69 6e 74 20 54 4b 5f 4c 4f 43 41 4c  ern int TK_LOCAL
04f0: 5f 41 50 50 49 4e 49 54 20 5f 41 4e 53 49 5f 41  _APPINIT _ANSI_A
0500: 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70  RGS_((Tcl_Interp
0510: 20 2a 69 6e 74 65 72 70 29 29 3b 0a 20 20 20 20   *interp));.    
0520: 0a 2f 2a 0a 20 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*. * The follo
0530: 77 69 6e 67 20 23 69 66 20 62 6c 6f 63 6b 20 61  wing #if block a
0540: 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63 68 61  llows you to cha
0550: 6e 67 65 20 68 6f 77 20 54 63 6c 20 66 69 6e 64  nge how Tcl find
0560: 73 20 74 68 65 20 73 74 61 72 74 75 70 0a 20 2a  s the startup. *
0570: 20 73 63 72 69 70 74 2c 20 70 72 69 6d 65 20 74   script, prime t
0580: 68 65 20 6c 69 62 72 61 72 79 20 6f 72 20 65 6e  he library or en
0590: 63 6f 64 69 6e 67 20 70 61 74 68 73 2c 20 66 69  coding paths, fi
05a0: 64 64 6c 65 20 77 69 74 68 20 74 68 65 20 61 72  ddle with the ar
05b0: 67 76 2c 0a 20 2a 20 65 74 63 2e 2c 20 77 69 74  gv,. * etc., wit
05c0: 68 6f 75 74 20 6e 65 65 64 69 6e 67 20 74 6f 20  hout needing to 
05d0: 72 65 77 72 69 74 65 20 54 6b 5f 4d 61 69 6e 28  rewrite Tk_Main(
05e0: 29 0a 20 2a 2f 0a 0a 23 69 66 64 65 66 20 54 4b  ). */..#ifdef TK
05f0: 5f 4c 4f 43 41 4c 5f 4d 41 49 4e 5f 48 4f 4f 4b  _LOCAL_MAIN_HOOK
0600: 0a 65 78 74 65 72 6e 20 69 6e 74 20 54 4b 5f 4c  .extern int TK_L
0610: 4f 43 41 4c 5f 4d 41 49 4e 5f 48 4f 4f 4b 20 5f  OCAL_MAIN_HOOK _
0620: 41 4e 53 49 5f 41 52 47 53 5f 28 28 69 6e 74 20  ANSI_ARGS_((int 
0630: 2a 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 2a 61  *argc, char ***a
0640: 72 67 76 29 29 3b 0a 23 65 6e 64 69 66 0a 0a 0c  rgv));.#endif...
0650: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
0660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
06a0: 20 2a 20 57 69 6e 4d 61 69 6e 20 2d 2d 0a 20 2a   * WinMain --. *
06b0: 0a 20 2a 09 4d 61 69 6e 20 65 6e 74 72 79 20 70  . *.Main entry p
06c0: 6f 69 6e 74 20 66 72 6f 6d 20 57 69 6e 64 6f 77  oint from Window
06d0: 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  s.. *. * Results
06e0: 3a 0a 20 2a 09 52 65 74 75 72 6e 73 20 66 61 6c  :. *.Returns fal
06f0: 73 65 20 69 66 20 69 6e 69 74 69 61 6c 69 7a 61  se if initializa
0700: 74 69 6f 6e 20 66 61 69 6c 73 2c 20 6f 74 68 65  tion fails, othe
0710: 72 77 69 73 65 20 69 74 20 6e 65 76 65 72 0a 20  rwise it never. 
0720: 2a 09 72 65 74 75 72 6e 73 2e 20 0a 20 2a 0a 20  *.returns. . *. 
0730: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
0740: 20 2a 09 4a 75 73 74 20 61 62 6f 75 74 20 61 6e   *.Just about an
0750: 79 74 68 69 6e 67 2c 20 73 69 6e 63 65 20 66 72  ything, since fr
0760: 6f 6d 20 68 65 72 65 20 77 65 20 63 61 6c 6c 20  om here we call 
0770: 61 72 62 69 74 72 61 72 79 20 54 63 6c 20 63 6f  arbitrary Tcl co
0780: 64 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  de.. *. *-------
0790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
07d0: 20 2a 2f 0a 0a 69 6e 74 20 41 50 49 45 4e 54 52   */..int APIENTR
07e0: 59 0a 23 69 66 64 65 66 20 55 4e 44 45 52 5f 43  Y.#ifdef UNDER_C
07f0: 45 0a 77 57 69 6e 4d 61 69 6e 28 68 49 6e 73 74  E.wWinMain(hInst
0800: 61 6e 63 65 2c 20 68 50 72 65 76 49 6e 73 74 61  ance, hPrevInsta
0810: 6e 63 65 2c 20 6c 70 73 7a 43 6d 64 4c 69 6e 65  nce, lpszCmdLine
0820: 2c 20 6e 43 6d 64 53 68 6f 77 29 0a 23 65 6c 73  , nCmdShow).#els
0830: 65 0a 57 69 6e 4d 61 69 6e 28 68 49 6e 73 74 61  e.WinMain(hInsta
0840: 6e 63 65 2c 20 68 50 72 65 76 49 6e 73 74 61 6e  nce, hPrevInstan
0850: 63 65 2c 20 6c 70 73 7a 43 6d 64 4c 69 6e 65 2c  ce, lpszCmdLine,
0860: 20 6e 43 6d 64 53 68 6f 77 29 0a 23 65 6e 64 69   nCmdShow).#endi
0870: 66 0a 20 20 20 20 48 49 4e 53 54 41 4e 43 45 20  f.    HINSTANCE 
0880: 68 49 6e 73 74 61 6e 63 65 3b 0a 20 20 20 20 48  hInstance;.    H
0890: 49 4e 53 54 41 4e 43 45 20 68 50 72 65 76 49 6e  INSTANCE hPrevIn
08a0: 73 74 61 6e 63 65 3b 0a 20 20 20 20 4c 50 53 54  stance;.    LPST
08b0: 52 20 6c 70 73 7a 43 6d 64 4c 69 6e 65 3b 0a 20  R lpszCmdLine;. 
08c0: 20 20 20 69 6e 74 20 6e 43 6d 64 53 68 6f 77 3b     int nCmdShow;
08d0: 0a 7b 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72  .{.    char **ar
08e0: 67 76 3b 0a 20 20 20 20 69 6e 74 20 61 72 67 63  gv;.    int argc
08f0: 3b 0a 23 69 66 6e 64 65 66 20 55 4e 44 45 52 5f  ;.#ifndef UNDER_
0900: 43 45 0a 20 20 20 20 63 68 61 72 20 62 75 66 66  CE.    char buff
0910: 65 72 5b 4d 41 58 5f 50 41 54 48 2b 31 5d 3b 0a  er[MAX_PATH+1];.
0920: 20 20 20 20 63 68 61 72 20 2a 70 3b 0a 23 65 6e      char *p;.#en
0930: 64 69 66 0a 0a 23 69 66 64 65 66 20 55 4e 44 45  dif..#ifdef UNDE
0940: 52 5f 43 45 0a 20 20 20 20 6e 43 6d 64 53 68 6f  R_CE.    nCmdSho
0950: 77 20 3d 20 53 57 5f 53 48 4f 57 4e 4f 52 4d 41  w = SW_SHOWNORMA
0960: 4c 3b 0a 0a 20 20 20 20 58 43 45 53 68 6f 77 57  L;..    XCEShowW
0970: 61 69 74 43 75 72 73 6f 72 28 29 3b 0a 0a 20 20  aitCursor();..  
0980: 20 20 78 63 65 69 6e 69 74 28 6c 70 73 7a 43 6d    xceinit(lpszCm
0990: 64 4c 69 6e 65 29 3b 0a 20 20 20 20 61 72 67 63  dLine);.    argc
09a0: 20 3d 20 5f 5f 78 63 65 61 72 67 63 3b 0a 20 20   = __xceargc;.  
09b0: 20 20 61 72 67 76 20 3d 20 5f 5f 78 63 65 61 72    argv = __xcear
09c0: 67 76 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  gv;.#endif..    
09d0: 54 63 6c 5f 53 65 74 50 61 6e 69 63 50 72 6f 63  Tcl_SetPanicProc
09e0: 28 57 69 73 68 50 61 6e 69 63 29 3b 0a 0a 20 20  (WishPanic);..  
09f0: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 43 72 65 61    /*.     * Crea
0a00: 74 65 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 63  te the console c
0a10: 68 61 6e 6e 65 6c 73 20 61 6e 64 20 69 6e 73 74  hannels and inst
0a20: 61 6c 6c 20 74 68 65 6d 20 61 73 20 74 68 65 20  all them as the 
0a30: 73 74 61 6e 64 61 72 64 0a 20 20 20 20 20 2a 20  standard.     * 
0a40: 63 68 61 6e 6e 65 6c 73 2e 20 20 41 6c 6c 20 49  channels.  All I
0a50: 2f 4f 20 77 69 6c 6c 20 62 65 20 64 69 73 63 61  /O will be disca
0a60: 72 64 65 64 20 75 6e 74 69 6c 20 54 6b 5f 43 72  rded until Tk_Cr
0a70: 65 61 74 65 43 6f 6e 73 6f 6c 65 57 69 6e 64 6f  eateConsoleWindo
0a80: 77 20 69 73 0a 20 20 20 20 20 2a 20 63 61 6c 6c  w is.     * call
0a90: 65 64 20 74 6f 20 61 74 74 61 63 68 20 74 68 65  ed to attach the
0aa0: 20 63 6f 6e 73 6f 6c 65 20 74 6f 20 61 20 74 65   console to a te
0ab0: 78 74 20 77 69 64 67 65 74 2e 0a 20 20 20 20 20  xt widget..     
0ac0: 2a 2f 0a 0a 20 20 20 20 63 6f 6e 73 6f 6c 65 52  */..    consoleR
0ad0: 65 71 75 69 72 65 64 20 3d 20 54 52 55 45 3b 0a  equired = TRUE;.
0ae0: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 53  .    /*.     * S
0af0: 65 74 20 75 70 20 74 68 65 20 64 65 66 61 75 6c  et up the defaul
0b00: 74 20 6c 6f 63 61 6c 65 20 74 6f 20 62 65 20 73  t locale to be s
0b10: 74 61 6e 64 61 72 64 20 22 43 22 20 6c 6f 63 61  tandard "C" loca
0b20: 6c 65 20 73 6f 20 70 61 72 73 69 6e 67 0a 20 20  le so parsing.  
0b30: 20 20 20 2a 20 69 73 20 70 65 72 66 6f 72 6d 65     * is performe
0b40: 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20  d correctly..   
0b50: 20 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 55 4e    */..#ifndef UN
0b60: 44 45 52 5f 43 45 0a 20 20 20 20 73 65 74 6c 6f  DER_CE.    setlo
0b70: 63 61 6c 65 28 4c 43 5f 41 4c 4c 2c 20 22 43 22  cale(LC_ALL, "C"
0b80: 29 3b 0a 20 20 20 20 73 65 74 61 72 67 76 28 26  );.    setargv(&
0b90: 61 72 67 63 2c 20 26 61 72 67 76 29 3b 0a 0a 20  argc, &argv);.. 
0ba0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 52 65 70     /*.     * Rep
0bb0: 6c 61 63 65 20 61 72 67 76 5b 30 5d 20 77 69 74  lace argv[0] wit
0bc0: 68 20 66 75 6c 6c 20 70 61 74 68 6e 61 6d 65 20  h full pathname 
0bd0: 6f 66 20 65 78 65 63 75 74 61 62 6c 65 2c 20 61  of executable, a
0be0: 6e 64 20 66 6f 72 77 61 72 64 0a 20 20 20 20 20  nd forward.     
0bf0: 2a 20 73 6c 61 73 68 65 73 20 73 75 62 73 74 69  * slashes substi
0c00: 74 75 74 65 64 20 66 6f 72 20 62 61 63 6b 73 6c  tuted for backsl
0c10: 61 73 68 65 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a  ashes..     */..
0c20: 20 20 20 20 47 65 74 4d 6f 64 75 6c 65 46 69 6c      GetModuleFil
0c30: 65 4e 61 6d 65 28 4e 55 4c 4c 2c 20 62 75 66 66  eName(NULL, buff
0c40: 65 72 2c 20 73 69 7a 65 6f 66 28 62 75 66 66 65  er, sizeof(buffe
0c50: 72 29 29 3b 0a 20 20 20 20 61 72 67 76 5b 30 5d  r));.    argv[0]
0c60: 20 3d 20 62 75 66 66 65 72 3b 0a 20 20 20 20 66   = buffer;.    f
0c70: 6f 72 20 28 70 20 3d 20 62 75 66 66 65 72 3b 20  or (p = buffer; 
0c80: 2a 70 20 21 3d 20 27 5c 30 27 3b 20 70 2b 2b 29  *p != '\0'; p++)
0c90: 20 7b 0a 09 69 66 20 28 2a 70 20 3d 3d 20 27 5c   {..if (*p == '\
0ca0: 5c 27 29 20 7b 0a 09 20 20 20 20 2a 70 20 3d 20  \') {..    *p = 
0cb0: 27 2f 27 3b 0a 09 7d 0a 20 20 20 20 7d 0a 23 65  '/';..}.    }.#e
0cc0: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 54 4b 5f  ndif..#ifdef TK_
0cd0: 4c 4f 43 41 4c 5f 4d 41 49 4e 5f 48 4f 4f 4b 0a  LOCAL_MAIN_HOOK.
0ce0: 20 20 20 20 54 4b 5f 4c 4f 43 41 4c 5f 4d 41 49      TK_LOCAL_MAI
0cf0: 4e 5f 48 4f 4f 4b 28 26 61 72 67 63 2c 20 26 61  N_HOOK(&argc, &a
0d00: 72 67 76 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rgv);.#endif..  
0d10: 20 20 54 6b 5f 4d 61 69 6e 28 61 72 67 63 2c 20    Tk_Main(argc, 
0d20: 61 72 67 76 2c 20 54 4b 5f 4c 4f 43 41 4c 5f 41  argv, TK_LOCAL_A
0d30: 50 50 49 4e 49 54 29 3b 0a 20 20 20 20 72 65 74  PPINIT);.    ret
0d40: 75 72 6e 20 31 3b 0a 7d 0a 0a 0c 0a 2f 2a 0a 20  urn 1;.}..../*. 
0d50: 2a 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 2d 2d 2d 2d  ----------------
0d90: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 63  -------. *. * Tc
0da0: 6c 5f 41 70 70 49 6e 69 74 20 2d 2d 0a 20 2a 0a  l_AppInit --. *.
0db0: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72   *.This procedur
0dc0: 65 20 70 65 72 66 6f 72 6d 73 20 61 70 70 6c 69  e performs appli
0dd0: 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  cation-specific 
0de0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 2e 0a  initialization..
0df0: 20 2a 09 4d 6f 73 74 20 61 70 70 6c 69 63 61 74   *.Most applicat
0e00: 69 6f 6e 73 2c 20 65 73 70 65 63 69 61 6c 6c 79  ions, especially
0e10: 20 74 68 6f 73 65 20 74 68 61 74 20 69 6e 63 6f   those that inco
0e20: 72 70 6f 72 61 74 65 20 61 64 64 69 74 69 6f 6e  rporate addition
0e30: 61 6c 0a 20 2a 09 70 61 63 6b 61 67 65 73 2c 20  al. *.packages, 
0e40: 77 69 6c 6c 20 68 61 76 65 20 74 68 65 69 72 20  will have their 
0e50: 6f 77 6e 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  own version of t
0e60: 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0a 20  his procedure.. 
0e70: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
0e80: 09 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64  .Returns a stand
0e90: 61 72 64 20 54 63 6c 20 63 6f 6d 70 6c 65 74 69  ard Tcl completi
0ea0: 6f 6e 20 63 6f 64 65 2c 20 61 6e 64 20 6c 65 61  on code, and lea
0eb0: 76 65 73 20 61 6e 20 65 72 72 6f 72 0a 20 2a 09  ves an error. *.
0ec0: 6d 65 73 73 61 67 65 20 69 6e 20 74 68 65 20 69  message in the i
0ed0: 6e 74 65 72 70 27 73 20 72 65 73 75 6c 74 20 69  nterp's result i
0ee0: 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
0ef0: 73 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  s.. *. * Side ef
0f00: 66 65 63 74 73 3a 0a 20 2a 09 44 65 70 65 6e 64  fects:. *.Depend
0f10: 73 20 6f 6e 20 74 68 65 20 73 74 61 72 74 75 70  s on the startup
0f20: 20 73 63 72 69 70 74 2e 0a 20 2a 0a 20 2a 2d 2d   script.. *. *--
0f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f70: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 54 63  ----. */..int.Tc
0f80: 6c 5f 41 70 70 49 6e 69 74 28 69 6e 74 65 72 70  l_AppInit(interp
0f90: 29 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ).    Tcl_Interp
0fa0: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e   *interp;../* In
0fb0: 74 65 72 70 72 65 74 65 72 20 66 6f 72 20 61 70  terpreter for ap
0fc0: 70 6c 69 63 61 74 69 6f 6e 2e 20 2a 2f 0a 7b 0a  plication. */.{.
0fd0: 20 20 20 20 69 66 20 28 54 63 6c 5f 49 6e 69 74      if (Tcl_Init
0fe0: 28 69 6e 74 65 72 70 29 20 3d 3d 20 54 43 4c 5f  (interp) == TCL_
0ff0: 45 52 52 4f 52 29 20 7b 0a 09 67 6f 74 6f 20 65  ERROR) {..goto e
1000: 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1010: 69 66 20 28 54 6b 5f 49 6e 69 74 28 69 6e 74 65  if (Tk_Init(inte
1020: 72 70 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52  rp) == TCL_ERROR
1030: 29 20 7b 0a 09 67 6f 74 6f 20 65 72 72 6f 72 3b  ) {..goto error;
1040: 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 53  .    }.    Tcl_S
1050: 74 61 74 69 63 50 61 63 6b 61 67 65 28 69 6e 74  taticPackage(int
1060: 65 72 70 2c 20 22 54 6b 22 2c 20 54 6b 5f 49 6e  erp, "Tk", Tk_In
1070: 69 74 2c 20 54 6b 5f 53 61 66 65 49 6e 69 74 29  it, Tk_SafeInit)
1080: 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  ;..    /*.     *
1090: 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   Initialize the 
10a0: 63 6f 6e 73 6f 6c 65 20 6f 6e 6c 79 20 69 66 20  console only if 
10b0: 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 61  we are running a
10c0: 73 20 61 6e 20 69 6e 74 65 72 61 63 74 69 76 65  s an interactive
10d0: 0a 20 20 20 20 20 2a 20 61 70 70 6c 69 63 61 74  .     * applicat
10e0: 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 23 69  ion..     */..#i
10f0: 66 64 65 66 20 55 4e 44 45 52 5f 43 45 0a 20 20  fdef UNDER_CE.  
1100: 20 20 63 6f 6e 73 6f 6c 65 52 65 71 75 69 72 65    consoleRequire
1110: 64 20 3d 20 46 41 4c 53 45 3b 0a 23 65 6e 64 69  d = FALSE;.#endi
1120: 66 0a 0a 20 20 20 20 69 66 20 28 63 6f 6e 73 6f  f..    if (conso
1130: 6c 65 52 65 71 75 69 72 65 64 29 20 7b 0a 09 69  leRequired) {..i
1140: 66 20 28 54 6b 5f 43 72 65 61 74 65 43 6f 6e 73  f (Tk_CreateCons
1150: 6f 6c 65 57 69 6e 64 6f 77 28 69 6e 74 65 72 70  oleWindow(interp
1160: 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20  ) == TCL_ERROR) 
1170: 7b 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f  {..    goto erro
1180: 72 3b 0a 09 7d 0a 20 20 20 20 7d 0a 23 69 66 20  r;..}.    }.#if 
1190: 64 65 66 69 6e 65 64 28 53 54 41 54 49 43 5f 42  defined(STATIC_B
11a0: 55 49 4c 44 29 20 26 26 20 64 65 66 69 6e 65 64  UILD) && defined
11b0: 28 54 43 4c 5f 55 53 45 5f 53 54 41 54 49 43 5f  (TCL_USE_STATIC_
11c0: 50 41 43 4b 41 47 45 53 29 0a 20 20 20 20 7b 0a  PACKAGES).    {.
11d0: 09 65 78 74 65 72 6e 20 54 63 6c 5f 50 61 63 6b  .extern Tcl_Pack
11e0: 61 67 65 49 6e 69 74 50 72 6f 63 20 52 65 67 69  ageInitProc Regi
11f0: 73 74 72 79 5f 49 6e 69 74 3b 0a 09 65 78 74 65  stry_Init;..exte
1200: 72 6e 20 54 63 6c 5f 50 61 63 6b 61 67 65 49 6e  rn Tcl_PackageIn
1210: 69 74 50 72 6f 63 20 44 64 65 5f 49 6e 69 74 3b  itProc Dde_Init;
1220: 0a 0a 09 69 66 20 28 52 65 67 69 73 74 72 79 5f  ...if (Registry_
1230: 49 6e 69 74 28 69 6e 74 65 72 70 29 20 3d 3d 20  Init(interp) == 
1240: 54 43 4c 5f 45 52 52 4f 52 29 20 7b 0a 09 20 20  TCL_ERROR) {..  
1250: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1260: 4f 52 3b 0a 09 7d 0a 09 54 63 6c 5f 53 74 61 74  OR;..}..Tcl_Stat
1270: 69 63 50 61 63 6b 61 67 65 28 69 6e 74 65 72 70  icPackage(interp
1280: 2c 20 22 72 65 67 69 73 74 72 79 22 2c 20 52 65  , "registry", Re
1290: 67 69 73 74 72 79 5f 49 6e 69 74 2c 20 4e 55 4c  gistry_Init, NUL
12a0: 4c 29 3b 0a 0a 09 69 66 20 28 44 64 65 5f 49 6e  L);...if (Dde_In
12b0: 69 74 28 69 6e 74 65 72 70 29 20 3d 3d 20 54 43  it(interp) == TC
12c0: 4c 5f 45 52 52 4f 52 29 20 7b 0a 09 20 20 20 20  L_ERROR) {..    
12d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12e0: 3b 0a 09 7d 0a 09 54 63 6c 5f 53 74 61 74 69 63  ;..}..Tcl_Static
12f0: 50 61 63 6b 61 67 65 28 69 6e 74 65 72 70 2c 20  Package(interp, 
1300: 22 64 64 65 22 2c 20 44 64 65 5f 49 6e 69 74 2c  "dde", Dde_Init,
1310: 20 4e 55 4c 4c 29 3b 0a 20 20 20 7d 0a 23 65 6e   NULL);.   }.#en
1320: 64 69 66 0a 0a 20 20 20 20 54 63 6c 5f 53 65 74  dif..    Tcl_Set
1330: 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63 6c  Var(interp, "tcl
1340: 5f 72 63 46 69 6c 65 4e 61 6d 65 22 2c 20 22 7e  _rcFileName", "~
1350: 2f 77 69 73 68 72 63 2e 74 63 6c 22 2c 20 54 43  /wishrc.tcl", TC
1360: 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1370: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
1380: 4b 3b 0a 0a 65 72 72 6f 72 3a 0a 20 20 20 20 4d  K;..error:.    M
1390: 65 73 73 61 67 65 42 65 65 70 28 4d 42 5f 49 43  essageBeep(MB_IC
13a0: 4f 4e 45 58 43 4c 41 4d 41 54 49 4f 4e 29 3b 0a  ONEXCLAMATION);.
13b0: 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 28 4e      MessageBox(N
13c0: 55 4c 4c 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  ULL, Tcl_GetStri
13d0: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
13e0: 2c 20 22 45 72 72 6f 72 20 69 6e 20 57 69 73 68  , "Error in Wish
13f0: 22 2c 0a 09 20 20 20 20 4d 42 5f 49 43 4f 4e 53  ",..    MB_ICONS
1400: 54 4f 50 20 7c 20 4d 42 5f 4f 4b 20 7c 20 4d 42  TOP | MB_OK | MB
1410: 5f 54 41 53 4b 4d 4f 44 41 4c 20 7c 20 4d 42 5f  _TASKMODAL | MB_
1420: 53 45 54 46 4f 52 45 47 52 4f 55 4e 44 29 3b 0a  SETFOREGROUND);.
1430: 20 20 20 20 45 78 69 74 50 72 6f 63 65 73 73 28      ExitProcess(
1440: 31 29 3b 0a 20 20 20 20 2f 2a 20 77 65 20 77 6f  1);.    /* we wo
1450: 6e 27 74 20 72 65 61 63 68 20 74 68 69 73 2c 20  n't reach this, 
1460: 62 75 74 20 77 65 20 6e 65 65 64 20 74 68 65 20  but we need the 
1470: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 72 65  return */.    re
1480: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1490: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
14a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
14e0: 20 2a 0a 20 2a 20 57 69 73 68 50 61 6e 69 63 20   *. * WishPanic 
14f0: 2d 2d 0a 20 2a 0a 20 2a 09 44 69 73 70 6c 61 79  --. *. *.Display
1500: 20 61 20 6d 65 73 73 61 67 65 20 61 6e 64 20 65   a message and e
1510: 78 69 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  xit.. *. * Resul
1520: 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a  ts:. *.None.. *.
1530: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
1540: 0a 20 2a 09 45 78 69 74 73 20 74 68 65 20 70 72  . *.Exits the pr
1550: 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  ogram.. *. *----
1560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a0: 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 57 69 73  --. */..void.Wis
15b0: 68 50 61 6e 69 63 20 54 43 4c 5f 56 41 52 41 52  hPanic TCL_VARAR
15c0: 47 53 5f 44 45 46 28 43 4f 4e 53 54 20 63 68 61  GS_DEF(CONST cha
15d0: 72 20 2a 2c 61 72 67 31 29 0a 7b 0a 20 20 20 20  r *,arg1).{.    
15e0: 76 61 5f 6c 69 73 74 20 61 72 67 4c 69 73 74 3b  va_list argList;
15f0: 0a 20 20 20 20 63 68 61 72 20 62 75 66 5b 31 30  .    char buf[10
1600: 32 34 5d 3b 0a 20 20 20 20 43 4f 4e 53 54 20 63  24];.    CONST c
1610: 68 61 72 20 2a 66 6f 72 6d 61 74 3b 0a 20 20 20  har *format;.   
1620: 20 0a 20 20 20 20 66 6f 72 6d 61 74 20 3d 20 54   .    format = T
1630: 43 4c 5f 56 41 52 41 52 47 53 5f 53 54 41 52 54  CL_VARARGS_START
1640: 28 43 4f 4e 53 54 20 63 68 61 72 20 2a 2c 61 72  (CONST char *,ar
1650: 67 31 2c 61 72 67 4c 69 73 74 29 3b 0a 20 20 20  g1,argList);.   
1660: 20 76 73 70 72 69 6e 74 66 28 62 75 66 2c 20 66   vsprintf(buf, f
1670: 6f 72 6d 61 74 2c 20 61 72 67 4c 69 73 74 29 3b  ormat, argList);
1680: 0a 0a 20 20 20 20 4d 65 73 73 61 67 65 42 65 65  ..    MessageBee
1690: 70 28 4d 42 5f 49 43 4f 4e 45 58 43 4c 41 4d 41  p(MB_ICONEXCLAMA
16a0: 54 49 4f 4e 29 3b 0a 20 20 20 20 4d 65 73 73 61  TION);.    Messa
16b0: 67 65 42 6f 78 28 4e 55 4c 4c 2c 20 62 75 66 2c  geBox(NULL, buf,
16c0: 20 22 46 61 74 61 6c 20 45 72 72 6f 72 20 69 6e   "Fatal Error in
16d0: 20 57 69 73 68 22 2c 0a 09 20 20 20 20 4d 42 5f   Wish",..    MB_
16e0: 49 43 4f 4e 53 54 4f 50 20 7c 20 4d 42 5f 4f 4b  ICONSTOP | MB_OK
16f0: 20 7c 20 4d 42 5f 54 41 53 4b 4d 4f 44 41 4c 20   | MB_TASKMODAL 
1700: 7c 20 4d 42 5f 53 45 54 46 4f 52 45 47 52 4f 55  | MB_SETFOREGROU
1710: 4e 44 29 3b 0a 23 69 66 64 65 66 20 5f 4d 53 43  ND);.#ifdef _MSC
1720: 5f 56 45 52 0a 20 20 20 20 44 65 62 75 67 42 72  _VER.    DebugBr
1730: 65 61 6b 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  eak();.#endif.  
1740: 20 20 45 78 69 74 50 72 6f 63 65 73 73 28 31 29    ExitProcess(1)
1750: 3b 0a 7d 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ;.}./*. *-------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17a0: 2d 2d 0a 20 2a 0a 20 2a 20 73 65 74 61 72 67 76  --. *. * setargv
17b0: 20 2d 2d 0a 20 2a 0a 20 2a 09 50 61 72 73 65 20   --. *. *.Parse 
17c0: 74 68 65 20 57 69 6e 64 6f 77 73 20 63 6f 6d 6d  the Windows comm
17d0: 61 6e 64 20 6c 69 6e 65 20 73 74 72 69 6e 67 20  and line string 
17e0: 69 6e 74 6f 20 61 72 67 63 2f 61 72 67 76 2e 20  into argc/argv. 
17f0: 20 44 6f 6e 65 20 68 65 72 65 0a 20 2a 09 62 65   Done here. *.be
1800: 63 61 75 73 65 20 77 65 20 64 6f 6e 27 74 20 74  cause we don't t
1810: 72 75 73 74 20 74 68 65 20 62 75 69 6c 74 69 6e  rust the builtin
1820: 20 61 72 67 75 6d 65 6e 74 20 70 61 72 73 65 72   argument parser
1830: 20 69 6e 20 63 72 74 30 2e 20 20 0a 20 2a 09 57   in crt0.  . *.W
1840: 69 6e 64 6f 77 73 20 61 70 70 6c 69 63 61 74 69  indows applicati
1850: 6f 6e 73 20 61 72 65 20 72 65 73 70 6f 6e 73 69  ons are responsi
1860: 62 6c 65 20 66 6f 72 20 62 72 65 61 6b 69 6e 67  ble for breaking
1870: 20 74 68 65 69 72 20 63 6f 6d 6d 61 6e 64 0a 20   their command. 
1880: 2a 09 6c 69 6e 65 20 69 6e 74 6f 20 61 72 67 75  *.line into argu
1890: 6d 65 6e 74 73 2e 0a 20 2a 0a 20 2a 09 32 4e 20  ments.. *. *.2N 
18a0: 62 61 63 6b 73 6c 61 73 68 65 73 20 2b 20 71 75  backslashes + qu
18b0: 6f 74 65 20 2d 3e 20 4e 20 62 61 63 6b 73 6c 61  ote -> N backsla
18c0: 73 68 65 73 20 2b 20 62 65 67 69 6e 20 71 75 6f  shes + begin quo
18d0: 74 65 64 20 73 74 72 69 6e 67 0a 20 2a 09 32 4e  ted string. *.2N
18e0: 20 2b 20 31 20 62 61 63 6b 73 6c 61 73 68 65 73   + 1 backslashes
18f0: 20 2b 20 71 75 6f 74 65 20 2d 3e 20 6c 69 74 65   + quote -> lite
1900: 72 61 6c 0a 20 2a 09 4e 20 62 61 63 6b 73 6c 61  ral. *.N backsla
1910: 73 68 65 73 20 2b 20 6e 6f 6e 2d 71 75 6f 74 65  shes + non-quote
1920: 20 2d 3e 20 6c 69 74 65 72 61 6c 0a 20 2a 09 71   -> literal. *.q
1930: 75 6f 74 65 20 2b 20 71 75 6f 74 65 20 69 6e 20  uote + quote in 
1940: 61 20 71 75 6f 74 65 64 20 73 74 72 69 6e 67 20  a quoted string 
1950: 2d 3e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 0a  -> single quote.
1960: 20 2a 09 71 75 6f 74 65 20 2b 20 71 75 6f 74 65   *.quote + quote
1970: 20 6e 6f 74 20 69 6e 20 71 75 6f 74 65 64 20 73   not in quoted s
1980: 74 72 69 6e 67 20 2d 3e 20 65 6d 70 74 79 20 73  tring -> empty s
1990: 74 72 69 6e 67 0a 20 2a 09 71 75 6f 74 65 20 2d  tring. *.quote -
19a0: 3e 20 62 65 67 69 6e 20 71 75 6f 74 65 64 20 73  > begin quoted s
19b0: 74 72 69 6e 67 0a 20 2a 0a 20 2a 20 52 65 73 75  tring. *. * Resu
19c0: 6c 74 73 3a 0a 20 2a 09 46 69 6c 6c 73 20 61 72  lts:. *.Fills ar
19d0: 67 63 50 74 72 20 77 69 74 68 20 74 68 65 20 6e  gcPtr with the n
19e0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
19f0: 74 73 20 61 6e 64 20 61 72 67 76 50 74 72 20 77  ts and argvPtr w
1a00: 69 74 68 20 74 68 65 0a 20 2a 09 61 72 72 61 79  ith the. *.array
1a10: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20   of arguments.. 
1a20: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
1a30: 73 3a 0a 20 2a 09 4d 65 6d 6f 72 79 20 61 6c 6c  s:. *.Memory all
1a40: 6f 63 61 74 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d  ocated.. *. *---
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a90: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
1aa0: 74 69 63 20 76 6f 69 64 0a 73 65 74 61 72 67 76  tic void.setargv
1ab0: 28 61 72 67 63 50 74 72 2c 20 61 72 67 76 50 74  (argcPtr, argvPt
1ac0: 72 29 0a 20 20 20 20 69 6e 74 20 2a 61 72 67 63  r).    int *argc
1ad0: 50 74 72 3b 09 09 2f 2a 20 46 69 6c 6c 65 64 20  Ptr;../* Filled 
1ae0: 77 69 74 68 20 6e 75 6d 62 65 72 20 6f 66 20 61  with number of a
1af0: 72 67 75 6d 65 6e 74 20 73 74 72 69 6e 67 73 2e  rgument strings.
1b00: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a 2a   */.    char ***
1b10: 61 72 67 76 50 74 72 3b 09 09 2f 2a 20 46 69 6c  argvPtr;../* Fil
1b20: 6c 65 64 20 77 69 74 68 20 61 72 67 75 6d 65 6e  led with argumen
1b30: 74 20 73 74 72 69 6e 67 73 20 28 6d 61 6c 6c 6f  t strings (mallo
1b40: 63 27 64 29 2e 20 2a 2f 0a 7b 0a 20 20 20 20 63  c'd). */.{.    c
1b50: 68 61 72 20 2a 63 6d 64 4c 69 6e 65 2c 20 2a 70  har *cmdLine, *p
1b60: 2c 20 2a 61 72 67 2c 20 2a 61 72 67 53 70 61 63  , *arg, *argSpac
1b70: 65 3b 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72  e;.    char **ar
1b80: 67 76 3b 0a 20 20 20 20 69 6e 74 20 61 72 67 63  gv;.    int argc
1b90: 2c 20 73 69 7a 65 2c 20 69 6e 71 75 6f 74 65 2c  , size, inquote,
1ba0: 20 63 6f 70 79 2c 20 73 6c 61 73 68 65 73 3b 0a   copy, slashes;.
1bb0: 20 20 20 20 0a 20 20 20 20 63 6d 64 4c 69 6e 65      .    cmdLine
1bc0: 20 3d 20 47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e   = GetCommandLin
1bd0: 65 28 29 3b 09 2f 2a 20 49 4e 54 4c 3a 20 42 55  e();./* INTL: BU
1be0: 47 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  G */..    /*.   
1bf0: 20 20 2a 20 50 72 65 63 6f 6d 70 75 74 65 20 61    * Precompute a
1c00: 6e 20 6f 76 65 72 6c 79 20 70 65 73 73 69 6d 69  n overly pessimi
1c10: 73 74 69 63 20 67 75 65 73 73 20 61 74 20 74 68  stic guess at th
1c20: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
1c30: 6d 65 6e 74 73 0a 20 20 20 20 20 2a 20 69 6e 20  ments.     * in 
1c40: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1c50: 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 6e 6f 6e   by counting non
1c60: 2d 73 70 61 63 65 20 73 70 61 6e 73 2e 0a 20 20  -space spans..  
1c70: 20 20 20 2a 2f 0a 0a 20 20 20 20 73 69 7a 65 20     */..    size 
1c80: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 20 28 70 20  = 2;.    for (p 
1c90: 3d 20 63 6d 64 4c 69 6e 65 3b 20 2a 70 20 21 3d  = cmdLine; *p !=
1ca0: 20 27 5c 30 27 3b 20 70 2b 2b 29 20 7b 0a 09 69   '\0'; p++) {..i
1cb0: 66 20 28 28 2a 70 20 3d 3d 20 27 20 27 29 20 7c  f ((*p == ' ') |
1cc0: 7c 20 28 2a 70 20 3d 3d 20 27 5c 74 27 29 29 20  | (*p == '\t')) 
1cd0: 7b 09 2f 2a 20 49 4e 54 4c 3a 20 49 53 4f 20 73  {./* INTL: ISO s
1ce0: 70 61 63 65 2e 20 2a 2f 0a 09 20 20 20 20 73 69  pace. */..    si
1cf0: 7a 65 2b 2b 3b 0a 09 20 20 20 20 77 68 69 6c 65  ze++;..    while
1d00: 20 28 28 2a 70 20 3d 3d 20 27 20 27 29 20 7c 7c   ((*p == ' ') ||
1d10: 20 28 2a 70 20 3d 3d 20 27 5c 74 27 29 29 20 7b   (*p == '\t')) {
1d20: 20 2f 2a 20 49 4e 54 4c 3a 20 49 53 4f 20 73 70   /* INTL: ISO sp
1d30: 61 63 65 2e 20 2a 2f 0a 09 09 70 2b 2b 3b 0a 09  ace. */...p++;..
1d40: 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28 2a      }..    if (*
1d50: 70 20 3d 3d 20 27 5c 30 27 29 20 7b 0a 09 09 62  p == '\0') {...b
1d60: 72 65 61 6b 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  reak;..    }..}.
1d70: 20 20 20 20 7d 0a 20 20 20 20 61 72 67 53 70 61      }.    argSpa
1d80: 63 65 20 3d 20 28 63 68 61 72 20 2a 29 20 54 63  ce = (char *) Tc
1d90: 6c 5f 41 6c 6c 6f 63 28 0a 09 20 20 20 20 28 75  l_Alloc(..    (u
1da0: 6e 73 69 67 6e 65 64 29 20 28 73 69 7a 65 20 2a  nsigned) (size *
1db0: 20 73 69 7a 65 6f 66 28 63 68 61 72 20 2a 29 20   sizeof(char *) 
1dc0: 2b 20 73 74 72 6c 65 6e 28 63 6d 64 4c 69 6e 65  + strlen(cmdLine
1dd0: 29 20 2b 20 31 29 29 3b 0a 20 20 20 20 61 72 67  ) + 1));.    arg
1de0: 76 20 3d 20 28 63 68 61 72 20 2a 2a 29 20 61 72  v = (char **) ar
1df0: 67 53 70 61 63 65 3b 0a 20 20 20 20 61 72 67 53  gSpace;.    argS
1e00: 70 61 63 65 20 2b 3d 20 73 69 7a 65 20 2a 20 73  pace += size * s
1e10: 69 7a 65 6f 66 28 63 68 61 72 20 2a 29 3b 0a 20  izeof(char *);. 
1e20: 20 20 20 73 69 7a 65 2d 2d 3b 0a 0a 20 20 20 20     size--;..    
1e30: 70 20 3d 20 63 6d 64 4c 69 6e 65 3b 0a 20 20 20  p = cmdLine;.   
1e40: 20 66 6f 72 20 28 61 72 67 63 20 3d 20 30 3b 20   for (argc = 0; 
1e50: 61 72 67 63 20 3c 20 73 69 7a 65 3b 20 61 72 67  argc < size; arg
1e60: 63 2b 2b 29 20 7b 0a 09 61 72 67 76 5b 61 72 67  c++) {..argv[arg
1e70: 63 5d 20 3d 20 61 72 67 20 3d 20 61 72 67 53 70  c] = arg = argSp
1e80: 61 63 65 3b 0a 09 77 68 69 6c 65 20 28 28 2a 70  ace;..while ((*p
1e90: 20 3d 3d 20 27 20 27 29 20 7c 7c 20 28 2a 70 20   == ' ') || (*p 
1ea0: 3d 3d 20 27 5c 74 27 29 29 20 7b 09 2f 2a 20 49  == '\t')) {./* I
1eb0: 4e 54 4c 3a 20 49 53 4f 20 73 70 61 63 65 2e 20  NTL: ISO space. 
1ec0: 2a 2f 0a 09 20 20 20 20 70 2b 2b 3b 0a 09 7d 0a  */..    p++;..}.
1ed0: 09 69 66 20 28 2a 70 20 3d 3d 20 27 5c 30 27 29  .if (*p == '\0')
1ee0: 20 7b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09   {..    break;..
1ef0: 7d 0a 0a 09 69 6e 71 75 6f 74 65 20 3d 20 30 3b  }...inquote = 0;
1f00: 0a 09 73 6c 61 73 68 65 73 20 3d 20 30 3b 0a 09  ..slashes = 0;..
1f10: 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 20 20 20  while (1) {..   
1f20: 20 63 6f 70 79 20 3d 20 31 3b 0a 09 20 20 20 20   copy = 1;..    
1f30: 77 68 69 6c 65 20 28 2a 70 20 3d 3d 20 27 5c 5c  while (*p == '\\
1f40: 27 29 20 7b 0a 09 09 73 6c 61 73 68 65 73 2b 2b  ') {...slashes++
1f50: 3b 0a 09 09 70 2b 2b 3b 0a 09 20 20 20 20 7d 0a  ;...p++;..    }.
1f60: 09 20 20 20 20 69 66 20 28 2a 70 20 3d 3d 20 27  .    if (*p == '
1f70: 22 27 29 20 7b 0a 09 09 69 66 20 28 28 73 6c 61  "') {...if ((sla
1f80: 73 68 65 73 20 26 20 31 29 20 3d 3d 20 30 29 20  shes & 1) == 0) 
1f90: 7b 0a 09 09 20 20 20 20 63 6f 70 79 20 3d 20 30  {...    copy = 0
1fa0: 3b 0a 09 09 20 20 20 20 69 66 20 28 28 69 6e 71  ;...    if ((inq
1fb0: 75 6f 74 65 29 20 26 26 20 28 70 5b 31 5d 20 3d  uote) && (p[1] =
1fc0: 3d 20 27 22 27 29 29 20 7b 0a 09 09 09 70 2b 2b  = '"')) {....p++
1fd0: 3b 0a 09 09 09 63 6f 70 79 20 3d 20 31 3b 0a 09  ;....copy = 1;..
1fe0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
1ff0: 09 69 6e 71 75 6f 74 65 20 3d 20 21 69 6e 71 75  .inquote = !inqu
2000: 6f 74 65 3b 0a 09 09 20 20 20 20 7d 0a 20 20 20  ote;...    }.   
2010: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2030: 6c 61 73 68 65 73 20 3e 3e 3d 20 31 3b 0a 20 20  lashes >>= 1;.  
2040: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
2050: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
2060: 73 6c 61 73 68 65 73 29 20 7b 0a 09 09 2a 61 72  slashes) {...*ar
2070: 67 20 3d 20 27 5c 5c 27 3b 0a 09 09 61 72 67 2b  g = '\\';...arg+
2080: 2b 3b 0a 09 09 73 6c 61 73 68 65 73 2d 2d 3b 0a  +;...slashes--;.
2090: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 69 66 20  .    }...    if 
20a0: 28 28 2a 70 20 3d 3d 20 27 5c 30 27 29 0a 09 09  ((*p == '\0')...
20b0: 20 20 20 20 7c 7c 20 28 21 69 6e 71 75 6f 74 65      || (!inquote
20c0: 20 26 26 20 28 28 2a 70 20 3d 3d 20 27 20 27 29   && ((*p == ' ')
20d0: 20 7c 7c 20 28 2a 70 20 3d 3d 20 27 5c 74 27 29   || (*p == '\t')
20e0: 29 29 29 20 7b 20 2f 2a 20 49 4e 54 4c 3a 20 49  ))) { /* INTL: I
20f0: 53 4f 20 73 70 61 63 65 2e 20 2a 2f 0a 09 09 62  SO space. */...b
2100: 72 65 61 6b 3b 0a 09 20 20 20 20 7d 0a 09 20 20  reak;..    }..  
2110: 20 20 69 66 20 28 63 6f 70 79 20 21 3d 20 30 29    if (copy != 0)
2120: 20 7b 0a 09 09 2a 61 72 67 20 3d 20 2a 70 3b 0a   {...*arg = *p;.
2130: 09 09 61 72 67 2b 2b 3b 0a 09 20 20 20 20 7d 0a  ..arg++;..    }.
2140: 09 20 20 20 20 70 2b 2b 3b 0a 20 20 20 20 20 20  .    p++;.      
2150: 20 20 7d 0a 09 2a 61 72 67 20 3d 20 27 5c 30 27    }..*arg = '\0'
2160: 3b 0a 09 61 72 67 53 70 61 63 65 20 3d 20 61 72  ;..argSpace = ar
2170: 67 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  g + 1;.    }.   
2180: 20 61 72 67 76 5b 61 72 67 63 5d 20 3d 20 4e 55   argv[argc] = NU
2190: 4c 4c 3b 0a 0a 20 20 20 20 2a 61 72 67 63 50 74  LL;..    *argcPt
21a0: 72 20 3d 20 61 72 67 63 3b 0a 20 20 20 20 2a 61  r = argc;.    *a
21b0: 72 67 76 50 74 72 20 3d 20 61 72 67 76 3b 0a 7d  rgvPtr = argv;.}
21c0: 0a 23 65 6e 64 69 66 0a                          .#endif.