Hex Artifact Content
Not logged in

Artifact 8e0b5f7ca4743c3d4e34d71aab1a69bc00d6e42b:


0000: 20 2f 2a 20 3d 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 0a 20 20 20 20 46 49 4c 45 3a  ======.    FILE:
0050: 20 74 63 6c 72 65 61 64 6c 69 6e 65 2e 63 0a 20   tclreadline.c. 
0060: 20 20 20 24 49 64 24 0a 20 20 20 20 2d 2d 2d 0a     $Id$.    ---.
0070: 20 20 20 20 74 63 6c 72 65 61 64 6c 69 6e 65 20      tclreadline 
0080: 2d 2d 20 67 6e 75 20 72 65 61 64 6c 69 6e 65 20  -- gnu readline 
0090: 66 6f 72 20 74 63 6c 0a 20 20 20 20 68 74 74 70  for tcl.    http
00a0: 3a 2f 2f 77 77 77 2e 7a 65 6c 6c 6e 65 72 2e 6f  ://www.zellner.o
00b0: 72 67 2f 74 63 6c 72 65 61 64 6c 69 6e 65 2f 0a  rg/tclreadline/.
00c0: 20 20 20 20 43 6f 70 79 72 69 67 68 74 20 28 63      Copyright (c
00d0: 29 20 31 39 39 38 20 2d 20 32 30 31 34 2c 20 4a  ) 1998 - 2014, J
00e0: 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65 72 20  ohannes Zellner 
00f0: 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c 6c 6e 65  <johannes@zellne
0100: 72 2e 6f 72 67 3e 0a 20 20 20 20 54 68 69 73 20  r.org>.    This 
0110: 73 6f 66 74 77 61 72 65 20 69 73 20 63 6f 70 79  software is copy
0120: 72 69 67 68 74 20 75 6e 64 65 72 20 74 68 65 20  right under the 
0130: 42 53 44 20 6c 69 63 65 6e 73 65 2e 0a 20 20 20  BSD license..   
0140: 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   ===============
0150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0180: 3d 3d 3d 20 2a 2f 0a 0a 23 69 66 64 65 66 20 48  === */..#ifdef H
0190: 41 56 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 20 20  AVE_CONFIG_H.#  
01a0: 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e  include "config.
01b0: 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  h".#endif..#incl
01c0: 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 69 6e 63  ude <tcl.h>.#inc
01d0: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
01e0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
01f0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
0200: 69 6e 67 2e 68 3e 0a 0a 23 69 66 20 64 65 66 69  ing.h>..#if defi
0210: 6e 65 64 20 28 52 45 41 44 4c 49 4e 45 5f 4c 49  ned (READLINE_LI
0220: 42 52 41 52 59 29 0a 23 20 20 69 6e 63 6c 75 64  BRARY).#  includ
0230: 65 20 3c 72 65 61 64 6c 69 6e 65 2e 68 3e 0a 23  e <readline.h>.#
0240: 20 20 69 6e 63 6c 75 64 65 20 3c 68 69 73 74 6f    include <histo
0250: 72 79 2e 68 3e 0a 23 65 6c 73 65 0a 23 20 20 69  ry.h>.#else.#  i
0260: 6e 63 6c 75 64 65 20 3c 72 65 61 64 6c 69 6e 65  nclude <readline
0270: 2f 72 65 61 64 6c 69 6e 65 2e 68 3e 0a 23 20 20  /readline.h>.#  
0280: 69 6e 63 6c 75 64 65 20 3c 72 65 61 64 6c 69 6e  include <readlin
0290: 65 2f 68 69 73 74 6f 72 79 2e 68 3e 0a 23 65 6e  e/history.h>.#en
02a0: 64 69 66 0a 0a 0a 2f 2a 0a 20 2a 20 74 68 69 73  dif.../*. * this
02b0: 20 70 72 6f 74 6f 74 79 70 65 20 6d 61 79 20 62   prototype may b
02c0: 65 20 6d 69 73 73 69 6e 67 0a 20 2a 20 69 6e 20  e missing. * in 
02d0: 72 65 61 64 6c 69 6e 65 2e 68 0a 20 2a 2f 0a 76  readline.h. */.v
02e0: 6f 69 64 20 72 6c 5f 65 78 74 65 6e 64 5f 6c 69  oid rl_extend_li
02f0: 6e 65 5f 62 75 66 66 65 72 28 69 6e 74 20 6c 65  ne_buffer(int le
0300: 6e 29 3b 0a 0a 23 69 66 64 65 66 20 45 58 45 43  n);..#ifdef EXEC
0310: 55 54 49 4e 47 5f 4d 41 43 52 4f 5f 48 41 43 4b  UTING_MACRO_HACK
0320: 0a 2f 2a 2a 0a 20 2a 20 74 68 69 73 20 70 72 6f  ./**. * this pro
0330: 74 6f 74 79 70 65 20 6d 61 79 20 62 65 20 70 72  totype may be pr
0340: 69 76 61 74 65 20 69 6e 20 72 65 61 64 6c 69 6e  ivate in readlin
0350: 65 27 73 20 66 69 6c 65 20 60 6d 61 63 72 6f 2e  e's file `macro.
0360: 63 27 2e 0a 20 2a 20 57 65 20 6e 65 65 64 20 69  c'.. * We need i
0370: 74 20 68 65 72 65 20 74 6f 20 64 65 63 69 64 65  t here to decide
0380: 2c 20 69 66 20 77 65 20 73 68 6f 75 6c 64 20 72  , if we should r
0390: 65 61 64 20 6d 6f 72 65 0a 20 2a 20 63 68 61 72  ead more. * char
03a0: 61 63 74 65 72 73 20 66 72 6f 6d 20 61 20 6d 61  acters from a ma
03b0: 63 72 6f 2e 20 44 69 72 74 79 2c 20 62 75 74 20  cro. Dirty, but 
03c0: 69 74 20 73 68 6f 75 6c 64 20 77 6f 72 6b 2e 0a  it should work..
03d0: 20 2a 2f 0a 65 78 74 65 72 6e 20 63 68 61 72 2a   */.extern char*
03e0: 20 45 58 45 43 55 54 49 4e 47 5f 4d 41 43 52 4f   EXECUTING_MACRO
03f0: 5f 4e 41 4d 45 3b 0a 23 65 6e 64 69 66 0a 0a 23  _NAME;.#endif..#
0400: 69 6e 63 6c 75 64 65 20 22 74 63 6c 72 65 61 64  include "tclread
0410: 6c 69 6e 65 2e 68 22 0a 73 74 61 74 69 63 20 63  line.h".static c
0420: 6f 6e 73 74 20 63 68 61 72 2a 20 74 63 6c 72 6c  onst char* tclrl
0430: 5f 6c 69 62 72 61 72 79 20 3d 20 54 43 4c 52 4c  _library = TCLRL
0440: 5f 4c 49 42 52 41 52 59 3b 0a 73 74 61 74 69 63  _LIBRARY;.static
0450: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 74 63 6c   const char* tcl
0460: 72 6c 5f 76 65 72 73 69 6f 6e 5f 73 74 72 20 3d  rl_version_str =
0470: 20 54 43 4c 52 4c 5f 56 45 52 53 49 4f 4e 5f 53   TCLRL_VERSION_S
0480: 54 52 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  TR;.static const
0490: 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f 70 61 74   char* tclrl_pat
04a0: 63 68 6c 65 76 65 6c 5f 73 74 72 20 3d 20 54 43  chlevel_str = TC
04b0: 4c 52 4c 5f 50 41 54 43 48 4c 45 56 45 4c 5f 53  LRL_PATCHLEVEL_S
04c0: 54 52 3b 0a 0a 23 64 65 66 69 6e 65 20 4d 41 4c  TR;..#define MAL
04d0: 4c 4f 43 28 73 69 7a 65 29 20 6d 61 6c 6c 6f 63  LOC(size) malloc
04e0: 28 73 69 7a 65 29 0a 23 64 65 66 69 6e 65 20 46  (size).#define F
04f0: 52 45 45 28 70 74 72 29 20 66 72 65 65 28 70 74  REE(ptr) free(pt
0500: 72 29 3b 20 70 74 72 20 3d 20 4e 55 4c 4c 0a 0a  r); ptr = NULL..
0510: 65 6e 75 6d 20 7b 0a 20 20 20 20 5f 43 4d 44 5f  enum {.    _CMD_
0520: 53 45 54 20 20 20 20 20 3d 20 28 31 20 3c 3c 20  SET     = (1 << 
0530: 30 29 2c 0a 20 20 20 20 5f 43 4d 44 5f 47 45 54  0),.    _CMD_GET
0540: 20 20 20 20 20 3d 20 28 31 20 3c 3c 20 31 29 0a       = (1 << 1).
0550: 7d 3b 0a 0a 0a 74 79 70 65 64 65 66 20 73 74 72  };...typedef str
0560: 75 63 74 20 63 6d 64 73 5f 74 20 7b 0a 20 20 20  uct cmds_t {.   
0570: 20 73 74 72 75 63 74 20 63 6d 64 73 5f 74 2a 20   struct cmds_t* 
0580: 70 72 65 76 3b 0a 20 20 20 20 63 68 61 72 2a 2a  prev;.    char**
0590: 20 20 20 20 20 20 20 20 20 63 6d 64 3b 0a 20 20           cmd;.  
05a0: 20 20 73 74 72 75 63 74 20 63 6d 64 73 5f 74 2a    struct cmds_t*
05b0: 20 6e 65 78 74 3b 0a 7d 20 63 6d 64 73 5f 74 3b   next;.} cmds_t;
05c0: 0a 0a 0a 23 64 65 66 69 6e 65 20 49 53 57 48 49  ...#define ISWHI
05d0: 54 45 28 63 29 20 28 28 27 20 27 20 3d 3d 20 63  TE(c) ((' ' == c
05e0: 29 20 7c 7c 20 28 27 5c 74 27 20 3d 3d 20 63 29  ) || ('\t' == c)
05f0: 20 7c 7c 20 28 27 5c 6e 27 20 3d 3d 20 63 29 29   || ('\n' == c))
0600: 0a 0a 2f 2a 20 66 6f 72 77 61 72 64 20 64 65 63  ../* forward dec
0610: 6c 61 72 61 74 69 6f 6e 73 2e 20 2a 2f 0a 73 74  larations. */.st
0620: 61 74 69 63 20 63 68 61 72 2a 20 73 74 72 69 70  atic char* strip
0630: 6c 65 66 74 28 63 68 61 72 2a 20 69 6e 29 3b 0a  left(char* in);.
0640: 73 74 61 74 69 63 20 63 68 61 72 2a 20 73 74 72  static char* str
0650: 69 70 72 69 67 68 74 28 63 68 61 72 2a 20 69 6e  ipright(char* in
0660: 29 3b 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20  );.static char* 
0670: 73 74 72 69 70 77 68 69 74 65 28 63 68 61 72 2a  stripwhite(char*
0680: 20 69 6e 29 3b 0a 73 74 61 74 69 63 20 69 6e 74   in);.static int
0690: 20 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65   TclReadlineLine
06a0: 43 6f 6d 70 6c 65 74 65 28 76 6f 69 64 29 3b 0a  Complete(void);.
06b0: 73 74 61 74 69 63 20 76 6f 69 64 20 54 63 6c 52  static void TclR
06c0: 65 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61 74 65  eadlineTerminate
06d0: 28 69 6e 74 20 73 74 61 74 65 29 3b 0a 73 74 61  (int state);.sta
06e0: 74 69 63 20 63 68 61 72 2a 20 54 63 6c 52 65 61  tic char* TclRea
06f0: 64 6c 69 6e 65 51 75 6f 74 65 28 63 68 61 72 2a  dlineQuote(char*
0700: 20 74 65 78 74 2c 20 63 68 61 72 2a 20 71 75 6f   text, char* quo
0710: 74 65 63 68 61 72 73 29 3b 0a 73 74 61 74 69 63  techars);.static
0720: 20 69 6e 74 20 54 63 6c 52 65 61 64 6c 69 6e 65   int TclReadline
0730: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63  Cmd(ClientData c
0740: 6c 69 65 6e 74 44 61 74 61 2c 20 54 63 6c 5f 49  lientData, Tcl_I
0750: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
0760: 6e 74 20 6f 62 6a 63 2c 0a 20 20 20 20 20 20 20  nt objc,.       
0770: 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
0780: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
0790: 5d 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ]);.static void 
07a0: 54 63 6c 52 65 61 64 6c 69 6e 65 52 65 61 64 48  TclReadlineReadH
07b0: 61 6e 64 6c 65 72 28 43 6c 69 65 6e 74 44 61 74  andler(ClientDat
07c0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e  a clientData, in
07d0: 74 20 6d 61 73 6b 29 3b 0a 73 74 61 74 69 63 20  t mask);.static 
07e0: 76 6f 69 64 20 54 63 6c 52 65 61 64 6c 69 6e 65  void TclReadline
07f0: 4c 69 6e 65 43 6f 6d 70 6c 65 74 65 48 61 6e 64  LineCompleteHand
0800: 6c 65 72 28 63 68 61 72 2a 20 70 74 72 29 3b 0a  ler(char* ptr);.
0810: 73 74 61 74 69 63 20 69 6e 74 20 54 63 6c 52 65  static int TclRe
0820: 61 64 6c 69 6e 65 49 6e 69 74 69 61 6c 69 7a 65  adlineInitialize
0830: 28 54 63 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74  (Tcl_Interp* int
0840: 65 72 70 2c 20 63 68 61 72 2a 20 68 69 73 74 6f  erp, char* histo
0850: 72 79 66 69 6c 65 29 3b 0a 73 74 61 74 69 63 20  ryfile);.static 
0860: 69 6e 74 20 62 6c 61 6e 6b 5f 6c 69 6e 65 28 63  int blank_line(c
0870: 68 61 72 2a 20 73 74 72 29 3b 0a 73 74 61 74 69  har* str);.stati
0880: 63 20 63 68 61 72 2a 2a 20 54 63 6c 52 65 61 64  c char** TclRead
0890: 6c 69 6e 65 43 6f 6d 70 6c 65 74 69 6f 6e 28 63  lineCompletion(c
08a0: 68 61 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73  har* text, int s
08b0: 74 61 72 74 2c 20 69 6e 74 20 65 6e 64 29 3b 0a  tart, int end);.
08c0: 73 74 61 74 69 63 20 63 68 61 72 2a 20 54 63 6c  static char* Tcl
08d0: 52 65 61 64 6c 69 6e 65 30 67 65 6e 65 72 61 74  Readline0generat
08e0: 6f 72 28 63 68 61 72 2a 20 74 65 78 74 2c 20 69  or(char* text, i
08f0: 6e 74 20 73 74 61 74 65 29 3b 0a 73 74 61 74 69  nt state);.stati
0900: 63 20 63 68 61 72 2a 20 54 63 6c 52 65 61 64 6c  c char* TclReadl
0910: 69 6e 65 4b 6e 6f 77 6e 43 6f 6d 6d 61 6e 64 73  ineKnownCommands
0920: 28 63 68 61 72 2a 20 74 65 78 74 2c 20 69 6e 74  (char* text, int
0930: 20 73 74 61 74 65 2c 20 69 6e 74 20 6d 6f 64 65   state, int mode
0940: 29 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 54 63  );.static int Tc
0950: 6c 52 65 61 64 6c 69 6e 65 50 61 72 73 65 28 63  lReadlineParse(c
0960: 68 61 72 2a 2a 20 61 72 67 73 2c 20 69 6e 74 20  har** args, int 
0970: 6d 61 78 61 72 67 73 2c 20 63 68 61 72 2a 20 62  maxargs, char* b
0980: 75 66 29 3b 0a 0a 0a 65 6e 75 6d 20 7b 0a 20 20  uf);...enum {.  
0990: 20 20 4c 49 4e 45 5f 50 45 4e 44 49 4e 47 20 3d    LINE_PENDING =
09a0: 20 2d 31 2c 0a 20 20 20 20 4c 49 4e 45 5f 45 4f   -1,.    LINE_EO
09b0: 46 20 3d 20 28 31 20 3c 3c 20 38 29 2c 0a 20 20  F = (1 << 8),.  
09c0: 20 20 4c 49 4e 45 5f 43 4f 4d 50 4c 45 54 45 20    LINE_COMPLETE 
09d0: 3d 20 28 31 20 3c 3c 20 39 29 0a 7d 3b 0a 0a 2f  = (1 << 9).};../
09e0: 2a 2a 0a 20 2a 20 67 6c 6f 62 61 6c 20 76 61 72  **. * global var
09f0: 69 61 62 6c 65 73 0a 20 2a 2f 0a 73 74 61 74 69  iables. */.stati
0a00: 63 20 69 6e 74 20 74 63 6c 72 6c 5f 73 74 61 74  c int tclrl_stat
0a10: 65 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 73 74 61 74  e = TCL_OK;.stat
0a20: 69 63 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f 65  ic char* tclrl_e
0a30: 6f 66 5f 73 74 72 69 6e 67 20 3d 20 28 63 68 61  of_string = (cha
0a40: 72 2a 29 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 63  r*) NULL;.static
0a50: 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f 63 75 73   char* tclrl_cus
0a60: 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 20 3d 20  tom_completer = 
0a70: 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 73 74  (char*) NULL;.st
0a80: 61 74 69 63 20 63 68 61 72 2a 20 74 63 6c 72 6c  atic char* tclrl
0a90: 5f 6c 61 73 74 5f 6c 69 6e 65 20 3d 20 28 63 68  _last_line = (ch
0aa0: 61 72 2a 29 20 4e 55 4c 4c 3b 0a 73 74 61 74 69  ar*) NULL;.stati
0ab0: 63 20 69 6e 74 20 74 63 6c 72 6c 5f 75 73 65 5f  c int tclrl_use_
0ac0: 62 75 69 6c 74 69 6e 5f 63 6f 6d 70 6c 65 74 65  builtin_complete
0ad0: 72 20 3d 20 31 3b 0a 73 74 61 74 69 63 20 69 6e  r = 1;.static in
0ae0: 74 20 74 63 6c 72 6c 5f 68 69 73 74 6f 72 79 5f  t tclrl_history_
0af0: 6c 65 6e 67 74 68 20 3d 20 2d 31 3b 0a 54 63 6c  length = -1;.Tcl
0b00: 5f 49 6e 74 65 72 70 2a 20 74 63 6c 72 6c 5f 69  _Interp* tclrl_i
0b10: 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
0b20: 65 72 70 2a 29 20 4e 55 4c 4c 3b 0a 0a 73 74 61  erp*) NULL;..sta
0b30: 74 69 63 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f  tic char* tclrl_
0b40: 6c 69 63 65 6e 73 65 20 3d 0a 22 20 20 20 43 6f  license =."   Co
0b50: 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39 38  pyright (c) 1998
0b60: 20 2d 20 32 30 30 30 2c 20 4a 6f 68 61 6e 6e 65   - 2000, Johanne
0b70: 73 20 5a 65 6c 6c 6e 65 72 20 3c 6a 6f 68 61 6e  s Zellner <johan
0b80: 6e 65 73 40 7a 65 6c 6c 6e 65 72 2e 6f 72 67 3e  nes@zellner.org>
0b90: 5c 6e 22 0a 22 20 20 20 41 6c 6c 20 72 69 67 68  \n"."   All righ
0ba0: 74 73 20 72 65 73 65 72 76 65 64 2e 5c 6e 22 0a  ts reserved.\n".
0bb0: 22 20 20 20 5c 6e 22 0a 22 20 20 20 52 65 64 69  "   \n"."   Redi
0bc0: 73 74 72 69 62 75 74 69 6f 6e 20 61 6e 64 20 75  stribution and u
0bd0: 73 65 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64  se in source and
0be0: 20 62 69 6e 61 72 79 20 66 6f 72 6d 73 2c 20 77   binary forms, w
0bf0: 69 74 68 20 6f 72 20 77 69 74 68 6f 75 74 5c 6e  ith or without\n
0c00: 22 0a 22 20 20 20 6d 6f 64 69 66 69 63 61 74 69  "."   modificati
0c10: 6f 6e 2c 20 61 72 65 20 70 65 72 6d 69 74 74 65  on, are permitte
0c20: 64 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  d provided that 
0c30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
0c40: 6e 64 69 74 69 6f 6e 73 5c 6e 22 0a 22 20 20 20  nditions\n"."   
0c50: 61 72 65 20 6d 65 74 3a 5c 6e 22 0a 22 20 20 20  are met:\n"."   
0c60: 5c 6e 22 0a 22 20 20 20 20 20 2a 20 52 65 64 69  \n"."     * Redi
0c70: 73 74 72 69 62 75 74 69 6f 6e 73 20 6f 66 20 73  stributions of s
0c80: 6f 75 72 63 65 20 63 6f 64 65 20 6d 75 73 74 20  ource code must 
0c90: 72 65 74 61 69 6e 20 74 68 65 20 61 62 6f 76 65  retain the above
0ca0: 20 63 6f 70 79 72 69 67 68 74 5c 6e 22 0a 22 20   copyright\n"." 
0cb0: 20 20 20 20 20 20 6e 6f 74 69 63 65 2c 20 74 68        notice, th
0cc0: 69 73 20 6c 69 73 74 20 6f 66 20 63 6f 6e 64 69  is list of condi
0cd0: 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 66 6f  tions and the fo
0ce0: 6c 6c 6f 77 69 6e 67 20 64 69 73 63 6c 61 69 6d  llowing disclaim
0cf0: 65 72 2e 5c 6e 22 0a 22 20 20 20 20 20 2a 20 52  er.\n"."     * R
0d00: 65 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69  edistributions i
0d10: 6e 20 62 69 6e 61 72 79 20 66 6f 72 6d 20 6d 75  n binary form mu
0d20: 73 74 20 72 65 70 72 6f 64 75 63 65 20 74 68 65  st reproduce the
0d30: 20 61 62 6f 76 65 20 63 6f 70 79 72 69 67 68 74   above copyright
0d40: 5c 6e 22 0a 22 20 20 20 20 20 20 20 6e 6f 74 69  \n"."       noti
0d50: 63 65 2c 20 74 68 69 73 20 6c 69 73 74 20 6f 66  ce, this list of
0d60: 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64 20   conditions and 
0d70: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
0d80: 73 63 6c 61 69 6d 65 72 20 69 6e 20 74 68 65 5c  sclaimer in the\
0d90: 6e 22 0a 22 20 20 20 20 20 20 20 64 6f 63 75 6d  n"."       docum
0da0: 65 6e 74 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20  entation and/or 
0db0: 6f 74 68 65 72 20 6d 61 74 65 72 69 61 6c 73 20  other materials 
0dc0: 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 74 68  provided with th
0dd0: 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 2e 5c  e distribution.\
0de0: 6e 22 0a 22 20 20 20 20 20 2a 20 4e 65 69 74 68  n"."     * Neith
0df0: 65 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 4a  er the name of J
0e00: 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65 72 20  ohannes Zellner 
0e10: 6e 6f 72 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  nor the names of
0e20: 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 5c 6e 22   contributors\n"
0e30: 0a 22 20 20 20 20 20 20 20 74 6f 20 74 68 69 73  ."       to this
0e40: 20 73 6f 66 74 77 61 72 65 20 6d 61 79 20 62 65   software may be
0e50: 20 75 73 65 64 20 74 6f 20 65 6e 64 6f 72 73 65   used to endorse
0e60: 20 6f 72 20 70 72 6f 6d 6f 74 65 20 70 72 6f 64   or promote prod
0e70: 75 63 74 73 20 64 65 72 69 76 65 64 5c 6e 22 0a  ucts derived\n".
0e80: 22 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 69  "       from thi
0e90: 73 20 73 6f 66 74 77 61 72 65 20 77 69 74 68 6f  s software witho
0ea0: 75 74 20 73 70 65 63 69 66 69 63 20 70 72 69 6f  ut specific prio
0eb0: 72 20 77 72 69 74 74 65 6e 20 70 65 72 6d 69 73  r written permis
0ec0: 73 69 6f 6e 2e 5c 6e 22 0a 22 20 20 20 20 20 20  sion.\n"."      
0ed0: 20 5c 6e 22 0a 22 20 20 20 54 48 49 53 20 53 4f   \n"."   THIS SO
0ee0: 46 54 57 41 52 45 20 49 53 20 50 52 4f 56 49 44  FTWARE IS PROVID
0ef0: 45 44 20 42 59 20 54 48 45 20 43 4f 50 59 52 49  ED BY THE COPYRI
0f00: 47 48 54 20 48 4f 4c 44 45 52 53 20 41 4e 44 20  GHT HOLDERS AND 
0f10: 43 4f 4e 54 52 49 42 55 54 4f 52 53 5c 6e 22 0a  CONTRIBUTORS\n".
0f20: 22 20 20 20 60 60 41 53 20 49 53 27 27 20 41 4e  "   ``AS IS'' AN
0f30: 44 20 41 4e 59 20 45 58 50 52 45 53 53 20 4f 52  D ANY EXPRESS OR
0f40: 20 49 4d 50 4c 49 45 44 20 57 41 52 52 41 4e 54   IMPLIED WARRANT
0f50: 49 45 53 2c 20 49 4e 43 4c 55 44 49 4e 47 2c 20  IES, INCLUDING, 
0f60: 42 55 54 20 4e 4f 54 5c 6e 22 0a 22 20 20 20 4c  BUT NOT\n"."   L
0f70: 49 4d 49 54 45 44 20 54 4f 2c 20 54 48 45 20 49  IMITED TO, THE I
0f80: 4d 50 4c 49 45 44 20 57 41 52 52 41 4e 54 49 45  MPLIED WARRANTIE
0f90: 53 20 4f 46 20 4d 45 52 43 48 41 4e 54 41 42 49  S OF MERCHANTABI
0fa0: 4c 49 54 59 20 41 4e 44 20 46 49 54 4e 45 53 53  LITY AND FITNESS
0fb0: 20 46 4f 52 5c 6e 22 0a 22 20 20 20 41 20 50 41   FOR\n"."   A PA
0fc0: 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45  RTICULAR PURPOSE
0fd0: 20 41 52 45 20 44 49 53 43 4c 41 49 4d 45 44 2e   ARE DISCLAIMED.
0fe0: 20 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48 41   IN NO EVENT SHA
0ff0: 4c 4c 20 54 48 45 20 52 45 47 45 4e 54 53 20 4f  LL THE REGENTS O
1000: 52 5c 6e 22 0a 22 20 20 20 43 4f 4e 54 52 49 42  R\n"."   CONTRIB
1010: 55 54 4f 52 53 20 42 45 20 4c 49 41 42 4c 45 20  UTORS BE LIABLE 
1020: 46 4f 52 20 41 4e 59 20 44 49 52 45 43 54 2c 20  FOR ANY DIRECT, 
1030: 49 4e 44 49 52 45 43 54 2c 20 49 4e 43 49 44 45  INDIRECT, INCIDE
1040: 4e 54 41 4c 2c 20 53 50 45 43 49 41 4c 2c 5c 6e  NTAL, SPECIAL,\n
1050: 22 0a 22 20 20 20 45 58 45 4d 50 4c 41 52 59 2c  "."   EXEMPLARY,
1060: 20 4f 52 20 43 4f 4e 53 45 51 55 45 4e 54 49 41   OR CONSEQUENTIA
1070: 4c 20 44 41 4d 41 47 45 53 20 28 49 4e 43 4c 55  L DAMAGES (INCLU
1080: 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20 4c 49  DING, BUT NOT LI
1090: 4d 49 54 45 44 20 54 4f 2c 5c 6e 22 0a 22 20 20  MITED TO,\n"."  
10a0: 20 50 52 4f 43 55 52 45 4d 45 4e 54 20 4f 46 20   PROCUREMENT OF 
10b0: 53 55 42 53 54 49 54 55 54 45 20 47 4f 4f 44 53  SUBSTITUTE GOODS
10c0: 20 4f 52 20 53 45 52 56 49 43 45 53 3b 20 4c 4f   OR SERVICES; LO
10d0: 53 53 20 4f 46 20 55 53 45 2c 20 44 41 54 41 2c  SS OF USE, DATA,
10e0: 20 4f 52 5c 6e 22 0a 22 20 20 20 50 52 4f 46 49   OR\n"."   PROFI
10f0: 54 53 3b 20 4f 52 20 42 55 53 49 4e 45 53 53 20  TS; OR BUSINESS 
1100: 49 4e 54 45 52 52 55 50 54 49 4f 4e 29 20 48 4f  INTERRUPTION) HO
1110: 57 45 56 45 52 20 43 41 55 53 45 44 20 41 4e 44  WEVER CAUSED AND
1120: 20 4f 4e 20 41 4e 59 20 54 48 45 4f 52 59 20 4f   ON ANY THEORY O
1130: 46 5c 6e 22 0a 22 20 20 20 4c 49 41 42 49 4c 49  F\n"."   LIABILI
1140: 54 59 2c 20 57 48 45 54 48 45 52 20 49 4e 20 43  TY, WHETHER IN C
1150: 4f 4e 54 52 41 43 54 2c 20 53 54 52 49 43 54 20  ONTRACT, STRICT 
1160: 4c 49 41 42 49 4c 49 54 59 2c 20 4f 52 20 54 4f  LIABILITY, OR TO
1170: 52 54 20 28 49 4e 43 4c 55 44 49 4e 47 5c 6e 22  RT (INCLUDING\n"
1180: 0a 22 20 20 20 4e 45 47 4c 49 47 45 4e 43 45 20  ."   NEGLIGENCE 
1190: 4f 52 20 4f 54 48 45 52 57 49 53 45 29 20 41 52  OR OTHERWISE) AR
11a0: 49 53 49 4e 47 20 49 4e 20 41 4e 59 20 57 41 59  ISING IN ANY WAY
11b0: 20 4f 55 54 20 4f 46 20 54 48 45 20 55 53 45 20   OUT OF THE USE 
11c0: 4f 46 20 54 48 49 53 5c 6e 22 0a 22 20 20 20 53  OF THIS\n"."   S
11d0: 4f 46 54 57 41 52 45 2c 20 45 56 45 4e 20 49 46  OFTWARE, EVEN IF
11e0: 20 41 44 56 49 53 45 44 20 4f 46 20 54 48 45 20   ADVISED OF THE 
11f0: 50 4f 53 53 49 42 49 4c 49 54 59 20 4f 46 20 53  POSSIBILITY OF S
1200: 55 43 48 20 44 41 4d 41 47 45 2e 22 3b 0a 0a 0a  UCH DAMAGE.";...
1210: 0a 73 74 61 74 69 63 20 63 68 61 72 2a 0a 73 74  .static char*.st
1220: 72 69 70 6c 65 66 74 28 63 68 61 72 2a 20 69 6e  ripleft(char* in
1230: 29 0a 7b 0a 20 20 20 20 63 68 61 72 2a 20 70 74  ).{.    char* pt
1240: 72 20 3d 20 69 6e 3b 0a 20 20 20 20 77 68 69 6c  r = in;.    whil
1250: 65 20 28 2a 70 74 72 20 26 26 20 2a 70 74 72 20  e (*ptr && *ptr 
1260: 3c 3d 20 27 20 27 29 0a 20 20 20 20 20 20 20 20  <= ' ').        
1270: 70 74 72 2b 2b 3b 0a 20 20 20 20 69 66 20 28 69  ptr++;.    if (i
1280: 6e 20 21 3d 20 70 74 72 29 0a 20 20 20 20 20 20  n != ptr).      
1290: 20 20 6d 65 6d 6d 6f 76 65 28 69 6e 2c 20 70 74    memmove(in, pt
12a0: 72 2c 20 73 74 72 6c 65 6e 28 70 74 72 29 20 2b  r, strlen(ptr) +
12b0: 20 31 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   1);.    return 
12c0: 69 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68  in;.}..static ch
12d0: 61 72 2a 0a 73 74 72 69 70 72 69 67 68 74 28 63  ar*.stripright(c
12e0: 68 61 72 2a 20 69 6e 29 0a 7b 0a 20 20 20 20 63  har* in).{.    c
12f0: 68 61 72 2a 20 70 74 72 3b 0a 20 20 20 20 66 6f  har* ptr;.    fo
1300: 72 20 28 70 74 72 20 3d 20 73 74 72 63 68 72 28  r (ptr = strchr(
1310: 69 6e 2c 20 27 5c 30 27 29 20 2d 20 31 3b 20 70  in, '\0') - 1; p
1320: 74 72 20 3e 3d 20 69 6e 20 26 26 20 2a 70 74 72  tr >= in && *ptr
1330: 20 3c 3d 20 27 20 27 3b 20 70 74 72 2d 2d 29 0a   <= ' '; ptr--).
1340: 20 20 20 20 20 20 20 20 2a 70 74 72 20 3d 20 27          *ptr = '
1350: 5c 30 27 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  \0';.    return 
1360: 69 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68  in;.}..static ch
1370: 61 72 2a 0a 73 74 72 69 70 77 68 69 74 65 28 63  ar*.stripwhite(c
1380: 68 61 72 2a 20 69 6e 29 0a 7b 0a 20 20 20 20 73  har* in).{.    s
1390: 74 72 69 70 6c 65 66 74 28 69 6e 29 3b 0a 20 20  tripleft(in);.  
13a0: 20 20 73 74 72 69 70 72 69 67 68 74 28 69 6e 29    stripright(in)
13b0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 69 6e 3b  ;.    return in;
13c0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 54  .}..static int.T
13d0: 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43 6f  clReadlineLineCo
13e0: 6d 70 6c 65 74 65 28 76 6f 69 64 29 0a 7b 0a 20  mplete(void).{. 
13f0: 20 20 20 72 65 74 75 72 6e 20 21 28 74 63 6c 72     return !(tclr
1400: 6c 5f 73 74 61 74 65 20 3d 3d 20 4c 49 4e 45 5f  l_state == LINE_
1410: 50 45 4e 44 49 4e 47 29 3b 0a 7d 0a 0a 73 74 61  PENDING);.}..sta
1420: 74 69 63 20 76 6f 69 64 0a 54 63 6c 52 65 61 64  tic void.TclRead
1430: 6c 69 6e 65 54 65 72 6d 69 6e 61 74 65 28 69 6e  lineTerminate(in
1440: 74 20 73 74 61 74 65 29 0a 7b 0a 20 20 20 20 74  t state).{.    t
1450: 63 6c 72 6c 5f 73 74 61 74 65 20 3d 20 73 74 61  clrl_state = sta
1460: 74 65 3b 0a 20 20 20 20 72 6c 5f 63 61 6c 6c 62  te;.    rl_callb
1470: 61 63 6b 5f 68 61 6e 64 6c 65 72 5f 72 65 6d 6f  ack_handler_remo
1480: 76 65 28 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  ve();.}..static 
1490: 63 68 61 72 2a 0a 54 63 6c 52 65 61 64 6c 69 6e  char*.TclReadlin
14a0: 65 51 75 6f 74 65 28 63 68 61 72 2a 20 74 65 78  eQuote(char* tex
14b0: 74 2c 20 63 68 61 72 2a 20 71 75 6f 74 65 63 68  t, char* quotech
14c0: 61 72 73 29 0a 7b 0a 20 20 20 20 63 68 61 72 2a  ars).{.    char*
14d0: 20 70 74 72 3b 0a 20 20 20 20 63 68 61 72 2a 20   ptr;.    char* 
14e0: 72 65 73 75 6c 74 5f 63 3b 0a 20 20 20 20 69 6e  result_c;.    in
14f0: 74 20 69 2c 20 6c 65 6e 20 3d 20 73 74 72 6c 65  t i, len = strle
1500: 6e 28 71 75 6f 74 65 63 68 61 72 73 29 3b 0a 20  n(quotechars);. 
1510: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 72     Tcl_DString r
1520: 65 73 75 6c 74 3b 0a 0a 20 20 20 20 54 63 6c 5f  esult;..    Tcl_
1530: 44 53 74 72 69 6e 67 49 6e 69 74 28 26 72 65 73  DStringInit(&res
1540: 75 6c 74 29 3b 0a 20 20 20 20 66 6f 72 20 28 70  ult);.    for (p
1550: 74 72 20 3d 20 74 65 78 74 3b 20 70 74 72 20 26  tr = text; ptr &
1560: 26 20 2a 70 74 72 3b 20 70 74 72 2b 2b 29 20 7b  & *ptr; ptr++) {
1570: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 20  .        for (i 
1580: 3d 20 30 3b 20 69 20 3c 20 6c 65 6e 3b 20 69 2b  = 0; i < len; i+
1590: 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  +) {.           
15a0: 20 69 66 20 28 71 75 6f 74 65 63 68 61 72 73 5b   if (quotechars[
15b0: 69 5d 20 3d 3d 20 2a 70 74 72 29 20 7b 0a 20 20  i] == *ptr) {.  
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
15d0: 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28  l_DStringAppend(
15e0: 26 72 65 73 75 6c 74 2c 20 22 5c 5c 22 2c 20 31  &result, "\\", 1
15f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1600: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1610: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1620: 7d 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 44 53  }.        Tcl_DS
1630: 74 72 69 6e 67 41 70 70 65 6e 64 28 26 72 65 73  tringAppend(&res
1640: 75 6c 74 2c 20 70 74 72 2c 20 31 29 3b 0a 20 20  ult, ptr, 1);.  
1650: 20 20 7d 0a 20 20 20 20 72 65 73 75 6c 74 5f 63    }.    result_c
1660: 20 3d 20 73 74 72 64 75 70 28 54 63 6c 5f 44 53   = strdup(Tcl_DS
1670: 74 72 69 6e 67 56 61 6c 75 65 28 26 72 65 73 75  tringValue(&resu
1680: 6c 74 29 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  lt));.    return
1690: 20 72 65 73 75 6c 74 5f 63 3b 0a 7d 0a 0a 73 74   result_c;.}..st
16a0: 61 74 69 63 20 69 6e 74 0a 54 63 6c 52 65 61 64  atic int.TclRead
16b0: 6c 69 6e 65 43 6d 64 28 43 6c 69 65 6e 74 44 61  lineCmd(ClientDa
16c0: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 54  ta clientData, T
16d0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
16e0: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 20  p, int objc,.   
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
1700: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1710: 5d 29 0a 7b 0a 20 20 20 20 69 6e 74 20 6f 62 6a  ]).{.    int obj
1720: 5f 69 64 78 2c 20 73 74 61 74 75 73 3b 0a 0a 20  _idx, status;.. 
1730: 20 20 20 73 74 61 74 69 63 20 63 68 61 72 20 2a     static char *
1740: 73 75 62 43 6d 64 73 5b 5d 20 3d 20 7b 0a 20 20  subCmds[] = {.  
1750: 20 20 20 20 20 20 22 72 65 61 64 22 2c 20 22 69        "read", "i
1760: 6e 69 74 69 61 6c 69 7a 65 22 2c 20 22 77 72 69  nitialize", "wri
1770: 74 65 22 2c 20 22 61 64 64 22 2c 20 22 63 6f 6d  te", "add", "com
1780: 70 6c 65 74 65 22 2c 0a 20 20 20 20 20 20 20 20  plete",.        
1790: 22 63 75 73 74 6f 6d 63 6f 6d 70 6c 65 74 65 72  "customcompleter
17a0: 22 2c 20 22 62 75 69 6c 74 69 6e 63 6f 6d 70 6c  ", "builtincompl
17b0: 65 74 65 72 22 2c 20 22 65 6f 66 63 68 61 72 22  eter", "eofchar"
17c0: 2c 0a 20 20 20 20 20 20 20 20 22 72 65 73 65 74  ,.        "reset
17d0: 2d 74 65 72 6d 69 6e 61 6c 22 2c 20 22 62 65 6c  -terminal", "bel
17e0: 6c 22 2c 20 22 74 65 78 74 22 2c 20 22 75 70 64  l", "text", "upd
17f0: 61 74 65 22 2c 0a 20 20 20 20 20 20 20 20 28 63  ate",.        (c
1800: 68 61 72 20 2a 29 20 4e 55 4c 4c 0a 20 20 20 20  har *) NULL.    
1810: 7d 3b 0a 20 20 20 20 65 6e 75 6d 20 53 75 62 43  };.    enum SubC
1820: 6d 64 49 64 78 20 7b 0a 20 20 20 20 20 20 20 20  mdIdx {.        
1830: 54 43 4c 52 4c 5f 52 45 41 44 2c 20 54 43 4c 52  TCLRL_READ, TCLR
1840: 4c 5f 49 4e 49 54 49 41 4c 49 5a 45 2c 20 54 43  L_INITIALIZE, TC
1850: 4c 52 4c 5f 57 52 49 54 45 2c 20 54 43 4c 52 4c  LRL_WRITE, TCLRL
1860: 5f 41 44 44 2c 20 54 43 4c 52 4c 5f 43 4f 4d 50  _ADD, TCLRL_COMP
1870: 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20 54 43  LETE,.        TC
1880: 4c 52 4c 5f 43 55 53 54 4f 4d 43 4f 4d 50 4c 45  LRL_CUSTOMCOMPLE
1890: 54 45 52 2c 20 54 43 4c 52 4c 5f 42 55 49 4c 54  TER, TCLRL_BUILT
18a0: 49 4e 43 4f 4d 50 4c 45 54 45 52 2c 20 54 43 4c  INCOMPLETER, TCL
18b0: 52 4c 5f 45 4f 46 43 48 41 52 2c 0a 20 20 20 20  RL_EOFCHAR,.    
18c0: 20 20 20 20 54 43 4c 52 4c 5f 52 45 53 45 54 5f      TCLRL_RESET_
18d0: 54 45 52 4d 49 4e 41 4c 2c 20 54 43 4c 52 4c 5f  TERMINAL, TCLRL_
18e0: 42 45 4c 4c 2c 20 54 43 4c 52 4c 5f 54 45 58 54  BELL, TCLRL_TEXT
18f0: 2c 20 54 43 4c 52 4c 5f 55 50 44 41 54 45 0a 20  , TCLRL_UPDATE. 
1900: 20 20 20 7d 3b 0a 0a 20 20 20 20 54 63 6c 5f 52     };..    Tcl_R
1910: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
1920: 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 74 68 65  p); /* clear the
1930: 20 72 65 73 75 6c 74 20 73 70 61 63 65 20 2a 2f   result space */
1940: 0a 0a 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3c  ..    if (objc <
1950: 20 32 29 20 7b 0a 20 20 20 20 20 20 20 20 54 63   2) {.        Tc
1960: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1970: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
1980: 22 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61 72 67  "option ?arg arg
1990: 20 2e 2e 2e 3f 22 29 3b 0a 20 20 20 20 20 20 20   ...?");.       
19a0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19b0: 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74  R;.    }..    st
19c0: 61 74 75 73 20 3d 20 54 63 6c 5f 47 65 74 49 6e  atus = Tcl_GetIn
19d0: 64 65 78 46 72 6f 6d 4f 62 6a 0a 20 20 20 20 20  dexFromObj.     
19e0: 20 20 20 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76     (interp, objv
19f0: 5b 31 5d 2c 20 73 75 62 43 6d 64 73 2c 20 22 6f  [1], subCmds, "o
1a00: 70 74 69 6f 6e 22 2c 20 30 2c 20 28 69 6e 74 20  ption", 0, (int 
1a10: 2a 29 20 26 6f 62 6a 5f 69 64 78 29 3b 0a 0a 20  *) &obj_idx);.. 
1a20: 20 20 20 69 66 20 28 73 74 61 74 75 73 20 21 3d     if (status !=
1a30: 20 54 43 4c 5f 4f 4b 29 0a 20 20 20 20 20 20 20   TCL_OK).       
1a40: 20 72 65 74 75 72 6e 20 73 74 61 74 75 73 3b 0a   return status;.
1a50: 0a 20 20 20 20 73 77 69 74 63 68 20 28 6f 62 6a  .    switch (obj
1a60: 5f 69 64 78 29 20 7b 0a 0a 20 20 20 20 20 20 20  _idx) {..       
1a70: 20 63 61 73 65 20 54 43 4c 52 4c 5f 52 45 41 44   case TCLRL_READ
1a80: 3a 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  :..            r
1a90: 6c 5f 63 61 6c 6c 62 61 63 6b 5f 68 61 6e 64 6c  l_callback_handl
1aa0: 65 72 5f 69 6e 73 74 61 6c 6c 28 0a 20 20 20 20  er_install(.    
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 20 6f 62 6a 63 20 3d 3d 20 33 20 3f 20 54     objc == 3 ? T
1ad0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
1ae0: 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 0a  Obj(objv[2], 0).
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b00: 20 20 20 20 20 20 20 3a 20 22 25 20 22 2c 20 54         : "% ", T
1b10: 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43 6f  clReadlineLineCo
1b20: 6d 70 6c 65 74 65 48 61 6e 64 6c 65 72 29 3b 0a  mpleteHandler);.
1b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c  .            Tcl
1b40: 5f 43 72 65 61 74 65 46 69 6c 65 48 61 6e 64 6c  _CreateFileHandl
1b50: 65 72 28 30 2c 20 54 43 4c 5f 52 45 41 44 41 42  er(0, TCL_READAB
1b60: 4c 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE,.            
1b70: 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e 65 52      TclReadlineR
1b80: 65 61 64 48 61 6e 64 6c 65 72 2c 20 28 43 6c 69  eadHandler, (Cli
1b90: 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 29 3b 0a  entData) NULL);.
1ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 2a  .            /**
1bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20  .             * 
1bc0: 4d 61 69 6e 20 4c 6f 6f 70 2e 0a 20 20 20 20 20  Main Loop..     
1bd0: 20 20 20 20 20 20 20 20 2a 20 58 58 58 20 65 61          * XXX ea
1be0: 63 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  ch modification 
1bf0: 6f 66 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  of the global va
1c00: 72 69 61 62 6c 65 73 0a 20 20 20 20 20 20 20 20  riables.        
1c10: 20 20 20 20 20 2a 20 20 20 20 20 77 68 69 63 68       *     which
1c20: 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20   terminates the 
1c30: 6d 61 69 6e 20 6c 6f 6f 70 20 6d 75 73 74 20 63  main loop must c
1c40: 61 6c 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20  all.            
1c50: 20 2a 20 20 20 20 20 72 6c 5f 63 61 6c 6c 62 61   *     rl_callba
1c60: 63 6b 5f 68 61 6e 64 6c 65 72 5f 72 65 6d 6f 76  ck_handler_remov
1c70: 65 28 29 20 74 6f 20 6c 65 61 76 65 0a 20 20 20  e() to leave.   
1c80: 20 20 20 20 20 20 20 20 20 20 2a 20 20 20 20 20            *     
1c90: 72 65 61 64 6c 69 6e 65 20 69 6e 20 61 20 64 65  readline in a de
1ca0: 66 69 6e 65 64 20 73 74 61 74 65 2e 20 20 20 20  fined state.    
1cb0: 20 20 20 20 20 20 58 58 58 0a 20 20 20 20 20 20        XXX.      
1cc0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
1cd0: 20 20 20 20 20 20 74 63 6c 72 6c 5f 73 74 61 74        tclrl_stat
1ce0: 65 20 3d 20 4c 49 4e 45 5f 50 45 4e 44 49 4e 47  e = LINE_PENDING
1cf0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ;..            w
1d00: 68 69 6c 65 20 28 21 54 63 6c 52 65 61 64 6c 69  hile (!TclReadli
1d10: 6e 65 4c 69 6e 65 43 6f 6d 70 6c 65 74 65 28 29  neLineComplete()
1d20: 29 20 7b 0a 23 69 66 64 65 66 20 45 58 45 43 55  ) {.#ifdef EXECU
1d30: 54 49 4e 47 5f 4d 41 43 52 4f 5f 4e 41 4d 45 0a  TING_MACRO_NAME.
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20  /**.            
1d60: 20 20 20 20 20 2a 20 63 68 65 63 6b 20 66 69 72       * check fir
1d70: 73 74 2c 20 69 66 20 6d 6f 72 65 20 63 68 61 72  st, if more char
1d80: 61 63 74 65 72 73 20 61 72 65 0a 20 20 20 20 20  acters are.     
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 61 76              * av
1da0: 61 69 6c 61 62 6c 65 20 66 72 6f 6d 20 5f 72 6c  ailable from _rl
1db0: 5f 65 78 65 63 75 74 69 6e 67 5f 6d 61 63 72 6f  _executing_macro
1dc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dd0: 20 20 20 2a 20 62 65 63 61 75 73 65 20 54 63 6c     * because Tcl
1de0: 5f 44 6f 4f 6e 65 45 76 65 6e 74 28 29 20 77 69  _DoOneEvent() wi
1df0: 6c 6c 20 28 6e 61 74 75 72 61 6c 6c 79 29 0a 20  ll (naturally). 
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e10: 2a 20 6e 6f 74 20 64 65 74 65 63 74 20 74 68 69  * not detect thi
1e20: 73 20 60 65 76 65 6e 74 27 2e 0a 20 20 20 20 20  s `event'..     
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e50: 66 20 28 45 58 45 43 55 54 49 4e 47 5f 4d 41 43  f (EXECUTING_MAC
1e60: 52 4f 5f 4e 41 4d 45 29 0a 20 20 20 20 20 20 20  RO_NAME).       
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
1e80: 52 65 61 64 6c 69 6e 65 52 65 61 64 48 61 6e 64  ReadlineReadHand
1e90: 6c 65 72 28 28 43 6c 69 65 6e 74 44 61 74 61 29  ler((ClientData)
1ea0: 20 4e 55 4c 4c 2c 20 54 43 4c 5f 52 45 41 44 41   NULL, TCL_READA
1eb0: 42 4c 45 29 3b 0a 20 20 20 20 20 20 20 20 20 20  BLE);.          
1ec0: 20 20 20 20 20 20 65 6c 73 65 0a 23 65 6e 64 69        else.#endi
1ed0: 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1ee0: 20 20 20 20 20 20 54 63 6c 5f 44 6f 4f 6e 65 45        Tcl_DoOneE
1ef0: 76 65 6e 74 28 54 43 4c 5f 41 4c 4c 5f 45 56 45  vent(TCL_ALL_EVE
1f00: 4e 54 53 29 3b 0a 20 20 20 20 20 20 20 20 20 20  NTS);.          
1f10: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1f20: 20 54 63 6c 5f 44 65 6c 65 74 65 46 69 6c 65 48   Tcl_DeleteFileH
1f30: 61 6e 64 6c 65 72 28 30 29 3b 0a 0a 20 20 20 20  andler(0);..    
1f40: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
1f50: 74 63 6c 72 6c 5f 73 74 61 74 65 29 20 7b 0a 0a  tclrl_state) {..
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f70: 63 61 73 65 20 4c 49 4e 45 5f 43 4f 4d 50 4c 45  case LINE_COMPLE
1f80: 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  TE:.            
1f90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
1fa0: 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  CL_OK;.         
1fb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 4f             /* NO
1fc0: 54 52 45 41 43 48 45 44 20 2a 2f 0a 20 20 20 20  TREACHED */.    
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe0: 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20  break;..        
1ff0: 20 20 20 20 20 20 20 20 63 61 73 65 20 4c 49 4e          case LIN
2000: 45 5f 45 4f 46 3a 0a 20 20 20 20 20 20 20 20 20  E_EOF:.         
2010: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
2020: 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 29  clrl_eof_string)
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2040: 20 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f       return Tcl_
2050: 45 76 61 6c 28 69 6e 74 65 72 70 2c 20 74 63 6c  Eval(interp, tcl
2060: 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 29 3b 0a  rl_eof_string);.
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2080: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
20a0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20  urn TCL_OK;.    
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c0: 2f 2a 20 4e 4f 54 52 45 41 43 48 45 44 20 2a 2f  /* NOTREACHED */
20d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
2100: 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20  ault:.          
2110: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2120: 20 74 63 6c 72 6c 5f 73 74 61 74 65 3b 0a 20 20   tclrl_state;.  
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2140: 20 20 2f 2a 20 4e 4f 54 52 45 41 43 48 45 44 20    /* NOTREACHED 
2150: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
2160: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2170: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2180: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
2190: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c          case TCL
21a0: 52 4c 5f 49 4e 49 54 49 41 4c 49 5a 45 3a 0a 20  RL_INITIALIZE:. 
21b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 33             if (3
21c0: 20 21 3d 20 6f 62 6a 63 29 20 7b 0a 20 20 20 20   != objc) {.    
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
21e0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
21f0: 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 68  erp, 2, objv, "h
2200: 69 73 74 6f 72 79 66 69 6c 65 22 29 3b 0a 20 20  istoryfile");.  
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2220: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2230: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
2240: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
2250: 20 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 52       return TclR
2260: 65 61 64 6c 69 6e 65 49 6e 69 74 69 61 6c 69 7a  eadlineInitializ
2270: 65 28 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20  e(interp,.      
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47             Tcl_G
22a0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
22b0: 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 3b 0a 20 20  objv[2], 0));.  
22c0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
22d0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
22e0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c          case TCL
22f0: 52 4c 5f 57 52 49 54 45 3a 0a 20 20 20 20 20 20  RL_WRITE:.      
2300: 20 20 20 20 20 20 69 66 20 28 33 20 21 3d 20 6f        if (3 != o
2310: 62 6a 63 29 20 7b 0a 20 20 20 20 20 20 20 20 20  bjc) {.         
2320: 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67         Tcl_Wrong
2330: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
2340: 32 2c 20 6f 62 6a 76 2c 20 22 68 69 73 74 6f 72  2, objv, "histor
2350: 79 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20  yfile");.       
2360: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2370: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  TCL_ERROR;.     
2380: 20 20 20 20 20 20 20 7d 20 20 65 6c 73 65 20 69         }  else i
2390: 66 20 28 77 72 69 74 65 5f 68 69 73 74 6f 72 79  f (write_history
23a0: 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72  (Tcl_GetStringFr
23b0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30  omObj(objv[2], 0
23c0: 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ))) {.          
23d0: 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64        Tcl_Append
23e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
23f0: 75 6e 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20  unable to write 
2400: 68 69 73 74 6f 72 79 20 74 6f 20 60 22 2c 0a 20  history to `",. 
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2420: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
2430: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
2440: 20 30 29 2c 20 22 27 5c 6e 22 2c 20 28 63 68 61   0), "'\n", (cha
2450: 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20  r*) NULL);.     
2460: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2470: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
2480: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2490: 20 20 20 20 20 20 20 69 66 20 28 74 63 6c 72 6c         if (tclrl
24a0: 5f 68 69 73 74 6f 72 79 5f 6c 65 6e 67 74 68 20  _history_length 
24b0: 3e 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20  >= 0) {.        
24c0: 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 5f          history_
24d0: 74 72 75 6e 63 61 74 65 5f 66 69 6c 65 28 54 63  truncate_file(Tc
24e0: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
24f0: 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 2c 0a  bj(objv[2], 0),.
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 63                tc
2520: 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65 6e 67  lrl_history_leng
2530: 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  th);.           
2540: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   }.            r
2550: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20  eturn TCL_OK;.  
2560: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2570: 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
2580: 43 4c 52 4c 5f 41 44 44 3a 0a 20 20 20 20 20 20  CLRL_ADD:.      
2590: 20 20 20 20 20 20 69 66 20 28 33 20 21 3d 20 6f        if (3 != o
25a0: 62 6a 63 29 20 7b 0a 20 20 20 20 20 20 20 20 20  bjc) {.         
25b0: 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67         Tcl_Wrong
25c0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
25d0: 32 2c 20 6f 62 6a 76 2c 20 22 63 6f 6d 70 6c 65  2, objv, "comple
25e0: 74 65 72 4c 69 6e 65 22 29 3b 0a 20 20 20 20 20  terLine");.     
25f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2600: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
2610: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
2620: 69 66 20 28 54 63 6c 52 65 61 64 6c 69 6e 65 4b  if (TclReadlineK
2630: 6e 6f 77 6e 43 6f 6d 6d 61 6e 64 73 28 0a 20 20  nownCommands(.  
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2650: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
2660: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
2670: 5b 32 5d 2c 20 30 29 2c 0a 20 20 20 20 20 20 20  [2], 0),.       
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 20 28 69 6e 74 29 20 30 2c 20 5f 43 4d 44 5f    (int) 0, _CMD_
26a0: 53 45 54 29 29 20 7b 0a 20 20 20 20 20 20 20 20  SET)) {.        
26b0: 20 20 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65          Tcl_Appe
26c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
26d0: 20 22 75 6e 61 62 6c 65 20 74 6f 20 61 64 64 20   "unable to add 
26e0: 63 6f 6d 6d 61 6e 64 20 5c 22 22 2c 0a 20 20 20  command \"",.   
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
2710: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30  omObj(objv[2], 0
2720: 29 2c 20 22 5c 22 5c 6e 22 2c 20 28 63 68 61 72  ), "\"\n", (char
2730: 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20  *) NULL);.      
2740: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2750: 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
2760: 20 20 20 20 63 61 73 65 20 54 43 4c 52 4c 5f 43      case TCLRL_C
2770: 4f 4d 50 4c 45 54 45 3a 0a 20 20 20 20 20 20 20  OMPLETE:.       
2780: 20 20 20 20 20 69 66 20 28 33 20 21 3d 20 6f 62       if (3 != ob
2790: 6a 63 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  jc) {.          
27a0: 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e        Tcl_WrongN
27b0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32  umArgs(interp, 2
27c0: 2c 20 6f 62 6a 76 2c 20 22 6c 69 6e 65 22 29 3b  , objv, "line");
27d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
27f0: 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  R;.            }
2800: 20 65 6c 73 65 20 69 66 20 28 54 63 6c 5f 43 6f   else if (Tcl_Co
2810: 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 65 28 54 63  mmandComplete(Tc
2820: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
2830: 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 29  bj(objv[2], 0)))
2840: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2850: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2860: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 31 22 2c  ult(interp, "1",
2870: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a   (char*) NULL);.
2880: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
2890: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
28a0: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
28b0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 30  esult(interp, "0
28c0: 22 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29  ", (char*) NULL)
28d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
28f0: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
2900: 20 54 43 4c 52 4c 5f 43 55 53 54 4f 4d 43 4f 4d   TCLRL_CUSTOMCOM
2910: 50 4c 45 54 45 52 3a 0a 20 20 20 20 20 20 20 20  PLETER:.        
2920: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3e 20 33      if (objc > 3
2930: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2940: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
2950: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20  Args(interp, 2, 
2960: 6f 62 6a 76 2c 20 22 3f 73 63 72 69 70 74 43 6f  objv, "?scriptCo
2970: 6d 70 6c 65 74 65 72 3f 22 29 3b 0a 20 20 20 20  mpleter?");.    
2980: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2990: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
29a0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
29b0: 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63 29 20   if (3 == objc) 
29c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
29d0: 20 20 69 66 20 28 74 63 6c 72 6c 5f 63 75 73 74    if (tclrl_cust
29e0: 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29 0a 20 20  om_completer).  
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a00: 20 20 46 52 45 45 28 74 63 6c 72 6c 5f 63 75 73    FREE(tclrl_cus
2a10: 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29 3b 0a  tom_completer);.
2a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a30: 69 66 20 28 21 62 6c 61 6e 6b 5f 6c 69 6e 65 28  if (!blank_line(
2a40: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
2a50: 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29  mObj(objv[2], 0)
2a60: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
2a70: 20 20 20 20 20 20 20 74 63 6c 72 6c 5f 63 75 73         tclrl_cus
2a80: 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 20 3d 0a  tom_completer =.
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa0: 20 20 20 20 20 20 20 20 20 73 74 72 69 70 77 68           stripwh
2ab0: 69 74 65 28 73 74 72 64 75 70 28 54 63 6c 5f 47  ite(strdup(Tcl_G
2ac0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
2ad0: 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 29 3b 0a 20  objv[2], 0)));. 
2ae0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2af0: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 41 70 70           Tcl_App
2b00: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
2b10: 2c 20 74 63 6c 72 6c 5f 63 75 73 74 6f 6d 5f 63  , tclrl_custom_c
2b20: 6f 6d 70 6c 65 74 65 72 2c 20 28 63 68 61 72 2a  ompleter, (char*
2b30: 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20  ) NULL);.       
2b40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
2b50: 20 20 20 20 20 63 61 73 65 20 54 43 4c 52 4c 5f       case TCLRL_
2b60: 42 55 49 4c 54 49 4e 43 4f 4d 50 4c 45 54 45 52  BUILTINCOMPLETER
2b70: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  :.            if
2b80: 20 28 6f 62 6a 63 20 3e 20 33 29 20 7b 0a 20 20   (objc > 3) {.  
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
2ba0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
2bb0: 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20  nterp, 2, objv, 
2bc0: 22 3f 62 6f 6f 6c 65 61 6e 3f 22 29 3b 0a 20 20  "?boolean?");.  
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2be0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
2c00: 73 65 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63  se if (3 == objc
2c10: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2c20: 20 20 20 20 69 6e 74 20 62 6f 6f 6c 20 3d 20 74      int bool = t
2c30: 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c 74 69 6e  clrl_use_builtin
2c40: 5f 63 6f 6d 70 6c 65 74 65 72 3b 0a 20 20 20 20  _completer;.    
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c60: 54 43 4c 5f 4f 4b 20 21 3d 20 54 63 6c 5f 47 65  TCL_OK != Tcl_Ge
2c70: 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 65 72 70 2c  tBoolean(interp,
2c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
2cb0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
2cc0: 30 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0),.            
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 20 26 62 6f 6f 6c 29 29 20 7b 0a 20       &bool)) {. 
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d00: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2d10: 75 6c 74 28 69 6e 74 65 72 70 2c 0a 20 20 20 20  ult(interp,.    
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d30: 20 20 20 20 22 77 72 6f 6e 67 20 23 20 61 72 67      "wrong # arg
2d40: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 61 20 62  s: should be a b
2d50: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 22 2c 0a  oolean value.",.
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d70: 20 20 20 20 20 20 20 20 28 63 68 61 72 2a 29 20          (char*) 
2d80: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20  NULL);.         
2d90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2da0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
2dc0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
2dd0: 20 20 20 20 20 20 20 20 20 20 74 63 6c 72 6c 5f            tclrl_
2de0: 75 73 65 5f 62 75 69 6c 74 69 6e 5f 63 6f 6d 70  use_builtin_comp
2df0: 6c 65 74 65 72 20 3d 20 62 6f 6f 6c 3b 0a 20 20  leter = bool;.  
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
2e20: 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 41 70            Tcl_Ap
2e30: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2e40: 70 2c 20 74 63 6c 72 6c 5f 75 73 65 5f 62 75 69  p, tclrl_use_bui
2e50: 6c 74 69 6e 5f 63 6f 6d 70 6c 65 74 65 72 20 3f  ltin_completer ?
2e60: 20 22 31 22 20 3a 20 22 30 22 2c 0a 20 20 20 20   "1" : "0",.    
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 68 61              (cha
2e80: 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20  r*) NULL);.     
2e90: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2ea0: 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 52         case TCLR
2eb0: 4c 5f 45 4f 46 43 48 41 52 3a 0a 20 20 20 20 20  L_EOFCHAR:.     
2ec0: 20 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20         if (objc 
2ed0: 3e 20 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20  > 3) {.         
2ee0: 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67         Tcl_Wrong
2ef0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
2f00: 32 2c 20 6f 62 6a 76 2c 20 22 3f 73 63 72 69 70  2, objv, "?scrip
2f10: 74 3f 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  t?");.          
2f20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
2f30: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20  _ERROR;.        
2f40: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 33      } else if (3
2f50: 20 3d 3d 20 6f 62 6a 63 29 20 7b 0a 20 20 20 20   == objc) {.    
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f70: 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67  tclrl_eof_string
2f80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2f90: 20 20 20 20 20 20 46 52 45 45 28 74 63 6c 72 6c        FREE(tclrl
2fa0: 5f 65 6f 66 5f 73 74 72 69 6e 67 29 3b 0a 20 20  _eof_string);.  
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2fc0: 20 28 21 62 6c 61 6e 6b 5f 6c 69 6e 65 28 54 63   (!blank_line(Tc
2fd0: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
2fe0: 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 29  bj(objv[2], 0)))
2ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3000: 20 20 20 20 20 74 63 6c 72 6c 5f 65 6f 66 5f 73       tclrl_eof_s
3010: 74 72 69 6e 67 20 3d 0a 20 20 20 20 20 20 20 20  tring =.        
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 73 74 72 69 70 77 68 69 74 65 28 73 74 72 64 75  stripwhite(strdu
3040: 70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46  p(Tcl_GetStringF
3050: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
3060: 30 29 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  0)));.          
3070: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
3080: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
3090: 28 69 6e 74 65 72 70 2c 20 74 63 6c 72 6c 5f 65  (interp, tclrl_e
30a0: 6f 66 5f 73 74 72 69 6e 67 2c 20 28 63 68 61 72  of_string, (char
30b0: 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20  *) NULL);.      
30c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
30d0: 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 52 4c        case TCLRL
30e0: 5f 52 45 53 45 54 5f 54 45 52 4d 49 4e 41 4c 3a  _RESET_TERMINAL:
30f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  .            /* 
3100: 54 4f 44 4f 3a 20 61 64 64 20 74 68 69 73 20 74  TODO: add this t
3110: 6f 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 72 20  o the completer 
3120: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  */.            i
3130: 66 20 28 6f 62 6a 63 20 3e 20 33 29 20 7b 0a 20  f (objc > 3) {. 
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3150: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
3160: 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c  interp, 2, objv,
3170: 20 22 3f 74 65 72 6d 69 6e 61 6c 2d 6e 61 6d 65   "?terminal-name
3180: 3f 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ?");.           
3190: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
31a0: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 20  ERROR;.         
31b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
31c0: 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63 29 20   if (3 == objc) 
31d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
31e0: 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 20 20    /*.           
31f0: 20 20 20 20 20 20 2a 20 2d 20 74 63 6c 38 2e 30        * - tcl8.0
3200: 20 64 6f 65 73 6e 27 74 20 68 61 76 65 20 54 63   doesn't have Tc
3210: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
3220: 62 6a 28 29 0a 20 20 20 20 20 20 20 20 20 20 20  bj().           
3230: 20 20 20 20 20 20 2a 20 2d 20 72 6c 5f 72 65 73        * - rl_res
3240: 65 74 5f 74 65 72 6d 69 6e 61 6c 28 29 20 6d 69  et_terminal() mi
3250: 67 68 74 20 62 65 20 64 65 66 69 6e 65 64 0a 20  ght be defined. 
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3270: 2a 20 20 20 74 6f 20 74 61 6b 65 20 6e 6f 20 61  *   to take no a
3280: 72 67 75 6d 65 6e 74 73 2e 20 54 68 69 73 20 6d  rguments. This m
3290: 69 67 68 74 20 70 72 6f 64 75 63 65 0a 20 20 20  ight produce.   
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20                * 
32b0: 20 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72    a compiler war
32c0: 6e 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 20 20  ning..          
32d0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
32e0: 20 20 20 20 20 20 20 20 20 20 72 6c 5f 72 65 73            rl_res
32f0: 65 74 5f 74 65 72 6d 69 6e 61 6c 28 54 63 6c 5f  et_terminal(Tcl_
3300: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
3310: 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 3b 0a 23  (objv[2], 0));.#
3320: 69 66 64 65 66 20 43 4c 45 41 4e 55 50 5f 41 46  ifdef CLEANUP_AF
3330: 45 52 5f 53 49 47 4e 41 4c 0a 20 20 20 20 20 20  ER_SIGNAL.      
3340: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
3350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3360: 6c 5f 63 6c 65 61 6e 75 70 5f 61 66 74 65 72 5f  l_cleanup_after_
3370: 73 69 67 6e 61 6c 28 29 3b 0a 23 65 6e 64 69 66  signal();.#endif
3380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
3390: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
33a0: 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
33b0: 54 43 4c 52 4c 5f 42 45 4c 4c 3a 0a 20 20 20 20  TCLRL_BELL:.    
33c0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63          if (objc
33d0: 20 21 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 20   != 2) {.       
33e0: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f           Tcl_Wro
33f0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
3400: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 2, objv, "");.
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3420: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3430: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
3440: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ..            /*
3450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20  .             * 
3460: 72 69 6e 67 20 74 68 65 20 74 65 72 6d 69 6e 61  ring the termina
3470: 6c 20 62 65 6c 6c 20 6f 62 65 79 69 6e 67 20 74  l bell obeying t
3480: 68 65 20 63 75 72 72 65 6e 74 0a 20 20 20 20 20  he current.     
3490: 20 20 20 20 20 20 20 20 2a 20 73 65 74 74 69 6e          * settin
34a0: 67 73 20 2d 2d 20 61 75 64 69 62 6c 65 20 6f 72  gs -- audible or
34b0: 20 76 69 73 69 62 6c 65 2e 0a 20 20 20 20 20 20   visible..      
34c0: 20 20 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 20         */..     
34d0: 20 20 20 20 20 20 20 72 6c 5f 64 69 6e 67 28 29         rl_ding()
34e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
34f0: 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
3500: 73 65 20 54 43 4c 52 4c 5f 55 50 44 41 54 45 3a  se TCLRL_UPDATE:
3510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3520: 28 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a 20 20  (objc != 2) {.  
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
3540: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
3550: 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20  nterp, 2, objv, 
3560: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  "");.           
3570: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
3580: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 20  ERROR;.         
3590: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
35a0: 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68 65 20    /* Update the 
35b0: 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f 0a 0a 20  input line */.. 
35c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
35d0: 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 29 20 7b  l_line_buffer) {
35e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35f0: 20 72 6c 5f 66 6f 72 63 65 64 5f 75 70 64 61 74   rl_forced_updat
3600: 65 5f 64 69 73 70 6c 61 79 28 29 3b 0a 20 20 20  e_display();.   
3610: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
3620: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
3630: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43  .        case TC
3640: 4c 52 4c 5f 54 45 58 54 3a 0a 20 20 20 20 20 20  LRL_TEXT:.      
3650: 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21        if (objc !
3660: 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 20 20 20  = 2) {.         
3670: 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67         Tcl_Wrong
3680: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
3690: 32 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a 20 20  2, objv, "");.  
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
36b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20              }.. 
36d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
36e0: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
36f0: 20 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f 0a 20   input line */. 
3700: 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 53             Tcl_S
3710: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
3720: 72 70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rp,.            
3730: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
3740: 4f 62 6a 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66  Obj(rl_line_buff
3750: 65 72 20 3f 20 72 6c 5f 6c 69 6e 65 5f 62 75 66  er ? rl_line_buf
3760: 66 65 72 20 3a 20 22 22 2c 20 2d 31 29 29 3b 0a  fer : "", -1));.
3770: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3780: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 64 65 66 61  k;..        defa
3790: 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ult:.           
37a0: 20 67 6f 74 6f 20 42 41 44 5f 43 4f 4d 4d 41 4e   goto BAD_COMMAN
37b0: 44 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  D;.            /
37c0: 2a 20 4e 4f 54 52 45 41 43 48 45 44 20 2a 2f 0a  * NOTREACHED */.
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
37e0: 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65  k;.    }..    re
37f0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 42 41  turn TCL_OK;..BA
3800: 44 5f 43 4f 4d 4d 41 4e 44 3a 0a 20 20 20 20 54  D_COMMAND:.    T
3810: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
3820: 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20  interp,.        
3830: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
3840: 68 6f 75 6c 64 20 62 65 20 5c 22 72 65 61 64 6c  hould be \"readl
3850: 69 6e 65 20 6f 70 74 69 6f 6e 20 3f 61 72 67 20  ine option ?arg 
3860: 2e 2e 2e 3f 5c 22 22 2c 0a 20 20 20 20 20 20 20  ...?\"",.       
3870: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a   (char*) NULL);.
3880: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
3890: 52 52 4f 52 3b 0a 0a 7d 0a 0a 73 74 61 74 69 63  RROR;..}..static
38a0: 20 76 6f 69 64 0a 54 63 6c 52 65 61 64 6c 69 6e   void.TclReadlin
38b0: 65 52 65 61 64 48 61 6e 64 6c 65 72 28 43 6c 69  eReadHandler(Cli
38c0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
38d0: 74 61 2c 20 69 6e 74 20 6d 61 73 6b 29 0a 7b 0a  ta, int mask).{.
38e0: 20 20 20 20 69 66 20 28 6d 61 73 6b 20 26 20 54      if (mask & T
38f0: 43 4c 5f 52 45 41 44 41 42 4c 45 29 20 7b 0a 23  CL_READABLE) {.#
3900: 69 66 64 65 66 20 45 58 45 43 55 54 49 4e 47 5f  ifdef EXECUTING_
3910: 4d 41 43 52 4f 5f 4e 41 4d 45 0a 20 20 20 20 20  MACRO_NAME.     
3920: 20 20 20 64 6f 20 7b 0a 23 65 6e 64 69 66 0a 20     do {.#endif. 
3930: 20 20 20 20 20 20 20 20 20 20 20 72 6c 5f 63 61             rl_ca
3940: 6c 6c 62 61 63 6b 5f 72 65 61 64 5f 63 68 61 72  llback_read_char
3950: 28 29 3b 0a 23 69 66 64 65 66 20 45 58 45 43 55  ();.#ifdef EXECU
3960: 54 49 4e 47 5f 4d 41 43 52 4f 5f 4e 41 4d 45 0a  TING_MACRO_NAME.
3970: 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20          /**.    
3980: 20 20 20 20 20 2a 20 63 68 65 63 6b 2c 20 69 66       * check, if
3990: 20 77 65 27 72 65 20 69 6e 73 69 64 65 20 61 20   we're inside a 
39a0: 6d 61 63 72 6f 20 61 6e 64 0a 20 20 20 20 20 20  macro and.      
39b0: 20 20 20 2a 20 69 66 20 73 6f 2c 20 72 65 61 64     * if so, read
39c0: 20 61 6c 6c 20 6d 61 63 72 6f 20 63 68 61 72 61   all macro chara
39d0: 63 74 65 72 73 0a 20 20 20 20 20 20 20 20 20 2a  cters.         *
39e0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
39f0: 65 6f 6c 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f  eol..         */
3a00: 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65  .        } while
3a10: 20 28 45 58 45 43 55 54 49 4e 47 5f 4d 41 43 52   (EXECUTING_MACR
3a20: 4f 5f 4e 41 4d 45 20 26 26 20 21 54 63 6c 52 65  O_NAME && !TclRe
3a30: 61 64 6c 69 6e 65 4c 69 6e 65 43 6f 6d 70 6c 65  adlineLineComple
3a40: 74 65 28 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20  te());.#endif.  
3a50: 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f    }.}..static vo
3a60: 69 64 0a 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69  id.TclReadlineLi
3a70: 6e 65 43 6f 6d 70 6c 65 74 65 48 61 6e 64 6c 65  neCompleteHandle
3a80: 72 28 63 68 61 72 2a 20 70 74 72 29 0a 7b 0a 20  r(char* ptr).{. 
3a90: 20 20 20 69 66 20 28 21 70 74 72 29 20 7b 20 2f     if (!ptr) { /
3aa0: 2a 20 3c 63 2d 64 3e 20 2a 2f 0a 0a 20 20 20 20  * <c-d> */..    
3ab0: 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e 65 54      TclReadlineT
3ac0: 65 72 6d 69 6e 61 74 65 28 4c 49 4e 45 5f 45 4f  erminate(LINE_EO
3ad0: 46 29 3b 0a 0a 20 20 20 20 7d 20 65 6c 73 65 20  F);..    } else 
3ae0: 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20  {..        /**. 
3af0: 20 20 20 20 20 20 20 20 2a 20 46 72 6f 6d 20 76          * From v
3b00: 65 72 73 69 6f 6e 20 30 2e 39 2e 33 20 75 70 77  ersion 0.9.3 upw
3b10: 61 72 64 73 2c 20 61 6c 6c 20 6c 69 6e 65 73 20  ards, all lines 
3b20: 61 72 65 0a 20 20 20 20 20 20 20 20 20 2a 20 72  are.         * r
3b30: 65 74 75 72 6e 65 64 2c 20 65 76 65 6e 20 65 6d  eturned, even em
3b40: 70 74 79 20 6c 69 6e 65 73 2e 20 28 4f 6e 6c 79  pty lines. (Only
3b50: 20 6e 6f 6e 2d 65 6d 70 74 79 0a 20 20 20 20 20   non-empty.     
3b60: 20 20 20 20 2a 20 6c 69 6e 65 73 20 61 72 65 20      * lines are 
3b70: 73 74 75 66 66 65 64 20 69 6e 20 72 65 61 64 6c  stuffed in readl
3b80: 69 6e 65 27 73 20 68 69 73 74 6f 72 79 2e 29 0a  ine's history.).
3b90: 20 20 20 20 20 20 20 20 20 2a 20 54 68 65 20 63           * The c
3ba0: 61 6c 6c 69 6e 67 20 73 63 72 69 70 74 20 69 73  alling script is
3bb0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
3bc0: 20 68 61 6e 64 6c 69 6e 67 0a 20 20 20 20 20 20   handling.      
3bd0: 20 20 20 2a 20 65 6d 70 74 79 20 73 74 72 69 6e     * empty strin
3be0: 67 73 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f 0a  gs..         */.
3bf0: 0a 20 20 20 20 20 20 20 20 63 68 61 72 2a 20 65  .        char* e
3c00: 78 70 61 6e 73 69 6f 6e 20 3d 20 28 63 68 61 72  xpansion = (char
3c10: 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 20  *) NULL;.       
3c20: 20 69 6e 74 20 73 74 61 74 75 73 20 3d 20 68 69   int status = hi
3c30: 73 74 6f 72 79 5f 65 78 70 61 6e 64 28 70 74 72  story_expand(ptr
3c40: 2c 20 26 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 0a  , &expansion);..
3c50: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
3c60: 75 73 20 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20  us >= 2) {.     
3c70: 20 20 20 20 20 20 20 2f 2a 20 54 4f 44 4f 3a 20         /* TODO: 
3c80: 6d 61 6b 65 20 74 68 69 73 20 61 20 76 61 6c 69  make this a vali
3c90: 64 20 74 63 6c 20 6f 75 74 70 75 74 20 2a 2f 0a  d tcl output */.
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
3cb0: 74 66 28 22 25 73 5c 6e 22 2c 20 65 78 70 61 6e  tf("%s\n", expan
3cc0: 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  sion);.         
3cd0: 20 20 20 46 52 45 45 28 70 74 72 29 3b 0a 20 20     FREE(ptr);.  
3ce0: 20 20 20 20 20 20 20 20 20 20 46 52 45 45 28 65            FREE(e
3cf0: 78 70 61 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 20  xpansion);.     
3d00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
3d10: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
3d20: 20 28 73 74 61 74 75 73 20 3c 3d 20 2d 31 29 20   (status <= -1) 
3d30: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63  {.            Tc
3d40: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 0a 20  l_AppendResult. 
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
3d60: 74 63 6c 72 6c 5f 69 6e 74 65 72 70 2c 20 22 65  tclrl_interp, "e
3d70: 72 72 6f 72 20 69 6e 20 68 69 73 74 6f 72 79 20  rror in history 
3d80: 65 78 70 61 6e 73 69 6f 6e 3a 20 22 2c 20 65 78  expansion: ", ex
3d90: 70 61 6e 73 69 6f 6e 2c 20 22 5c 6e 22 2c 20 28  pansion, "\n", (
3da0: 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20  char*) NULL);.  
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
3dc0: 6c 52 65 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61  lReadlineTermina
3dd0: 74 65 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 20  te(TCL_ERROR);. 
3de0: 20 20 20 20 20 20 20 20 20 20 20 46 52 45 45 28             FREE(
3df0: 70 74 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ptr);.          
3e00: 20 20 46 52 45 45 28 65 78 70 61 6e 73 69 6f 6e    FREE(expansion
3e10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
3e20: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
3e30: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
3e40: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
3e50: 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65 72  sult(tclrl_inter
3e60: 70 2c 20 65 78 70 61 6e 73 69 6f 6e 2c 20 28 63  p, expansion, (c
3e70: 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20  har*) NULL);.   
3e80: 20 20 20 20 20 7d 0a 0a 20 20 20 20 23 69 66 64       }..    #ifd
3e90: 65 66 20 45 58 45 43 55 54 49 4e 47 5f 4d 41 43  ef EXECUTING_MAC
3ea0: 52 4f 5f 4e 41 4d 45 0a 20 20 20 20 20 20 20 20  RO_NAME.        
3eb0: 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 64  /**.         * d
3ec0: 6f 6e 27 74 20 73 74 75 66 66 20 6d 61 63 72 6f  on't stuff macro
3ed0: 20 6c 69 6e 65 73 0a 20 20 20 20 20 20 20 20 20   lines.         
3ee0: 2a 20 69 6e 74 6f 20 72 65 61 64 6c 69 6e 65 27  * into readline'
3ef0: 73 20 68 69 73 74 6f 72 79 2e 0a 20 20 20 20 20  s history..     
3f00: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
3f10: 66 28 21 45 58 45 43 55 54 49 4e 47 5f 4d 41 43  f(!EXECUTING_MAC
3f20: 52 4f 5f 4e 41 4d 45 29 20 7b 0a 20 20 20 20 23  RO_NAME) {.    #
3f30: 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 20 20  endif.          
3f40: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20 20    /**.          
3f50: 20 20 20 2a 20 64 6f 6e 27 74 20 73 74 75 66 66     * don't stuff
3f60: 20 65 6d 70 74 79 20 6c 69 6e 65 73 0a 20 20 20   empty lines.   
3f70: 20 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 6f            * into
3f80: 20 72 65 61 64 6c 69 6e 65 27 73 20 68 69 73 74   readline's hist
3f90: 6f 72 79 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
3fa0: 20 20 2a 20 64 6f 6e 27 74 20 73 74 75 66 66 20    * don't stuff 
3fb0: 74 77 69 63 65 20 74 68 65 20 73 61 6d 65 0a 20  twice the same. 
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 6c 69              * li
3fd0: 6e 65 20 69 6e 74 6f 20 72 65 61 64 6c 69 6e 65  ne into readline
3fe0: 27 73 20 68 69 73 74 6f 72 79 2e 0a 20 20 20 20  's history..    
3ff0: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20           */.    
4000: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 70 61          if (expa
4010: 6e 73 69 6f 6e 20 26 26 20 2a 65 78 70 61 6e 73  nsion && *expans
4020: 69 6f 6e 20 26 26 20 28 21 74 63 6c 72 6c 5f 6c  ion && (!tclrl_l
4030: 61 73 74 5f 6c 69 6e 65 20 7c 7c 0a 20 20 20 20  ast_line ||.    
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4050: 73 74 72 63 6d 70 28 74 63 6c 72 6c 5f 6c 61 73  strcmp(tclrl_las
4060: 74 5f 6c 69 6e 65 2c 20 65 78 70 61 6e 73 69 6f  t_line, expansio
4070: 6e 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  n))) {.         
4080: 20 20 20 20 20 20 20 61 64 64 5f 68 69 73 74 6f         add_histo
4090: 72 79 28 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 20  ry(expansion);. 
40a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
40b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 63 6c           if (tcl
40c0: 72 6c 5f 6c 61 73 74 5f 6c 69 6e 65 29 0a 20 20  rl_last_line).  
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52                FR
40e0: 45 45 28 74 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69  EE(tclrl_last_li
40f0: 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ne);.           
4100: 20 74 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69 6e 65   tclrl_last_line
4110: 20 3d 20 73 74 72 64 75 70 28 65 78 70 61 6e 73   = strdup(expans
4120: 69 6f 6e 29 3b 0a 20 20 20 20 23 69 66 64 65 66  ion);.    #ifdef
4130: 20 45 58 45 43 55 54 49 4e 47 5f 4d 41 43 52 4f   EXECUTING_MACRO
4140: 5f 4e 41 4d 45 0a 20 20 20 20 20 20 20 20 7d 0a  _NAME.        }.
4150: 20 20 20 20 23 65 6e 64 69 66 0a 20 20 20 20 20      #endif.     
4160: 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20     /**.         
4170: 2a 20 74 65 6c 6c 20 74 68 65 20 63 61 6c 6c 69  * tell the calli
4180: 6e 67 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 74  ng routines to t
4190: 65 72 6d 69 6e 61 74 65 2e 0a 20 20 20 20 20 20  erminate..      
41a0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 54 63     */.        Tc
41b0: 6c 52 65 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61  lReadlineTermina
41c0: 74 65 28 4c 49 4e 45 5f 43 4f 4d 50 4c 45 54 45  te(LINE_COMPLETE
41d0: 29 3b 0a 20 20 20 20 20 20 20 20 46 52 45 45 28  );.        FREE(
41e0: 70 74 72 29 3b 0a 20 20 20 20 20 20 20 20 46 52  ptr);.        FR
41f0: 45 45 28 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 20  EE(expansion);. 
4200: 20 20 20 7d 0a 7d 0a 0a 69 6e 74 0a 54 63 6c 72     }.}..int.Tclr
4210: 65 61 64 6c 69 6e 65 5f 53 61 66 65 49 6e 69 74  eadline_SafeInit
4220: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
4230: 65 72 70 29 0a 7b 0a 20 20 20 20 72 65 74 75 72  erp).{.    retur
4240: 6e 20 54 63 6c 72 65 61 64 6c 69 6e 65 5f 49 6e  n Tclreadline_In
4250: 69 74 28 69 6e 74 65 72 70 29 3b 0a 7d 0a 0a 69  it(interp);.}..i
4260: 6e 74 0a 54 63 6c 72 65 61 64 6c 69 6e 65 5f 49  nt.Tclreadline_I
4270: 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  nit(Tcl_Interp *
4280: 69 6e 74 65 72 70 29 0a 7b 0a 20 20 20 20 69 6e  interp).{.    in
4290: 74 20 73 74 61 74 75 73 3b 0a 20 20 20 20 54 63  t status;.    Tc
42a0: 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61  l_CreateObjComma
42b0: 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63  nd(interp, "::tc
42c0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 72 65 61 64 6c  lreadline::readl
42d0: 69 6e 65 22 2c 20 54 63 6c 52 65 61 64 6c 69 6e  ine", TclReadlin
42e0: 65 43 6d 64 2c 0a 20 20 20 20 20 20 20 20 28 43  eCmd,.        (C
42f0: 6c 69 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 2c  lientData) NULL,
4300: 20 28 54 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50   (Tcl_CmdDeleteP
4310: 72 6f 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20  roc *) NULL);.  
4320: 20 20 74 63 6c 72 6c 5f 69 6e 74 65 72 70 20 3d    tclrl_interp =
4330: 20 69 6e 74 65 72 70 3b 0a 20 20 20 20 69 66 20   interp;.    if 
4340: 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74  (TCL_OK != (stat
4350: 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  us = Tcl_LinkVar
4360: 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63 6c 72  (interp, "::tclr
4370: 65 61 64 6c 69 6e 65 3a 3a 68 69 73 74 6f 72 79  eadline::history
4380: 4c 65 6e 67 74 68 22 2c 0a 20 20 20 20 20 20 20  Length",.       
4390: 20 20 20 20 20 28 63 68 61 72 2a 29 20 26 74 63       (char*) &tc
43a0: 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65 6e 67  lrl_history_leng
43b0: 74 68 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  th, TCL_LINK_INT
43c0: 29 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ))).        retu
43d0: 72 6e 20 73 74 61 74 75 73 3b 0a 0a 20 20 20 20  rn status;..    
43e0: 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73  if (TCL_OK != (s
43f0: 74 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b  tatus = Tcl_Link
4400: 56 61 72 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  Var(interp, "::t
4410: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 6c 69 62 72  clreadline::libr
4420: 61 72 79 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ary",.          
4430: 20 20 28 63 68 61 72 2a 29 20 26 74 63 6c 72 6c    (char*) &tclrl
4440: 5f 6c 69 62 72 61 72 79 2c 20 54 43 4c 5f 4c 49  _library, TCL_LI
4450: 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c 5f  NK_STRING | TCL_
4460: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 29  LINK_READ_ONLY))
4470: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
4480: 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69 66 20   status;.    if 
4490: 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74  (TCL_OK != (stat
44a0: 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  us = Tcl_LinkVar
44b0: 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63 6c 72  (interp, "::tclr
44c0: 65 61 64 6c 69 6e 65 3a 3a 76 65 72 73 69 6f 6e  eadline::version
44d0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  ",.            (
44e0: 63 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f 76 65  char*) &tclrl_ve
44f0: 72 73 69 6f 6e 5f 73 74 72 2c 20 54 43 4c 5f 4c  rsion_str, TCL_L
4500: 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c  INK_STRING | TCL
4510: 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29  _LINK_READ_ONLY)
4520: 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )).        retur
4530: 6e 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69 66  n status;.    if
4540: 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61   (TCL_OK != (sta
4550: 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61  tus = Tcl_LinkVa
4560: 72 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63 6c  r(interp, "::tcl
4570: 72 65 61 64 6c 69 6e 65 3a 3a 70 61 74 63 68 4c  readline::patchL
4580: 65 76 65 6c 22 2c 0a 20 20 20 20 20 20 20 20 20  evel",.         
4590: 20 20 20 28 63 68 61 72 2a 29 20 26 74 63 6c 72     (char*) &tclr
45a0: 6c 5f 70 61 74 63 68 6c 65 76 65 6c 5f 73 74 72  l_patchlevel_str
45b0: 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e  , TCL_LINK_STRIN
45c0: 47 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  G | TCL_LINK_REA
45d0: 44 5f 4f 4e 4c 59 29 29 29 0a 20 20 20 20 20 20  D_ONLY))).      
45e0: 20 20 72 65 74 75 72 6e 20 73 74 61 74 75 73 3b    return status;
45f0: 0a 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20  .    if (TCL_OK 
4600: 21 3d 20 28 73 74 61 74 75 73 20 3d 20 54 63 6c  != (status = Tcl
4610: 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
4620: 20 22 3a 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a   "::tclreadline:
4630: 3a 6c 69 63 65 6e 73 65 22 2c 0a 20 20 20 20 20  :license",.     
4640: 20 20 20 20 20 20 20 28 63 68 61 72 2a 29 20 26         (char*) &
4650: 74 63 6c 72 6c 5f 6c 69 63 65 6e 73 65 2c 20 54  tclrl_license, T
4660: 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c  CL_LINK_STRING |
4670: 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f   TCL_LINK_READ_O
4680: 4e 4c 59 29 29 29 0a 20 20 20 20 20 20 20 20 72  NLY))).        r
4690: 65 74 75 72 6e 20 73 74 61 74 75 73 3b 0a 0a 20  eturn status;.. 
46a0: 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d     if (TCL_OK !=
46b0: 20 28 73 74 61 74 75 73 20 3d 20 54 63 6c 5f 4c   (status = Tcl_L
46c0: 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
46d0: 74 63 6c 72 65 61 64 6c 69 6e 65 5f 6c 69 62 72  tclreadline_libr
46e0: 61 72 79 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ary",.          
46f0: 20 20 28 63 68 61 72 2a 29 20 26 74 63 6c 72 6c    (char*) &tclrl
4700: 5f 6c 69 62 72 61 72 79 2c 20 54 43 4c 5f 4c 49  _library, TCL_LI
4710: 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c 5f  NK_STRING | TCL_
4720: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 29  LINK_READ_ONLY))
4730: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
4740: 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69 66 20   status;.    if 
4750: 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74  (TCL_OK != (stat
4760: 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  us = Tcl_LinkVar
4770: 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 72 65 61  (interp, "tclrea
4780: 64 6c 69 6e 65 5f 76 65 72 73 69 6f 6e 22 2c 0a  dline_version",.
4790: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 68 61              (cha
47a0: 72 2a 29 20 26 74 63 6c 72 6c 5f 76 65 72 73 69  r*) &tclrl_versi
47b0: 6f 6e 5f 73 74 72 2c 20 54 43 4c 5f 4c 49 4e 4b  on_str, TCL_LINK
47c0: 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c 5f 4c 49  _STRING | TCL_LI
47d0: 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 29 29 0a  NK_READ_ONLY))).
47e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
47f0: 74 61 74 75 73 3b 0a 20 20 20 20 69 66 20 28 54  tatus;.    if (T
4800: 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74 75 73  CL_OK != (status
4810: 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69   = Tcl_LinkVar(i
4820: 6e 74 65 72 70 2c 20 22 74 63 6c 72 65 61 64 6c  nterp, "tclreadl
4830: 69 6e 65 5f 70 61 74 63 68 4c 65 76 65 6c 22 2c  ine_patchLevel",
4840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 68  .            (ch
4850: 61 72 2a 29 20 26 74 63 6c 72 6c 5f 70 61 74 63  ar*) &tclrl_patc
4860: 68 6c 65 76 65 6c 5f 73 74 72 2c 20 54 43 4c 5f  hlevel_str, TCL_
4870: 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43  LINK_STRING | TC
4880: 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  L_LINK_READ_ONLY
4890: 29 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ))).        retu
48a0: 72 6e 20 73 74 61 74 75 73 3b 0a 0a 20 20 20 20  rn status;..    
48b0: 72 65 74 75 72 6e 20 54 63 6c 5f 50 6b 67 50 72  return Tcl_PkgPr
48c0: 6f 76 69 64 65 28 69 6e 74 65 72 70 2c 20 22 74  ovide(interp, "t
48d0: 63 6c 72 65 61 64 6c 69 6e 65 22 2c 20 28 63 68  clreadline", (ch
48e0: 61 72 2a 29 74 63 6c 72 6c 5f 76 65 72 73 69 6f  ar*)tclrl_versio
48f0: 6e 5f 73 74 72 29 3b 0a 7d 0a 0a 73 74 61 74 69  n_str);.}..stati
4900: 63 20 69 6e 74 0a 54 63 6c 52 65 61 64 6c 69 6e  c int.TclReadlin
4910: 65 49 6e 69 74 69 61 6c 69 7a 65 28 54 63 6c 5f  eInitialize(Tcl_
4920: 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 70 2c 20  Interp* interp, 
4930: 63 68 61 72 2a 20 68 69 73 74 6f 72 79 66 69 6c  char* historyfil
4940: 65 29 0a 7b 0a 20 20 20 20 72 6c 5f 72 65 61 64  e).{.    rl_read
4950: 6c 69 6e 65 5f 6e 61 6d 65 20 3d 20 22 74 63 6c  line_name = "tcl
4960: 72 65 61 64 6c 69 6e 65 22 3b 0a 20 20 20 20 2f  readline";.    /
4970: 2a 20 20 20 20 72 6c 5f 73 70 65 63 69 61 6c 5f  *    rl_special_
4980: 70 72 65 66 69 78 65 73 20 3d 20 22 24 7b 5c 22  prefixes = "${\"
4990: 5b 22 3b 20 2a 2f 0a 20 20 20 20 72 6c 5f 73 70  ["; */.    rl_sp
49a0: 65 63 69 61 6c 5f 70 72 65 66 69 78 65 73 20 3d  ecial_prefixes =
49b0: 20 22 24 22 3b 0a 20 20 20 20 2f 2a 2a 0a 20 20   "$";.    /**.  
49c0: 20 20 20 2a 20 64 65 66 61 75 6c 74 20 69 73 20     * default is 
49d0: 22 20 5c 74 5c 6e 5c 22 5c 5c 27 60 40 24 3e 3c  " \t\n\"\\'`@$><
49e0: 3d 3b 7c 26 7b 28 22 0a 20 20 20 20 20 2a 20 72  =;|&{(".     * r
49f0: 65 6d 6f 76 65 64 20 22 28 22 20 3c 2d 2d 20 61  emoved "(" <-- a
4a00: 72 72 61 79 73 0a 20 20 20 20 20 2a 20 72 65 6d  rrays.     * rem
4a10: 6f 76 65 64 20 22 7b 22 20 3c 2d 2d 20 60 24 7b  oved "{" <-- `${
4a20: 27 20 76 61 72 69 61 62 6c 65 73 0a 20 20 20 20  ' variables.    
4a30: 20 2a 20 72 65 6d 6f 76 65 64 20 22 3c 22 20 3c   * removed "<" <
4a40: 2d 2d 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 6c 69  -- completion li
4a50: 73 74 73 20 77 69 74 68 20 3c 20 2e 2e 2e 20 3e  sts with < ... >
4a60: 0a 20 20 20 20 20 2a 20 61 64 64 65 64 20 22 5b  .     * added "[
4a70: 5d 22 0a 20 20 20 20 20 2a 20 61 64 64 65 64 20  ]".     * added 
4a80: 22 7d 22 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  "}".     */.    
4a90: 2f 2a 20 31 31 2e 53 65 70 20 72 6c 5f 62 61 73  /* 11.Sep rl_bas
4aa0: 69 63 5f 77 6f 72 64 5f 62 72 65 61 6b 5f 63 68  ic_word_break_ch
4ab0: 61 72 61 63 74 65 72 73 20 3d 20 22 20 5c 74 5c  aracters = " \t\
4ac0: 6e 5c 22 5c 5c 40 24 7d 3d 3b 7c 26 5b 5d 22 3b  n\"\\@$}=;|&[]";
4ad0: 20 2a 2f 0a 20 20 20 20 2f 2a 20 62 65 73 73 65   */.    /* besse
4ae0: 72 20 28 31 31 2e 20 53 65 70 74 29 20 32 2e 20  r (11. Sept) 2. 
4af0: 28 72 65 6d 6f 76 65 64 20 5c 22 29 20 2a 2f 0a  (removed \") */.
4b00: 20 20 20 20 2f 2a 20 72 6c 5f 62 61 73 69 63 5f      /* rl_basic_
4b10: 77 6f 72 64 5f 62 72 65 61 6b 5f 63 68 61 72 61  word_break_chara
4b20: 63 74 65 72 73 20 3d 20 22 20 5c 74 5c 6e 5c 5c  cters = " \t\n\\
4b30: 40 24 7d 3d 3b 7c 26 5b 5d 22 3b 20 2a 2f 0a 20  @$}=;|&[]"; */. 
4b40: 20 20 20 2f 2a 20 62 65 73 73 65 72 20 28 31 31     /* besser (11
4b50: 2e 20 53 65 70 74 29 20 33 2e 20 28 72 65 6d 6f  . Sept) 3. (remo
4b60: 76 65 64 20 7d 29 20 2a 2f 0a 20 20 20 20 72 6c  ved }) */.    rl
4b70: 5f 62 61 73 69 63 5f 77 6f 72 64 5f 62 72 65 61  _basic_word_brea
4b80: 6b 5f 63 68 61 72 61 63 74 65 72 73 20 3d 20 22  k_characters = "
4b90: 20 5c 74 5c 6e 5c 5c 40 24 3d 3b 7c 26 5b 5d 22   \t\n\\@$=;|&[]"
4ba0: 3b 0a 23 69 66 20 30 0a 20 20 20 20 72 6c 5f 62  ;.#if 0.    rl_b
4bb0: 61 73 69 63 5f 71 75 6f 74 65 5f 63 68 61 72 61  asic_quote_chara
4bc0: 63 74 65 72 73 20 3d 20 22 5c 22 7b 22 3b 20 2f  cters = "\"{"; /
4bd0: 2a 20 58 58 58 20 3f 3f 3f 20 58 58 58 20 2a 2f  * XXX ??? XXX */
4be0: 0a 20 20 20 20 72 6c 5f 63 6f 6d 70 6c 65 74 65  .    rl_complete
4bf0: 72 5f 71 75 6f 74 65 5f 63 68 61 72 61 63 74 65  r_quote_characte
4c00: 72 73 20 3d 20 22 5c 22 22 3b 0a 23 65 6e 64 69  rs = "\"";.#endi
4c10: 66 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20  f.    /*.       
4c20: 72 6c 5f 66 69 6c 65 6e 61 6d 65 5f 71 75 6f 74  rl_filename_quot
4c30: 65 5f 63 68 61 72 61 63 74 65 72 73 0a 20 20 20  e_characters.   
4c40: 20 20 20 20 3d 20 22 61 62 63 64 65 66 67 68 69      = "abcdefghi
4c50: 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79  jklmnopqrstuvwxy
4c60: 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  zABCDEFGHIJKLMNO
4c70: 50 51 52 53 54 55 56 57 58 59 5a 22 3b 0a 0a 20  PQRSTUVWXYZ";.. 
4c80: 20 20 20 20 20 20 72 6c 5f 66 69 6c 65 6e 61 6d        rl_filenam
4c90: 65 5f 71 75 6f 74 69 6e 67 5f 66 75 6e 63 74 69  e_quoting_functi
4ca0: 6f 6e 0a 20 20 20 20 20 20 20 3d 20 28 43 50 46  on.       = (CPF
4cb0: 75 6e 63 74 69 6f 6e 2a 29 20 54 63 6c 52 65 61  unction*) TclRea
4cc0: 64 6c 69 6e 65 46 69 6c 65 6e 61 6d 65 51 75 6f  dlineFilenameQuo
4cd0: 74 69 6e 67 46 75 6e 63 74 69 6f 6e 3b 0a 20 20  tingFunction;.  
4ce0: 20 20 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20 20     */.    /*.   
4cf0: 20 20 20 20 72 6c 5f 66 69 6c 65 6e 61 6d 65 5f      rl_filename_
4d00: 71 75 6f 74 69 6e 67 5f 64 65 73 69 72 65 64 20  quoting_desired 
4d10: 3d 20 31 3b 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  = 1;.     */..  
4d20: 20 20 75 73 69 6e 67 5f 68 69 73 74 6f 72 79 28    using_history(
4d30: 29 3b 0a 20 20 20 20 69 66 20 28 21 74 63 6c 72  );.    if (!tclr
4d40: 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 29 0a 20 20  l_eof_string).  
4d50: 20 20 20 20 20 20 74 63 6c 72 6c 5f 65 6f 66 5f        tclrl_eof_
4d60: 73 74 72 69 6e 67 20 3d 20 73 74 72 64 75 70 28  string = strdup(
4d70: 22 70 75 74 73 20 7b 7d 3b 20 65 78 69 74 22 29  "puts {}; exit")
4d80: 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  ;..    /*.     *
4d90: 20 74 72 79 20 74 6f 20 72 65 61 64 20 68 69 73   try to read his
4da0: 74 6f 72 79 66 69 6c 65 20 69 6e 20 68 6f 6d 65  toryfile in home
4db0: 0a 20 20 20 20 20 2a 20 64 69 72 65 63 74 6f 72  .     * director
4dc0: 79 2e 20 49 66 20 74 68 69 73 20 66 61 69 6c 65  y. If this faile
4dd0: 73 2c 20 74 68 69 73 0a 20 20 20 20 20 2a 20 69  s, this.     * i
4de0: 73 20 2a 6e 6f 74 2a 20 61 6e 20 65 72 72 6f 72  s *not* an error
4df0: 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 72 6c  ..     */.    rl
4e00: 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c  _attempted_compl
4e10: 65 74 69 6f 6e 5f 66 75 6e 63 74 69 6f 6e 20 3d  etion_function =
4e20: 20 28 43 50 50 46 75 6e 63 74 69 6f 6e 20 2a 29   (CPPFunction *)
4e30: 20 54 63 6c 52 65 61 64 6c 69 6e 65 43 6f 6d 70   TclReadlineComp
4e40: 6c 65 74 69 6f 6e 3b 0a 20 20 20 20 69 66 20 28  letion;.    if (
4e50: 72 65 61 64 5f 68 69 73 74 6f 72 79 28 68 69 73  read_history(his
4e60: 74 6f 72 79 66 69 6c 65 29 29 20 7b 0a 20 20 20  toryfile)) {.   
4e70: 20 20 20 20 20 69 66 20 28 77 72 69 74 65 5f 68       if (write_h
4e80: 69 73 74 6f 72 79 28 68 69 73 74 6f 72 79 66 69  istory(historyfi
4e90: 6c 65 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  le)) {.         
4ea0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
4eb0: 75 6c 74 20 28 69 6e 74 65 72 70 2c 20 22 77 61  ult (interp, "wa
4ec0: 72 6e 69 6e 67 3a 20 60 22 2c 0a 20 20 20 20 20  rning: `",.     
4ed0: 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f             histo
4ee0: 72 79 66 69 6c 65 2c 20 22 27 20 69 73 20 6e 6f  ryfile, "' is no
4ef0: 74 20 77 72 69 74 61 62 6c 65 2e 22 2c 20 28 63  t writable.", (c
4f00: 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20  har*) NULL);.   
4f10: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4f20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
4f30: 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 62 6c  }..static int.bl
4f40: 61 6e 6b 5f 6c 69 6e 65 28 63 68 61 72 2a 20 73  ank_line(char* s
4f50: 74 72 29 0a 7b 0a 20 20 20 20 63 68 61 72 2a 20  tr).{.    char* 
4f60: 70 74 72 3b 0a 20 20 20 20 66 6f 72 20 28 70 74  ptr;.    for (pt
4f70: 72 20 3d 20 73 74 72 3b 20 70 74 72 20 26 26 20  r = str; ptr && 
4f80: 2a 70 74 72 3b 20 70 74 72 2b 2b 29 20 7b 0a 20  *ptr; ptr++) {. 
4f90: 20 20 20 20 20 20 20 69 66 20 28 21 49 53 57 48         if (!ISWH
4fa0: 49 54 45 28 2a 70 74 72 29 29 0a 20 20 20 20 20  ITE(*ptr)).     
4fb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
4fc0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
4fd0: 6e 20 31 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63  n 1;.}..static c
4fe0: 68 61 72 2a 2a 0a 54 63 6c 52 65 61 64 6c 69 6e  har**.TclReadlin
4ff0: 65 43 6f 6d 70 6c 65 74 69 6f 6e 28 63 68 61 72  eCompletion(char
5000: 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74 61 72  * text, int star
5010: 74 2c 20 69 6e 74 20 65 6e 64 29 0a 7b 0a 20 20  t, int end).{.  
5020: 20 20 63 68 61 72 2a 2a 20 6d 61 74 63 68 65 73    char** matches
5030: 20 3d 20 28 63 68 61 72 2a 2a 29 20 4e 55 4c 4c   = (char**) NULL
5040: 3b 0a 20 20 20 20 69 6e 74 20 73 74 61 74 75 73  ;.    int status
5050: 3b 0a 20 20 20 20 72 6c 5f 63 6f 6d 70 6c 65 74  ;.    rl_complet
5060: 69 6f 6e 5f 61 70 70 65 6e 64 5f 63 68 61 72 61  ion_append_chara
5070: 63 74 65 72 20 3d 20 27 20 27 3b 20 2f 2a 20 72  cter = ' '; /* r
5080: 65 73 65 74 2c 20 6a 75 73 74 20 69 6e 20 63 61  eset, just in ca
5090: 73 65 20 2e 2e 2e 20 2a 2f 0a 0a 20 20 20 20 69  se ... */..    i
50a0: 66 20 28 74 65 78 74 20 26 26 20 28 27 21 27 20  f (text && ('!' 
50b0: 3d 3d 20 74 65 78 74 5b 30 5d 0a 20 20 20 20 20  == text[0].     
50c0: 20 20 20 20 20 20 20 7c 7c 20 28 73 74 61 72 74         || (start
50d0: 20 26 26 20 72 6c 5f 6c 69 6e 65 5f 62 75 66 66   && rl_line_buff
50e0: 65 72 5b 73 74 61 72 74 20 2d 20 31 5d 20 3d 3d  er[start - 1] ==
50f0: 20 27 21 27 20 2f 2a 20 66 6f 72 20 27 24 27 20   '!' /* for '$' 
5100: 2a 2f 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20  */))) {.        
5110: 63 68 61 72 2a 20 65 78 70 61 6e 73 69 6f 6e 20  char* expansion 
5120: 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a  = (char*) NULL;.
5130: 20 20 20 20 20 20 20 20 69 6e 74 20 6f 6c 64 6c          int oldl
5140: 65 6e 20 3d 20 73 74 72 6c 65 6e 28 72 6c 5f 6c  en = strlen(rl_l
5150: 69 6e 65 5f 62 75 66 66 65 72 29 3b 0a 20 20 20  ine_buffer);.   
5160: 20 20 20 20 20 73 74 61 74 75 73 20 3d 20 68 69       status = hi
5170: 73 74 6f 72 79 5f 65 78 70 61 6e 64 28 72 6c 5f  story_expand(rl_
5180: 6c 69 6e 65 5f 62 75 66 66 65 72 2c 20 26 65 78  line_buffer, &ex
5190: 70 61 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20  pansion);.      
51a0: 20 20 69 66 20 28 73 74 61 74 75 73 20 3e 3d 20    if (status >= 
51b0: 31 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  1) {.           
51c0: 20 72 6c 5f 65 78 74 65 6e 64 5f 6c 69 6e 65 5f   rl_extend_line_
51d0: 62 75 66 66 65 72 28 73 74 72 6c 65 6e 28 65 78  buffer(strlen(ex
51e0: 70 61 6e 73 69 6f 6e 29 20 2b 20 31 29 3b 0a 20  pansion) + 1);. 
51f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 63 70             strcp
5200: 79 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72  y(rl_line_buffer
5210: 2c 20 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 20 20  , expansion);.  
5220: 20 20 20 20 20 20 20 20 20 20 72 6c 5f 65 6e 64            rl_end
5230: 20 3d 20 73 74 72 6c 65 6e 28 65 78 70 61 6e 73   = strlen(expans
5240: 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ion);.          
5250: 20 20 72 6c 5f 70 6f 69 6e 74 20 2b 3d 20 73 74    rl_point += st
5260: 72 6c 65 6e 28 65 78 70 61 6e 73 69 6f 6e 29 20  rlen(expansion) 
5270: 2d 20 6f 6c 64 6c 65 6e 3b 0a 20 20 20 20 20 20  - oldlen;.      
5280: 20 20 20 20 20 20 46 52 45 45 28 65 78 70 61 6e        FREE(expan
5290: 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  sion);.         
52a0: 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 20     /*.          
52b0: 20 20 20 2a 20 54 4f 44 4f 3a 0a 20 20 20 20 20     * TODO:.     
52c0: 20 20 20 20 20 20 20 20 2a 20 62 65 63 61 75 73          * becaus
52d0: 65 20 77 65 20 72 65 74 75 72 6e 20 30 20 3d 3d  e we return 0 ==
52e0: 20 6d 61 74 63 68 65 73 2c 0a 20 20 20 20 20 20   matches,.      
52f0: 20 20 20 20 20 20 20 2a 20 74 68 65 20 66 69 6c         * the fil
5300: 65 6e 61 6d 65 20 63 6f 6d 70 6c 65 74 65 72 20  ename completer 
5310: 77 69 6c 6c 20 73 74 69 6c 6c 20 62 65 65 70 2e  will still beep.
5320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6c  .             rl
5330: 5f 69 6e 68 69 62 69 74 5f 63 6f 6d 70 6c 65 74  _inhibit_complet
5340: 69 6f 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ion = 1;.       
5350: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
5360: 20 20 20 20 20 72 65 74 75 72 6e 20 6d 61 74 63       return matc
5370: 68 65 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  hes;.        }. 
5380: 20 20 20 20 20 20 20 46 52 45 45 28 65 78 70 61         FREE(expa
5390: 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 7d 0a 0a 20  nsion);.    }.. 
53a0: 20 20 20 69 66 20 28 74 63 6c 72 6c 5f 63 75 73     if (tclrl_cus
53b0: 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29 20 7b  tom_completer) {
53c0: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 73 74  .        char st
53d0: 61 72 74 5f 73 5b 42 55 46 53 49 5a 5d 2c 20 65  art_s[BUFSIZ], e
53e0: 6e 64 5f 73 5b 42 55 46 53 49 5a 5d 3b 0a 20 20  nd_s[BUFSIZ];.  
53f0: 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 2a 20 6f        Tcl_Obj* o
5400: 62 6a 3b 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  bj;.        Tcl_
5410: 4f 62 6a 2a 2a 20 6f 62 6a 76 3b 0a 20 20 20 20  Obj** objv;.    
5420: 20 20 20 20 69 6e 74 20 6f 62 6a 63 3b 0a 20 20      int objc;.  
5430: 20 20 20 20 20 20 69 6e 74 20 73 74 61 74 65 3b        int state;
5440: 0a 20 20 20 20 20 20 20 20 63 68 61 72 2a 20 71  .        char* q
5450: 75 6f 74 65 64 5f 74 65 78 74 20 3d 20 54 63 6c  uoted_text = Tcl
5460: 52 65 61 64 6c 69 6e 65 51 75 6f 74 65 28 74 65  ReadlineQuote(te
5470: 78 74 2c 20 22 24 5b 5d 7b 7d 5c 22 22 29 3b 0a  xt, "$[]{}\"");.
5480: 20 20 20 20 20 20 20 20 63 68 61 72 2a 20 71 75          char* qu
5490: 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66  oted_rl_line_buf
54a0: 66 65 72 20 3d 20 54 63 6c 52 65 61 64 6c 69 6e  fer = TclReadlin
54b0: 65 51 75 6f 74 65 28 72 6c 5f 6c 69 6e 65 5f 62  eQuote(rl_line_b
54c0: 75 66 66 65 72 2c 20 22 24 5b 5d 7b 7d 5c 22 22  uffer, "$[]{}\""
54d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 70 72 69 6e  );.        sprin
54e0: 74 66 28 73 74 61 72 74 5f 73 2c 20 22 25 64 22  tf(start_s, "%d"
54f0: 2c 20 73 74 61 72 74 29 3b 0a 20 20 20 20 20 20  , start);.      
5500: 20 20 73 70 72 69 6e 74 66 28 65 6e 64 5f 73 2c    sprintf(end_s,
5510: 20 22 25 64 22 2c 20 65 6e 64 29 3b 0a 20 20 20   "%d", end);.   
5520: 20 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52 65       Tcl_ResetRe
5530: 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65 72  sult(tclrl_inter
5540: 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 72 65 73  p); /* clear res
5550: 75 6c 74 20 73 70 61 63 65 20 2a 2f 0a 20 20 20  ult space */.   
5560: 20 20 20 20 20 73 74 61 74 65 20 3d 20 54 63 6c       state = Tcl
5570: 5f 56 61 72 45 76 61 6c 28 74 63 6c 72 6c 5f 69  _VarEval(tclrl_i
5580: 6e 74 65 72 70 2c 20 74 63 6c 72 6c 5f 63 75 73  nterp, tclrl_cus
5590: 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 2c 0a 20  tom_completer,. 
55a0: 20 20 20 20 20 20 20 20 20 20 20 22 20 5c 22 22             " \""
55b0: 2c 20 71 75 6f 74 65 64 5f 74 65 78 74 2c 20 22  , quoted_text, "
55c0: 5c 22 20 22 2c 20 73 74 61 72 74 5f 73 2c 20 22  \" ", start_s, "
55d0: 20 22 2c 20 65 6e 64 5f 73 2c 0a 20 20 20 20 20   ", end_s,.     
55e0: 20 20 20 20 20 20 20 22 20 5c 22 22 2c 20 71 75         " \"", qu
55f0: 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66  oted_rl_line_buf
5600: 66 65 72 2c 20 22 5c 22 22 2c 20 28 63 68 61 72  fer, "\"", (char
5610: 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20  *) NULL);.      
5620: 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20    if (TCL_OK != 
5630: 73 74 61 74 65 29 20 7b 0a 20 20 20 20 20 20 20  state) {.       
5640: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
5650: 65 73 75 6c 74 20 28 74 63 6c 72 6c 5f 69 6e 74  esult (tclrl_int
5660: 65 72 70 2c 20 22 20 60 22 2c 20 74 63 6c 72 6c  erp, " `", tclrl
5670: 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65  _custom_complete
5680: 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
5690: 20 20 20 22 20 5c 22 22 2c 20 71 75 6f 74 65 64     " \"", quoted
56a0: 5f 74 65 78 74 2c 20 22 5c 22 20 22 2c 20 73 74  _text, "\" ", st
56b0: 61 72 74 5f 73 2c 20 22 20 22 2c 20 65 6e 64 5f  art_s, " ", end_
56c0: 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s,.             
56d0: 20 20 20 22 20 5c 22 22 2c 20 71 75 6f 74 65 64     " \"", quoted
56e0: 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 2c  _rl_line_buffer,
56f0: 20 22 5c 22 27 20 66 61 69 6c 65 64 2e 22 2c 20   "\"' failed.", 
5700: 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20  (char*) NULL);. 
5710: 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 52 65             TclRe
5720: 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61 74 65 28  adlineTerminate(
5730: 73 74 61 74 65 29 3b 0a 20 20 20 20 20 20 20 20  state);.        
5740: 20 20 20 20 46 52 45 45 28 71 75 6f 74 65 64 5f      FREE(quoted_
5750: 74 65 78 74 29 3b 0a 20 20 20 20 20 20 20 20 20  text);.         
5760: 20 20 20 46 52 45 45 28 71 75 6f 74 65 64 5f 72     FREE(quoted_r
5770: 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 29 3b 0a  l_line_buffer);.
5780: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5790: 72 6e 20 6d 61 74 63 68 65 73 3b 0a 20 20 20 20  rn matches;.    
57a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 46 52      }.        FR
57b0: 45 45 28 71 75 6f 74 65 64 5f 74 65 78 74 29 3b  EE(quoted_text);
57c0: 0a 20 20 20 20 20 20 20 20 46 52 45 45 28 71 75  .        FREE(qu
57d0: 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66  oted_rl_line_buf
57e0: 66 65 72 29 3b 0a 20 20 20 20 20 20 20 20 6f 62  fer);.        ob
57f0: 6a 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65  j = Tcl_GetObjRe
5800: 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65 72  sult(tclrl_inter
5810: 70 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  p);.        stat
5820: 75 73 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  us = Tcl_ListObj
5830: 47 65 74 45 6c 65 6d 65 6e 74 73 28 74 63 6c 72  GetElements(tclr
5840: 6c 5f 69 6e 74 65 72 70 2c 20 6f 62 6a 2c 20 26  l_interp, obj, &
5850: 6f 62 6a 63 2c 20 26 6f 62 6a 76 29 3b 0a 20 20  objc, &objv);.  
5860: 20 20 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b        if (TCL_OK
5870: 20 21 3d 20 73 74 61 74 75 73 29 0a 20 20 20 20   != status).    
5880: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
5890: 61 74 63 68 65 73 3b 0a 0a 20 20 20 20 20 20 20  atches;..       
58a0: 20 69 66 20 28 6f 62 6a 63 29 20 7b 0a 20 20 20   if (objc) {.   
58b0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20           int i, 
58c0: 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20  length;.        
58d0: 20 20 20 20 6d 61 74 63 68 65 73 20 3d 20 28 63      matches = (c
58e0: 68 61 72 2a 2a 29 20 4d 41 4c 4c 4f 43 28 73 69  har**) MALLOC(si
58f0: 7a 65 6f 66 28 63 68 61 72 2a 29 20 2a 20 28 6f  zeof(char*) * (o
5900: 62 6a 63 20 2b 20 31 29 29 3b 0a 20 20 20 20 20  bjc + 1));.     
5910: 20 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20         for (i = 
5920: 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b  0; i < objc; i++
5930: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
5940: 20 20 20 20 6d 61 74 63 68 65 73 5b 69 5d 20 3d      matches[i] =
5950: 20 73 74 72 64 75 70 28 54 63 6c 5f 47 65 74 53   strdup(Tcl_GetS
5960: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
5970: 76 5b 69 5d 2c 20 26 6c 65 6e 67 74 68 29 29 3b  v[i], &length));
5980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5990: 20 69 66 20 28 31 20 3d 3d 20 6f 62 6a 63 20 26   if (1 == objc &
59a0: 26 20 21 73 74 72 6c 65 6e 28 6d 61 74 63 68 65  & !strlen(matche
59b0: 73 5b 69 5d 29 29 20 7b 0a 20 20 20 20 20 20 20  s[i])) {.       
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52 45               FRE
59d0: 45 28 6d 61 74 63 68 65 73 5b 69 5d 29 3b 0a 20  E(matches[i]);. 
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59f0: 20 20 20 46 52 45 45 28 6d 61 74 63 68 65 73 29     FREE(matches)
5a00: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5a10: 20 20 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52        Tcl_ResetR
5a20: 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74 65  esult(tclrl_inte
5a30: 72 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 72 65  rp); /* clear re
5a40: 73 75 6c 74 20 73 70 61 63 65 20 2a 2f 0a 20 20  sult space */.  
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a60: 20 20 72 65 74 75 72 6e 20 28 63 68 61 72 2a 2a    return (char**
5a70: 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20  ) NULL;.        
5a80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5a90: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
5aa0: 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20       /**.       
5ab0: 20 20 20 20 20 20 2a 20 74 68 69 73 20 69 73 20        * this is 
5ac0: 61 20 73 70 65 63 69 61 6c 20 6f 6e 65 3a 0a 20  a special one:. 
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 66              * if
5ae0: 20 74 68 65 20 73 63 72 69 70 74 20 72 65 74 75   the script retu
5af0: 72 6e 73 20 65 78 61 63 74 6c 79 20 74 77 6f 20  rns exactly two 
5b00: 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 20 20 20  arguments.      
5b10: 20 20 20 20 20 20 20 2a 20 61 6e 64 20 74 68 65         * and the
5b20: 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   second argument
5b30: 20 69 73 20 74 68 65 20 65 6d 70 74 79 20 73 74   is the empty st
5b40: 72 69 6e 67 2c 0a 20 20 20 20 20 20 20 20 20 20  ring,.          
5b50: 20 20 20 2a 20 74 68 65 20 72 6c 5f 63 6f 6d 70     * the rl_comp
5b60: 6c 65 74 69 6f 6e 5f 61 70 70 65 6e 64 5f 63 68  letion_append_ch
5b70: 61 72 61 63 74 65 72 20 69 73 20 73 65 74 0a 20  aracter is set. 
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 74 65              * te
5b90: 6d 70 6f 72 61 72 69 6c 79 20 74 6f 20 4e 55 4c  mporarily to NUL
5ba0: 4c 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  L..             
5bb0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  */.            i
5bc0: 66 20 28 32 20 3d 3d 20 6f 62 6a 63 20 26 26 20  f (2 == objc && 
5bd0: 21 73 74 72 6c 65 6e 28 6d 61 74 63 68 65 73 5b  !strlen(matches[
5be0: 31 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  1])) {.         
5bf0: 20 20 20 20 20 20 20 69 2d 2d 3b 0a 20 20 20 20         i--;.    
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 46 52 45 45              FREE
5c10: 28 6d 61 74 63 68 65 73 5b 31 5d 29 3b 0a 20 20  (matches[1]);.  
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6c                rl
5c30: 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 61 70 70 65  _completion_appe
5c40: 6e 64 5f 63 68 61 72 61 63 74 65 72 20 3d 20 27  nd_character = '
5c50: 5c 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20  \0';.           
5c60: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5c70: 6d 61 74 63 68 65 73 5b 69 5d 20 3d 20 28 63 68  matches[i] = (ch
5c80: 61 72 2a 29 20 4e 55 4c 4c 3b 20 2f 2a 20 74 65  ar*) NULL; /* te
5c90: 72 6d 69 6e 61 74 65 20 2a 2f 0a 20 20 20 20 20  rminate */.     
5ca0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 54 63 6c     }.        Tcl
5cb0: 5f 52 65 73 65 74 52 65 73 75 6c 74 28 74 63 6c  _ResetResult(tcl
5cc0: 72 6c 5f 69 6e 74 65 72 70 29 3b 20 2f 2a 20 63  rl_interp); /* c
5cd0: 6c 65 61 72 20 72 65 73 75 6c 74 20 73 70 61 63  lear result spac
5ce0: 65 20 2a 2f 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e */.    }..    
5cf0: 69 66 20 28 21 6d 61 74 63 68 65 73 20 26 26 20  if (!matches && 
5d00: 74 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c 74 69  tclrl_use_builti
5d10: 6e 5f 63 6f 6d 70 6c 65 74 65 72 29 20 7b 0a 20  n_completer) {. 
5d20: 20 20 20 20 20 20 20 6d 61 74 63 68 65 73 20 3d         matches =
5d30: 20 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 6d   rl_completion_m
5d40: 61 74 63 68 65 73 28 74 65 78 74 2c 20 28 72 6c  atches(text, (rl
5d50: 5f 63 6f 6d 70 65 6e 74 72 79 5f 66 75 6e 63 5f  _compentry_func_
5d60: 74 20 2a 29 54 63 6c 52 65 61 64 6c 69 6e 65 30  t *)TclReadline0
5d70: 67 65 6e 65 72 61 74 6f 72 29 3b 0a 20 20 20 20  generator);.    
5d80: 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 6d 61  }..    return ma
5d90: 74 63 68 65 73 3b 0a 7d 0a 0a 73 74 61 74 69 63  tches;.}..static
5da0: 20 63 68 61 72 2a 0a 54 63 6c 52 65 61 64 6c 69   char*.TclReadli
5db0: 6e 65 30 67 65 6e 65 72 61 74 6f 72 28 63 68 61  ne0generator(cha
5dc0: 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74 61  r* text, int sta
5dd0: 74 65 29 0a 7b 0a 20 20 20 20 72 65 74 75 72 6e  te).{.    return
5de0: 20 54 63 6c 52 65 61 64 6c 69 6e 65 4b 6e 6f 77   TclReadlineKnow
5df0: 6e 43 6f 6d 6d 61 6e 64 73 28 74 65 78 74 2c 20  nCommands(text, 
5e00: 73 74 61 74 65 2c 20 5f 43 4d 44 5f 47 45 54 29  state, _CMD_GET)
5e10: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68 61 72  ;.}..static char
5e20: 2a 0a 54 63 6c 52 65 61 64 6c 69 6e 65 4b 6e 6f  *.TclReadlineKno
5e30: 77 6e 43 6f 6d 6d 61 6e 64 73 28 63 68 61 72 2a  wnCommands(char*
5e40: 20 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65   text, int state
5e50: 2c 20 69 6e 74 20 6d 6f 64 65 29 0a 7b 0a 20 20  , int mode).{.  
5e60: 20 20 73 74 61 74 69 63 20 69 6e 74 20 6c 65 6e    static int len
5e70: 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6d 64  ;.    static cmd
5e80: 73 5f 74 20 2a 63 6d 64 73 20 3d 20 28 63 6d 64  s_t *cmds = (cmd
5e90: 73 5f 74 20 2a 29 20 4e 55 4c 4c 2c 20 2a 6e 65  s_t *) NULL, *ne
5ea0: 77 3b 0a 20 20 20 20 63 68 61 72 2a 20 74 6d 70  w;.    char* tmp
5eb0: 3b 0a 20 20 20 20 63 68 61 72 2a 20 61 72 67 73  ;.    char* args
5ec0: 5b 32 35 36 5d 3b 0a 20 20 20 20 69 6e 74 20 69  [256];.    int i
5ed0: 2c 20 61 72 67 63 3b 0a 20 20 20 20 63 68 61 72  , argc;.    char
5ee0: 2a 2a 20 6e 61 6d 65 3b 0a 0a 20 20 20 20 63 68  ** name;..    ch
5ef0: 61 72 2a 20 6c 6f 63 61 6c 5f 6c 69 6e 65 20 3d  ar* local_line =
5f00: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 20   (char*) NULL;. 
5f10: 20 20 20 69 6e 74 20 73 75 62 3b 0a 0a 0a 20 20     int sub;...  
5f20: 20 20 73 77 69 74 63 68 20 28 6d 6f 64 65 29 20    switch (mode) 
5f30: 7b 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
5f40: 5f 43 4d 44 5f 53 45 54 3a 0a 0a 20 20 20 20 20  _CMD_SET:..     
5f50: 20 20 20 20 20 20 20 6e 65 77 20 3d 20 28 63 6d         new = (cm
5f60: 64 73 5f 74 20 2a 29 20 4d 41 4c 4c 4f 43 28 73  ds_t *) MALLOC(s
5f70: 69 7a 65 6f 66 28 63 6d 64 73 5f 74 29 29 3b 0a  izeof(cmds_t));.
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d              new-
5f90: 3e 6e 65 78 74 20 3d 20 28 63 6d 64 73 5f 74 20  >next = (cmds_t 
5fa0: 2a 29 20 4e 55 4c 4c 3b 0a 0a 20 20 20 20 20 20  *) NULL;..      
5fb0: 20 20 20 20 20 20 69 66 20 28 21 63 6d 64 73 29        if (!cmds)
5fc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5fd0: 20 20 20 63 6d 64 73 20 3d 20 6e 65 77 3b 0a 20     cmds = new;. 
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5ff0: 6d 64 73 2d 3e 70 72 65 76 20 3d 20 6e 65 77 3b  mds->prev = new;
6000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
6010: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
6020: 20 20 20 20 20 20 63 6d 64 73 2d 3e 70 72 65 76        cmds->prev
6030: 2d 3e 6e 65 78 74 20 3d 20 6e 65 77 3b 0a 20 20  ->next = new;.  
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
6050: 64 73 2d 3e 70 72 65 76 20 3d 20 6e 65 77 3b 0a  ds->prev = new;.
6060: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20              }.. 
6070: 20 20 20 20 20 20 20 20 20 20 20 74 6d 70 20 3d             tmp =
6080: 20 73 74 72 64 75 70 28 74 65 78 74 29 3b 0a 20   strdup(text);. 
6090: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 63 20             argc 
60a0: 3d 20 54 63 6c 52 65 61 64 6c 69 6e 65 50 61 72  = TclReadlinePar
60b0: 73 65 28 61 72 67 73 2c 20 73 69 7a 65 6f 66 28  se(args, sizeof(
60c0: 61 72 67 73 29 2c 20 74 6d 70 29 3b 0a 0a 20 20  args), tmp);..  
60d0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 3e 63            new->c
60e0: 6d 64 20 3d 20 28 63 68 61 72 2a 2a 29 20 4d 41  md = (char**) MA
60f0: 4c 4c 4f 43 28 73 69 7a 65 6f 66 28 63 68 61 72  LLOC(sizeof(char
6100: 2a 29 20 2a 20 28 61 72 67 63 20 2b 20 31 29 29  *) * (argc + 1))
6110: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
6120: 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 61  or (i = 0; i < a
6130: 72 67 63 3b 20 69 2b 2b 29 0a 20 20 20 20 20 20  rgc; i++).      
6140: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 3e 63            new->c
6150: 6d 64 5b 69 5d 20 3d 20 61 72 67 73 5b 69 5d 3b  md[i] = args[i];
6160: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
6170: 77 2d 3e 63 6d 64 5b 61 72 67 63 5d 20 3d 20 28  w->cmd[argc] = (
6180: 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 0a 20 20  char*) NULL;..  
6190: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
61a0: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 20   (char*) NULL;. 
61b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 4f             /* NO
61c0: 54 52 45 41 43 48 45 44 20 2a 2f 0a 20 20 20 20  TREACHED */.    
61d0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
61e0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 5f 43  .        case _C
61f0: 4d 44 5f 47 45 54 3a 0a 0a 20 20 20 20 20 20 20  MD_GET:..       
6200: 20 20 20 20 20 6c 6f 63 61 6c 5f 6c 69 6e 65 20       local_line 
6210: 3d 20 73 74 72 64 75 70 28 72 6c 5f 6c 69 6e 65  = strdup(rl_line
6220: 5f 62 75 66 66 65 72 29 3b 0a 20 20 20 20 20 20  _buffer);.      
6230: 20 20 20 20 20 20 73 75 62 20 3d 20 54 63 6c 52        sub = TclR
6240: 65 61 64 6c 69 6e 65 50 61 72 73 65 28 61 72 67  eadlineParse(arg
6250: 73 2c 20 73 69 7a 65 6f 66 28 61 72 67 73 29 2c  s, sizeof(args),
6260: 20 6c 6f 63 61 6c 5f 6c 69 6e 65 29 3b 0a 0a 20   local_line);.. 
6270: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 30             if (0
6280: 20 3d 3d 20 73 75 62 20 7c 7c 20 28 31 20 3d 3d   == sub || (1 ==
6290: 20 73 75 62 20 26 26 20 27 5c 30 27 20 21 3d 20   sub && '\0' != 
62a0: 74 65 78 74 5b 30 5d 29 29 20 7b 0a 20 20 20 20  text[0])) {.    
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
62c0: 21 73 74 61 74 65 29 20 7b 0a 20 20 20 20 20 20  !state) {.      
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
62e0: 77 20 3d 20 63 6d 64 73 3b 0a 20 20 20 20 20 20  w = cmds;.      
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65                le
6300: 6e 20 3d 20 73 74 72 6c 65 6e 28 74 65 78 74 29  n = strlen(text)
6310: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
6320: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
6330: 20 20 20 20 77 68 69 6c 65 20 28 6e 65 77 20 26      while (new &
6340: 26 20 28 6e 61 6d 65 20 3d 20 6e 65 77 2d 3e 63  & (name = new->c
6350: 6d 64 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  md)) {.         
6360: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 3d             new =
6370: 20 6e 65 77 2d 3e 6e 65 78 74 3b 0a 20 20 20 20   new->next;.    
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6390: 69 66 20 28 21 73 74 72 6e 63 6d 70 28 6e 61 6d  if (!strncmp(nam
63a0: 65 5b 30 5d 2c 20 74 65 78 74 2c 20 6c 65 6e 29  e[0], text, len)
63b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
63c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
63d0: 20 73 74 72 64 75 70 28 6e 61 6d 65 5b 30 5d 29   strdup(name[0])
63e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
63f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
6400: 20 20 20 20 72 65 74 75 72 6e 20 28 63 68 61 72      return (char
6410: 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 20  *) NULL;.       
6420: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 0a 20       } else {.. 
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6440: 66 20 28 21 73 74 61 74 65 29 20 7b 0a 0a 20 20  f (!state) {..  
6450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6460: 20 20 6e 65 77 20 3d 20 63 6d 64 73 3b 0a 20 20    new = cmds;.  
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6480: 20 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 74    len = strlen(t
6490: 65 78 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  ext);..         
64a0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
64b0: 20 28 6e 65 77 20 26 26 20 28 6e 61 6d 65 20 3d   (new && (name =
64c0: 20 6e 65 77 2d 3e 63 6d 64 29 29 20 7b 0a 20 20   new->cmd)) {.  
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64e0: 20 20 20 20 20 20 69 66 20 28 21 73 74 72 63 6d        if (!strcm
64f0: 70 28 6e 61 6d 65 5b 30 5d 2c 20 61 72 67 73 5b  p(name[0], args[
6500: 30 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  0])).           
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6520: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 6e 65 77 20 3d 20 6e 65 77 2d 3e 6e 65 78 74 3b  new = new->next;
6550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6560: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
6570: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6580: 21 6e 65 77 29 0a 20 20 20 20 20 20 20 20 20 20  !new).          
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
65a0: 74 75 72 6e 20 28 63 68 61 72 2a 29 20 4e 55 4c  turn (char*) NUL
65b0: 4c 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  L;..            
65c0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d          for (i =
65d0: 20 30 3b 20 6e 65 77 2d 3e 63 6d 64 5b 69 5d 3b   0; new->cmd[i];
65e0: 20 69 2b 2b 29 20 2f 2a 20 45 4d 50 54 59 20 2a   i++) /* EMPTY *
65f0: 2f 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  /;..            
6600: 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 20          if (sub 
6610: 3c 20 69 20 26 26 20 21 73 74 72 6e 63 6d 70 28  < i && !strncmp(
6620: 6e 65 77 2d 3e 63 6d 64 5b 73 75 62 5d 2c 20 74  new->cmd[sub], t
6630: 65 78 74 2c 20 6c 65 6e 29 29 0a 20 20 20 20 20  ext, len)).     
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6650: 20 20 20 72 65 74 75 72 6e 20 73 74 72 64 75 70     return strdup
6660: 28 6e 65 77 2d 3e 63 6d 64 5b 73 75 62 5d 29 3b  (new->cmd[sub]);
6670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6680: 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20       else.      
6690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66a0: 20 20 72 65 74 75 72 6e 20 28 63 68 61 72 2a 29    return (char*)
66b0: 20 4e 55 4c 4c 3b 0a 0a 20 20 20 20 20 20 20 20   NULL;..        
66c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
66d0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20            else. 
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 72 65 74 75 72 6e 20 28 63 68 61 72 2a     return (char*
6700: 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20  ) NULL;.        
6710: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
6720: 20 20 20 2f 2a 20 4e 4f 54 52 45 41 43 48 45 44     /* NOTREACHED
6730: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
6740: 62 72 65 61 6b 3b 0a 0a 0a 20 20 20 20 20 20 20  break;...       
6750: 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20   default:.      
6760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 63 68        return (ch
6770: 61 72 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  ar*) NULL;.     
6780: 20 20 20 20 20 20 20 2f 2a 20 4e 4f 54 52 45 41         /* NOTREA
6790: 43 48 45 44 20 2a 2f 0a 20 20 20 20 20 20 20 20  CHED */.        
67a0: 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
67b0: 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a  }.}..static int.
67c0: 54 63 6c 52 65 61 64 6c 69 6e 65 50 61 72 73 65  TclReadlineParse
67d0: 28 63 68 61 72 2a 2a 20 61 72 67 73 2c 20 69 6e  (char** args, in
67e0: 74 20 6d 61 78 61 72 67 73 2c 20 63 68 61 72 2a  t maxargs, char*
67f0: 20 62 75 66 29 0a 7b 0a 20 20 20 20 69 6e 74 20   buf).{.    int 
6800: 6e 72 20 3d 20 30 3b 0a 0a 20 20 20 20 77 68 69  nr = 0;..    whi
6810: 6c 65 20 28 2a 62 75 66 20 21 3d 20 27 5c 30 27  le (*buf != '\0'
6820: 20 26 26 20 6e 72 20 3c 20 6d 61 78 61 72 67 73   && nr < maxargs
6830: 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  ) {.        /*. 
6840: 20 20 20 20 20 20 20 20 2a 20 53 74 72 69 70 20          * Strip 
6850: 77 68 69 74 65 73 70 61 63 65 2e 20 20 55 73 65  whitespace.  Use
6860: 20 6e 75 6c 6c 73 2c 20 73 6f 0a 20 20 20 20 20   nulls, so.     
6870: 20 20 20 20 2a 20 74 68 61 74 20 74 68 65 20 70      * that the p
6880: 72 65 76 69 6f 75 73 20 61 72 67 75 6d 65 6e 74  revious argument
6890: 20 69 73 20 74 65 72 6d 69 6e 61 74 65 64 0a 20   is terminated. 
68a0: 20 20 20 20 20 20 20 20 2a 20 61 75 74 6f 6d 61          * automa
68b0: 74 69 63 61 6c 6c 79 2e 0a 20 20 20 20 20 20 20  tically..       
68c0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 77 68 69    */.        whi
68d0: 6c 65 20 28 49 53 57 48 49 54 45 28 2a 62 75 66  le (ISWHITE(*buf
68e0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a  )).            *
68f0: 62 75 66 2b 2b 20 3d 20 27 5c 30 27 3b 0a 0a 20  buf++ = '\0';.. 
6900: 20 20 20 20 20 20 20 69 66 20 28 21 28 2a 62 75         if (!(*bu
6910: 66 29 29 20 2f 2a 20 64 6f 6e 27 74 20 63 6f 75  f)) /* don't cou
6920: 6e 74 20 74 68 65 20 74 65 72 6d 69 6e 61 74 69  nt the terminati
6930: 6e 67 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20  ng NULL */.     
6940: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
6950: 20 20 20 20 20 20 20 2a 61 72 67 73 2b 2b 20 3d         *args++ =
6960: 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20 6e 72   buf;.        nr
6970: 2b 2b 3b 0a 0a 20 20 20 20 20 20 20 20 77 68 69  ++;..        whi
6980: 6c 65 20 28 28 27 5c 30 27 20 21 3d 20 2a 62 75  le (('\0' != *bu
6990: 66 29 20 26 26 20 21 49 53 57 48 49 54 45 28 2a  f) && !ISWHITE(*
69a0: 62 75 66 29 29 0a 20 20 20 20 20 20 20 20 20 20  buf)).          
69b0: 20 20 62 75 66 2b 2b 3b 0a 20 20 20 20 7d 0a 0a    buf++;.    }..
69c0: 20 20 20 20 2a 61 72 67 73 20 3d 20 27 5c 30 27      *args = '\0'
69d0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 72 3b  ;.    return nr;
69e0: 0a 7d 0a 0a                                      .}..