Hex Artifact Content
Not logged in

Artifact 8df3bd02ad7bedabd462b93e5e0f22b7eed37159:


0000: 0a 20 2f 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  . /* ===========
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 0a 20 20 20 20 46 49 4c 45  =======.    FILE
0050: 3a 20 22 2f 68 6f 6d 65 2f 6a 6f 7a 65 2f 73 72  : "/home/joze/sr
0060: 63 2f 74 63 6c 72 65 61 64 6c 69 6e 65 2f 74 63  c/tclreadline/tc
0070: 6c 72 65 61 64 6c 69 6e 65 2e 63 22 0a 20 20 20  lreadline.c".   
0080: 20 4c 41 53 54 20 4d 4f 44 49 46 49 43 41 54 49   LAST MODIFICATI
0090: 4f 4e 3a 20 22 4d 69 74 2c 20 31 30 20 4a 61 6e  ON: "Mit, 10 Jan
00a0: 20 32 30 30 31 20 30 36 3a 32 39 3a 33 33 20 2b   2001 06:29:33 +
00b0: 30 31 30 30 20 28 6a 6f 7a 65 29 22 0a 20 20 20  0100 (joze)".   
00c0: 20 28 43 29 20 31 39 39 38 20 2d 20 32 30 30 31   (C) 1998 - 2001
00d0: 20 62 79 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c   by Johannes Zel
00e0: 6c 6e 65 72 2c 20 3c 6a 6f 68 61 6e 6e 65 73 40  lner, <johannes@
00f0: 7a 65 6c 6c 6e 65 72 2e 6f 72 67 3e 0a 20 20 20  zellner.org>.   
0100: 20 24 49 64 24 0a 20 20 20 20 2d 2d 2d 0a 20 20   $Id$.    ---.  
0110: 20 20 74 63 6c 72 65 61 64 6c 69 6e 65 20 2d 2d    tclreadline --
0120: 20 67 6e 75 20 72 65 61 64 6c 69 6e 65 20 66 6f   gnu readline fo
0130: 72 20 74 63 6c 0a 20 20 20 20 68 74 74 70 3a 2f  r tcl.    http:/
0140: 2f 77 77 77 2e 7a 65 6c 6c 6e 65 72 2e 6f 72 67  /www.zellner.org
0150: 2f 74 63 6c 72 65 61 64 6c 69 6e 65 2f 0a 20 20  /tclreadline/.  
0160: 20 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20    Copyright (c) 
0170: 31 39 39 38 20 2d 20 32 30 30 31 2c 20 4a 6f 68  1998 - 2001, Joh
0180: 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65 72 20 3c 6a  annes Zellner <j
0190: 6f 68 61 6e 6e 65 73 40 7a 65 6c 6c 6e 65 72 2e  ohannes@zellner.
01a0: 6f 72 67 3e 0a 20 20 20 20 54 68 69 73 20 73 6f  org>.    This so
01b0: 66 74 77 61 72 65 20 69 73 20 63 6f 70 79 72 69  ftware is copyri
01c0: 67 68 74 20 75 6e 64 65 72 20 74 68 65 20 42 53  ght under the BS
01d0: 44 20 6c 69 63 65 6e 73 65 2e 0a 20 20 20 20 3d  D license..    =
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0220: 3d 20 2a 2f 20 20 0a 0a 23 69 66 64 65 66 20 48  = */  ..#ifdef H
0230: 41 56 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 20 20  AVE_CONFIG_H.#  
0240: 20 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67   include "config
0250: 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63  .h".#endif..#inc
0260: 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 69 6e  lude <tcl.h>.#in
0270: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
0280: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
0290: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
02a0: 72 69 6e 67 2e 68 3e 0a 0a 23 69 66 20 64 65 66  ring.h>..#if def
02b0: 69 6e 65 64 20 28 52 45 41 44 4c 49 4e 45 5f 4c  ined (READLINE_L
02c0: 49 42 52 41 52 59 29 0a 23 20 20 20 69 6e 63 6c  IBRARY).#   incl
02d0: 75 64 65 20 3c 72 65 61 64 6c 69 6e 65 2e 68 3e  ude <readline.h>
02e0: 0a 23 20 20 20 69 6e 63 6c 75 64 65 20 3c 68 69  .#   include <hi
02f0: 73 74 6f 72 79 2e 68 3e 0a 23 65 6c 73 65 0a 23  story.h>.#else.#
0300: 20 20 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64     include <read
0310: 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e  line/readline.h>
0320: 0a 23 20 20 20 69 6e 63 6c 75 64 65 20 3c 72 65  .#   include <re
0330: 61 64 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68  adline/history.h
0340: 3e 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 20 2a  >.#endif.../*. *
0350: 20 74 68 69 73 20 70 72 6f 74 6f 74 79 70 65 20   this prototype 
0360: 69 73 20 6d 69 73 73 69 6e 67 0a 20 2a 20 69 6e  is missing. * in
0370: 20 72 65 61 64 6c 69 6e 65 2e 68 0a 20 2a 2f 0a   readline.h. */.
0380: 76 6f 69 64 20 72 6c 5f 65 78 74 65 6e 64 5f 6c  void rl_extend_l
0390: 69 6e 65 5f 62 75 66 66 65 72 28 69 6e 74 20 6c  ine_buffer(int l
03a0: 65 6e 29 3b 0a 0a 23 69 66 64 65 66 20 45 58 45  en);..#ifdef EXE
03b0: 43 55 54 49 4e 47 5f 4d 41 43 52 4f 5f 48 41 43  CUTING_MACRO_HAC
03c0: 4b 0a 2f 2a 2a 0a 20 2a 20 74 68 69 73 20 70 72  K./**. * this pr
03d0: 6f 74 6f 74 79 70 65 20 69 73 20 70 72 69 76 61  ototype is priva
03e0: 74 65 20 69 6e 20 72 65 61 64 6c 69 6e 65 27 73  te in readline's
03f0: 20 66 69 6c 65 20 60 6d 61 63 72 6f 2e 63 27 2e   file `macro.c'.
0400: 0a 20 2a 20 57 65 20 6e 65 65 64 20 69 74 20 68  . * We need it h
0410: 65 72 65 20 74 6f 20 64 65 63 69 64 65 2c 20 69  ere to decide, i
0420: 66 20 77 65 20 73 68 6f 75 6c 64 20 72 65 61 64  f we should read
0430: 20 6d 6f 72 65 0a 20 2a 20 63 68 61 72 61 63 74   more. * charact
0440: 65 72 73 20 66 72 6f 6d 20 61 20 6d 61 63 72 6f  ers from a macro
0450: 2e 20 44 69 72 74 79 2c 20 62 75 74 20 69 74 20  . Dirty, but it 
0460: 73 68 6f 75 6c 64 20 77 6f 72 6b 2e 0a 20 2a 2f  should work.. */
0470: 0a 65 78 74 65 72 6e 20 63 68 61 72 2a 20 5f 72  .extern char* _r
0480: 6c 5f 65 78 65 63 75 74 69 6e 67 5f 6d 61 63 72  l_executing_macr
0490: 6f 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  o;.#endif..#incl
04a0: 75 64 65 20 22 74 63 6c 72 65 61 64 6c 69 6e 65  ude "tclreadline
04b0: 2e 68 22 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  .h".static const
04c0: 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f 6c 69 62   char* tclrl_lib
04d0: 72 61 72 79 20 3d 20 54 43 4c 52 4c 5f 4c 49 42  rary = TCLRL_LIB
04e0: 52 41 52 59 3b 0a 73 74 61 74 69 63 20 63 6f 6e  RARY;.static con
04f0: 73 74 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f 76  st char* tclrl_v
0500: 65 72 73 69 6f 6e 5f 73 74 72 20 3d 20 54 43 4c  ersion_str = TCL
0510: 52 4c 5f 56 45 52 53 49 4f 4e 5f 53 54 52 3b 0a  RL_VERSION_STR;.
0520: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
0530: 72 2a 20 74 63 6c 72 6c 5f 70 61 74 63 68 6c 65  r* tclrl_patchle
0540: 76 65 6c 5f 73 74 72 20 3d 20 54 43 4c 52 4c 5f  vel_str = TCLRL_
0550: 50 41 54 43 48 4c 45 56 45 4c 5f 53 54 52 3b 0a  PATCHLEVEL_STR;.
0560: 0a 23 64 65 66 69 6e 65 20 4d 41 4c 4c 4f 43 28  .#define MALLOC(
0570: 73 69 7a 65 29 20 6d 61 6c 6c 6f 63 28 28 69 6e  size) malloc((in
0580: 74 29 20 73 69 7a 65 29 0a 23 64 65 66 69 6e 65  t) size).#define
0590: 20 46 52 45 45 28 70 74 72 29 20 69 66 20 28 70   FREE(ptr) if (p
05a0: 74 72 29 20 7b 20 66 72 65 65 28 28 63 68 61 72  tr) { free((char
05b0: 2a 29 20 70 74 72 29 3b 20 70 74 72 20 3d 20 30  *) ptr); ptr = 0
05c0: 3b 20 7d 0a 0a 65 6e 75 6d 20 7b 0a 20 20 20 20  ; }..enum {.    
05d0: 5f 43 4d 44 5f 53 45 54 20 20 20 20 20 3d 20 28  _CMD_SET     = (
05e0: 31 20 3c 3c 20 30 29 2c 0a 20 20 20 20 5f 43 4d  1 << 0),.    _CM
05f0: 44 5f 47 45 54 20 20 20 20 20 3d 20 28 31 20 3c  D_GET     = (1 <
0600: 3c 20 31 29 0a 7d 3b 0a 0a 0a 74 79 70 65 64 65  < 1).};...typede
0610: 66 20 73 74 72 75 63 74 20 63 6d 64 73 5f 74 20  f struct cmds_t 
0620: 7b 0a 20 20 20 20 73 74 72 75 63 74 20 63 6d 64  {.    struct cmd
0630: 73 5f 74 2a 20 70 72 65 76 3b 0a 20 20 20 20 63  s_t* prev;.    c
0640: 68 61 72 2a 2a 20 20 20 20 20 20 20 20 20 63 6d  har**         cm
0650: 64 3b 0a 20 20 20 20 73 74 72 75 63 74 20 63 6d  d;.    struct cm
0660: 64 73 5f 74 2a 20 6e 65 78 74 3b 0a 7d 20 63 6d  ds_t* next;.} cm
0670: 64 73 5f 74 3b 0a 0a 0a 23 64 65 66 69 6e 65 20  ds_t;...#define 
0680: 49 53 57 48 49 54 45 28 63 29 20 28 28 27 20 27  ISWHITE(c) ((' '
0690: 20 3d 3d 20 63 29 20 7c 7c 20 28 27 5c 74 27 20   == c) || ('\t' 
06a0: 3d 3d 20 63 29 20 7c 7c 20 28 27 5c 6e 27 20 3d  == c) || ('\n' =
06b0: 3d 20 63 29 29 0a 0a 2f 2a 20 66 6f 72 77 61 72  = c))../* forwar
06c0: 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20  d declarations. 
06d0: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20  */.static char* 
06e0: 73 74 72 69 70 6c 65 66 74 28 63 68 61 72 2a 20  stripleft(char* 
06f0: 69 6e 29 3b 0a 73 74 61 74 69 63 20 63 68 61 72  in);.static char
0700: 2a 20 73 74 72 69 70 72 69 67 68 74 28 63 68 61  * stripright(cha
0710: 72 2a 20 69 6e 29 3b 0a 73 74 61 74 69 63 20 63  r* in);.static c
0720: 68 61 72 2a 20 73 74 72 69 70 77 68 69 74 65 28  har* stripwhite(
0730: 63 68 61 72 2a 20 69 6e 29 3b 0a 73 74 61 74 69  char* in);.stati
0740: 63 20 69 6e 74 20 54 63 6c 52 65 61 64 6c 69 6e  c int TclReadlin
0750: 65 4c 69 6e 65 43 6f 6d 70 6c 65 74 65 28 76 6f  eLineComplete(vo
0760: 69 64 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  id);.static void
0770: 20 54 63 6c 52 65 61 64 6c 69 6e 65 54 65 72 6d   TclReadlineTerm
0780: 69 6e 61 74 65 28 69 6e 74 20 73 74 61 74 65 29  inate(int state)
0790: 3b 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20 54  ;.static char* T
07a0: 63 6c 52 65 61 64 6c 69 6e 65 51 75 6f 74 65 28  clReadlineQuote(
07b0: 63 68 61 72 2a 20 74 65 78 74 2c 20 63 68 61 72  char* text, char
07c0: 2a 20 71 75 6f 74 65 63 68 61 72 73 29 3b 0a 73  * quotechars);.s
07d0: 74 61 74 69 63 20 69 6e 74 20 54 63 6c 52 65 61  tatic int TclRea
07e0: 64 6c 69 6e 65 43 6d 64 28 43 6c 69 65 6e 74 44  dlineCmd(ClientD
07f0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
0800: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
0810: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  rp, int objc,.  
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
0840: 6f 62 6a 76 5b 5d 29 3b 0a 73 74 61 74 69 63 20  objv[]);.static 
0850: 76 6f 69 64 20 54 63 6c 52 65 61 64 6c 69 6e 65  void TclReadline
0860: 52 65 61 64 48 61 6e 64 6c 65 72 28 43 6c 69 65  ReadHandler(Clie
0870: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
0880: 61 2c 20 69 6e 74 20 6d 61 73 6b 29 3b 0a 73 74  a, int mask);.st
0890: 61 74 69 63 20 76 6f 69 64 20 54 63 6c 52 65 61  atic void TclRea
08a0: 64 6c 69 6e 65 4c 69 6e 65 43 6f 6d 70 6c 65 74  dlineLineComplet
08b0: 65 48 61 6e 64 6c 65 72 28 63 68 61 72 2a 20 70  eHandler(char* p
08c0: 74 72 29 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  tr);.static int 
08d0: 54 63 6c 52 65 61 64 6c 69 6e 65 49 6e 69 74 69  TclReadlineIniti
08e0: 61 6c 69 7a 65 28 54 63 6c 5f 49 6e 74 65 72 70  alize(Tcl_Interp
08f0: 2a 20 69 6e 74 65 72 70 2c 20 63 68 61 72 2a 20  * interp, char* 
0900: 68 69 73 74 6f 72 79 66 69 6c 65 29 3b 0a 73 74  historyfile);.st
0910: 61 74 69 63 20 69 6e 74 20 62 6c 61 6e 6b 5f 6c  atic int blank_l
0920: 69 6e 65 28 63 68 61 72 2a 20 73 74 72 29 3b 0a  ine(char* str);.
0930: 73 74 61 74 69 63 20 63 68 61 72 2a 2a 20 54 63  static char** Tc
0940: 6c 52 65 61 64 6c 69 6e 65 43 6f 6d 70 6c 65 74  lReadlineComplet
0950: 69 6f 6e 28 63 68 61 72 2a 20 74 65 78 74 2c 20  ion(char* text, 
0960: 69 6e 74 20 73 74 61 72 74 2c 20 69 6e 74 20 65  int start, int e
0970: 6e 64 29 3b 0a 73 74 61 74 69 63 20 63 68 61 72  nd);.static char
0980: 2a 20 54 63 6c 52 65 61 64 6c 69 6e 65 30 67 65  * TclReadline0ge
0990: 6e 65 72 61 74 6f 72 28 63 68 61 72 2a 20 74 65  nerator(char* te
09a0: 78 74 2c 20 69 6e 74 20 73 74 61 74 65 29 3b 0a  xt, int state);.
09b0: 73 74 61 74 69 63 20 63 68 61 72 2a 20 54 63 6c  static char* Tcl
09c0: 52 65 61 64 6c 69 6e 65 4b 6e 6f 77 6e 43 6f 6d  ReadlineKnownCom
09d0: 6d 61 6e 64 73 28 63 68 61 72 2a 20 74 65 78 74  mands(char* text
09e0: 2c 20 69 6e 74 20 73 74 61 74 65 2c 20 69 6e 74  , int state, int
09f0: 20 6d 6f 64 65 29 3b 0a 73 74 61 74 69 63 20 69   mode);.static i
0a00: 6e 74 20 54 63 6c 52 65 61 64 6c 69 6e 65 50 61  nt TclReadlinePa
0a10: 72 73 65 28 63 68 61 72 2a 2a 20 61 72 67 73 2c  rse(char** args,
0a20: 20 69 6e 74 20 6d 61 78 61 72 67 73 2c 20 63 68   int maxargs, ch
0a30: 61 72 2a 20 62 75 66 29 3b 0a 0a 0a 65 6e 75 6d  ar* buf);...enum
0a40: 20 7b 20 0a 20 20 20 20 4c 49 4e 45 5f 50 45 4e   { .    LINE_PEN
0a50: 44 49 4e 47 20 3d 20 2d 31 2c 0a 20 20 20 20 4c  DING = -1,.    L
0a60: 49 4e 45 5f 45 4f 46 20 3d 20 28 31 20 3c 3c 20  INE_EOF = (1 << 
0a70: 38 29 2c 0a 20 20 20 20 4c 49 4e 45 5f 43 4f 4d  8),.    LINE_COM
0a80: 50 4c 45 54 45 20 3d 20 28 31 20 3c 3c 20 39 29  PLETE = (1 << 9)
0a90: 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 2a 20 67 6c 6f 62  .};../**. * glob
0aa0: 61 6c 20 76 61 72 69 61 62 6c 65 73 0a 20 2a 2f  al variables. */
0ab0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 72  .static int tclr
0ac0: 6c 5f 73 74 61 74 65 20 3d 20 54 43 4c 5f 4f 4b  l_state = TCL_OK
0ad0: 3b 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20 74  ;.static char* t
0ae0: 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 20  clrl_eof_string 
0af0: 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a  = (char*) NULL;.
0b00: 73 74 61 74 69 63 20 63 68 61 72 2a 20 74 63 6c  static char* tcl
0b10: 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65  rl_custom_comple
0b20: 74 65 72 20 3d 20 28 63 68 61 72 2a 29 20 4e 55  ter = (char*) NU
0b30: 4c 4c 3b 0a 73 74 61 74 69 63 20 63 68 61 72 2a  LL;.static char*
0b40: 20 74 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69 6e 65   tclrl_last_line
0b50: 20 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b   = (char*) NULL;
0b60: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 72  .static int tclr
0b70: 6c 5f 75 73 65 5f 62 75 69 6c 74 69 6e 5f 63 6f  l_use_builtin_co
0b80: 6d 70 6c 65 74 65 72 20 3d 20 31 3b 0a 73 74 61  mpleter = 1;.sta
0b90: 74 69 63 20 69 6e 74 20 74 63 6c 72 6c 5f 68 69  tic int tclrl_hi
0ba0: 73 74 6f 72 79 5f 6c 65 6e 67 74 68 20 3d 20 2d  story_length = -
0bb0: 31 3b 0a 54 63 6c 5f 49 6e 74 65 72 70 2a 20 74  1;.Tcl_Interp* t
0bc0: 63 6c 72 6c 5f 69 6e 74 65 72 70 20 3d 20 28 54  clrl_interp = (T
0bd0: 63 6c 5f 49 6e 74 65 72 70 2a 29 20 4e 55 4c 4c  cl_Interp*) NULL
0be0: 3b 0a 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20  ;..static char* 
0bf0: 74 63 6c 72 6c 5f 6c 69 63 65 6e 73 65 20 3d 0a  tclrl_license =.
0c00: 22 20 20 20 43 6f 70 79 72 69 67 68 74 20 28 63  "   Copyright (c
0c10: 29 20 31 39 39 38 20 2d 20 32 30 30 30 2c 20 4a  ) 1998 - 2000, J
0c20: 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65 72 20  ohannes Zellner 
0c30: 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c 6c 6e 65  <johannes@zellne
0c40: 72 2e 6f 72 67 3e 5c 6e 22 0a 22 20 20 20 41 6c  r.org>\n"."   Al
0c50: 6c 20 72 69 67 68 74 73 20 72 65 73 65 72 76 65  l rights reserve
0c60: 64 2e 5c 6e 22 0a 22 20 20 20 5c 6e 22 0a 22 20  d.\n"."   \n"." 
0c70: 20 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e    Redistribution
0c80: 20 61 6e 64 20 75 73 65 20 69 6e 20 73 6f 75 72   and use in sour
0c90: 63 65 20 61 6e 64 20 62 69 6e 61 72 79 20 66 6f  ce and binary fo
0ca0: 72 6d 73 2c 20 77 69 74 68 20 6f 72 20 77 69 74  rms, with or wit
0cb0: 68 6f 75 74 5c 6e 22 0a 22 20 20 20 6d 6f 64 69  hout\n"."   modi
0cc0: 66 69 63 61 74 69 6f 6e 2c 20 61 72 65 20 70 65  fication, are pe
0cd0: 72 6d 69 74 74 65 64 20 70 72 6f 76 69 64 65 64  rmitted provided
0ce0: 20 74 68 61 74 20 74 68 65 20 66 6f 6c 6c 6f 77   that the follow
0cf0: 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 5c 6e  ing conditions\n
0d00: 22 0a 22 20 20 20 61 72 65 20 6d 65 74 3a 5c 6e  "."   are met:\n
0d10: 22 0a 22 20 20 20 5c 6e 22 0a 22 20 20 20 20 20  "."   \n"."     
0d20: 2a 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e  * Redistribution
0d30: 73 20 6f 66 20 73 6f 75 72 63 65 20 63 6f 64 65  s of source code
0d40: 20 6d 75 73 74 20 72 65 74 61 69 6e 20 74 68 65   must retain the
0d50: 20 61 62 6f 76 65 20 63 6f 70 79 72 69 67 68 74   above copyright
0d60: 5c 6e 22 0a 22 20 20 20 20 20 20 20 6e 6f 74 69  \n"."       noti
0d70: 63 65 2c 20 74 68 69 73 20 6c 69 73 74 20 6f 66  ce, this list of
0d80: 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64 20   conditions and 
0d90: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
0da0: 73 63 6c 61 69 6d 65 72 2e 5c 6e 22 0a 22 20 20  sclaimer.\n"."  
0db0: 20 20 20 2a 20 52 65 64 69 73 74 72 69 62 75 74     * Redistribut
0dc0: 69 6f 6e 73 20 69 6e 20 62 69 6e 61 72 79 20 66  ions in binary f
0dd0: 6f 72 6d 20 6d 75 73 74 20 72 65 70 72 6f 64 75  orm must reprodu
0de0: 63 65 20 74 68 65 20 61 62 6f 76 65 20 63 6f 70  ce the above cop
0df0: 79 72 69 67 68 74 5c 6e 22 0a 22 20 20 20 20 20  yright\n"."     
0e00: 20 20 6e 6f 74 69 63 65 2c 20 74 68 69 73 20 6c    notice, this l
0e10: 69 73 74 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e  ist of condition
0e20: 73 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77  s and the follow
0e30: 69 6e 67 20 64 69 73 63 6c 61 69 6d 65 72 20 69  ing disclaimer i
0e40: 6e 20 74 68 65 5c 6e 22 0a 22 20 20 20 20 20 20  n the\n"."      
0e50: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
0e60: 6e 64 2f 6f 72 20 6f 74 68 65 72 20 6d 61 74 65  nd/or other mate
0e70: 72 69 61 6c 73 20 70 72 6f 76 69 64 65 64 20 77  rials provided w
0e80: 69 74 68 20 74 68 65 20 64 69 73 74 72 69 62 75  ith the distribu
0e90: 74 69 6f 6e 2e 5c 6e 22 0a 22 20 20 20 20 20 2a  tion.\n"."     *
0ea0: 20 4e 65 69 74 68 65 72 20 74 68 65 20 6e 61 6d   Neither the nam
0eb0: 65 20 6f 66 20 4a 6f 68 61 6e 6e 65 73 20 5a 65  e of Johannes Ze
0ec0: 6c 6c 6e 65 72 20 6e 6f 72 20 74 68 65 20 6e 61  llner nor the na
0ed0: 6d 65 73 20 6f 66 20 63 6f 6e 74 72 69 62 75 74  mes of contribut
0ee0: 6f 72 73 5c 6e 22 0a 22 20 20 20 20 20 20 20 74  ors\n"."       t
0ef0: 6f 20 74 68 69 73 20 73 6f 66 74 77 61 72 65 20  o this software 
0f00: 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 65  may be used to e
0f10: 6e 64 6f 72 73 65 20 6f 72 20 70 72 6f 6d 6f 74  ndorse or promot
0f20: 65 20 70 72 6f 64 75 63 74 73 20 64 65 72 69 76  e products deriv
0f30: 65 64 5c 6e 22 0a 22 20 20 20 20 20 20 20 66 72  ed\n"."       fr
0f40: 6f 6d 20 74 68 69 73 20 73 6f 66 74 77 61 72 65  om this software
0f50: 20 77 69 74 68 6f 75 74 20 73 70 65 63 69 66 69   without specifi
0f60: 63 20 70 72 69 6f 72 20 77 72 69 74 74 65 6e 20  c prior written 
0f70: 70 65 72 6d 69 73 73 69 6f 6e 2e 5c 6e 22 0a 22  permission.\n"."
0f80: 20 20 20 20 20 20 20 5c 6e 22 0a 22 20 20 20 54         \n"."   T
0f90: 48 49 53 20 53 4f 46 54 57 41 52 45 20 49 53 20  HIS SOFTWARE IS 
0fa0: 50 52 4f 56 49 44 45 44 20 42 59 20 54 48 45 20  PROVIDED BY THE 
0fb0: 43 4f 50 59 52 49 47 48 54 20 48 4f 4c 44 45 52  COPYRIGHT HOLDER
0fc0: 53 20 41 4e 44 20 43 4f 4e 54 52 49 42 55 54 4f  S AND CONTRIBUTO
0fd0: 52 53 5c 6e 22 0a 22 20 20 20 60 60 41 53 20 49  RS\n"."   ``AS I
0fe0: 53 27 27 20 41 4e 44 20 41 4e 59 20 45 58 50 52  S'' AND ANY EXPR
0ff0: 45 53 53 20 4f 52 20 49 4d 50 4c 49 45 44 20 57  ESS OR IMPLIED W
1000: 41 52 52 41 4e 54 49 45 53 2c 20 49 4e 43 4c 55  ARRANTIES, INCLU
1010: 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 5c 6e 22  DING, BUT NOT\n"
1020: 0a 22 20 20 20 4c 49 4d 49 54 45 44 20 54 4f 2c  ."   LIMITED TO,
1030: 20 54 48 45 20 49 4d 50 4c 49 45 44 20 57 41 52   THE IMPLIED WAR
1040: 52 41 4e 54 49 45 53 20 4f 46 20 4d 45 52 43 48  RANTIES OF MERCH
1050: 41 4e 54 41 42 49 4c 49 54 59 20 41 4e 44 20 46  ANTABILITY AND F
1060: 49 54 4e 45 53 53 20 46 4f 52 5c 6e 22 0a 22 20  ITNESS FOR\n"." 
1070: 20 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50    A PARTICULAR P
1080: 55 52 50 4f 53 45 20 41 52 45 20 44 49 53 43 4c  URPOSE ARE DISCL
1090: 41 49 4d 45 44 2e 20 49 4e 20 4e 4f 20 45 56 45  AIMED. IN NO EVE
10a0: 4e 54 20 53 48 41 4c 4c 20 54 48 45 20 52 45 47  NT SHALL THE REG
10b0: 45 4e 54 53 20 4f 52 5c 6e 22 0a 22 20 20 20 43  ENTS OR\n"."   C
10c0: 4f 4e 54 52 49 42 55 54 4f 52 53 20 42 45 20 4c  ONTRIBUTORS BE L
10d0: 49 41 42 4c 45 20 46 4f 52 20 41 4e 59 20 44 49  IABLE FOR ANY DI
10e0: 52 45 43 54 2c 20 49 4e 44 49 52 45 43 54 2c 20  RECT, INDIRECT, 
10f0: 49 4e 43 49 44 45 4e 54 41 4c 2c 20 53 50 45 43  INCIDENTAL, SPEC
1100: 49 41 4c 2c 5c 6e 22 0a 22 20 20 20 45 58 45 4d  IAL,\n"."   EXEM
1110: 50 4c 41 52 59 2c 20 4f 52 20 43 4f 4e 53 45 51  PLARY, OR CONSEQ
1120: 55 45 4e 54 49 41 4c 20 44 41 4d 41 47 45 53 20  UENTIAL DAMAGES 
1130: 28 49 4e 43 4c 55 44 49 4e 47 2c 20 42 55 54 20  (INCLUDING, BUT 
1140: 4e 4f 54 20 4c 49 4d 49 54 45 44 20 54 4f 2c 5c  NOT LIMITED TO,\
1150: 6e 22 0a 22 20 20 20 50 52 4f 43 55 52 45 4d 45  n"."   PROCUREME
1160: 4e 54 20 4f 46 20 53 55 42 53 54 49 54 55 54 45  NT OF SUBSTITUTE
1170: 20 47 4f 4f 44 53 20 4f 52 20 53 45 52 56 49 43   GOODS OR SERVIC
1180: 45 53 3b 20 4c 4f 53 53 20 4f 46 20 55 53 45 2c  ES; LOSS OF USE,
1190: 20 44 41 54 41 2c 20 4f 52 5c 6e 22 0a 22 20 20   DATA, OR\n"."  
11a0: 20 50 52 4f 46 49 54 53 3b 20 4f 52 20 42 55 53   PROFITS; OR BUS
11b0: 49 4e 45 53 53 20 49 4e 54 45 52 52 55 50 54 49  INESS INTERRUPTI
11c0: 4f 4e 29 20 48 4f 57 45 56 45 52 20 43 41 55 53  ON) HOWEVER CAUS
11d0: 45 44 20 41 4e 44 20 4f 4e 20 41 4e 59 20 54 48  ED AND ON ANY TH
11e0: 45 4f 52 59 20 4f 46 5c 6e 22 0a 22 20 20 20 4c  EORY OF\n"."   L
11f0: 49 41 42 49 4c 49 54 59 2c 20 57 48 45 54 48 45  IABILITY, WHETHE
1200: 52 20 49 4e 20 43 4f 4e 54 52 41 43 54 2c 20 53  R IN CONTRACT, S
1210: 54 52 49 43 54 20 4c 49 41 42 49 4c 49 54 59 2c  TRICT LIABILITY,
1220: 20 4f 52 20 54 4f 52 54 20 28 49 4e 43 4c 55 44   OR TORT (INCLUD
1230: 49 4e 47 5c 6e 22 0a 22 20 20 20 4e 45 47 4c 49  ING\n"."   NEGLI
1240: 47 45 4e 43 45 20 4f 52 20 4f 54 48 45 52 57 49  GENCE OR OTHERWI
1250: 53 45 29 20 41 52 49 53 49 4e 47 20 49 4e 20 41  SE) ARISING IN A
1260: 4e 59 20 57 41 59 20 4f 55 54 20 4f 46 20 54 48  NY WAY OUT OF TH
1270: 45 20 55 53 45 20 4f 46 20 54 48 49 53 5c 6e 22  E USE OF THIS\n"
1280: 0a 22 20 20 20 53 4f 46 54 57 41 52 45 2c 20 45  ."   SOFTWARE, E
1290: 56 45 4e 20 49 46 20 41 44 56 49 53 45 44 20 4f  VEN IF ADVISED O
12a0: 46 20 54 48 45 20 50 4f 53 53 49 42 49 4c 49 54  F THE POSSIBILIT
12b0: 59 20 4f 46 20 53 55 43 48 20 44 41 4d 41 47 45  Y OF SUCH DAMAGE
12c0: 2e 22 3b 0a 0a 0a 0a 73 74 61 74 69 63 20 63 68  .";....static ch
12d0: 61 72 2a 0a 73 74 72 69 70 6c 65 66 74 28 63 68  ar*.stripleft(ch
12e0: 61 72 2a 20 69 6e 29 0a 7b 0a 20 20 20 20 63 68  ar* in).{.    ch
12f0: 61 72 2a 20 70 74 72 20 3d 20 69 6e 3b 0a 20 20  ar* ptr = in;.  
1300: 20 20 77 68 69 6c 65 20 28 2a 70 74 72 20 26 26    while (*ptr &&
1310: 20 2a 70 74 72 20 3c 3d 20 27 20 27 29 0a 09 70   *ptr <= ' ')..p
1320: 74 72 2b 2b 3b 0a 20 20 20 20 69 66 20 28 69 6e  tr++;.    if (in
1330: 20 21 3d 20 70 74 72 29 0a 09 6d 65 6d 6d 6f 76   != ptr)..memmov
1340: 65 28 69 6e 2c 20 70 74 72 2c 20 73 74 72 6c 65  e(in, ptr, strle
1350: 6e 28 70 74 72 29 20 2b 20 31 29 3b 0a 20 20 20  n(ptr) + 1);.   
1360: 20 72 65 74 75 72 6e 20 69 6e 3b 0a 7d 0a 0a 73   return in;.}..s
1370: 74 61 74 69 63 20 63 68 61 72 2a 0a 73 74 72 69  tatic char*.stri
1380: 70 72 69 67 68 74 28 63 68 61 72 2a 20 69 6e 29  pright(char* in)
1390: 0a 7b 0a 20 20 20 20 63 68 61 72 2a 20 70 74 72  .{.    char* ptr
13a0: 3b 0a 20 20 20 20 66 6f 72 20 28 70 74 72 20 3d  ;.    for (ptr =
13b0: 20 73 74 72 63 68 72 28 69 6e 2c 20 27 5c 30 27   strchr(in, '\0'
13c0: 29 20 2d 20 31 3b 20 70 74 72 20 3e 3d 20 69 6e  ) - 1; ptr >= in
13d0: 20 26 26 20 2a 70 74 72 20 3c 3d 20 27 20 27 3b   && *ptr <= ' ';
13e0: 20 70 74 72 2d 2d 29 0a 09 2a 70 74 72 20 3d 20   ptr--)..*ptr = 
13f0: 27 5c 30 27 3b 0a 20 20 20 20 72 65 74 75 72 6e  '\0';.    return
1400: 20 69 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63   in;.}..static c
1410: 68 61 72 2a 0a 73 74 72 69 70 77 68 69 74 65 28  har*.stripwhite(
1420: 63 68 61 72 2a 20 69 6e 29 0a 7b 0a 20 20 20 20  char* in).{.    
1430: 73 74 72 69 70 6c 65 66 74 28 69 6e 29 3b 0a 20  stripleft(in);. 
1440: 20 20 20 73 74 72 69 70 72 69 67 68 74 28 69 6e     stripright(in
1450: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 69 6e  );.    return in
1460: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a  ;.}..static int.
1470: 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43  TclReadlineLineC
1480: 6f 6d 70 6c 65 74 65 28 76 6f 69 64 29 0a 7b 0a  omplete(void).{.
1490: 20 20 20 20 72 65 74 75 72 6e 20 21 28 74 63 6c      return !(tcl
14a0: 72 6c 5f 73 74 61 74 65 20 3d 3d 20 4c 49 4e 45  rl_state == LINE
14b0: 5f 50 45 4e 44 49 4e 47 29 3b 0a 7d 0a 0a 73 74  _PENDING);.}..st
14c0: 61 74 69 63 20 76 6f 69 64 0a 54 63 6c 52 65 61  atic void.TclRea
14d0: 64 6c 69 6e 65 54 65 72 6d 69 6e 61 74 65 28 69  dlineTerminate(i
14e0: 6e 74 20 73 74 61 74 65 29 0a 7b 0a 20 20 20 20  nt state).{.    
14f0: 74 63 6c 72 6c 5f 73 74 61 74 65 20 3d 20 73 74  tclrl_state = st
1500: 61 74 65 3b 0a 20 20 20 20 72 6c 5f 63 61 6c 6c  ate;.    rl_call
1510: 62 61 63 6b 5f 68 61 6e 64 6c 65 72 5f 72 65 6d  back_handler_rem
1520: 6f 76 65 28 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  ove();.}..static
1530: 20 63 68 61 72 2a 0a 54 63 6c 52 65 61 64 6c 69   char*.TclReadli
1540: 6e 65 51 75 6f 74 65 28 63 68 61 72 2a 20 74 65  neQuote(char* te
1550: 78 74 2c 20 63 68 61 72 2a 20 71 75 6f 74 65 63  xt, char* quotec
1560: 68 61 72 73 29 0a 7b 0a 20 20 20 20 63 68 61 72  hars).{.    char
1570: 2a 20 70 74 72 3b 0a 20 20 20 20 63 68 61 72 2a  * ptr;.    char*
1580: 20 72 65 73 75 6c 74 5f 63 3b 0a 20 20 20 20 69   result_c;.    i
1590: 6e 74 20 69 2c 20 6c 65 6e 20 3d 20 73 74 72 6c  nt i, len = strl
15a0: 65 6e 28 71 75 6f 74 65 63 68 61 72 73 29 3b 0a  en(quotechars);.
15b0: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20      Tcl_DString 
15c0: 72 65 73 75 6c 74 3b 0a 0a 20 20 20 20 54 63 6c  result;..    Tcl
15d0: 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 72 65  _DStringInit(&re
15e0: 73 75 6c 74 29 3b 0a 20 20 20 20 66 6f 72 20 28  sult);.    for (
15f0: 70 74 72 20 3d 20 74 65 78 74 3b 20 70 74 72 20  ptr = text; ptr 
1600: 26 26 20 2a 70 74 72 3b 20 70 74 72 2b 2b 29 20  && *ptr; ptr++) 
1610: 7b 0a 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 69  {..for (i = 0; i
1620: 20 3c 20 6c 65 6e 3b 20 69 2b 2b 29 20 7b 0a 09   < len; i++) {..
1630: 20 20 20 20 69 66 20 28 71 75 6f 74 65 63 68 61      if (quotecha
1640: 72 73 5b 69 5d 20 3d 3d 20 2a 70 74 72 29 20 7b  rs[i] == *ptr) {
1650: 0a 09 09 54 63 6c 5f 44 53 74 72 69 6e 67 41 70  ...Tcl_DStringAp
1660: 70 65 6e 64 28 26 72 65 73 75 6c 74 2c 20 22 5c  pend(&result, "\
1670: 5c 22 2c 20 31 29 3b 0a 09 09 62 72 65 61 6b 3b  \", 1);...break;
1680: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 54 63 6c 5f  ..    }..}..Tcl_
1690: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28 26 72  DStringAppend(&r
16a0: 65 73 75 6c 74 2c 20 70 74 72 2c 20 31 29 3b 0a  esult, ptr, 1);.
16b0: 20 20 20 20 7d 0a 20 20 20 20 72 65 73 75 6c 74      }.    result
16c0: 5f 63 20 3d 20 73 74 72 64 75 70 28 54 63 6c 5f  _c = strdup(Tcl_
16d0: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 72 65  DStringValue(&re
16e0: 73 75 6c 74 29 29 3b 0a 20 20 20 20 72 65 74 75  sult));.    retu
16f0: 72 6e 20 72 65 73 75 6c 74 5f 63 3b 0a 7d 0a 0a  rn result_c;.}..
1700: 73 74 61 74 69 63 20 69 6e 74 20 54 63 6c 52 65  static int TclRe
1710: 61 64 6c 69 6e 65 43 6d 64 28 43 6c 69 65 6e 74  adlineCmd(Client
1720: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
1730: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1740: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 09  erp, int objc,..
1750: 09 09 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ..  Tcl_Obj *CON
1760: 53 54 20 6f 62 6a 76 5b 5d 29 0a 7b 0a 20 20 20  ST objv[]).{.   
1770: 20 69 6e 74 20 6f 62 6a 5f 69 64 78 2c 20 73 74   int obj_idx, st
1780: 61 74 75 73 3b 0a 0a 20 20 20 20 73 74 61 74 69  atus;..    stati
1790: 63 20 63 68 61 72 20 2a 73 75 62 43 6d 64 73 5b  c char *subCmds[
17a0: 5d 20 3d 20 7b 0a 09 22 72 65 61 64 22 2c 20 22  ] = {.."read", "
17b0: 69 6e 69 74 69 61 6c 69 7a 65 22 2c 20 22 77 72  initialize", "wr
17c0: 69 74 65 22 2c 20 22 61 64 64 22 2c 20 22 63 6f  ite", "add", "co
17d0: 6d 70 6c 65 74 65 22 2c 0a 09 22 63 75 73 74 6f  mplete",.."custo
17e0: 6d 63 6f 6d 70 6c 65 74 65 72 22 2c 20 22 62 75  mcompleter", "bu
17f0: 69 6c 74 69 6e 63 6f 6d 70 6c 65 74 65 72 22 2c  iltincompleter",
1800: 20 22 65 6f 66 63 68 61 72 22 2c 0a 09 22 72 65   "eofchar",.."re
1810: 73 65 74 2d 74 65 72 6d 69 6e 61 6c 22 2c 20 22  set-terminal", "
1820: 62 65 6c 6c 22 2c 20 22 74 65 78 74 22 2c 20 22  bell", "text", "
1830: 75 70 64 61 74 65 22 2c 0a 09 28 63 68 61 72 20  update",..(char 
1840: 2a 29 20 4e 55 4c 4c 0a 20 20 20 20 7d 3b 0a 20  *) NULL.    };. 
1850: 20 20 20 65 6e 75 6d 20 53 75 62 43 6d 64 49 64     enum SubCmdId
1860: 78 20 7b 0a 09 54 43 4c 52 4c 5f 52 45 41 44 2c  x {..TCLRL_READ,
1870: 20 54 43 4c 52 4c 5f 49 4e 49 54 49 41 4c 49 5a   TCLRL_INITIALIZ
1880: 45 2c 20 54 43 4c 52 4c 5f 57 52 49 54 45 2c 20  E, TCLRL_WRITE, 
1890: 54 43 4c 52 4c 5f 41 44 44 2c 20 54 43 4c 52 4c  TCLRL_ADD, TCLRL
18a0: 5f 43 4f 4d 50 4c 45 54 45 2c 0a 09 54 43 4c 52  _COMPLETE,..TCLR
18b0: 4c 5f 43 55 53 54 4f 4d 43 4f 4d 50 4c 45 54 45  L_CUSTOMCOMPLETE
18c0: 52 2c 20 54 43 4c 52 4c 5f 42 55 49 4c 54 49 4e  R, TCLRL_BUILTIN
18d0: 43 4f 4d 50 4c 45 54 45 52 2c 20 54 43 4c 52 4c  COMPLETER, TCLRL
18e0: 5f 45 4f 46 43 48 41 52 2c 0a 09 54 43 4c 52 4c  _EOFCHAR,..TCLRL
18f0: 5f 52 45 53 45 54 5f 54 45 52 4d 49 4e 41 4c 2c  _RESET_TERMINAL,
1900: 20 54 43 4c 52 4c 5f 42 45 4c 4c 2c 20 54 43 4c   TCLRL_BELL, TCL
1910: 52 4c 5f 54 45 58 54 2c 20 54 43 4c 52 4c 5f 55  RL_TEXT, TCLRL_U
1920: 50 44 41 54 45 0a 20 20 20 20 7d 3b 0a 0a 20 20  PDATE.    };..  
1930: 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c    Tcl_ResetResul
1940: 74 28 69 6e 74 65 72 70 29 3b 20 2f 2a 20 63 6c  t(interp); /* cl
1950: 65 61 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  ear the result s
1960: 70 61 63 65 20 2a 2f 0a 0a 20 20 20 20 69 66 20  pace */..    if 
1970: 28 6f 62 6a 63 20 3c 20 32 29 20 7b 0a 09 54 63  (objc < 2) {..Tc
1980: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1990: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
19a0: 22 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61 72 67  "option ?arg arg
19b0: 20 2e 2e 2e 3f 22 29 3b 0a 09 72 65 74 75 72 6e   ...?");..return
19c0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
19d0: 7d 0a 0a 20 20 20 20 73 74 61 74 75 73 20 3d 20  }..    status = 
19e0: 54 63 6c 5f 47 65 74 49 6e 64 65 78 46 72 6f 6d  Tcl_GetIndexFrom
19f0: 4f 62 6a 0a 20 20 20 20 28 69 6e 74 65 72 70 2c  Obj.    (interp,
1a00: 20 6f 62 6a 76 5b 31 5d 2c 20 73 75 62 43 6d 64   objv[1], subCmd
1a10: 73 2c 20 22 6f 70 74 69 6f 6e 22 2c 20 30 2c 20  s, "option", 0, 
1a20: 28 69 6e 74 20 2a 29 20 26 6f 62 6a 5f 69 64 78  (int *) &obj_idx
1a30: 29 3b 0a 0a 20 20 20 20 69 66 20 28 73 74 61 74  );..    if (stat
1a40: 75 73 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  us != TCL_OK) {.
1a50: 09 72 65 74 75 72 6e 20 73 74 61 74 75 73 3b 0a  .return status;.
1a60: 20 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63      }..    switc
1a70: 68 20 28 6f 62 6a 5f 69 64 78 29 20 7b 0a 0a 09  h (obj_idx) {...
1a80: 63 61 73 65 20 54 43 4c 52 4c 5f 52 45 41 44 3a  case TCLRL_READ:
1a90: 0a 0a 09 20 20 20 20 72 6c 5f 63 61 6c 6c 62 61  ...    rl_callba
1aa0: 63 6b 5f 68 61 6e 64 6c 65 72 5f 69 6e 73 74 61  ck_handler_insta
1ab0: 6c 6c 28 0a 09 09 09 20 20 20 20 20 20 20 6f 62  ll(....       ob
1ac0: 6a 63 20 3d 3d 20 33 20 3f 20 54 63 6c 5f 47 65  jc == 3 ? Tcl_Ge
1ad0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
1ae0: 62 6a 76 5b 32 5d 2c 20 30 29 0a 09 09 09 20 20  bjv[2], 0)....  
1af0: 20 20 20 20 20 3a 20 22 25 22 2c 20 54 63 6c 52       : "%", TclR
1b00: 65 61 64 6c 69 6e 65 4c 69 6e 65 43 6f 6d 70 6c  eadlineLineCompl
1b10: 65 74 65 48 61 6e 64 6c 65 72 29 3b 0a 0a 09 20  eteHandler);... 
1b20: 20 20 20 54 63 6c 5f 43 72 65 61 74 65 46 69 6c     Tcl_CreateFil
1b30: 65 48 61 6e 64 6c 65 72 28 30 2c 20 54 43 4c 5f  eHandler(0, TCL_
1b40: 52 45 41 44 41 42 4c 45 2c 0a 09 09 54 63 6c 52  READABLE,...TclR
1b50: 65 61 64 6c 69 6e 65 52 65 61 64 48 61 6e 64 6c  eadlineReadHandl
1b60: 65 72 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29  er, (ClientData)
1b70: 20 4e 55 4c 4c 29 3b 0a 0a 09 20 20 20 20 2f 2a   NULL);...    /*
1b80: 2a 0a 09 20 20 20 20 20 2a 20 4d 61 69 6e 20 4c  *..     * Main L
1b90: 6f 6f 70 2e 0a 09 20 20 20 20 20 2a 20 58 58 58  oop...     * XXX
1ba0: 20 65 61 63 68 20 6d 6f 64 69 66 69 63 61 74 69   each modificati
1bb0: 6f 6e 20 6f 66 20 74 68 65 20 67 6c 6f 62 61 6c  on of the global
1bc0: 20 76 61 72 69 61 62 6c 65 73 0a 09 20 20 20 20   variables..    
1bd0: 20 2a 20 20 20 20 20 77 68 69 63 68 20 74 65 72   *     which ter
1be0: 6d 69 6e 61 74 65 73 20 74 68 65 20 6d 61 69 6e  minates the main
1bf0: 20 6c 6f 6f 70 20 6d 75 73 74 20 63 61 6c 6c 0a   loop must call.
1c00: 09 20 20 20 20 20 2a 20 20 20 20 20 72 6c 5f 63  .     *     rl_c
1c10: 61 6c 6c 62 61 63 6b 5f 68 61 6e 64 6c 65 72 5f  allback_handler_
1c20: 72 65 6d 6f 76 65 28 29 20 74 6f 20 6c 65 61 76  remove() to leav
1c30: 65 0a 09 20 20 20 20 20 2a 20 20 20 20 20 72 65  e..     *     re
1c40: 61 64 6c 69 6e 65 20 69 6e 20 61 20 64 65 66 69  adline in a defi
1c50: 6e 65 64 20 73 74 61 74 65 2e 20 20 20 20 20 20  ned state.      
1c60: 20 20 20 20 58 58 58 0a 09 20 20 20 20 20 2a 2f      XXX..     */
1c70: 0a 09 20 20 20 20 74 63 6c 72 6c 5f 73 74 61 74  ..    tclrl_stat
1c80: 65 20 3d 20 4c 49 4e 45 5f 50 45 4e 44 49 4e 47  e = LINE_PENDING
1c90: 3b 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 28 21  ;...    while (!
1ca0: 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43  TclReadlineLineC
1cb0: 6f 6d 70 6c 65 74 65 28 29 29 20 7b 0a 23 69 66  omplete()) {.#if
1cc0: 64 65 66 20 45 58 45 43 55 54 49 4e 47 5f 4d 41  def EXECUTING_MA
1cd0: 43 52 4f 5f 48 41 43 4b 0a 09 09 2f 2a 2a 0a 09  CRO_HACK.../**..
1ce0: 09 20 2a 20 63 68 65 63 6b 20 66 69 72 73 74 2c  . * check first,
1cf0: 20 69 66 20 6d 6f 72 65 20 63 68 61 72 61 63 74   if more charact
1d00: 65 72 73 20 61 72 65 0a 09 09 20 2a 20 61 76 61  ers are... * ava
1d10: 69 6c 61 62 6c 65 20 66 72 6f 6d 20 5f 72 6c 5f  ilable from _rl_
1d20: 65 78 65 63 75 74 69 6e 67 5f 6d 61 63 72 6f 2c  executing_macro,
1d30: 0a 09 09 20 2a 20 62 65 63 61 75 73 65 20 54 63  ... * because Tc
1d40: 6c 5f 44 6f 4f 6e 65 45 76 65 6e 74 28 29 20 77  l_DoOneEvent() w
1d50: 69 6c 6c 20 28 6e 61 74 75 72 61 6c 6c 79 29 0a  ill (naturally).
1d60: 09 09 20 2a 20 6e 6f 74 20 64 65 74 65 63 74 20  .. * not detect 
1d70: 74 68 69 73 20 60 65 76 65 6e 74 27 2e 0a 09 09  this `event'....
1d80: 20 2a 2f 0a 09 09 69 66 20 28 5f 72 6c 5f 65 78   */...if (_rl_ex
1d90: 65 63 75 74 69 6e 67 5f 6d 61 63 72 6f 29 0a 09  ecuting_macro)..
1da0: 09 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e 65  .    TclReadline
1db0: 52 65 61 64 48 61 6e 64 6c 65 72 28 28 43 6c 69  ReadHandler((Cli
1dc0: 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 2c 20 54  entData) NULL, T
1dd0: 43 4c 5f 52 45 41 44 41 42 4c 45 29 3b 0a 09 09  CL_READABLE);...
1de0: 65 6c 73 65 0a 23 65 6e 64 69 66 0a 09 09 20 20  else.#endif...  
1df0: 20 20 54 63 6c 5f 44 6f 4f 6e 65 45 76 65 6e 74    Tcl_DoOneEvent
1e00: 28 54 43 4c 5f 41 4c 4c 5f 45 56 45 4e 54 53 29  (TCL_ALL_EVENTS)
1e10: 3b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 54  ;..    }...    T
1e20: 63 6c 5f 44 65 6c 65 74 65 46 69 6c 65 48 61 6e  cl_DeleteFileHan
1e30: 64 6c 65 72 28 30 29 3b 0a 0a 09 20 20 20 20 73  dler(0);...    s
1e40: 77 69 74 63 68 20 28 74 63 6c 72 6c 5f 73 74 61  witch (tclrl_sta
1e50: 74 65 29 20 7b 0a 0a 09 09 63 61 73 65 20 4c 49  te) {....case LI
1e60: 4e 45 5f 43 4f 4d 50 4c 45 54 45 3a 0a 0a 09 09  NE_COMPLETE:....
1e70: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
1e80: 4b 3b 0a 09 09 20 20 20 20 2f 2a 20 4e 4f 54 52  K;...    /* NOTR
1e90: 45 41 43 48 45 44 20 2a 2f 0a 09 09 20 20 20 20  EACHED */...    
1ea0: 62 72 65 61 6b 3b 0a 0a 09 09 63 61 73 65 20 4c  break;....case L
1eb0: 49 4e 45 5f 45 4f 46 3a 0a 09 09 20 20 20 20 69  INE_EOF:...    i
1ec0: 66 20 28 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72  f (tclrl_eof_str
1ed0: 69 6e 67 29 0a 09 09 09 72 65 74 75 72 6e 20 54  ing)....return T
1ee0: 63 6c 5f 45 76 61 6c 28 69 6e 74 65 72 70 2c 20  cl_Eval(interp, 
1ef0: 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67  tclrl_eof_string
1f00: 29 3b 0a 09 09 20 20 20 20 65 6c 73 65 0a 09 09  );...    else...
1f10: 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a  .return TCL_OK;.
1f20: 09 09 20 20 20 20 2f 2a 20 4e 4f 54 52 45 41 43  ..    /* NOTREAC
1f30: 48 45 44 20 2a 2f 0a 09 09 20 20 20 20 62 72 65  HED */...    bre
1f40: 61 6b 3b 0a 0a 09 09 64 65 66 61 75 6c 74 3a 0a  ak;....default:.
1f50: 09 09 20 20 20 20 72 65 74 75 72 6e 20 74 63 6c  ..    return tcl
1f60: 72 6c 5f 73 74 61 74 65 3b 0a 09 09 20 20 20 20  rl_state;...    
1f70: 2f 2a 20 4e 4f 54 52 45 41 43 48 45 44 20 2a 2f  /* NOTREACHED */
1f80: 0a 09 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 20  ...    break;.. 
1f90: 20 20 20 7d 0a 09 20 20 20 20 62 72 65 61 6b 3b     }..    break;
1fa0: 0a 0a 09 63 61 73 65 20 54 43 4c 52 4c 5f 49 4e  ...case TCLRL_IN
1fb0: 49 54 49 41 4c 49 5a 45 3a 0a 09 20 20 20 20 69  ITIALIZE:..    i
1fc0: 66 20 28 33 20 21 3d 20 6f 62 6a 63 29 20 7b 0a  f (3 != objc) {.
1fd0: 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72  ..Tcl_WrongNumAr
1fe0: 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62  gs(interp, 2, ob
1ff0: 6a 76 2c 20 22 68 69 73 74 6f 72 79 66 69 6c 65  jv, "historyfile
2000: 22 29 3b 0a 09 09 72 65 74 75 72 6e 20 54 43 4c  ");...return TCL
2010: 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20 7d 20 65  _ERROR;..    } e
2020: 6c 73 65 20 7b 0a 09 09 72 65 74 75 72 6e 20 54  lse {...return T
2030: 63 6c 52 65 61 64 6c 69 6e 65 49 6e 69 74 69 61  clReadlineInitia
2040: 6c 69 7a 65 28 69 6e 74 65 72 70 2c 0a 09 09 09  lize(interp,....
2050: 09 09 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74  ..     Tcl_GetSt
2060: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
2070: 5b 32 5d 2c 20 30 29 29 3b 0a 09 20 20 20 20 7d  [2], 0));..    }
2080: 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 0a 09 63  ..    break;...c
2090: 61 73 65 20 54 43 4c 52 4c 5f 57 52 49 54 45 3a  ase TCLRL_WRITE:
20a0: 0a 09 20 20 20 20 69 66 20 28 33 20 21 3d 20 6f  ..    if (3 != o
20b0: 62 6a 63 29 20 7b 0a 09 09 54 63 6c 5f 57 72 6f  bjc) {...Tcl_Wro
20c0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
20d0: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 68 69 73 74  , 2, objv, "hist
20e0: 6f 72 79 66 69 6c 65 22 29 3b 0a 09 09 72 65 74  oryfile");...ret
20f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09  urn TCL_ERROR;..
2100: 20 20 20 20 7d 20 20 65 6c 73 65 20 69 66 20 28      }  else if (
2110: 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28 54 63  write_history(Tc
2120: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
2130: 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 29  bj(objv[2], 0)))
2140: 20 7b 0a 09 09 54 63 6c 5f 41 70 70 65 6e 64 52   {...Tcl_AppendR
2150: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 75  esult(interp, "u
2160: 6e 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 68  nable to write h
2170: 69 73 74 6f 72 79 20 74 6f 20 60 22 2c 0a 09 09  istory to `",...
2180: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
2190: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d  gFromObj(objv[2]
21a0: 2c 20 30 29 2c 20 22 27 5c 6e 22 2c 20 28 63 68  , 0), "'\n", (ch
21b0: 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 72 65  ar*) NULL);...re
21c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
21d0: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28  .    }..    if (
21e0: 74 63 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65  tclrl_history_le
21f0: 6e 67 74 68 20 3e 3d 20 30 29 20 7b 0a 09 09 68  ngth >= 0) {...h
2200: 69 73 74 6f 72 79 5f 74 72 75 6e 63 61 74 65 5f  istory_truncate_
2210: 66 69 6c 65 28 54 63 6c 5f 47 65 74 53 74 72 69  file(Tcl_GetStri
2220: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ngFromObj(objv[2
2230: 5d 2c 20 30 29 2c 0a 09 09 09 09 20 20 20 20 20  ], 0),.....     
2240: 20 74 63 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c   tclrl_history_l
2250: 65 6e 67 74 68 29 3b 0a 09 20 20 20 20 7d 0a 09  ength);..    }..
2260: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
2270: 4b 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 0a  K;..    break;..
2280: 09 63 61 73 65 20 54 43 4c 52 4c 5f 41 44 44 3a  .case TCLRL_ADD:
2290: 0a 09 20 20 20 20 69 66 20 28 33 20 21 3d 20 6f  ..    if (3 != o
22a0: 62 6a 63 29 20 7b 0a 09 09 54 63 6c 5f 57 72 6f  bjc) {...Tcl_Wro
22b0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
22c0: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 63 6f 6d 70  , 2, objv, "comp
22d0: 6c 65 74 65 72 4c 69 6e 65 22 29 3b 0a 09 09 72  leterLine");...r
22e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
22f0: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  ..    } else if 
2300: 28 54 63 6c 52 65 61 64 6c 69 6e 65 4b 6e 6f 77  (TclReadlineKnow
2310: 6e 43 6f 6d 6d 61 6e 64 73 28 0a 09 09 09 09 20  nCommands(..... 
2320: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
2330: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d  gFromObj(objv[2]
2340: 2c 20 30 29 2c 0a 09 09 09 09 20 20 20 20 20 28  , 0),.....     (
2350: 69 6e 74 29 20 30 2c 20 5f 43 4d 44 5f 53 45 54  int) 0, _CMD_SET
2360: 29 29 20 7b 0a 09 09 54 63 6c 5f 41 70 70 65 6e  )) {...Tcl_Appen
2370: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2380: 22 75 6e 61 62 6c 65 20 74 6f 20 61 64 64 20 63  "unable to add c
2390: 6f 6d 6d 61 6e 64 20 5c 22 22 2c 0a 09 09 20 20  ommand \"",...  
23a0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
23b0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
23c0: 30 29 2c 20 22 5c 22 5c 6e 22 2c 20 28 63 68 61  0), "\"\n", (cha
23d0: 72 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20  r*) NULL);..    
23e0: 7d 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 0a 09  }..    break;...
23f0: 63 61 73 65 20 54 43 4c 52 4c 5f 43 4f 4d 50 4c  case TCLRL_COMPL
2400: 45 54 45 3a 0a 09 20 20 20 20 69 66 20 28 33 20  ETE:..    if (3 
2410: 21 3d 20 6f 62 6a 63 29 20 7b 0a 09 09 54 63 6c  != objc) {...Tcl
2420: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
2430: 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22  terp, 2, objv, "
2440: 6c 69 6e 65 22 29 3b 0a 09 09 72 65 74 75 72 6e  line");...return
2450: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20   TCL_ERROR;..   
2460: 20 7d 20 65 6c 73 65 20 69 66 20 28 54 63 6c 5f   } else if (Tcl_
2470: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 65 28  CommandComplete(
2480: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
2490: 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29  mObj(objv[2], 0)
24a0: 29 29 20 7b 0a 09 09 54 63 6c 5f 41 70 70 65 6e  )) {...Tcl_Appen
24b0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
24c0: 22 31 22 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c  "1", (char*) NUL
24d0: 4c 29 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  L);..    } else 
24e0: 7b 0a 09 09 54 63 6c 5f 41 70 70 65 6e 64 52 65  {...Tcl_AppendRe
24f0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 30 22  sult(interp, "0"
2500: 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b  , (char*) NULL);
2510: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 62 72 65  ..    }..    bre
2520: 61 6b 3b 0a 0a 09 63 61 73 65 20 54 43 4c 52 4c  ak;...case TCLRL
2530: 5f 43 55 53 54 4f 4d 43 4f 4d 50 4c 45 54 45 52  _CUSTOMCOMPLETER
2540: 3a 0a 09 20 20 20 20 69 66 20 28 6f 62 6a 63 20  :..    if (objc 
2550: 3e 20 33 29 20 7b 0a 09 09 54 63 6c 5f 57 72 6f  > 3) {...Tcl_Wro
2560: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
2570: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 3f 73 63 72  , 2, objv, "?scr
2580: 69 70 74 43 6f 6d 70 6c 65 74 65 72 3f 22 29 3b  iptCompleter?");
2590: 0a 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  ...return TCL_ER
25a0: 52 4f 52 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65  ROR;..    } else
25b0: 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63 29 20   if (3 == objc) 
25c0: 7b 0a 09 09 69 66 20 28 74 63 6c 72 6c 5f 63 75  {...if (tclrl_cu
25d0: 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29 0a  stom_completer).
25e0: 09 09 20 20 20 20 46 52 45 45 28 74 63 6c 72 6c  ..    FREE(tclrl
25f0: 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65  _custom_complete
2600: 72 29 3b 0a 09 09 69 66 20 28 21 62 6c 61 6e 6b  r);...if (!blank
2610: 5f 6c 69 6e 65 28 54 63 6c 5f 47 65 74 53 74 72  _line(Tcl_GetStr
2620: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
2630: 32 5d 2c 20 30 29 29 29 0a 09 09 20 20 20 20 74  2], 0)))...    t
2640: 63 6c 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70  clrl_custom_comp
2650: 6c 65 74 65 72 20 3d 0a 09 09 20 20 20 20 20 20  leter =...      
2660: 20 20 20 73 74 72 69 70 77 68 69 74 65 28 73 74     stripwhite(st
2670: 72 64 75 70 28 54 63 6c 5f 47 65 74 53 74 72 69  rdup(Tcl_GetStri
2680: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ngFromObj(objv[2
2690: 5d 2c 20 30 29 29 29 3b 0a 09 20 20 20 20 7d 0a  ], 0)));..    }.
26a0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
26b0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 74 63  esult(interp, tc
26c0: 6c 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c  lrl_custom_compl
26d0: 65 74 65 72 2c 20 28 63 68 61 72 2a 29 20 4e 55  eter, (char*) NU
26e0: 4c 4c 29 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b  LL);..    break;
26f0: 0a 0a 09 63 61 73 65 20 54 43 4c 52 4c 5f 42 55  ...case TCLRL_BU
2700: 49 4c 54 49 4e 43 4f 4d 50 4c 45 54 45 52 3a 0a  ILTINCOMPLETER:.
2710: 09 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3e 20  .    if (objc > 
2720: 33 29 20 7b 0a 09 09 54 63 6c 5f 57 72 6f 6e 67  3) {...Tcl_Wrong
2730: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
2740: 32 2c 20 6f 62 6a 76 2c 20 22 3f 62 6f 6f 6c 65  2, objv, "?boole
2750: 61 6e 3f 22 29 3b 0a 09 09 72 65 74 75 72 6e 20  an?");...return 
2760: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20  TCL_ERROR;..    
2770: 7d 20 65 6c 73 65 20 69 66 20 28 33 20 3d 3d 20  } else if (3 == 
2780: 6f 62 6a 63 29 20 7b 0a 09 09 69 6e 74 20 62 6f  objc) {...int bo
2790: 6f 6c 20 3d 20 74 63 6c 72 6c 5f 75 73 65 5f 62  ol = tclrl_use_b
27a0: 75 69 6c 74 69 6e 5f 63 6f 6d 70 6c 65 74 65 72  uiltin_completer
27b0: 3b 0a 09 09 69 66 20 28 54 43 4c 5f 4f 4b 20 21  ;...if (TCL_OK !
27c0: 3d 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  = Tcl_GetBoolean
27d0: 28 69 6e 74 65 72 70 2c 0a 09 09 09 09 09 20 20  (interp,......  
27e0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
27f0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
2800: 20 30 29 2c 0a 09 09 09 09 09 20 20 20 20 20 26   0),......     &
2810: 62 6f 6f 6c 29 29 20 7b 0a 09 09 20 20 20 20 54  bool)) {...    T
2820: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2830: 69 6e 74 65 72 70 2c 0a 09 09 09 22 77 72 6f 6e  interp,...."wron
2840: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
2850: 20 62 65 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   be a boolean va
2860: 6c 75 65 2e 22 2c 0a 09 09 09 28 63 68 61 72 2a  lue.",....(char*
2870: 29 20 4e 55 4c 4c 29 3b 0a 09 09 20 20 20 20 72  ) NULL);...    r
2880: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2890: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20  ...} else {...  
28a0: 20 20 74 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c    tclrl_use_buil
28b0: 74 69 6e 5f 63 6f 6d 70 6c 65 74 65 72 20 3d 20  tin_completer = 
28c0: 62 6f 6f 6c 3b 0a 09 09 7d 0a 09 20 20 20 20 7d  bool;...}..    }
28d0: 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ..    Tcl_Append
28e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 74  Result(interp, t
28f0: 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c 74 69 6e  clrl_use_builtin
2900: 5f 63 6f 6d 70 6c 65 74 65 72 20 3f 20 22 31 22  _completer ? "1"
2910: 20 3a 20 22 30 22 2c 0a 09 09 28 63 68 61 72 2a   : "0",...(char*
2920: 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 62 72  ) NULL);..    br
2930: 65 61 6b 3b 0a 0a 09 63 61 73 65 20 54 43 4c 52  eak;...case TCLR
2940: 4c 5f 45 4f 46 43 48 41 52 3a 0a 09 20 20 20 20  L_EOFCHAR:..    
2950: 69 66 20 28 6f 62 6a 63 20 3e 20 33 29 20 7b 0a  if (objc > 3) {.
2960: 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72  ..Tcl_WrongNumAr
2970: 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62  gs(interp, 2, ob
2980: 6a 76 2c 20 22 3f 73 63 72 69 70 74 3f 22 29 3b  jv, "?script?");
2990: 0a 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  ...return TCL_ER
29a0: 52 4f 52 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65  ROR;..    } else
29b0: 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63 29 20   if (3 == objc) 
29c0: 7b 0a 09 09 69 66 20 28 74 63 6c 72 6c 5f 65 6f  {...if (tclrl_eo
29d0: 66 5f 73 74 72 69 6e 67 29 0a 09 09 20 20 20 20  f_string)...    
29e0: 46 52 45 45 28 74 63 6c 72 6c 5f 65 6f 66 5f 73  FREE(tclrl_eof_s
29f0: 74 72 69 6e 67 29 3b 0a 09 09 69 66 20 28 21 62  tring);...if (!b
2a00: 6c 61 6e 6b 5f 6c 69 6e 65 28 54 63 6c 5f 47 65  lank_line(Tcl_Ge
2a10: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
2a20: 62 6a 76 5b 32 5d 2c 20 30 29 29 29 0a 09 09 20  bjv[2], 0)))... 
2a30: 20 20 20 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72     tclrl_eof_str
2a40: 69 6e 67 20 3d 20 0a 09 09 20 20 20 20 20 20 20  ing = ...       
2a50: 20 73 74 72 69 70 77 68 69 74 65 28 73 74 72 64   stripwhite(strd
2a60: 75 70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  up(Tcl_GetString
2a70: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
2a80: 20 30 29 29 29 3b 0a 09 20 20 20 20 7d 0a 09 20   0)));..    }.. 
2a90: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2aa0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 74 63 6c 72  ult(interp, tclr
2ab0: 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 2c 20 28 63  l_eof_string, (c
2ac0: 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20  har*) NULL);..  
2ad0: 20 20 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20    break;...case 
2ae0: 54 43 4c 52 4c 5f 52 45 53 45 54 5f 54 45 52 4d  TCLRL_RESET_TERM
2af0: 49 4e 41 4c 3a 0a 09 20 20 20 20 2f 2a 20 54 4f  INAL:..    /* TO
2b00: 44 4f 3a 20 61 64 64 20 74 68 69 73 20 74 6f 20  DO: add this to 
2b10: 74 68 65 20 63 6f 6d 70 6c 65 74 65 72 20 2a 2f  the completer */
2b20: 0a 09 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3e  ..    if (objc >
2b30: 20 33 29 20 7b 0a 09 09 54 63 6c 5f 57 72 6f 6e   3) {...Tcl_Wron
2b40: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
2b50: 20 32 2c 20 6f 62 6a 76 2c 20 22 3f 74 65 72 6d   2, objv, "?term
2b60: 69 6e 61 6c 2d 6e 61 6d 65 3f 22 29 3b 0a 09 09  inal-name?");...
2b70: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2b80: 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66  ;..    }..    if
2b90: 20 28 33 20 3d 3d 20 6f 62 6a 63 29 20 7b 0a 09   (3 == objc) {..
2ba0: 09 2f 2a 0a 09 09 20 2a 20 2d 20 74 63 6c 38 2e  ./*... * - tcl8.
2bb0: 30 20 64 6f 65 73 6e 27 74 20 68 61 76 65 20 54  0 doesn't have T
2bc0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
2bd0: 4f 62 6a 28 29 0a 09 09 20 2a 20 2d 20 72 6c 5f  Obj()... * - rl_
2be0: 72 65 73 65 74 5f 74 65 72 6d 69 6e 61 6c 28 29  reset_terminal()
2bf0: 20 6d 69 67 68 74 20 62 65 20 64 65 66 69 6e 65   might be define
2c00: 64 0a 09 09 20 2a 20 20 20 74 6f 20 74 61 6b 65  d... *   to take
2c10: 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 2e 20 54   no arguments. T
2c20: 68 69 73 20 6d 69 67 68 74 20 70 72 6f 64 75 63  his might produc
2c30: 65 0a 09 09 20 2a 20 20 20 61 20 63 6f 6d 70 69  e... *   a compi
2c40: 6c 65 72 20 77 61 72 6e 69 6e 67 2e 0a 09 09 20  ler warning.... 
2c50: 2a 2f 0a 09 09 72 6c 5f 72 65 73 65 74 5f 74 65  */...rl_reset_te
2c60: 72 6d 69 6e 61 6c 28 54 63 6c 5f 47 65 74 53 74  rminal(Tcl_GetSt
2c70: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
2c80: 5b 32 5d 2c 20 30 29 29 3b 0a 23 69 66 64 65 66  [2], 0));.#ifdef
2c90: 20 43 4c 45 41 4e 55 50 5f 41 46 45 52 5f 53 49   CLEANUP_AFER_SI
2ca0: 47 4e 41 4c 0a 09 20 20 20 20 7d 20 65 6c 73 65  GNAL..    } else
2cb0: 20 7b 0a 09 09 72 6c 5f 63 6c 65 61 6e 75 70 5f   {...rl_cleanup_
2cc0: 61 66 74 65 72 5f 73 69 67 6e 61 6c 28 29 3b 0a  after_signal();.
2cd0: 23 65 6e 64 69 66 0a 09 20 20 20 20 7d 0a 09 20  #endif..    }.. 
2ce0: 20 20 20 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65     break;...case
2cf0: 20 54 43 4c 52 4c 5f 42 45 4c 4c 3a 0a 09 20 20   TCLRL_BELL:..  
2d00: 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29    if (objc != 2)
2d10: 20 7b 0a 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75   {...Tcl_WrongNu
2d20: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c  mArgs(interp, 2,
2d30: 20 6f 62 6a 76 2c 20 22 22 29 3b 0a 09 09 72 65   objv, "");...re
2d40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2d50: 09 20 20 20 20 7d 0a 0a 0a 09 20 20 20 20 2f 2a  .    }....    /*
2d60: 0a 09 20 20 20 20 20 2a 20 72 69 6e 67 20 74 68  ..     * ring th
2d70: 65 20 74 65 72 6d 69 6e 61 6c 20 62 65 6c 6c 20  e terminal bell 
2d80: 6f 62 65 79 69 6e 67 20 74 68 65 20 63 75 72 72  obeying the curr
2d90: 65 6e 74 0a 09 20 20 20 20 20 2a 20 73 65 74 74  ent..     * sett
2da0: 69 6e 67 73 20 2d 2d 20 61 75 64 69 62 6c 65 20  ings -- audible 
2db0: 6f 72 20 76 69 73 69 62 6c 65 2e 0a 09 20 20 20  or visible...   
2dc0: 20 20 2a 2f 0a 0a 09 20 20 20 20 64 69 6e 67 28    */...    ding(
2dd0: 29 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 0a  );..    break;..
2de0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c          case TCL
2df0: 52 4c 5f 55 50 44 41 54 45 3a 0a 09 20 20 20 20  RL_UPDATE:..    
2e00: 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29 20 7b  if (objc != 2) {
2e10: 0a 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41  ...Tcl_WrongNumA
2e20: 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f  rgs(interp, 2, o
2e30: 62 6a 76 2c 20 22 22 29 3b 0a 09 09 72 65 74 75  bjv, "");...retu
2e40: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20  rn TCL_ERROR;.. 
2e50: 20 20 20 7d 0a 0a 09 20 20 20 20 2f 2a 20 55 70     }...    /* Up
2e60: 64 61 74 65 20 74 68 65 20 69 6e 70 75 74 20 6c  date the input l
2e70: 69 6e 65 20 2a 2f 0a 0a 09 20 20 20 20 69 66 20  ine */...    if 
2e80: 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 29  (rl_line_buffer)
2e90: 20 7b 0a 09 20 20 20 20 20 20 20 20 72 6c 5f 66   {..        rl_f
2ea0: 6f 72 63 65 64 5f 75 70 64 61 74 65 5f 64 69 73  orced_update_dis
2eb0: 70 6c 61 79 28 29 3b 0a 09 20 20 20 20 7d 0a 0a  play();..    }..
2ec0: 09 20 20 20 20 62 72 65 61 6b 3b 0a 0a 0a 20 20  .    break;...  
2ed0: 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 52 4c        case TCLRL
2ee0: 5f 54 45 58 54 3a 0a 09 20 20 20 20 69 66 20 28  _TEXT:..    if (
2ef0: 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a 09 09 54  objc != 2) {...T
2f00: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
2f10: 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c  interp, 2, objv,
2f20: 20 22 22 29 3b 0a 09 09 72 65 74 75 72 6e 20 54   "");...return T
2f30: 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20 7d  CL_ERROR;..    }
2f40: 0a 0a 09 20 20 20 20 2f 2a 20 52 65 74 75 72 6e  ...    /* Return
2f50: 20 74 68 65 20 63 75 72 72 65 6e 74 20 69 6e 70   the current inp
2f60: 75 74 20 6c 69 6e 65 20 2a 2f 0a 09 20 20 20 20  ut line */..    
2f70: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
2f80: 28 69 6e 74 65 72 70 2c 0a 09 09 20 20 20 54 63  (interp,...   Tc
2f90: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 72  l_NewStringObj(r
2fa0: 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 20 3f 20  l_line_buffer ? 
2fb0: 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 20 3a  rl_line_buffer :
2fc0: 20 22 22 2c 20 2d 31 29 29 3b 0a 09 20 20 20 20   "", -1));..    
2fd0: 62 72 65 61 6b 3b 0a 0a 09 64 65 66 61 75 6c 74  break;...default
2fe0: 3a 0a 09 20 20 20 20 67 6f 74 6f 20 42 41 44 5f  :..    goto BAD_
2ff0: 43 4f 4d 4d 41 4e 44 3b 0a 09 20 20 20 20 2f 2a  COMMAND;..    /*
3000: 20 4e 4f 54 52 45 41 43 48 45 44 20 2a 2f 0a 09   NOTREACHED */..
3010: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
3020: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ..    return TCL
3030: 5f 4f 4b 3b 0a 0a 42 41 44 5f 43 4f 4d 4d 41 4e  _OK;..BAD_COMMAN
3040: 44 3a 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  D:.    Tcl_Appen
3050: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a  dResult(interp,.
3060: 09 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ."wrong # args: 
3070: 73 68 6f 75 6c 64 20 62 65 20 5c 22 72 65 61 64  should be \"read
3080: 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 3f 61 72 67  line option ?arg
3090: 20 2e 2e 2e 3f 5c 22 22 2c 0a 09 28 63 68 61 72   ...?\"",..(char
30a0: 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 72 65  *) NULL);.    re
30b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
30c0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  .}..static void.
30d0: 54 63 6c 52 65 61 64 6c 69 6e 65 52 65 61 64 48  TclReadlineReadH
30e0: 61 6e 64 6c 65 72 28 43 6c 69 65 6e 74 44 61 74  andler(ClientDat
30f0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e  a clientData, in
3100: 74 20 6d 61 73 6b 29 0a 7b 0a 20 20 20 20 69 66  t mask).{.    if
3110: 20 28 6d 61 73 6b 20 26 20 54 43 4c 5f 52 45 41   (mask & TCL_REA
3120: 44 41 42 4c 45 29 20 7b 0a 23 69 66 64 65 66 20  DABLE) {.#ifdef 
3130: 45 58 45 43 55 54 49 4e 47 5f 4d 41 43 52 4f 5f  EXECUTING_MACRO_
3140: 48 41 43 4b 0a 09 64 6f 20 7b 0a 23 65 6e 64 69  HACK..do {.#endi
3150: 66 0a 09 20 20 20 20 72 6c 5f 63 61 6c 6c 62 61  f..    rl_callba
3160: 63 6b 5f 72 65 61 64 5f 63 68 61 72 28 29 3b 0a  ck_read_char();.
3170: 23 69 66 64 65 66 20 45 58 45 43 55 54 49 4e 47  #ifdef EXECUTING
3180: 5f 4d 41 43 52 4f 5f 48 41 43 4b 0a 09 20 20 20  _MACRO_HACK..   
3190: 20 2f 2a 2a 0a 09 20 20 20 20 20 2a 20 63 68 65   /**..     * che
31a0: 63 6b 2c 20 69 66 20 77 65 27 72 65 20 69 6e 73  ck, if we're ins
31b0: 69 64 65 20 61 20 6d 61 63 72 6f 20 61 6e 64 0a  ide a macro and.
31c0: 09 20 20 20 20 20 2a 20 69 66 20 73 6f 2c 20 72  .     * if so, r
31d0: 65 61 64 20 61 6c 6c 20 6d 61 63 72 6f 20 63 68  ead all macro ch
31e0: 61 72 61 63 74 65 72 73 0a 09 20 20 20 20 20 2a  aracters..     *
31f0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
3200: 65 6f 6c 2e 0a 09 20 20 20 20 20 2a 2f 0a 09 7d  eol...     */..}
3210: 20 77 68 69 6c 65 20 28 5f 72 6c 5f 65 78 65 63   while (_rl_exec
3220: 75 74 69 6e 67 5f 6d 61 63 72 6f 20 26 26 20 21  uting_macro && !
3230: 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43  TclReadlineLineC
3240: 6f 6d 70 6c 65 74 65 28 29 29 3b 0a 23 65 6e 64  omplete());.#end
3250: 69 66 0a 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74  if.    }.}..stat
3260: 69 63 20 76 6f 69 64 0a 54 63 6c 52 65 61 64 6c  ic void.TclReadl
3270: 69 6e 65 4c 69 6e 65 43 6f 6d 70 6c 65 74 65 48  ineLineCompleteH
3280: 61 6e 64 6c 65 72 28 63 68 61 72 2a 20 70 74 72  andler(char* ptr
3290: 29 0a 7b 0a 20 20 20 20 69 66 20 28 21 70 74 72  ).{.    if (!ptr
32a0: 29 20 7b 20 2f 2a 20 3c 63 2d 64 3e 20 2a 2f 0a  ) { /* <c-d> */.
32b0: 0a 09 54 63 6c 52 65 61 64 6c 69 6e 65 54 65 72  ..TclReadlineTer
32c0: 6d 69 6e 61 74 65 28 4c 49 4e 45 5f 45 4f 46 29  minate(LINE_EOF)
32d0: 3b 0a 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ;..    } else {.
32e0: 0a 09 2f 2a 2a 0a 09 20 2a 20 46 72 6f 6d 20 76  ../**.. * From v
32f0: 65 72 73 69 6f 6e 20 30 2e 39 2e 33 20 75 70 77  ersion 0.9.3 upw
3300: 61 72 64 73 2c 20 61 6c 6c 20 6c 69 6e 65 73 20  ards, all lines 
3310: 61 72 65 0a 09 20 2a 20 72 65 74 75 72 6e 65 64  are.. * returned
3320: 2c 20 65 76 65 6e 20 65 6d 70 74 79 20 6c 69 6e  , even empty lin
3330: 65 73 2e 20 28 4f 6e 6c 79 20 6e 6f 6e 2d 65 6d  es. (Only non-em
3340: 70 74 79 0a 09 20 2a 20 6c 69 6e 65 73 20 61 72  pty.. * lines ar
3350: 65 20 73 74 75 66 66 65 64 20 69 6e 20 72 65 61  e stuffed in rea
3360: 64 6c 69 6e 65 27 73 20 68 69 73 74 6f 72 79 2e  dline's history.
3370: 29 0a 09 20 2a 20 54 68 65 20 63 61 6c 6c 69 6e  ).. * The callin
3380: 67 20 73 63 72 69 70 74 20 69 73 20 72 65 73 70  g script is resp
3390: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 68 61 6e 64  onsible for hand
33a0: 6c 69 6e 67 0a 09 20 2a 20 65 6d 70 74 79 20 73  ling.. * empty s
33b0: 74 72 69 6e 67 73 2e 0a 09 20 2a 2f 0a 0a 09 63  trings... */...c
33c0: 68 61 72 2a 20 65 78 70 61 6e 73 69 6f 6e 20 3d  har* expansion =
33d0: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 09   (char*) NULL;..
33e0: 69 6e 74 20 73 74 61 74 75 73 20 3d 20 68 69 73  int status = his
33f0: 74 6f 72 79 5f 65 78 70 61 6e 64 28 70 74 72 2c  tory_expand(ptr,
3400: 20 26 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 0a 09   &expansion);...
3410: 69 66 20 28 73 74 61 74 75 73 20 3e 3d 20 31 29  if (status >= 1)
3420: 20 7b 0a 09 20 20 20 20 2f 2a 20 54 4f 44 4f 3a   {..    /* TODO:
3430: 20 6d 61 6b 65 20 74 68 69 73 20 61 20 76 61 6c   make this a val
3440: 69 64 20 74 63 6c 20 6f 75 74 70 75 74 20 2a 2f  id tcl output */
3450: 0a 09 20 20 20 20 70 72 69 6e 74 66 28 22 25 73  ..    printf("%s
3460: 5c 6e 22 2c 20 65 78 70 61 6e 73 69 6f 6e 29 3b  \n", expansion);
3470: 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 2d 31 20  ..} else if (-1 
3480: 3d 3d 20 73 74 61 74 75 73 29 20 7b 0a 09 20 20  == status) {..  
3490: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
34a0: 6c 74 0a 09 20 20 20 20 28 74 63 6c 72 6c 5f 69  lt..    (tclrl_i
34b0: 6e 74 65 72 70 2c 20 22 65 72 72 6f 72 20 69 6e  nterp, "error in
34c0: 20 68 69 73 74 6f 72 79 20 65 78 70 61 6e 73 69   history expansi
34d0: 6f 6e 5c 6e 22 2c 20 28 63 68 61 72 2a 29 20 4e  on\n", (char*) N
34e0: 55 4c 4c 29 3b 0a 09 20 20 20 20 54 63 6c 52 65  ULL);..    TclRe
34f0: 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61 74 65 28  adlineTerminate(
3500: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 09  TCL_ERROR);..}..
3510: 2f 2a 2a 0a 09 20 2a 20 54 4f 44 4f 3a 20 73 74  /**.. * TODO: st
3520: 61 74 75 73 20 3d 3d 20 32 20 2e 2e 2e 0a 09 20  atus == 2 ..... 
3530: 2a 2f 0a 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  */...Tcl_AppendR
3540: 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65  esult(tclrl_inte
3550: 72 70 2c 20 65 78 70 61 6e 73 69 6f 6e 2c 20 28  rp, expansion, (
3560: 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 0a 23  char*) NULL);..#
3570: 69 66 64 65 66 20 45 58 45 43 55 54 49 4e 47 5f  ifdef EXECUTING_
3580: 4d 41 43 52 4f 5f 48 41 43 4b 0a 09 2f 2a 2a 0a  MACRO_HACK../**.
3590: 09 20 2a 20 64 6f 6e 27 74 20 73 74 75 66 66 20  . * don't stuff 
35a0: 6d 61 63 72 6f 20 6c 69 6e 65 73 0a 09 20 2a 20  macro lines.. * 
35b0: 69 6e 74 6f 20 72 65 61 64 6c 69 6e 65 27 73 20  into readline's 
35c0: 68 69 73 74 6f 72 79 2e 0a 09 20 2a 2f 0a 09 69  history... */..i
35d0: 66 28 21 5f 72 6c 5f 65 78 65 63 75 74 69 6e 67  f(!_rl_executing
35e0: 5f 6d 61 63 72 6f 29 20 7b 0a 23 65 6e 64 69 66  _macro) {.#endif
35f0: 0a 09 20 20 20 20 2f 2a 2a 0a 09 20 20 20 20 20  ..    /**..     
3600: 2a 20 64 6f 6e 27 74 20 73 74 75 66 66 20 65 6d  * don't stuff em
3610: 70 74 79 20 6c 69 6e 65 73 0a 09 20 20 20 20 20  pty lines..     
3620: 2a 20 69 6e 74 6f 20 72 65 61 64 6c 69 6e 65 27  * into readline'
3630: 73 20 68 69 73 74 6f 72 79 2e 0a 09 20 20 20 20  s history...    
3640: 20 2a 20 64 6f 6e 27 74 20 73 74 75 66 66 20 74   * don't stuff t
3650: 77 69 63 65 20 74 68 65 20 73 61 6d 65 0a 09 20  wice the same.. 
3660: 20 20 20 20 2a 20 6c 69 6e 65 20 69 6e 74 6f 20      * line into 
3670: 72 65 61 64 6c 69 6e 65 27 73 20 68 69 73 74 6f  readline's histo
3680: 72 79 2e 0a 09 20 20 20 20 20 2a 2f 0a 09 20 20  ry...     */..  
3690: 20 20 69 66 20 28 65 78 70 61 6e 73 69 6f 6e 20    if (expansion 
36a0: 26 26 20 2a 65 78 70 61 6e 73 69 6f 6e 20 26 26  && *expansion &&
36b0: 20 28 21 74 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69   (!tclrl_last_li
36c0: 6e 65 20 7c 7c 0a 09 09 20 20 20 20 73 74 72 63  ne ||...    strc
36d0: 6d 70 28 74 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69  mp(tclrl_last_li
36e0: 6e 65 2c 20 65 78 70 61 6e 73 69 6f 6e 29 29 29  ne, expansion)))
36f0: 20 7b 0a 09 09 61 64 64 5f 68 69 73 74 6f 72 79   {...add_history
3700: 28 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 09 20 20  (expansion);..  
3710: 20 20 7d 0a 09 20 20 20 20 69 66 20 28 74 63 6c    }..    if (tcl
3720: 72 6c 5f 6c 61 73 74 5f 6c 69 6e 65 29 0a 09 09  rl_last_line)...
3730: 66 72 65 65 28 74 63 6c 72 6c 5f 6c 61 73 74 5f  free(tclrl_last_
3740: 6c 69 6e 65 29 3b 0a 09 20 20 20 20 74 63 6c 72  line);..    tclr
3750: 6c 5f 6c 61 73 74 5f 6c 69 6e 65 20 3d 20 73 74  l_last_line = st
3760: 72 64 75 70 28 65 78 70 61 6e 73 69 6f 6e 29 3b  rdup(expansion);
3770: 0a 23 69 66 64 65 66 20 45 58 45 43 55 54 49 4e  .#ifdef EXECUTIN
3780: 47 5f 4d 41 43 52 4f 5f 48 41 43 4b 0a 09 7d 0a  G_MACRO_HACK..}.
3790: 23 65 6e 64 69 66 0a 09 2f 2a 2a 0a 09 20 2a 20  #endif../**.. * 
37a0: 74 65 6c 6c 20 74 68 65 20 63 61 6c 6c 69 6e 67  tell the calling
37b0: 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 74 65 72   routines to ter
37c0: 6d 69 6e 61 74 65 2e 0a 09 20 2a 2f 0a 09 54 63  minate... */..Tc
37d0: 6c 52 65 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61  lReadlineTermina
37e0: 74 65 28 4c 49 4e 45 5f 43 4f 4d 50 4c 45 54 45  te(LINE_COMPLETE
37f0: 29 3b 0a 09 46 52 45 45 28 70 74 72 29 3b 0a 09  );..FREE(ptr);..
3800: 46 52 45 45 28 65 78 70 61 6e 73 69 6f 6e 29 3b  FREE(expansion);
3810: 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6e 74 0a 54 63  .    }.}..int.Tc
3820: 6c 72 65 61 64 6c 69 6e 65 5f 53 61 66 65 49 6e  lreadline_SafeIn
3830: 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  it(Tcl_Interp *i
3840: 6e 74 65 72 70 29 0a 7b 0a 20 20 20 20 72 65 74  nterp).{.    ret
3850: 75 72 6e 20 54 63 6c 72 65 61 64 6c 69 6e 65 5f  urn Tclreadline_
3860: 49 6e 69 74 28 69 6e 74 65 72 70 29 3b 0a 7d 0a  Init(interp);.}.
3870: 0a 69 6e 74 0a 54 63 6c 72 65 61 64 6c 69 6e 65  .int.Tclreadline
3880: 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70  _Init(Tcl_Interp
3890: 20 2a 69 6e 74 65 72 70 29 0a 7b 0a 20 20 20 20   *interp).{.    
38a0: 69 6e 74 20 73 74 61 74 75 73 3b 0a 20 20 20 20  int status;.    
38b0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
38c0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
38d0: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 72 65 61  tclreadline::rea
38e0: 64 6c 69 6e 65 22 2c 20 54 63 6c 52 65 61 64 6c  dline", TclReadl
38f0: 69 6e 65 43 6d 64 2c 0a 09 28 43 6c 69 65 6e 74  ineCmd,..(Client
3900: 44 61 74 61 29 20 4e 55 4c 4c 2c 20 28 54 63 6c  Data) NULL, (Tcl
3910: 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 2a  _CmdDeleteProc *
3920: 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 74 63 6c  ) NULL);.    tcl
3930: 72 6c 5f 69 6e 74 65 72 70 20 3d 20 69 6e 74 65  rl_interp = inte
3940: 72 70 3b 0a 20 20 20 20 69 66 20 28 54 43 4c 5f  rp;.    if (TCL_
3950: 4f 4b 20 21 3d 20 28 73 74 61 74 75 73 20 3d 20  OK != (status = 
3960: 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
3970: 72 70 2c 20 22 3a 3a 74 63 6c 72 65 61 64 6c 69  rp, "::tclreadli
3980: 6e 65 3a 3a 68 69 73 74 6f 72 79 4c 65 6e 67 74  ne::historyLengt
3990: 68 22 2c 0a 09 09 28 63 68 61 72 2a 29 20 26 74  h",...(char*) &t
39a0: 63 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65 6e  clrl_history_len
39b0: 67 74 68 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  gth, TCL_LINK_IN
39c0: 54 29 29 29 0a 09 72 65 74 75 72 6e 20 73 74 61  T)))..return sta
39d0: 74 75 73 3b 0a 0a 20 20 20 20 69 66 20 28 54 43  tus;..    if (TC
39e0: 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74 75 73 20  L_OK != (status 
39f0: 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e  = Tcl_LinkVar(in
3a00: 74 65 72 70 2c 20 22 3a 3a 74 63 6c 72 65 61 64  terp, "::tclread
3a10: 6c 69 6e 65 3a 3a 6c 69 62 72 61 72 79 22 2c 0a  line::library",.
3a20: 09 09 28 63 68 61 72 2a 29 20 26 74 63 6c 72 6c  ..(char*) &tclrl
3a30: 5f 6c 69 62 72 61 72 79 2c 20 54 43 4c 5f 4c 49  _library, TCL_LI
3a40: 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c 5f  NK_STRING | TCL_
3a50: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 29  LINK_READ_ONLY))
3a60: 29 0a 09 72 65 74 75 72 6e 20 73 74 61 74 75 73  )..return status
3a70: 3b 0a 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b  ;.    if (TCL_OK
3a80: 20 21 3d 20 28 73 74 61 74 75 73 20 3d 20 54 63   != (status = Tc
3a90: 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
3aa0: 2c 20 22 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  , "::tclreadline
3ab0: 3a 3a 76 65 72 73 69 6f 6e 22 2c 0a 09 09 28 63  ::version",...(c
3ac0: 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f 76 65 72  har*) &tclrl_ver
3ad0: 73 69 6f 6e 5f 73 74 72 2c 20 54 43 4c 5f 4c 49  sion_str, TCL_LI
3ae0: 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c 5f  NK_STRING | TCL_
3af0: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 29  LINK_READ_ONLY))
3b00: 29 0a 09 72 65 74 75 72 6e 20 73 74 61 74 75 73  )..return status
3b10: 3b 0a 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b  ;.    if (TCL_OK
3b20: 20 21 3d 20 28 73 74 61 74 75 73 20 3d 20 54 63   != (status = Tc
3b30: 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
3b40: 2c 20 22 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65  , "::tclreadline
3b50: 3a 3a 70 61 74 63 68 4c 65 76 65 6c 22 2c 0a 09  ::patchLevel",..
3b60: 09 28 63 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f  .(char*) &tclrl_
3b70: 70 61 74 63 68 6c 65 76 65 6c 5f 73 74 72 2c 20  patchlevel_str, 
3b80: 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 20  TCL_LINK_STRING 
3b90: 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  | TCL_LINK_READ_
3ba0: 4f 4e 4c 59 29 29 29 0a 09 72 65 74 75 72 6e 20  ONLY)))..return 
3bb0: 73 74 61 74 75 73 3b 0a 20 20 20 20 69 66 20 28  status;.    if (
3bc0: 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74 75  TCL_OK != (statu
3bd0: 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  s = Tcl_LinkVar(
3be0: 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63 6c 72 65  interp, "::tclre
3bf0: 61 64 6c 69 6e 65 3a 3a 6c 69 63 65 6e 73 65 22  adline::license"
3c00: 2c 0a 09 09 28 63 68 61 72 2a 29 20 26 74 63 6c  ,...(char*) &tcl
3c10: 72 6c 5f 6c 69 63 65 6e 73 65 2c 20 54 43 4c 5f  rl_license, TCL_
3c20: 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43  LINK_STRING | TC
3c30: 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  L_LINK_READ_ONLY
3c40: 29 29 29 0a 09 72 65 74 75 72 6e 20 73 74 61 74  )))..return stat
3c50: 75 73 3b 0a 0a 20 20 20 20 69 66 20 28 54 43 4c  us;..    if (TCL
3c60: 5f 4f 4b 20 21 3d 20 28 73 74 61 74 75 73 20 3d  _OK != (status =
3c70: 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
3c80: 65 72 70 2c 20 22 74 63 6c 72 65 61 64 6c 69 6e  erp, "tclreadlin
3c90: 65 5f 6c 69 62 72 61 72 79 22 2c 0a 09 09 28 63  e_library",...(c
3ca0: 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f 6c 69 62  har*) &tclrl_lib
3cb0: 72 61 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  rary, TCL_LINK_S
3cc0: 54 52 49 4e 47 20 7c 20 54 43 4c 5f 4c 49 4e 4b  TRING | TCL_LINK
3cd0: 5f 52 45 41 44 5f 4f 4e 4c 59 29 29 29 0a 09 72  _READ_ONLY)))..r
3ce0: 65 74 75 72 6e 20 73 74 61 74 75 73 3b 0a 20 20  eturn status;.  
3cf0: 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20    if (TCL_OK != 
3d00: 28 73 74 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69  (status = Tcl_Li
3d10: 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74  nkVar(interp, "t
3d20: 63 6c 72 65 61 64 6c 69 6e 65 5f 76 65 72 73 69  clreadline_versi
3d30: 6f 6e 22 2c 0a 09 09 28 63 68 61 72 2a 29 20 26  on",...(char*) &
3d40: 74 63 6c 72 6c 5f 76 65 72 73 69 6f 6e 5f 73 74  tclrl_version_st
3d50: 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  r, TCL_LINK_STRI
3d60: 4e 47 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45  NG | TCL_LINK_RE
3d70: 41 44 5f 4f 4e 4c 59 29 29 29 0a 09 72 65 74 75  AD_ONLY)))..retu
3d80: 72 6e 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69  rn status;.    i
3d90: 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74  f (TCL_OK != (st
3da0: 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56  atus = Tcl_LinkV
3db0: 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 72  ar(interp, "tclr
3dc0: 65 61 64 6c 69 6e 65 5f 70 61 74 63 68 4c 65 76  eadline_patchLev
3dd0: 65 6c 22 2c 0a 09 09 28 63 68 61 72 2a 29 20 26  el",...(char*) &
3de0: 74 63 6c 72 6c 5f 70 61 74 63 68 6c 65 76 65 6c  tclrl_patchlevel
3df0: 5f 73 74 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  _str, TCL_LINK_S
3e00: 54 52 49 4e 47 20 7c 20 54 43 4c 5f 4c 49 4e 4b  TRING | TCL_LINK
3e10: 5f 52 45 41 44 5f 4f 4e 4c 59 29 29 29 0a 09 72  _READ_ONLY)))..r
3e20: 65 74 75 72 6e 20 73 74 61 74 75 73 3b 0a 0a 20  eturn status;.. 
3e30: 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 50 6b     return Tcl_Pk
3e40: 67 50 72 6f 76 69 64 65 28 69 6e 74 65 72 70 2c  gProvide(interp,
3e50: 20 22 74 63 6c 72 65 61 64 6c 69 6e 65 22 2c 20   "tclreadline", 
3e60: 28 63 68 61 72 2a 29 74 63 6c 72 6c 5f 76 65 72  (char*)tclrl_ver
3e70: 73 69 6f 6e 5f 73 74 72 29 3b 0a 7d 0a 0a 73 74  sion_str);.}..st
3e80: 61 74 69 63 20 69 6e 74 0a 54 63 6c 52 65 61 64  atic int.TclRead
3e90: 6c 69 6e 65 49 6e 69 74 69 61 6c 69 7a 65 28 54  lineInitialize(T
3ea0: 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74 65 72  cl_Interp* inter
3eb0: 70 2c 20 63 68 61 72 2a 20 68 69 73 74 6f 72 79  p, char* history
3ec0: 66 69 6c 65 29 0a 7b 0a 20 20 20 20 72 6c 5f 72  file).{.    rl_r
3ed0: 65 61 64 6c 69 6e 65 5f 6e 61 6d 65 20 3d 20 22  eadline_name = "
3ee0: 74 63 6c 72 65 61 64 6c 69 6e 65 22 3b 0a 20 20  tclreadline";.  
3ef0: 20 20 2f 2a 20 20 20 20 72 6c 5f 73 70 65 63 69    /*    rl_speci
3f00: 61 6c 5f 70 72 65 66 69 78 65 73 20 3d 20 22 24  al_prefixes = "$
3f10: 7b 5c 22 5b 22 3b 20 2a 2f 0a 20 20 20 20 72 6c  {\"["; */.    rl
3f20: 5f 73 70 65 63 69 61 6c 5f 70 72 65 66 69 78 65  _special_prefixe
3f30: 73 20 3d 20 22 24 22 3b 0a 20 20 20 20 2f 2a 2a  s = "$";.    /**
3f40: 0a 20 20 20 20 20 2a 20 64 65 66 61 75 6c 74 20  .     * default 
3f50: 69 73 20 22 20 5c 74 5c 6e 5c 22 5c 5c 27 60 40  is " \t\n\"\\'`@
3f60: 24 3e 3c 3d 3b 7c 26 7b 28 22 0a 20 20 20 20 20  $><=;|&{(".     
3f70: 2a 20 72 65 6d 6f 76 65 64 20 22 28 22 20 3c 2d  * removed "(" <-
3f80: 2d 20 61 72 72 61 79 73 0a 20 20 20 20 20 2a 20  - arrays.     * 
3f90: 72 65 6d 6f 76 65 64 20 22 7b 22 20 3c 2d 2d 20  removed "{" <-- 
3fa0: 60 24 7b 27 20 76 61 72 69 61 62 6c 65 73 20 0a  `${' variables .
3fb0: 20 20 20 20 20 2a 20 72 65 6d 6f 76 65 64 20 22       * removed "
3fc0: 3c 22 20 3c 2d 2d 20 63 6f 6d 70 6c 65 74 69 6f  <" <-- completio
3fd0: 6e 20 6c 69 73 74 73 20 77 69 74 68 20 3c 20 2e  n lists with < .
3fe0: 2e 2e 20 3e 0a 20 20 20 20 20 2a 20 61 64 64 65  .. >.     * adde
3ff0: 64 20 22 5b 5d 22 0a 20 20 20 20 20 2a 20 61 64  d "[]".     * ad
4000: 64 65 64 20 22 7d 22 0a 20 20 20 20 20 2a 2f 0a  ded "}".     */.
4010: 20 20 20 20 2f 2a 20 31 31 2e 53 65 70 20 72 6c      /* 11.Sep rl
4020: 5f 62 61 73 69 63 5f 77 6f 72 64 5f 62 72 65 61  _basic_word_brea
4030: 6b 5f 63 68 61 72 61 63 74 65 72 73 20 3d 20 22  k_characters = "
4040: 20 5c 74 5c 6e 5c 22 5c 5c 40 24 7d 3d 3b 7c 26   \t\n\"\\@$}=;|&
4050: 5b 5d 22 3b 20 2a 2f 0a 20 20 20 20 2f 2a 20 62  []"; */.    /* b
4060: 65 73 73 65 72 20 28 31 31 2e 20 53 65 70 74 29  esser (11. Sept)
4070: 20 32 2e 20 28 72 65 6d 6f 76 65 64 20 5c 22 29   2. (removed \")
4080: 20 2a 2f 0a 20 20 20 20 2f 2a 20 72 6c 5f 62 61   */.    /* rl_ba
4090: 73 69 63 5f 77 6f 72 64 5f 62 72 65 61 6b 5f 63  sic_word_break_c
40a0: 68 61 72 61 63 74 65 72 73 20 3d 20 22 20 5c 74  haracters = " \t
40b0: 5c 6e 5c 5c 40 24 7d 3d 3b 7c 26 5b 5d 22 3b 20  \n\\@$}=;|&[]"; 
40c0: 2a 2f 0a 20 20 20 20 2f 2a 20 62 65 73 73 65 72  */.    /* besser
40d0: 20 28 31 31 2e 20 53 65 70 74 29 20 33 2e 20 28   (11. Sept) 3. (
40e0: 72 65 6d 6f 76 65 64 20 7d 29 20 2a 2f 0a 20 20  removed }) */.  
40f0: 20 20 72 6c 5f 62 61 73 69 63 5f 77 6f 72 64 5f    rl_basic_word_
4100: 62 72 65 61 6b 5f 63 68 61 72 61 63 74 65 72 73  break_characters
4110: 20 3d 20 22 20 5c 74 5c 6e 5c 5c 40 24 3d 3b 7c   = " \t\n\\@$=;|
4120: 26 5b 5d 22 3b 0a 23 69 66 20 30 0a 20 20 20 20  &[]";.#if 0.    
4130: 72 6c 5f 62 61 73 69 63 5f 71 75 6f 74 65 5f 63  rl_basic_quote_c
4140: 68 61 72 61 63 74 65 72 73 20 3d 20 22 5c 22 7b  haracters = "\"{
4150: 22 3b 20 2f 2a 20 58 58 58 20 3f 3f 3f 20 58 58  "; /* XXX ??? XX
4160: 58 20 2a 2f 0a 20 20 20 20 72 6c 5f 63 6f 6d 70  X */.    rl_comp
4170: 6c 65 74 65 72 5f 71 75 6f 74 65 5f 63 68 61 72  leter_quote_char
4180: 61 63 74 65 72 73 20 3d 20 22 5c 22 22 3b 0a 23  acters = "\"";.#
4190: 65 6e 64 69 66 0a 20 20 20 20 2f 2a 0a 20 20 20  endif.    /*.   
41a0: 20 20 20 20 72 6c 5f 66 69 6c 65 6e 61 6d 65 5f      rl_filename_
41b0: 71 75 6f 74 65 5f 63 68 61 72 61 63 74 65 72 73  quote_characters
41c0: 0a 20 20 20 20 20 20 20 3d 20 22 61 62 63 64 65  .       = "abcde
41d0: 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75  fghijklmnopqrstu
41e0: 76 77 78 79 7a 41 42 43 44 45 46 47 48 49 4a 4b  vwxyzABCDEFGHIJK
41f0: 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 22  LMNOPQRSTUVWXYZ"
4200: 3b 0a 0a 20 20 20 20 20 20 20 72 6c 5f 66 69 6c  ;..       rl_fil
4210: 65 6e 61 6d 65 5f 71 75 6f 74 69 6e 67 5f 66 75  ename_quoting_fu
4220: 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 3d 20  nction.       = 
4230: 28 43 50 46 75 6e 63 74 69 6f 6e 2a 29 20 54 63  (CPFunction*) Tc
4240: 6c 52 65 61 64 6c 69 6e 65 46 69 6c 65 6e 61 6d  lReadlineFilenam
4250: 65 51 75 6f 74 69 6e 67 46 75 6e 63 74 69 6f 6e  eQuotingFunction
4260: 3b 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 2f 2a  ;.     */.    /*
4270: 0a 20 20 20 20 20 20 20 72 6c 5f 66 69 6c 65 6e  .       rl_filen
4280: 61 6d 65 5f 71 75 6f 74 69 6e 67 5f 64 65 73 69  ame_quoting_desi
4290: 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 2a 2f  red = 1;.     */
42a0: 0a 0a 20 20 20 20 75 73 69 6e 67 5f 68 69 73 74  ..    using_hist
42b0: 6f 72 79 28 29 3b 0a 20 20 20 20 69 66 20 28 21  ory();.    if (!
42c0: 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67  tclrl_eof_string
42d0: 29 0a 09 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72  )..tclrl_eof_str
42e0: 69 6e 67 20 3d 20 73 74 72 64 75 70 28 22 70 75  ing = strdup("pu
42f0: 74 73 20 7b 7d 3b 20 65 78 69 74 22 29 3b 0a 0a  ts {}; exit");..
4300: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 74 72      /*.     * tr
4310: 79 20 74 6f 20 72 65 61 64 20 68 69 73 74 6f 72  y to read histor
4320: 79 66 69 6c 65 20 69 6e 20 68 6f 6d 65 0a 20 20  yfile in home.  
4330: 20 20 20 2a 20 64 69 72 65 63 74 6f 72 79 2e 20     * directory. 
4340: 49 66 20 74 68 69 73 20 66 61 69 6c 65 73 2c 20  If this failes, 
4350: 74 68 69 73 0a 20 20 20 20 20 2a 20 69 73 20 2a  this.     * is *
4360: 6e 6f 74 2a 20 61 6e 20 65 72 72 6f 72 2e 0a 20  not* an error.. 
4370: 20 20 20 20 2a 2f 0a 20 20 20 20 72 6c 5f 61 74      */.    rl_at
4380: 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c 65 74 69  tempted_completi
4390: 6f 6e 5f 66 75 6e 63 74 69 6f 6e 20 3d 20 28 43  on_function = (C
43a0: 50 50 46 75 6e 63 74 69 6f 6e 20 2a 29 20 54 63  PPFunction *) Tc
43b0: 6c 52 65 61 64 6c 69 6e 65 43 6f 6d 70 6c 65 74  lReadlineComplet
43c0: 69 6f 6e 3b 0a 20 20 20 20 69 66 20 28 72 65 61  ion;.    if (rea
43d0: 64 5f 68 69 73 74 6f 72 79 28 68 69 73 74 6f 72  d_history(histor
43e0: 79 66 69 6c 65 29 29 20 7b 0a 09 69 66 20 28 77  yfile)) {..if (w
43f0: 72 69 74 65 5f 68 69 73 74 6f 72 79 28 68 69 73  rite_history(his
4400: 74 6f 72 79 66 69 6c 65 29 29 20 7b 0a 09 20 20  toryfile)) {..  
4410: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
4420: 6c 74 20 28 69 6e 74 65 72 70 2c 20 22 77 61 72  lt (interp, "war
4430: 6e 69 6e 67 3a 20 60 22 2c 0a 09 09 68 69 73 74  ning: `",...hist
4440: 6f 72 79 66 69 6c 65 2c 20 22 27 20 69 73 20 6e  oryfile, "' is n
4450: 6f 74 20 77 72 69 74 61 62 6c 65 2e 22 2c 20 28  ot writable.", (
4460: 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 09 7d  char*) NULL);..}
4470: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
4480: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61  n TCL_OK;.}..sta
4490: 74 69 63 20 69 6e 74 0a 62 6c 61 6e 6b 5f 6c 69  tic int.blank_li
44a0: 6e 65 28 63 68 61 72 2a 20 73 74 72 29 0a 7b 0a  ne(char* str).{.
44b0: 20 20 20 20 63 68 61 72 2a 20 70 74 72 3b 0a 20      char* ptr;. 
44c0: 20 20 20 66 6f 72 20 28 70 74 72 20 3d 20 73 74     for (ptr = st
44d0: 72 3b 20 70 74 72 20 26 26 20 2a 70 74 72 3b 20  r; ptr && *ptr; 
44e0: 70 74 72 2b 2b 29 20 7b 0a 09 69 66 20 28 21 49  ptr++) {..if (!I
44f0: 53 57 48 49 54 45 28 2a 70 74 72 29 29 0a 09 20  SWHITE(*ptr)).. 
4500: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
4510: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b   }.    return 1;
4520: 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68 61 72 2a  .}..static char*
4530: 2a 0a 54 63 6c 52 65 61 64 6c 69 6e 65 43 6f 6d  *.TclReadlineCom
4540: 70 6c 65 74 69 6f 6e 28 63 68 61 72 2a 20 74 65  pletion(char* te
4550: 78 74 2c 20 69 6e 74 20 73 74 61 72 74 2c 20 69  xt, int start, i
4560: 6e 74 20 65 6e 64 29 0a 7b 0a 20 20 20 20 63 68  nt end).{.    ch
4570: 61 72 2a 2a 20 6d 61 74 63 68 65 73 20 3d 20 28  ar** matches = (
4580: 63 68 61 72 2a 2a 29 20 4e 55 4c 4c 3b 0a 20 20  char**) NULL;.  
4590: 20 20 69 6e 74 20 73 74 61 74 75 73 3b 0a 20 20    int status;.  
45a0: 20 20 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f    rl_completion_
45b0: 61 70 70 65 6e 64 5f 63 68 61 72 61 63 74 65 72  append_character
45c0: 20 3d 20 27 20 27 3b 20 2f 2a 20 72 65 73 65 74   = ' '; /* reset
45d0: 2c 20 6a 75 73 74 20 69 6e 20 63 61 73 65 20 2e  , just in case .
45e0: 2e 2e 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 74  .. */..    if (t
45f0: 65 78 74 20 26 26 20 28 27 21 27 20 3d 3d 20 74  ext && ('!' == t
4600: 65 78 74 5b 30 5d 0a 09 20 20 20 20 7c 7c 20 28  ext[0]..    || (
4610: 73 74 61 72 74 20 26 26 20 72 6c 5f 6c 69 6e 65  start && rl_line
4620: 5f 62 75 66 66 65 72 5b 73 74 61 72 74 20 2d 20  _buffer[start - 
4630: 31 5d 20 3d 3d 20 27 21 27 20 2f 2a 20 66 6f 72  1] == '!' /* for
4640: 20 27 24 27 20 2a 2f 29 29 29 20 7b 0a 09 63 68   '$' */))) {..ch
4650: 61 72 2a 20 65 78 70 61 6e 73 69 6f 6e 20 3d 20  ar* expansion = 
4660: 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 09 69  (char*) NULL;..i
4670: 6e 74 20 6f 6c 64 6c 65 6e 20 3d 20 73 74 72 6c  nt oldlen = strl
4680: 65 6e 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65  en(rl_line_buffe
4690: 72 29 3b 0a 09 73 74 61 74 75 73 20 3d 20 68 69  r);..status = hi
46a0: 73 74 6f 72 79 5f 65 78 70 61 6e 64 28 72 6c 5f  story_expand(rl_
46b0: 6c 69 6e 65 5f 62 75 66 66 65 72 2c 20 26 65 78  line_buffer, &ex
46c0: 70 61 6e 73 69 6f 6e 29 3b 0a 09 69 66 20 28 73  pansion);..if (s
46d0: 74 61 74 75 73 20 3e 3d 20 31 29 20 7b 0a 09 20  tatus >= 1) {.. 
46e0: 20 20 20 72 6c 5f 65 78 74 65 6e 64 5f 6c 69 6e     rl_extend_lin
46f0: 65 5f 62 75 66 66 65 72 28 73 74 72 6c 65 6e 28  e_buffer(strlen(
4700: 65 78 70 61 6e 73 69 6f 6e 29 20 2b 20 31 29 3b  expansion) + 1);
4710: 0a 09 20 20 20 20 73 74 72 63 70 79 28 72 6c 5f  ..    strcpy(rl_
4720: 6c 69 6e 65 5f 62 75 66 66 65 72 2c 20 65 78 70  line_buffer, exp
4730: 61 6e 73 69 6f 6e 29 3b 0a 09 20 20 20 20 72 6c  ansion);..    rl
4740: 5f 65 6e 64 20 3d 20 73 74 72 6c 65 6e 28 65 78  _end = strlen(ex
4750: 70 61 6e 73 69 6f 6e 29 3b 0a 09 20 20 20 20 72  pansion);..    r
4760: 6c 5f 70 6f 69 6e 74 20 2b 3d 20 73 74 72 6c 65  l_point += strle
4770: 6e 28 65 78 70 61 6e 73 69 6f 6e 29 20 2d 20 6f  n(expansion) - o
4780: 6c 64 6c 65 6e 3b 0a 09 20 20 20 20 46 52 45 45  ldlen;..    FREE
4790: 28 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 09 20 20  (expansion);..  
47a0: 20 20 2f 2a 0a 09 20 20 20 20 20 2a 20 54 4f 44    /*..     * TOD
47b0: 4f 3a 0a 09 20 20 20 20 20 2a 20 62 65 63 61 75  O:..     * becau
47c0: 73 65 20 77 65 20 72 65 74 75 72 6e 20 30 20 3d  se we return 0 =
47d0: 3d 20 6d 61 74 63 68 65 73 2c 0a 09 20 20 20 20  = matches,..    
47e0: 20 2a 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20   * the filename 
47f0: 63 6f 6d 70 6c 65 74 65 72 20 77 69 6c 6c 20 73  completer will s
4800: 74 69 6c 6c 20 62 65 65 70 2e 0a 09 20 20 20 20  till beep...    
4810: 20 72 6c 5f 69 6e 68 69 62 69 74 5f 63 6f 6d 70   rl_inhibit_comp
4820: 6c 65 74 69 6f 6e 20 3d 20 31 3b 0a 09 20 20 20  letion = 1;..   
4830: 20 20 2a 2f 0a 09 20 20 20 20 72 65 74 75 72 6e    */..    return
4840: 20 6d 61 74 63 68 65 73 3b 0a 09 7d 0a 09 46 52   matches;..}..FR
4850: 45 45 28 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 20  EE(expansion);. 
4860: 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 74 63     }..    if (tc
4870: 6c 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c  lrl_custom_compl
4880: 65 74 65 72 29 20 7b 0a 09 63 68 61 72 20 73 74  eter) {..char st
4890: 61 72 74 5f 73 5b 42 55 46 53 49 5a 5d 2c 20 65  art_s[BUFSIZ], e
48a0: 6e 64 5f 73 5b 42 55 46 53 49 5a 5d 3b 0a 09 54  nd_s[BUFSIZ];..T
48b0: 63 6c 5f 4f 62 6a 2a 20 6f 62 6a 3b 0a 09 54 63  cl_Obj* obj;..Tc
48c0: 6c 5f 4f 62 6a 2a 2a 20 6f 62 6a 76 3b 0a 09 69  l_Obj** objv;..i
48d0: 6e 74 20 6f 62 6a 63 3b 0a 09 69 6e 74 20 73 74  nt objc;..int st
48e0: 61 74 65 3b 0a 09 63 68 61 72 2a 20 71 75 6f 74  ate;..char* quot
48f0: 65 64 5f 74 65 78 74 20 3d 20 54 63 6c 52 65 61  ed_text = TclRea
4900: 64 6c 69 6e 65 51 75 6f 74 65 28 74 65 78 74 2c  dlineQuote(text,
4910: 20 22 24 5b 5d 7b 7d 5c 22 22 29 3b 0a 09 63 68   "$[]{}\"");..ch
4920: 61 72 2a 20 71 75 6f 74 65 64 5f 72 6c 5f 6c 69  ar* quoted_rl_li
4930: 6e 65 5f 62 75 66 66 65 72 20 3d 20 54 63 6c 52  ne_buffer = TclR
4940: 65 61 64 6c 69 6e 65 51 75 6f 74 65 28 72 6c 5f  eadlineQuote(rl_
4950: 6c 69 6e 65 5f 62 75 66 66 65 72 2c 20 22 24 5b  line_buffer, "$[
4960: 5d 7b 7d 5c 22 22 29 3b 0a 09 73 70 72 69 6e 74  ]{}\"");..sprint
4970: 66 28 73 74 61 72 74 5f 73 2c 20 22 25 64 22 2c  f(start_s, "%d",
4980: 20 73 74 61 72 74 29 3b 0a 09 73 70 72 69 6e 74   start);..sprint
4990: 66 28 65 6e 64 5f 73 2c 20 22 25 64 22 2c 20 65  f(end_s, "%d", e
49a0: 6e 64 29 3b 0a 09 54 63 6c 5f 52 65 73 65 74 52  nd);..Tcl_ResetR
49b0: 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65  esult(tclrl_inte
49c0: 72 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 72 65  rp); /* clear re
49d0: 73 75 6c 74 20 73 70 61 63 65 20 2a 2f 0a 09 73  sult space */..s
49e0: 74 61 74 65 20 3d 20 54 63 6c 5f 56 61 72 45 76  tate = Tcl_VarEv
49f0: 61 6c 28 74 63 6c 72 6c 5f 69 6e 74 65 72 70 2c  al(tclrl_interp,
4a00: 20 74 63 6c 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f   tclrl_custom_co
4a10: 6d 70 6c 65 74 65 72 2c 0a 09 20 20 20 20 22 20  mpleter,..    " 
4a20: 5c 22 22 2c 20 71 75 6f 74 65 64 5f 74 65 78 74  \"", quoted_text
4a30: 2c 20 22 5c 22 20 22 2c 20 73 74 61 72 74 5f 73  , "\" ", start_s
4a40: 2c 20 22 20 22 2c 20 65 6e 64 5f 73 2c 0a 09 20  , " ", end_s,.. 
4a50: 20 20 20 22 20 5c 22 22 2c 20 71 75 6f 74 65 64     " \"", quoted
4a60: 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 2c  _rl_line_buffer,
4a70: 20 22 5c 22 22 2c 20 28 63 68 61 72 2a 29 20 4e   "\"", (char*) N
4a80: 55 4c 4c 29 3b 0a 09 46 52 45 45 28 71 75 6f 74  ULL);..FREE(quot
4a90: 65 64 5f 74 65 78 74 29 3b 0a 09 46 52 45 45 28  ed_text);..FREE(
4aa0: 71 75 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62  quoted_rl_line_b
4ab0: 75 66 66 65 72 29 3b 0a 09 69 66 20 28 54 43 4c  uffer);..if (TCL
4ac0: 5f 4f 4b 20 21 3d 20 73 74 61 74 65 29 20 7b 0a  _OK != state) {.
4ad0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
4ae0: 65 73 75 6c 74 20 28 74 63 6c 72 6c 5f 69 6e 74  esult (tclrl_int
4af0: 65 72 70 2c 20 22 20 60 22 2c 20 74 63 6c 72 6c  erp, " `", tclrl
4b00: 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65  _custom_complete
4b10: 72 2c 0a 09 09 22 20 5c 22 22 2c 20 71 75 6f 74  r,..." \"", quot
4b20: 65 64 5f 74 65 78 74 2c 20 22 5c 22 20 22 2c 20  ed_text, "\" ", 
4b30: 73 74 61 72 74 5f 73 2c 20 22 20 22 2c 20 65 6e  start_s, " ", en
4b40: 64 5f 73 2c 0a 09 09 22 20 5c 22 22 2c 20 71 75  d_s,..." \"", qu
4b50: 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66  oted_rl_line_buf
4b60: 66 65 72 2c 20 22 5c 22 27 20 66 61 69 6c 65 64  fer, "\"' failed
4b70: 2e 22 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c  .", (char*) NULL
4b80: 29 3b 0a 09 20 20 20 20 54 63 6c 52 65 61 64 6c  );..    TclReadl
4b90: 69 6e 65 54 65 72 6d 69 6e 61 74 65 28 73 74 61  ineTerminate(sta
4ba0: 74 65 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e  te);..    return
4bb0: 20 6d 61 74 63 68 65 73 3b 0a 09 7d 0a 09 6f 62   matches;..}..ob
4bc0: 6a 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65  j = Tcl_GetObjRe
4bd0: 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65 72  sult(tclrl_inter
4be0: 70 29 3b 0a 09 73 74 61 74 75 73 20 3d 20 54 63  p);..status = Tc
4bf0: 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d  l_ListObjGetElem
4c00: 65 6e 74 73 28 74 63 6c 72 6c 5f 69 6e 74 65 72  ents(tclrl_inter
4c10: 70 2c 20 6f 62 6a 2c 20 26 6f 62 6a 63 2c 20 26  p, obj, &objc, &
4c20: 6f 62 6a 76 29 3b 0a 09 69 66 20 28 54 43 4c 5f  objv);..if (TCL_
4c30: 4f 4b 20 21 3d 20 73 74 61 74 75 73 29 0a 09 20  OK != status).. 
4c40: 20 20 20 72 65 74 75 72 6e 20 6d 61 74 63 68 65     return matche
4c50: 73 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 29 20 7b  s;...if (objc) {
4c60: 0a 09 20 20 20 20 69 6e 74 20 69 2c 20 6c 65 6e  ..    int i, len
4c70: 67 74 68 3b 0a 09 20 20 20 20 6d 61 74 63 68 65  gth;..    matche
4c80: 73 20 3d 20 28 63 68 61 72 2a 2a 29 20 4d 41 4c  s = (char**) MAL
4c90: 4c 4f 43 28 73 69 7a 65 6f 66 28 63 68 61 72 2a  LOC(sizeof(char*
4ca0: 29 20 2a 20 28 6f 62 6a 63 20 2b 20 31 29 29 3b  ) * (objc + 1));
4cb0: 0a 09 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30  ..    for (i = 0
4cc0: 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29  ; i < objc; i++)
4cd0: 20 7b 0a 09 09 6d 61 74 63 68 65 73 5b 69 5d 20   {...matches[i] 
4ce0: 3d 20 73 74 72 64 75 70 28 54 63 6c 5f 47 65 74  = strdup(Tcl_Get
4cf0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
4d00: 6a 76 5b 69 5d 2c 20 26 6c 65 6e 67 74 68 29 29  jv[i], &length))
4d10: 3b 0a 09 09 69 66 20 28 31 20 3d 3d 20 6f 62 6a  ;...if (1 == obj
4d20: 63 20 26 26 20 21 73 74 72 6c 65 6e 28 6d 61 74  c && !strlen(mat
4d30: 63 68 65 73 5b 69 5d 29 29 20 7b 0a 09 09 20 20  ches[i])) {...  
4d40: 20 20 46 52 45 45 28 6d 61 74 63 68 65 73 5b 69    FREE(matches[i
4d50: 5d 29 3b 0a 09 09 20 20 20 20 46 52 45 45 28 6d  ]);...    FREE(m
4d60: 61 74 63 68 65 73 29 3b 0a 09 09 20 20 20 20 54  atches);...    T
4d70: 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 74  cl_ResetResult(t
4d80: 63 6c 72 6c 5f 69 6e 74 65 72 70 29 3b 20 2f 2a  clrl_interp); /*
4d90: 20 63 6c 65 61 72 20 72 65 73 75 6c 74 20 73 70   clear result sp
4da0: 61 63 65 20 2a 2f 0a 09 09 20 20 20 20 72 65 74  ace */...    ret
4db0: 75 72 6e 20 28 63 68 61 72 2a 2a 29 20 4e 55 4c  urn (char**) NUL
4dc0: 4c 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09  L;...}..    }...
4dd0: 20 20 20 20 2f 2a 2a 0a 09 20 20 20 20 20 2a 20      /**..     * 
4de0: 74 68 69 73 20 69 73 20 61 20 73 70 65 63 69 61  this is a specia
4df0: 6c 20 6f 6e 65 3a 0a 09 20 20 20 20 20 2a 20 69  l one:..     * i
4e00: 66 20 74 68 65 20 73 63 72 69 70 74 20 72 65 74  f the script ret
4e10: 75 72 6e 73 20 65 78 61 63 74 6c 79 20 74 77 6f  urns exactly two
4e20: 20 61 72 67 75 6d 65 6e 74 73 0a 09 20 20 20 20   arguments..    
4e30: 20 2a 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e   * and the secon
4e40: 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68  d argument is th
4e50: 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2c 0a  e empty string,.
4e60: 09 20 20 20 20 20 2a 20 74 68 65 20 72 6c 5f 63  .     * the rl_c
4e70: 6f 6d 70 6c 65 74 69 6f 6e 5f 61 70 70 65 6e 64  ompletion_append
4e80: 5f 63 68 61 72 61 63 74 65 72 20 69 73 20 73 65  _character is se
4e90: 74 0a 09 20 20 20 20 20 2a 20 74 65 6d 70 6f 72  t..     * tempor
4ea0: 61 72 79 6c 79 20 74 6f 20 4e 55 4c 4c 2e 0a 09  aryly to NULL...
4eb0: 20 20 20 20 20 2a 2f 0a 09 20 20 20 20 69 66 20       */..    if 
4ec0: 28 32 20 3d 3d 20 6f 62 6a 63 20 26 26 20 21 73  (2 == objc && !s
4ed0: 74 72 6c 65 6e 28 6d 61 74 63 68 65 73 5b 31 5d  trlen(matches[1]
4ee0: 29 29 20 7b 0a 09 09 69 2d 2d 3b 0a 09 09 46 52  )) {...i--;...FR
4ef0: 45 45 28 6d 61 74 63 68 65 73 5b 31 5d 29 3b 0a  EE(matches[1]);.
4f00: 09 09 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f  ..rl_completion_
4f10: 61 70 70 65 6e 64 5f 63 68 61 72 61 63 74 65 72  append_character
4f20: 20 3d 20 27 5c 30 27 3b 0a 09 20 20 20 20 7d 0a   = '\0';..    }.
4f30: 0a 09 20 20 20 20 6d 61 74 63 68 65 73 5b 69 5d  ..    matches[i]
4f40: 20 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b   = (char*) NULL;
4f50: 20 2f 2a 20 74 65 72 6d 69 6e 61 74 65 20 2a 2f   /* terminate */
4f60: 0a 09 7d 0a 09 54 63 6c 5f 52 65 73 65 74 52 65  ..}..Tcl_ResetRe
4f70: 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65 72  sult(tclrl_inter
4f80: 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 72 65 73  p); /* clear res
4f90: 75 6c 74 20 73 70 61 63 65 20 2a 2f 0a 20 20 20  ult space */.   
4fa0: 20 7d 0a 0a 20 20 20 20 69 66 20 28 21 6d 61 74   }..    if (!mat
4fb0: 63 68 65 73 20 26 26 20 74 63 6c 72 6c 5f 75 73  ches && tclrl_us
4fc0: 65 5f 62 75 69 6c 74 69 6e 5f 63 6f 6d 70 6c 65  e_builtin_comple
4fd0: 74 65 72 29 20 7b 0a 09 6d 61 74 63 68 65 73 20  ter) {..matches 
4fe0: 3d 20 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f  = rl_completion_
4ff0: 6d 61 74 63 68 65 73 28 74 65 78 74 2c 20 28 72  matches(text, (r
5000: 6c 5f 63 6f 6d 70 65 6e 74 72 79 5f 66 75 6e 63  l_compentry_func
5010: 5f 74 20 2a 29 54 63 6c 52 65 61 64 6c 69 6e 65  _t *)TclReadline
5020: 30 67 65 6e 65 72 61 74 6f 72 29 3b 0a 20 20 20  0generator);.   
5030: 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 6d   }..    return m
5040: 61 74 63 68 65 73 3b 0a 7d 0a 0a 73 74 61 74 69  atches;.}..stati
5050: 63 20 63 68 61 72 2a 0a 54 63 6c 52 65 61 64 6c  c char*.TclReadl
5060: 69 6e 65 30 67 65 6e 65 72 61 74 6f 72 28 63 68  ine0generator(ch
5070: 61 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74  ar* text, int st
5080: 61 74 65 29 0a 7b 0a 20 20 20 20 72 65 74 75 72  ate).{.    retur
5090: 6e 20 54 63 6c 52 65 61 64 6c 69 6e 65 4b 6e 6f  n TclReadlineKno
50a0: 77 6e 43 6f 6d 6d 61 6e 64 73 28 74 65 78 74 2c  wnCommands(text,
50b0: 20 73 74 61 74 65 2c 20 5f 43 4d 44 5f 47 45 54   state, _CMD_GET
50c0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68 61  );.}..static cha
50d0: 72 2a 0a 54 63 6c 52 65 61 64 6c 69 6e 65 4b 6e  r*.TclReadlineKn
50e0: 6f 77 6e 43 6f 6d 6d 61 6e 64 73 28 63 68 61 72  ownCommands(char
50f0: 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74  * text, int stat
5100: 65 2c 20 69 6e 74 20 6d 6f 64 65 29 0a 7b 0a 20  e, int mode).{. 
5110: 20 20 20 73 74 61 74 69 63 20 69 6e 74 20 6c 65     static int le
5120: 6e 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6d  n;.    static cm
5130: 64 73 5f 74 20 2a 63 6d 64 73 20 3d 20 28 63 6d  ds_t *cmds = (cm
5140: 64 73 5f 74 20 2a 29 20 4e 55 4c 4c 2c 20 2a 6e  ds_t *) NULL, *n
5150: 65 77 3b 0a 20 20 20 20 63 68 61 72 2a 20 74 6d  ew;.    char* tm
5160: 70 3b 0a 20 20 20 20 63 68 61 72 2a 20 61 72 67  p;.    char* arg
5170: 73 5b 32 35 36 5d 3b 0a 20 20 20 20 69 6e 74 20  s[256];.    int 
5180: 69 2c 20 61 72 67 63 3b 0a 20 20 20 20 63 68 61  i, argc;.    cha
5190: 72 2a 2a 20 6e 61 6d 65 3b 0a 0a 20 20 20 20 63  r** name;..    c
51a0: 68 61 72 2a 20 6c 6f 63 61 6c 5f 6c 69 6e 65 20  har* local_line 
51b0: 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a  = (char*) NULL;.
51c0: 20 20 20 20 69 6e 74 20 73 75 62 3b 0a 0a 0a 20      int sub;... 
51d0: 20 20 20 73 77 69 74 63 68 20 28 6d 6f 64 65 29     switch (mode)
51e0: 20 7b 0a 0a 09 63 61 73 65 20 5f 43 4d 44 5f 53   {...case _CMD_S
51f0: 45 54 3a 0a 0a 09 20 20 20 20 6e 65 77 20 3d 20  ET:...    new = 
5200: 28 63 6d 64 73 5f 74 20 2a 29 20 4d 41 4c 4c 4f  (cmds_t *) MALLO
5210: 43 28 73 69 7a 65 6f 66 28 63 6d 64 73 5f 74 29  C(sizeof(cmds_t)
5220: 29 3b 0a 09 20 20 20 20 6e 65 77 2d 3e 6e 65 78  );..    new->nex
5230: 74 20 3d 20 28 63 6d 64 73 5f 74 20 2a 29 20 4e  t = (cmds_t *) N
5240: 55 4c 4c 3b 0a 0a 09 20 20 20 20 69 66 20 28 21  ULL;...    if (!
5250: 63 6d 64 73 29 20 7b 0a 09 09 63 6d 64 73 20 3d  cmds) {...cmds =
5260: 20 6e 65 77 3b 0a 09 09 63 6d 64 73 2d 3e 70 72   new;...cmds->pr
5270: 65 76 20 3d 20 6e 65 77 3b 0a 09 20 20 20 20 7d  ev = new;..    }
5280: 0a 09 20 20 20 20 65 6c 73 65 20 7b 0a 09 09 63  ..    else {...c
5290: 6d 64 73 2d 3e 70 72 65 76 2d 3e 6e 65 78 74 20  mds->prev->next 
52a0: 3d 20 6e 65 77 3b 0a 09 09 63 6d 64 73 2d 3e 70  = new;...cmds->p
52b0: 72 65 76 20 3d 20 6e 65 77 3b 0a 09 20 20 20 20  rev = new;..    
52c0: 7d 0a 0a 09 20 20 20 20 74 6d 70 20 3d 20 73 74  }...    tmp = st
52d0: 72 64 75 70 28 74 65 78 74 29 3b 0a 09 20 20 20  rdup(text);..   
52e0: 20 61 72 67 63 20 3d 20 54 63 6c 52 65 61 64 6c   argc = TclReadl
52f0: 69 6e 65 50 61 72 73 65 28 61 72 67 73 2c 20 73  ineParse(args, s
5300: 69 7a 65 6f 66 28 61 72 67 73 29 2c 20 74 6d 70  izeof(args), tmp
5310: 29 3b 0a 0a 09 20 20 20 20 6e 65 77 2d 3e 63 6d  );...    new->cm
5320: 64 20 3d 20 28 63 68 61 72 2a 2a 29 20 4d 41 4c  d = (char**) MAL
5330: 4c 4f 43 28 73 69 7a 65 6f 66 28 63 68 61 72 2a  LOC(sizeof(char*
5340: 29 20 2a 20 28 61 72 67 63 20 2b 20 31 29 29 3b  ) * (argc + 1));
5350: 0a 0a 09 20 20 20 20 66 6f 72 20 28 69 20 3d 20  ...    for (i = 
5360: 30 3b 20 69 20 3c 20 61 72 67 63 3b 20 69 2b 2b  0; i < argc; i++
5370: 29 0a 09 09 6e 65 77 2d 3e 63 6d 64 5b 69 5d 20  )...new->cmd[i] 
5380: 3d 20 61 72 67 73 5b 69 5d 3b 0a 0a 09 20 20 20  = args[i];...   
5390: 20 6e 65 77 2d 3e 63 6d 64 5b 61 72 67 63 5d 20   new->cmd[argc] 
53a0: 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a  = (char*) NULL;.
53b0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 28 63 68  ..    return (ch
53c0: 61 72 2a 29 20 4e 55 4c 4c 3b 0a 09 20 20 20 20  ar*) NULL;..    
53d0: 62 72 65 61 6b 3b 0a 0a 0a 09 63 61 73 65 20 5f  break;....case _
53e0: 43 4d 44 5f 47 45 54 3a 0a 0a 09 20 20 20 20 6c  CMD_GET:...    l
53f0: 6f 63 61 6c 5f 6c 69 6e 65 20 3d 20 73 74 72 64  ocal_line = strd
5400: 75 70 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65  up(rl_line_buffe
5410: 72 29 3b 0a 09 20 20 20 20 73 75 62 20 3d 20 54  r);..    sub = T
5420: 63 6c 52 65 61 64 6c 69 6e 65 50 61 72 73 65 28  clReadlineParse(
5430: 61 72 67 73 2c 20 73 69 7a 65 6f 66 28 61 72 67  args, sizeof(arg
5440: 73 29 2c 20 6c 6f 63 61 6c 5f 6c 69 6e 65 29 3b  s), local_line);
5450: 0a 0a 09 20 20 20 20 69 66 20 28 30 20 3d 3d 20  ...    if (0 == 
5460: 73 75 62 20 7c 7c 20 28 31 20 3d 3d 20 73 75 62  sub || (1 == sub
5470: 20 26 26 20 27 5c 30 27 20 21 3d 20 74 65 78 74   && '\0' != text
5480: 5b 30 5d 29 29 20 7b 0a 09 09 69 66 20 28 21 73  [0])) {...if (!s
5490: 74 61 74 65 29 20 7b 0a 09 09 20 20 20 20 6e 65  tate) {...    ne
54a0: 77 20 3d 20 63 6d 64 73 3b 0a 09 09 20 20 20 20  w = cmds;...    
54b0: 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 74 65 78  len = strlen(tex
54c0: 74 29 3b 0a 09 09 7d 0a 09 09 77 68 69 6c 65 20  t);...}...while 
54d0: 28 6e 65 77 20 26 26 20 28 6e 61 6d 65 20 3d 20  (new && (name = 
54e0: 6e 65 77 2d 3e 63 6d 64 29 29 20 7b 0a 09 09 20  new->cmd)) {... 
54f0: 20 20 20 6e 65 77 20 3d 20 6e 65 77 2d 3e 6e 65     new = new->ne
5500: 78 74 3b 0a 09 09 20 20 20 20 69 66 20 28 21 73  xt;...    if (!s
5510: 74 72 6e 63 6d 70 28 6e 61 6d 65 5b 30 5d 2c 20  trncmp(name[0], 
5520: 74 65 78 74 2c 20 6c 65 6e 29 29 0a 09 09 09 72  text, len))....r
5530: 65 74 75 72 6e 20 73 74 72 64 75 70 28 6e 61 6d  eturn strdup(nam
5540: 65 5b 30 5d 29 3b 0a 09 09 7d 0a 09 09 72 65 74  e[0]);...}...ret
5550: 75 72 6e 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c  urn (char*) NULL
5560: 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ;..    } else {.
5570: 0a 09 09 69 66 20 28 21 73 74 61 74 65 29 20 7b  ...if (!state) {
5580: 0a 0a 09 09 20 20 20 20 6e 65 77 20 3d 20 63 6d  ....    new = cm
5590: 64 73 3b 0a 09 09 20 20 20 20 6c 65 6e 20 3d 20  ds;...    len = 
55a0: 73 74 72 6c 65 6e 28 74 65 78 74 29 3b 0a 0a 09  strlen(text);...
55b0: 09 20 20 20 20 77 68 69 6c 65 20 28 6e 65 77 20  .    while (new 
55c0: 26 26 20 28 6e 61 6d 65 20 3d 20 6e 65 77 2d 3e  && (name = new->
55d0: 63 6d 64 29 29 20 7b 0a 09 09 09 69 66 20 28 21  cmd)) {....if (!
55e0: 73 74 72 63 6d 70 28 6e 61 6d 65 5b 30 5d 2c 20  strcmp(name[0], 
55f0: 61 72 67 73 5b 30 5d 29 29 0a 09 09 09 20 20 20  args[0]))....   
5600: 20 62 72 65 61 6b 3b 0a 09 09 09 6e 65 77 20 3d   break;....new =
5610: 20 6e 65 77 2d 3e 6e 65 78 74 3b 0a 09 09 20 20   new->next;...  
5620: 20 20 7d 0a 0a 09 09 20 20 20 20 69 66 20 28 21    }....    if (!
5630: 6e 65 77 29 0a 09 09 09 72 65 74 75 72 6e 20 28  new)....return (
5640: 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 0a 09 09  char*) NULL;....
5650: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20      for (i = 0; 
5660: 6e 65 77 2d 3e 63 6d 64 5b 69 5d 3b 20 69 2b 2b  new->cmd[i]; i++
5670: 29 20 2f 2a 20 45 4d 50 54 59 20 2a 2f 3b 0a 0a  ) /* EMPTY */;..
5680: 09 09 20 20 20 20 69 66 20 28 73 75 62 20 3c 20  ..    if (sub < 
5690: 69 20 26 26 20 21 73 74 72 6e 63 6d 70 28 6e 65  i && !strncmp(ne
56a0: 77 2d 3e 63 6d 64 5b 73 75 62 5d 2c 20 74 65 78  w->cmd[sub], tex
56b0: 74 2c 20 6c 65 6e 29 29 0a 09 09 09 72 65 74 75  t, len))....retu
56c0: 72 6e 20 73 74 72 64 75 70 28 6e 65 77 2d 3e 63  rn strdup(new->c
56d0: 6d 64 5b 73 75 62 5d 29 3b 0a 09 09 20 20 20 20  md[sub]);...    
56e0: 65 6c 73 65 0a 09 09 09 72 65 74 75 72 6e 20 28  else....return (
56f0: 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 0a 09 09  char*) NULL;....
5700: 7d 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 72  }...else...    r
5710: 65 74 75 72 6e 20 28 63 68 61 72 2a 29 20 4e 55  eturn (char*) NU
5720: 4c 4c 3b 0a 0a 09 09 2f 2a 20 4e 4f 54 52 45 41  LL;..../* NOTREA
5730: 43 48 45 44 20 2a 2f 0a 09 09 62 72 65 61 6b 3b  CHED */...break;
5740: 0a 09 20 20 20 20 7d 0a 0a 0a 09 64 65 66 61 75  ..    }....defau
5750: 6c 74 3a 0a 09 20 20 20 20 72 65 74 75 72 6e 20  lt:..    return 
5760: 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 09 20  (char*) NULL;.. 
5770: 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 7d     break;..    }
5780: 0a 20 20 20 20 2f 2a 20 4e 4f 54 52 45 41 43 48  .    /* NOTREACH
5790: 45 44 20 2a 2f 0a 7d 0a 0a 73 74 61 74 69 63 20  ED */.}..static 
57a0: 69 6e 74 0a 54 63 6c 52 65 61 64 6c 69 6e 65 50  int.TclReadlineP
57b0: 61 72 73 65 28 63 68 61 72 2a 2a 20 61 72 67 73  arse(char** args
57c0: 2c 20 69 6e 74 20 6d 61 78 61 72 67 73 2c 20 63  , int maxargs, c
57d0: 68 61 72 2a 20 62 75 66 29 0a 7b 0a 20 20 20 20  har* buf).{.    
57e0: 69 6e 74 20 6e 72 20 3d 20 30 3b 0a 0a 20 20 20  int nr = 0;..   
57f0: 20 77 68 69 6c 65 20 28 2a 62 75 66 20 21 3d 20   while (*buf != 
5800: 27 5c 30 27 20 26 26 20 6e 72 20 3c 20 6d 61 78  '\0' && nr < max
5810: 61 72 67 73 29 20 7b 0a 09 2f 2a 0a 09 20 2a 20  args) {../*.. * 
5820: 53 74 72 69 70 20 77 68 69 74 65 73 70 61 63 65  Strip whitespace
5830: 2e 20 20 55 73 65 20 6e 75 6c 6c 73 2c 20 73 6f  .  Use nulls, so
5840: 0a 09 20 2a 20 74 68 61 74 20 74 68 65 20 70 72  .. * that the pr
5850: 65 76 69 6f 75 73 20 61 72 67 75 6d 65 6e 74 20  evious argument 
5860: 69 73 20 74 65 72 6d 69 6e 61 74 65 64 0a 09 20  is terminated.. 
5870: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
5880: 0a 09 20 2a 2f 0a 09 77 68 69 6c 65 20 28 49 53  .. */..while (IS
5890: 57 48 49 54 45 28 2a 62 75 66 29 29 0a 09 20 20  WHITE(*buf))..  
58a0: 20 20 2a 62 75 66 2b 2b 20 3d 20 27 5c 30 27 3b    *buf++ = '\0';
58b0: 0a 0a 09 69 66 20 28 21 28 2a 62 75 66 29 29 20  ...if (!(*buf)) 
58c0: 2f 2a 20 64 6f 6e 27 74 20 63 6f 75 6e 74 20 74  /* don't count t
58d0: 68 65 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 4e  he terminating N
58e0: 55 4c 4c 20 2a 2f 0a 09 20 20 20 20 62 72 65 61  ULL */..    brea
58f0: 6b 3b 0a 0a 09 2a 61 72 67 73 2b 2b 20 3d 20 62  k;...*args++ = b
5900: 75 66 3b 0a 09 6e 72 2b 2b 3b 0a 0a 09 77 68 69  uf;..nr++;...whi
5910: 6c 65 20 28 28 27 5c 30 27 20 21 3d 20 2a 62 75  le (('\0' != *bu
5920: 66 29 20 26 26 20 21 49 53 57 48 49 54 45 28 2a  f) && !ISWHITE(*
5930: 62 75 66 29 29 0a 09 20 20 20 20 62 75 66 2b 2b  buf))..    buf++
5940: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2a 61 72  ;.    }..    *ar
5950: 67 73 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20 72  gs = '\0';.    r
5960: 65 74 75 72 6e 20 6e 72 3b 0a 7d 0a              eturn nr;.}.