Hex Artifact Content
Not logged in

Artifact ba99704a3e6130e1e671db02f05c380bc4272fd7:


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 20 2a 0a 20 20 2a 20 46 49 4c  ====== *.  * FIL
0050: 45 3a 20 74 63 6c 72 65 61 64 6c 69 6e 65 2e 63  E: tclreadline.c
0060: 0a 20 20 2a 20 24 49 64 24 0a 20 20 2a 20 2d 2d  .  * $Id$.  * --
0070: 2d 0a 20 20 2a 20 74 63 6c 72 65 61 64 6c 69 6e  -.  * tclreadlin
0080: 65 20 2d 2d 20 67 6e 75 20 72 65 61 64 6c 69 6e  e -- gnu readlin
0090: 65 20 66 6f 72 20 74 63 6c 0a 20 20 2a 20 68 74  e for tcl.  * ht
00a0: 74 70 3a 2f 2f 77 77 77 2e 7a 65 6c 6c 6e 65 72  tp://www.zellner
00b0: 2e 6f 72 67 2f 74 63 6c 72 65 61 64 6c 69 6e 65  .org/tclreadline
00c0: 2f 0a 20 20 2a 20 43 6f 70 79 72 69 67 68 74 20  /.  * Copyright 
00d0: 28 63 29 20 31 39 39 38 20 2d 20 32 30 31 34 2c  (c) 1998 - 2014,
00e0: 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65   Johannes Zellne
00f0: 72 20 3c 6a 6f 68 61 6e 6e 65 73 40 7a 65 6c 6c  r <johannes@zell
0100: 6e 65 72 2e 6f 72 67 3e 0a 20 20 2a 20 54 68 69  ner.org>.  * Thi
0110: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 63 6f  s software is co
0120: 70 79 72 69 67 68 74 20 75 6e 64 65 72 20 74 68  pyright under th
0130: 65 20 42 53 44 20 6c 69 63 65 6e 73 65 2e 0a 20  e BSD license.. 
0140: 20 2a 20 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 3d 3d 20 2a 2f 0a 0a 23 69 66 64 65 66  ===== */..#ifdef
0190: 20 48 41 56 45 5f 43 4f 4e 46 49 47 5f 48 0a 23   HAVE_CONFIG_H.#
01a0: 20 20 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69    include "confi
01b0: 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e  g.h".#endif..#in
01c0: 63 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 69  clude <tcl.h>.#i
01d0: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e  nclude <stdio.h>
01e0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69  .#include <stdli
01f0: 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  b.h>.#include <s
0200: 74 72 69 6e 67 2e 68 3e 0a 0a 23 69 66 20 64 65  tring.h>..#if de
0210: 66 69 6e 65 64 20 28 52 45 41 44 4c 49 4e 45 5f  fined (READLINE_
0220: 4c 49 42 52 41 52 59 29 0a 23 20 20 69 6e 63 6c  LIBRARY).#  incl
0230: 75 64 65 20 3c 72 65 61 64 6c 69 6e 65 2e 68 3e  ude <readline.h>
0240: 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 68 69 73  .#  include <his
0250: 74 6f 72 79 2e 68 3e 0a 23 65 6c 73 65 0a 23 20  tory.h>.#else.# 
0260: 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64 6c 69   include <readli
0270: 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e 0a 23  ne/readline.h>.#
0280: 20 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64 6c    include <readl
0290: 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68 3e 0a 23  ine/history.h>.#
02a0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 20 2a 20 74 68  endif.../*. * th
02b0: 69 73 20 70 72 6f 74 6f 74 79 70 65 20 6d 61 79  is prototype may
02c0: 20 62 65 20 6d 69 73 73 69 6e 67 0a 20 2a 20 69   be missing. * i
02d0: 6e 20 72 65 61 64 6c 69 6e 65 2e 68 0a 20 2a 2f  n readline.h. */
02e0: 0a 76 6f 69 64 20 72 6c 5f 65 78 74 65 6e 64 5f  .void rl_extend_
02f0: 6c 69 6e 65 5f 62 75 66 66 65 72 28 69 6e 74 20  line_buffer(int 
0300: 6c 65 6e 29 3b 0a 0a 23 69 66 64 65 66 20 45 58  len);..#ifdef EX
0310: 45 43 55 54 49 4e 47 5f 4d 41 43 52 4f 5f 48 41  ECUTING_MACRO_HA
0320: 43 4b 0a 2f 2a 2a 0a 20 2a 20 74 68 69 73 20 70  CK./**. * this p
0330: 72 6f 74 6f 74 79 70 65 20 6d 61 79 20 62 65 20  rototype may be 
0340: 70 72 69 76 61 74 65 20 69 6e 20 72 65 61 64 6c  private in readl
0350: 69 6e 65 27 73 20 66 69 6c 65 20 60 6d 61 63 72  ine's file `macr
0360: 6f 2e 63 27 2e 0a 20 2a 20 57 65 20 6e 65 65 64  o.c'.. * We need
0370: 20 69 74 20 68 65 72 65 20 74 6f 20 64 65 63 69   it here to deci
0380: 64 65 2c 20 69 66 20 77 65 20 73 68 6f 75 6c 64  de, if we should
0390: 20 72 65 61 64 20 6d 6f 72 65 0a 20 2a 20 63 68   read more. * ch
03a0: 61 72 61 63 74 65 72 73 20 66 72 6f 6d 20 61 20  aracters from a 
03b0: 6d 61 63 72 6f 2e 20 44 69 72 74 79 2c 20 62 75  macro. Dirty, bu
03c0: 74 20 69 74 20 73 68 6f 75 6c 64 20 77 6f 72 6b  t it should work
03d0: 2e 0a 20 2a 2f 0a 65 78 74 65 72 6e 20 63 68 61  .. */.extern cha
03e0: 72 2a 20 45 58 45 43 55 54 49 4e 47 5f 4d 41 43  r* EXECUTING_MAC
03f0: 52 4f 5f 4e 41 4d 45 3b 0a 23 65 6e 64 69 66 0a  RO_NAME;.#endif.
0400: 0a 23 69 6e 63 6c 75 64 65 20 22 74 63 6c 72 65  .#include "tclre
0410: 61 64 6c 69 6e 65 2e 68 22 0a 73 74 61 74 69 63  adline.h".static
0420: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 74 63 6c   const char* tcl
0430: 72 6c 5f 6c 69 62 72 61 72 79 20 3d 20 54 43 4c  rl_library = TCL
0440: 52 4c 5f 4c 49 42 52 41 52 59 3b 0a 73 74 61 74  RL_LIBRARY;.stat
0450: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 74  ic const char* t
0460: 63 6c 72 6c 5f 76 65 72 73 69 6f 6e 5f 73 74 72  clrl_version_str
0470: 20 3d 20 54 43 4c 52 4c 5f 56 45 52 53 49 4f 4e   = TCLRL_VERSION
0480: 5f 53 54 52 3b 0a 73 74 61 74 69 63 20 63 6f 6e  _STR;.static con
0490: 73 74 20 63 68 61 72 2a 20 74 63 6c 72 6c 5f 70  st char* tclrl_p
04a0: 61 74 63 68 6c 65 76 65 6c 5f 73 74 72 20 3d 20  atchlevel_str = 
04b0: 54 43 4c 52 4c 5f 50 41 54 43 48 4c 45 56 45 4c  TCLRL_PATCHLEVEL
04c0: 5f 53 54 52 3b 0a 0a 23 64 65 66 69 6e 65 20 4d  _STR;..#define M
04d0: 41 4c 4c 4f 43 28 73 69 7a 65 29 20 6d 61 6c 6c  ALLOC(size) mall
04e0: 6f 63 28 73 69 7a 65 29 0a 23 64 65 66 69 6e 65  oc(size).#define
04f0: 20 46 52 45 45 28 70 74 72 29 20 66 72 65 65 28   FREE(ptr) free(
0500: 70 74 72 29 3b 20 70 74 72 20 3d 20 4e 55 4c 4c  ptr); ptr = NULL
0510: 0a 0a 65 6e 75 6d 20 7b 0a 20 20 20 20 5f 43 4d  ..enum {.    _CM
0520: 44 5f 53 45 54 20 3d 20 28 31 20 3c 3c 20 30 29  D_SET = (1 << 0)
0530: 2c 0a 20 20 20 20 5f 43 4d 44 5f 47 45 54 20 3d  ,.    _CMD_GET =
0540: 20 28 31 20 3c 3c 20 31 29 0a 7d 3b 0a 0a 0a 74   (1 << 1).};...t
0550: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 63 6d  ypedef struct cm
0560: 64 73 5f 74 20 7b 0a 20 20 20 20 73 74 72 75 63  ds_t {.    struc
0570: 74 20 63 6d 64 73 5f 74 2a 20 70 72 65 76 3b 0a  t cmds_t* prev;.
0580: 20 20 20 20 63 68 61 72 2a 2a 20 20 20 20 20 20      char**      
0590: 20 20 20 63 6d 64 3b 0a 20 20 20 20 73 74 72 75     cmd;.    stru
05a0: 63 74 20 63 6d 64 73 5f 74 2a 20 6e 65 78 74 3b  ct cmds_t* next;
05b0: 0a 7d 20 63 6d 64 73 5f 74 3b 0a 0a 0a 23 64 65  .} cmds_t;...#de
05c0: 66 69 6e 65 20 49 53 57 48 49 54 45 28 63 29 20  fine ISWHITE(c) 
05d0: 28 28 27 20 27 20 3d 3d 20 63 29 20 7c 7c 20 28  ((' ' == c) || (
05e0: 27 5c 74 27 20 3d 3d 20 63 29 20 7c 7c 20 28 27  '\t' == c) || ('
05f0: 5c 6e 27 20 3d 3d 20 63 29 29 0a 0a 2f 2a 2a 0a  \n' == c))../**.
0600: 20 2a 20 66 6f 72 77 61 72 64 20 64 65 63 6c 61   * forward decla
0610: 72 61 74 69 6f 6e 73 0a 20 2a 2f 0a 73 74 61 74  rations. */.stat
0620: 69 63 20 63 68 61 72 2a 20 20 73 74 72 69 70 6c  ic char*  stripl
0630: 65 66 74 28 63 68 61 72 2a 20 69 6e 29 3b 0a 73  eft(char* in);.s
0640: 74 61 74 69 63 20 63 68 61 72 2a 20 20 73 74 72  tatic 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: 20 73 74 72 69 70 77 68 69 74 65 28 63 68 61 72   stripwhite(char
0680: 2a 20 69 6e 29 3b 0a 73 74 61 74 69 63 20 69 6e  * in);.static in
0690: 74 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e 65  t    TclReadline
06a0: 4c 69 6e 65 43 6f 6d 70 6c 65 74 65 28 76 6f 69  LineComplete(voi
06b0: 64 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20  d);.static void 
06c0: 20 20 54 63 6c 52 65 61 64 6c 69 6e 65 54 65 72    TclReadlineTer
06d0: 6d 69 6e 61 74 65 28 69 6e 74 20 73 74 61 74 65  minate(int state
06e0: 29 3b 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20  );.static char* 
06f0: 20 54 63 6c 52 65 61 64 6c 69 6e 65 51 75 6f 74   TclReadlineQuot
0700: 65 28 63 68 61 72 2a 20 74 65 78 74 2c 20 63 68  e(char* text, ch
0710: 61 72 2a 20 71 75 6f 74 65 63 68 61 72 73 29 3b  ar* quotechars);
0720: 0a 73 74 61 74 69 63 20 69 6e 74 20 20 20 20 54  .static int    T
0730: 63 6c 52 65 61 64 6c 69 6e 65 43 6d 64 28 43 6c  clReadlineCmd(Cl
0740: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
0750: 61 74 61 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20  ata, Tcl_Interp 
0760: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
0770: 63 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  c,.             
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0790: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
07a0: 62 6a 76 5b 5d 29 3b 0a 73 74 61 74 69 63 20 76  bjv[]);.static v
07b0: 6f 69 64 20 20 20 54 63 6c 52 65 61 64 6c 69 6e  oid   TclReadlin
07c0: 65 52 65 61 64 48 61 6e 64 6c 65 72 28 43 6c 69  eReadHandler(Cli
07d0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
07e0: 74 61 2c 20 69 6e 74 20 6d 61 73 6b 29 3b 0a 73  ta, int mask);.s
07f0: 74 61 74 69 63 20 76 6f 69 64 20 20 20 54 63 6c  tatic void   Tcl
0800: 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43 6f 6d 70  ReadlineLineComp
0810: 6c 65 74 65 48 61 6e 64 6c 65 72 28 63 68 61 72  leteHandler(char
0820: 2a 20 70 74 72 29 3b 0a 73 74 61 74 69 63 20 69  * ptr);.static i
0830: 6e 74 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e  nt    TclReadlin
0840: 65 49 6e 69 74 69 61 6c 69 7a 65 28 54 63 6c 5f  eInitialize(Tcl_
0850: 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 70 2c 20  Interp* interp, 
0860: 63 68 61 72 2a 20 68 69 73 74 6f 72 79 66 69 6c  char* historyfil
0870: 65 29 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 20  e);.static int  
0880: 20 20 62 6c 61 6e 6b 5f 6c 69 6e 65 28 63 68 61    blank_line(cha
0890: 72 2a 20 73 74 72 29 3b 0a 73 74 61 74 69 63 20  r* str);.static 
08a0: 63 68 61 72 2a 2a 20 54 63 6c 52 65 61 64 6c 69  char** TclReadli
08b0: 6e 65 43 6f 6d 70 6c 65 74 69 6f 6e 28 63 68 61  neCompletion(cha
08c0: 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74 61  r* text, int sta
08d0: 72 74 2c 20 69 6e 74 20 65 6e 64 29 3b 0a 73 74  rt, int end);.st
08e0: 61 74 69 63 20 63 68 61 72 2a 20 20 54 63 6c 52  atic char*  TclR
08f0: 65 61 64 6c 69 6e 65 30 67 65 6e 65 72 61 74 6f  eadline0generato
0900: 72 28 63 68 61 72 2a 20 74 65 78 74 2c 20 69 6e  r(char* text, in
0910: 74 20 73 74 61 74 65 29 3b 0a 73 74 61 74 69 63  t state);.static
0920: 20 63 68 61 72 2a 20 20 54 63 6c 52 65 61 64 6c   char*  TclReadl
0930: 69 6e 65 4b 6e 6f 77 6e 43 6f 6d 6d 61 6e 64 73  ineKnownCommands
0940: 28 63 68 61 72 2a 20 74 65 78 74 2c 20 69 6e 74  (char* text, int
0950: 20 73 74 61 74 65 2c 20 69 6e 74 20 6d 6f 64 65   state, int mode
0960: 29 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 20 20  );.static int   
0970: 20 54 63 6c 52 65 61 64 6c 69 6e 65 50 61 72 73   TclReadlinePars
0980: 65 28 63 68 61 72 2a 2a 20 61 72 67 73 2c 20 69  e(char** args, i
0990: 6e 74 20 6d 61 78 61 72 67 73 2c 20 63 68 61 72  nt maxargs, char
09a0: 2a 20 62 75 66 29 3b 0a 0a 0a 65 6e 75 6d 20 7b  * buf);...enum {
09b0: 0a 20 20 20 20 4c 49 4e 45 5f 50 45 4e 44 49 4e  .    LINE_PENDIN
09c0: 47 20 20 3d 20 2d 31 2c 0a 20 20 20 20 4c 49 4e  G  = -1,.    LIN
09d0: 45 5f 45 4f 46 20 20 20 20 20 20 3d 20 28 31 20  E_EOF      = (1 
09e0: 3c 3c 20 38 29 2c 0a 20 20 20 20 4c 49 4e 45 5f  << 8),.    LINE_
09f0: 43 4f 4d 50 4c 45 54 45 20 3d 20 28 31 20 3c 3c  COMPLETE = (1 <<
0a00: 20 39 29 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 2a 20 67   9).};../**. * g
0a10: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 73 0a  lobal variables.
0a20: 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 20   */.static int  
0a30: 20 74 63 6c 72 6c 5f 73 74 61 74 65 20 20 20 20   tclrl_state    
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 54               = T
0a50: 43 4c 5f 4f 4b 3b 0a 73 74 61 74 69 63 20 63 68  CL_OK;.static ch
0a60: 61 72 2a 20 74 63 6c 72 6c 5f 65 6f 66 5f 73 74  ar* tclrl_eof_st
0a70: 72 69 6e 67 20 20 20 20 20 20 20 20 20 20 20 20  ring            
0a80: 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a  = (char*) NULL;.
0a90: 73 74 61 74 69 63 20 63 68 61 72 2a 20 74 63 6c  static char* tcl
0aa0: 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65  rl_custom_comple
0ab0: 74 65 72 20 20 20 20 20 20 3d 20 28 63 68 61 72  ter      = (char
0ac0: 2a 29 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 63 20  *) NULL;.static 
0ad0: 63 68 61 72 2a 20 74 63 6c 72 6c 5f 6c 61 73 74  char* tclrl_last
0ae0: 5f 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20 20  _line           
0af0: 20 20 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c    = (char*) NULL
0b00: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 20 20 74  ;.static int   t
0b10: 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c 74 69 6e  clrl_use_builtin
0b20: 5f 63 6f 6d 70 6c 65 74 65 72 20 3d 20 31 3b 0a  _completer = 1;.
0b30: 73 74 61 74 69 63 20 69 6e 74 20 20 20 74 63 6c  static int   tcl
0b40: 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65 6e 67 74  rl_history_lengt
0b50: 68 20 20 20 20 20 20 20 20 3d 20 2d 31 3b 0a 54  h        = -1;.T
0b60: 63 6c 5f 49 6e 74 65 72 70 2a 20 20 74 63 6c 72  cl_Interp*  tclr
0b70: 6c 5f 69 6e 74 65 72 70 20 20 20 20 20 20 20 20  l_interp        
0b80: 20 20 20 20 20 20 20 20 3d 20 28 54 63 6c 5f 49          = (Tcl_I
0b90: 6e 74 65 72 70 2a 29 20 4e 55 4c 4c 3b 0a 0a 73  nterp*) NULL;..s
0ba0: 74 61 74 69 63 20 63 68 61 72 2a 20 74 63 6c 72  tatic char* tclr
0bb0: 6c 5f 6c 69 63 65 6e 73 65 20 3d 0a 22 20 20 20  l_license =."   
0bc0: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39  Copyright (c) 19
0bd0: 39 38 20 2d 20 32 30 30 30 2c 20 4a 6f 68 61 6e  98 - 2000, Johan
0be0: 6e 65 73 20 5a 65 6c 6c 6e 65 72 20 3c 6a 6f 68  nes Zellner <joh
0bf0: 61 6e 6e 65 73 40 7a 65 6c 6c 6e 65 72 2e 6f 72  annes@zellner.or
0c00: 67 3e 5c 6e 22 0a 22 20 20 20 41 6c 6c 20 72 69  g>\n"."   All ri
0c10: 67 68 74 73 20 72 65 73 65 72 76 65 64 2e 5c 6e  ghts reserved.\n
0c20: 22 0a 22 20 20 20 5c 6e 22 0a 22 20 20 20 52 65  "."   \n"."   Re
0c30: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 61 6e 64  distribution and
0c40: 20 75 73 65 20 69 6e 20 73 6f 75 72 63 65 20 61   use in source a
0c50: 6e 64 20 62 69 6e 61 72 79 20 66 6f 72 6d 73 2c  nd binary forms,
0c60: 20 77 69 74 68 20 6f 72 20 77 69 74 68 6f 75 74   with or without
0c70: 5c 6e 22 0a 22 20 20 20 6d 6f 64 69 66 69 63 61  \n"."   modifica
0c80: 74 69 6f 6e 2c 20 61 72 65 20 70 65 72 6d 69 74  tion, are permit
0c90: 74 65 64 20 70 72 6f 76 69 64 65 64 20 74 68 61  ted provided tha
0ca0: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  t the following 
0cb0: 63 6f 6e 64 69 74 69 6f 6e 73 5c 6e 22 0a 22 20  conditions\n"." 
0cc0: 20 20 61 72 65 20 6d 65 74 3a 5c 6e 22 0a 22 20    are met:\n"." 
0cd0: 20 20 5c 6e 22 0a 22 20 20 20 20 20 2a 20 52 65    \n"."     * Re
0ce0: 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 6f 66  distributions of
0cf0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6d 75 73   source code mus
0d00: 74 20 72 65 74 61 69 6e 20 74 68 65 20 61 62 6f  t retain the abo
0d10: 76 65 20 63 6f 70 79 72 69 67 68 74 5c 6e 22 0a  ve copyright\n".
0d20: 22 20 20 20 20 20 20 20 6e 6f 74 69 63 65 2c 20  "       notice, 
0d30: 74 68 69 73 20 6c 69 73 74 20 6f 66 20 63 6f 6e  this list of con
0d40: 64 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20  ditions and the 
0d50: 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 73 63 6c 61  following discla
0d60: 69 6d 65 72 2e 5c 6e 22 0a 22 20 20 20 20 20 2a  imer.\n"."     *
0d70: 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e 73   Redistributions
0d80: 20 69 6e 20 62 69 6e 61 72 79 20 66 6f 72 6d 20   in binary form 
0d90: 6d 75 73 74 20 72 65 70 72 6f 64 75 63 65 20 74  must reproduce t
0da0: 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72 69 67  he above copyrig
0db0: 68 74 5c 6e 22 0a 22 20 20 20 20 20 20 20 6e 6f  ht\n"."       no
0dc0: 74 69 63 65 2c 20 74 68 69 73 20 6c 69 73 74 20  tice, this list 
0dd0: 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e  of conditions an
0de0: 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  d the following 
0df0: 64 69 73 63 6c 61 69 6d 65 72 20 69 6e 20 74 68  disclaimer in th
0e00: 65 5c 6e 22 0a 22 20 20 20 20 20 20 20 64 6f 63  e\n"."       doc
0e10: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 64 2f 6f  umentation and/o
0e20: 72 20 6f 74 68 65 72 20 6d 61 74 65 72 69 61 6c  r other material
0e30: 73 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20  s provided with 
0e40: 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
0e50: 2e 5c 6e 22 0a 22 20 20 20 20 20 2a 20 4e 65 69  .\n"."     * Nei
0e60: 74 68 65 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  ther the name of
0e70: 20 4a 6f 68 61 6e 6e 65 73 20 5a 65 6c 6c 6e 65   Johannes Zellne
0e80: 72 20 6e 6f 72 20 74 68 65 20 6e 61 6d 65 73 20  r nor the names 
0e90: 6f 66 20 63 6f 6e 74 72 69 62 75 74 6f 72 73 5c  of contributors\
0ea0: 6e 22 0a 22 20 20 20 20 20 20 20 74 6f 20 74 68  n"."       to th
0eb0: 69 73 20 73 6f 66 74 77 61 72 65 20 6d 61 79 20  is software may 
0ec0: 62 65 20 75 73 65 64 20 74 6f 20 65 6e 64 6f 72  be used to endor
0ed0: 73 65 20 6f 72 20 70 72 6f 6d 6f 74 65 20 70 72  se or promote pr
0ee0: 6f 64 75 63 74 73 20 64 65 72 69 76 65 64 5c 6e  oducts derived\n
0ef0: 22 0a 22 20 20 20 20 20 20 20 66 72 6f 6d 20 74  "."       from t
0f00: 68 69 73 20 73 6f 66 74 77 61 72 65 20 77 69 74  his software wit
0f10: 68 6f 75 74 20 73 70 65 63 69 66 69 63 20 70 72  hout specific pr
0f20: 69 6f 72 20 77 72 69 74 74 65 6e 20 70 65 72 6d  ior written perm
0f30: 69 73 73 69 6f 6e 2e 5c 6e 22 0a 22 20 20 20 20  ission.\n"."    
0f40: 20 20 20 5c 6e 22 0a 22 20 20 20 54 48 49 53 20     \n"."   THIS 
0f50: 53 4f 46 54 57 41 52 45 20 49 53 20 50 52 4f 56  SOFTWARE IS PROV
0f60: 49 44 45 44 20 42 59 20 54 48 45 20 43 4f 50 59  IDED BY THE COPY
0f70: 52 49 47 48 54 20 48 4f 4c 44 45 52 53 20 41 4e  RIGHT HOLDERS AN
0f80: 44 20 43 4f 4e 54 52 49 42 55 54 4f 52 53 5c 6e  D CONTRIBUTORS\n
0f90: 22 0a 22 20 20 20 60 60 41 53 20 49 53 27 27 20  "."   ``AS IS'' 
0fa0: 41 4e 44 20 41 4e 59 20 45 58 50 52 45 53 53 20  AND ANY EXPRESS 
0fb0: 4f 52 20 49 4d 50 4c 49 45 44 20 57 41 52 52 41  OR IMPLIED WARRA
0fc0: 4e 54 49 45 53 2c 20 49 4e 43 4c 55 44 49 4e 47  NTIES, INCLUDING
0fd0: 2c 20 42 55 54 20 4e 4f 54 5c 6e 22 0a 22 20 20  , BUT NOT\n"."  
0fe0: 20 4c 49 4d 49 54 45 44 20 54 4f 2c 20 54 48 45   LIMITED TO, THE
0ff0: 20 49 4d 50 4c 49 45 44 20 57 41 52 52 41 4e 54   IMPLIED WARRANT
1000: 49 45 53 20 4f 46 20 4d 45 52 43 48 41 4e 54 41  IES OF MERCHANTA
1010: 42 49 4c 49 54 59 20 41 4e 44 20 46 49 54 4e 45  BILITY AND FITNE
1020: 53 53 20 46 4f 52 5c 6e 22 0a 22 20 20 20 41 20  SS FOR\n"."   A 
1030: 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f  PARTICULAR PURPO
1040: 53 45 20 41 52 45 20 44 49 53 43 4c 41 49 4d 45  SE ARE DISCLAIME
1050: 44 2e 20 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53  D. IN NO EVENT S
1060: 48 41 4c 4c 20 54 48 45 20 52 45 47 45 4e 54 53  HALL THE REGENTS
1070: 20 4f 52 5c 6e 22 0a 22 20 20 20 43 4f 4e 54 52   OR\n"."   CONTR
1080: 49 42 55 54 4f 52 53 20 42 45 20 4c 49 41 42 4c  IBUTORS BE LIABL
1090: 45 20 46 4f 52 20 41 4e 59 20 44 49 52 45 43 54  E FOR ANY DIRECT
10a0: 2c 20 49 4e 44 49 52 45 43 54 2c 20 49 4e 43 49  , INDIRECT, INCI
10b0: 44 45 4e 54 41 4c 2c 20 53 50 45 43 49 41 4c 2c  DENTAL, SPECIAL,
10c0: 5c 6e 22 0a 22 20 20 20 45 58 45 4d 50 4c 41 52  \n"."   EXEMPLAR
10d0: 59 2c 20 4f 52 20 43 4f 4e 53 45 51 55 45 4e 54  Y, OR CONSEQUENT
10e0: 49 41 4c 20 44 41 4d 41 47 45 53 20 28 49 4e 43  IAL DAMAGES (INC
10f0: 4c 55 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20  LUDING, BUT NOT 
1100: 4c 49 4d 49 54 45 44 20 54 4f 2c 5c 6e 22 0a 22  LIMITED TO,\n"."
1110: 20 20 20 50 52 4f 43 55 52 45 4d 45 4e 54 20 4f     PROCUREMENT O
1120: 46 20 53 55 42 53 54 49 54 55 54 45 20 47 4f 4f  F SUBSTITUTE GOO
1130: 44 53 20 4f 52 20 53 45 52 56 49 43 45 53 3b 20  DS OR SERVICES; 
1140: 4c 4f 53 53 20 4f 46 20 55 53 45 2c 20 44 41 54  LOSS OF USE, DAT
1150: 41 2c 20 4f 52 5c 6e 22 0a 22 20 20 20 50 52 4f  A, OR\n"."   PRO
1160: 46 49 54 53 3b 20 4f 52 20 42 55 53 49 4e 45 53  FITS; OR BUSINES
1170: 53 20 49 4e 54 45 52 52 55 50 54 49 4f 4e 29 20  S INTERRUPTION) 
1180: 48 4f 57 45 56 45 52 20 43 41 55 53 45 44 20 41  HOWEVER CAUSED A
1190: 4e 44 20 4f 4e 20 41 4e 59 20 54 48 45 4f 52 59  ND ON ANY THEORY
11a0: 20 4f 46 5c 6e 22 0a 22 20 20 20 4c 49 41 42 49   OF\n"."   LIABI
11b0: 4c 49 54 59 2c 20 57 48 45 54 48 45 52 20 49 4e  LITY, WHETHER IN
11c0: 20 43 4f 4e 54 52 41 43 54 2c 20 53 54 52 49 43   CONTRACT, STRIC
11d0: 54 20 4c 49 41 42 49 4c 49 54 59 2c 20 4f 52 20  T LIABILITY, OR 
11e0: 54 4f 52 54 20 28 49 4e 43 4c 55 44 49 4e 47 5c  TORT (INCLUDING\
11f0: 6e 22 0a 22 20 20 20 4e 45 47 4c 49 47 45 4e 43  n"."   NEGLIGENC
1200: 45 20 4f 52 20 4f 54 48 45 52 57 49 53 45 29 20  E OR OTHERWISE) 
1210: 41 52 49 53 49 4e 47 20 49 4e 20 41 4e 59 20 57  ARISING IN ANY W
1220: 41 59 20 4f 55 54 20 4f 46 20 54 48 45 20 55 53  AY OUT OF THE US
1230: 45 20 4f 46 20 54 48 49 53 5c 6e 22 0a 22 20 20  E OF THIS\n"."  
1240: 20 53 4f 46 54 57 41 52 45 2c 20 45 56 45 4e 20   SOFTWARE, EVEN 
1250: 49 46 20 41 44 56 49 53 45 44 20 4f 46 20 54 48  IF ADVISED OF TH
1260: 45 20 50 4f 53 53 49 42 49 4c 49 54 59 20 4f 46  E POSSIBILITY OF
1270: 20 53 55 43 48 20 44 41 4d 41 47 45 2e 22 3b 0a   SUCH DAMAGE.";.
1280: 0a 0a 0a 73 74 61 74 69 63 20 63 68 61 72 2a 0a  ...static char*.
1290: 73 74 72 69 70 6c 65 66 74 28 63 68 61 72 2a 20  stripleft(char* 
12a0: 69 6e 29 0a 7b 0a 20 20 20 20 63 68 61 72 2a 20  in).{.    char* 
12b0: 70 74 72 20 3d 20 69 6e 3b 0a 20 20 20 20 77 68  ptr = in;.    wh
12c0: 69 6c 65 20 28 2a 70 74 72 20 26 26 20 2a 70 74  ile (*ptr && *pt
12d0: 72 20 3c 3d 20 27 20 27 29 0a 20 20 20 20 20 20  r <= ' ').      
12e0: 20 20 70 74 72 2b 2b 3b 0a 20 20 20 20 69 66 20    ptr++;.    if 
12f0: 28 69 6e 20 21 3d 20 70 74 72 29 0a 20 20 20 20  (in != ptr).    
1300: 20 20 20 20 6d 65 6d 6d 6f 76 65 28 69 6e 2c 20      memmove(in, 
1310: 70 74 72 2c 20 73 74 72 6c 65 6e 28 70 74 72 29  ptr, strlen(ptr)
1320: 20 2b 20 31 29 3b 0a 20 20 20 20 72 65 74 75 72   + 1);.    retur
1330: 6e 20 69 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  n in;.}..static 
1340: 63 68 61 72 2a 0a 73 74 72 69 70 72 69 67 68 74  char*.stripright
1350: 28 63 68 61 72 2a 20 69 6e 29 0a 7b 0a 20 20 20  (char* in).{.   
1360: 20 63 68 61 72 2a 20 70 74 72 3b 0a 20 20 20 20   char* ptr;.    
1370: 66 6f 72 20 28 70 74 72 20 3d 20 73 74 72 63 68  for (ptr = strch
1380: 72 28 69 6e 2c 20 27 5c 30 27 29 20 2d 20 31 3b  r(in, '\0') - 1;
1390: 20 70 74 72 20 3e 3d 20 69 6e 20 26 26 20 2a 70   ptr >= in && *p
13a0: 74 72 20 3c 3d 20 27 20 27 3b 20 70 74 72 2d 2d  tr <= ' '; ptr--
13b0: 29 0a 20 20 20 20 20 20 20 20 2a 70 74 72 20 3d  ).        *ptr =
13c0: 20 27 5c 30 27 3b 0a 20 20 20 20 72 65 74 75 72   '\0';.    retur
13d0: 6e 20 69 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  n in;.}..static 
13e0: 63 68 61 72 2a 0a 73 74 72 69 70 77 68 69 74 65  char*.stripwhite
13f0: 28 63 68 61 72 2a 20 69 6e 29 0a 7b 0a 20 20 20  (char* in).{.   
1400: 20 73 74 72 69 70 6c 65 66 74 28 69 6e 29 3b 0a   stripleft(in);.
1410: 20 20 20 20 73 74 72 69 70 72 69 67 68 74 28 69      stripright(i
1420: 6e 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 69  n);.    return i
1430: 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  n;.}..static int
1440: 0a 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65  .TclReadlineLine
1450: 43 6f 6d 70 6c 65 74 65 28 76 6f 69 64 29 0a 7b  Complete(void).{
1460: 0a 20 20 20 20 72 65 74 75 72 6e 20 21 28 74 63  .    return !(tc
1470: 6c 72 6c 5f 73 74 61 74 65 20 3d 3d 20 4c 49 4e  lrl_state == LIN
1480: 45 5f 50 45 4e 44 49 4e 47 29 3b 0a 7d 0a 0a 73  E_PENDING);.}..s
1490: 74 61 74 69 63 20 76 6f 69 64 0a 54 63 6c 52 65  tatic void.TclRe
14a0: 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61 74 65 28  adlineTerminate(
14b0: 69 6e 74 20 73 74 61 74 65 29 0a 7b 0a 20 20 20  int state).{.   
14c0: 20 74 63 6c 72 6c 5f 73 74 61 74 65 20 3d 20 73   tclrl_state = s
14d0: 74 61 74 65 3b 0a 20 20 20 20 72 6c 5f 63 61 6c  tate;.    rl_cal
14e0: 6c 62 61 63 6b 5f 68 61 6e 64 6c 65 72 5f 72 65  lback_handler_re
14f0: 6d 6f 76 65 28 29 3b 0a 7d 0a 0a 73 74 61 74 69  move();.}..stati
1500: 63 20 63 68 61 72 2a 0a 54 63 6c 52 65 61 64 6c  c char*.TclReadl
1510: 69 6e 65 51 75 6f 74 65 28 63 68 61 72 2a 20 74  ineQuote(char* t
1520: 65 78 74 2c 20 63 68 61 72 2a 20 71 75 6f 74 65  ext, char* quote
1530: 63 68 61 72 73 29 0a 7b 0a 20 20 20 20 63 68 61  chars).{.    cha
1540: 72 2a 20 70 74 72 3b 0a 20 20 20 20 63 68 61 72  r* ptr;.    char
1550: 2a 20 72 65 73 75 6c 74 5f 63 3b 0a 20 20 20 20  * result_c;.    
1560: 69 6e 74 20 69 2c 20 6c 65 6e 20 3d 20 73 74 72  int i, len = str
1570: 6c 65 6e 28 71 75 6f 74 65 63 68 61 72 73 29 3b  len(quotechars);
1580: 0a 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  .    Tcl_DString
1590: 20 72 65 73 75 6c 74 3b 0a 0a 20 20 20 20 54 63   result;..    Tc
15a0: 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 72  l_DStringInit(&r
15b0: 65 73 75 6c 74 29 3b 0a 20 20 20 20 66 6f 72 20  esult);.    for 
15c0: 28 70 74 72 20 3d 20 74 65 78 74 3b 20 70 74 72  (ptr = text; ptr
15d0: 20 26 26 20 2a 70 74 72 3b 20 70 74 72 2b 2b 29   && *ptr; ptr++)
15e0: 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28   {.        for (
15f0: 69 20 3d 20 30 3b 20 69 20 3c 20 6c 65 6e 3b 20  i = 0; i < len; 
1600: 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20  i++) {.         
1610: 20 20 20 69 66 20 28 71 75 6f 74 65 63 68 61 72     if (quotechar
1620: 73 5b 69 5d 20 3d 3d 20 2a 70 74 72 29 20 7b 0a  s[i] == *ptr) {.
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1640: 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e  Tcl_DStringAppen
1650: 64 28 26 72 65 73 75 6c 74 2c 20 22 5c 5c 22 2c  d(&result, "\\",
1660: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   1);.           
1670: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1680: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1690: 20 20 7d 0a 20 20 20 20 20 20 20 20 54 63 6c 5f    }.        Tcl_
16a0: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28 26 72  DStringAppend(&r
16b0: 65 73 75 6c 74 2c 20 70 74 72 2c 20 31 29 3b 0a  esult, ptr, 1);.
16c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 73 75 6c 74      }.    result
16d0: 5f 63 20 3d 20 73 74 72 64 75 70 28 54 63 6c 5f  _c = strdup(Tcl_
16e0: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 72 65  DStringValue(&re
16f0: 73 75 6c 74 29 29 3b 0a 20 20 20 20 72 65 74 75  sult));.    retu
1700: 72 6e 20 72 65 73 75 6c 74 5f 63 3b 0a 7d 0a 0a  rn result_c;.}..
1710: 73 74 61 74 69 63 20 69 6e 74 0a 54 63 6c 52 65  static int.TclRe
1720: 61 64 6c 69 6e 65 43 6d 64 28 43 6c 69 65 6e 74  adlineCmd(Client
1730: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
1740: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1750: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  erp, int objc,. 
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
1770: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1780: 76 5b 5d 29 0a 7b 0a 20 20 20 20 69 6e 74 20 6f  v[]).{.    int o
1790: 62 6a 5f 69 64 78 2c 20 73 74 61 74 75 73 3b 0a  bj_idx, status;.
17a0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72  .    static char
17b0: 20 2a 73 75 62 43 6d 64 73 5b 5d 20 3d 20 7b 0a   *subCmds[] = {.
17c0: 20 20 20 20 20 20 20 20 22 72 65 61 64 22 2c 20          "read", 
17d0: 22 69 6e 69 74 69 61 6c 69 7a 65 22 2c 20 22 77  "initialize", "w
17e0: 72 69 74 65 22 2c 20 22 61 64 64 22 2c 20 22 63  rite", "add", "c
17f0: 6f 6d 70 6c 65 74 65 22 2c 0a 20 20 20 20 20 20  omplete",.      
1800: 20 20 22 63 75 73 74 6f 6d 63 6f 6d 70 6c 65 74    "customcomplet
1810: 65 72 22 2c 20 22 62 75 69 6c 74 69 6e 63 6f 6d  er", "builtincom
1820: 70 6c 65 74 65 72 22 2c 20 22 65 6f 66 63 68 61  pleter", "eofcha
1830: 72 22 2c 0a 20 20 20 20 20 20 20 20 22 72 65 73  r",.        "res
1840: 65 74 2d 74 65 72 6d 69 6e 61 6c 22 2c 20 22 62  et-terminal", "b
1850: 65 6c 6c 22 2c 20 22 74 65 78 74 22 2c 20 22 75  ell", "text", "u
1860: 70 64 61 74 65 22 2c 0a 20 20 20 20 20 20 20 20  pdate",.        
1870: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 0a 20 20  (char *) NULL.  
1880: 20 20 7d 3b 0a 20 20 20 20 65 6e 75 6d 20 53 75    };.    enum Su
1890: 62 43 6d 64 49 64 78 20 7b 0a 20 20 20 20 20 20  bCmdIdx {.      
18a0: 20 20 54 43 4c 52 4c 5f 52 45 41 44 2c 20 54 43    TCLRL_READ, TC
18b0: 4c 52 4c 5f 49 4e 49 54 49 41 4c 49 5a 45 2c 20  LRL_INITIALIZE, 
18c0: 54 43 4c 52 4c 5f 57 52 49 54 45 2c 20 54 43 4c  TCLRL_WRITE, TCL
18d0: 52 4c 5f 41 44 44 2c 20 54 43 4c 52 4c 5f 43 4f  RL_ADD, TCLRL_CO
18e0: 4d 50 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20  MPLETE,.        
18f0: 54 43 4c 52 4c 5f 43 55 53 54 4f 4d 43 4f 4d 50  TCLRL_CUSTOMCOMP
1900: 4c 45 54 45 52 2c 20 54 43 4c 52 4c 5f 42 55 49  LETER, TCLRL_BUI
1910: 4c 54 49 4e 43 4f 4d 50 4c 45 54 45 52 2c 20 54  LTINCOMPLETER, T
1920: 43 4c 52 4c 5f 45 4f 46 43 48 41 52 2c 0a 20 20  CLRL_EOFCHAR,.  
1930: 20 20 20 20 20 20 54 43 4c 52 4c 5f 52 45 53 45        TCLRL_RESE
1940: 54 5f 54 45 52 4d 49 4e 41 4c 2c 20 54 43 4c 52  T_TERMINAL, TCLR
1950: 4c 5f 42 45 4c 4c 2c 20 54 43 4c 52 4c 5f 54 45  L_BELL, TCLRL_TE
1960: 58 54 2c 20 54 43 4c 52 4c 5f 55 50 44 41 54 45  XT, TCLRL_UPDATE
1970: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 54 63 6c  .    };..    Tcl
1980: 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74  _ResetResult(int
1990: 65 72 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 74  erp); /* clear t
19a0: 68 65 20 72 65 73 75 6c 74 20 73 70 61 63 65 20  he result space 
19b0: 2a 2f 0a 0a 20 20 20 20 69 66 20 28 6f 62 6a 63  */..    if (objc
19c0: 20 3c 20 32 29 20 7b 0a 20 20 20 20 20 20 20 20   < 2) {.        
19d0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
19e0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
19f0: 2c 20 22 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61  , "option ?arg a
1a00: 72 67 20 2e 2e 2e 3f 22 29 3b 0a 20 20 20 20 20  rg ...?");.     
1a10: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1a20: 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ROR;.    }..    
1a30: 73 74 61 74 75 73 20 3d 20 54 63 6c 5f 47 65 74  status = Tcl_Get
1a40: 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 0a 20 20 20  IndexFromObj.   
1a50: 20 20 20 20 20 28 69 6e 74 65 72 70 2c 20 6f 62       (interp, ob
1a60: 6a 76 5b 31 5d 2c 20 73 75 62 43 6d 64 73 2c 20  jv[1], subCmds, 
1a70: 22 6f 70 74 69 6f 6e 22 2c 20 30 2c 20 28 69 6e  "option", 0, (in
1a80: 74 20 2a 29 20 26 6f 62 6a 5f 69 64 78 29 3b 0a  t *) &obj_idx);.
1a90: 0a 20 20 20 20 69 66 20 28 73 74 61 74 75 73 20  .    if (status 
1aa0: 21 3d 20 54 43 4c 5f 4f 4b 29 0a 20 20 20 20 20  != TCL_OK).     
1ab0: 20 20 20 72 65 74 75 72 6e 20 73 74 61 74 75 73     return status
1ac0: 3b 0a 0a 20 20 20 20 73 77 69 74 63 68 20 28 6f  ;..    switch (o
1ad0: 62 6a 5f 69 64 78 29 20 7b 0a 0a 20 20 20 20 20  bj_idx) {..     
1ae0: 20 20 20 63 61 73 65 20 54 43 4c 52 4c 5f 52 45     case TCLRL_RE
1af0: 41 44 3a 0a 0a 20 20 20 20 20 20 20 20 20 20 20  AD:..           
1b00: 20 72 6c 5f 63 61 6c 6c 62 61 63 6b 5f 68 61 6e   rl_callback_han
1b10: 64 6c 65 72 5f 69 6e 73 74 61 6c 6c 28 0a 20 20  dler_install(.  
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b30: 20 20 20 20 20 6f 62 6a 63 20 3d 3d 20 33 20 3f       objc == 3 ?
1b40: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
1b50: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30  omObj(objv[2], 0
1b60: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1b70: 20 20 20 20 20 20 20 20 20 3a 20 22 25 20 22 2c           : "% ",
1b80: 20 54 63 6c 52 65 61 64 6c 69 6e 65 4c 69 6e 65   TclReadlineLine
1b90: 43 6f 6d 70 6c 65 74 65 48 61 6e 64 6c 65 72 29  CompleteHandler)
1ba0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  ;..            T
1bb0: 63 6c 5f 43 72 65 61 74 65 46 69 6c 65 48 61 6e  cl_CreateFileHan
1bc0: 64 6c 65 72 28 30 2c 20 54 43 4c 5f 52 45 41 44  dler(0, TCL_READ
1bd0: 41 42 4c 45 2c 0a 20 20 20 20 20 20 20 20 20 20  ABLE,.          
1be0: 20 20 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e        TclReadlin
1bf0: 65 52 65 61 64 48 61 6e 64 6c 65 72 2c 20 28 43  eReadHandler, (C
1c00: 6c 69 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 29  lientData) NULL)
1c10: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;..            /
1c20: 2a 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  **.             
1c30: 2a 20 4d 61 69 6e 20 4c 6f 6f 70 2e 0a 20 20 20  * Main Loop..   
1c40: 20 20 20 20 20 20 20 20 20 20 2a 20 58 58 58 20            * XXX 
1c50: 65 61 63 68 20 6d 6f 64 69 66 69 63 61 74 69 6f  each modificatio
1c60: 6e 20 6f 66 20 74 68 65 20 67 6c 6f 62 61 6c 20  n of the global 
1c70: 76 61 72 69 61 62 6c 65 73 0a 20 20 20 20 20 20  variables.      
1c80: 20 20 20 20 20 20 20 2a 20 20 20 20 20 77 68 69         *     whi
1c90: 63 68 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68  ch terminates th
1ca0: 65 20 6d 61 69 6e 20 6c 6f 6f 70 20 6d 75 73 74  e main loop must
1cb0: 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 20 20   call.          
1cc0: 20 20 20 2a 20 20 20 20 20 72 6c 5f 63 61 6c 6c     *     rl_call
1cd0: 62 61 63 6b 5f 68 61 6e 64 6c 65 72 5f 72 65 6d  back_handler_rem
1ce0: 6f 76 65 28 29 20 74 6f 20 6c 65 61 76 65 0a 20  ove() to leave. 
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 20              *   
1d00: 20 20 72 65 61 64 6c 69 6e 65 20 69 6e 20 61 20    readline in a 
1d10: 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 20 20  defined state.  
1d20: 20 20 20 20 20 20 20 20 58 58 58 0a 20 20 20 20          XXX.    
1d30: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20           */.    
1d40: 20 20 20 20 20 20 20 20 74 63 6c 72 6c 5f 73 74          tclrl_st
1d50: 61 74 65 20 3d 20 4c 49 4e 45 5f 50 45 4e 44 49  ate = LINE_PENDI
1d60: 4e 47 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20  NG;..           
1d70: 20 77 68 69 6c 65 20 28 21 54 63 6c 52 65 61 64   while (!TclRead
1d80: 6c 69 6e 65 4c 69 6e 65 43 6f 6d 70 6c 65 74 65  lineLineComplete
1d90: 28 29 29 20 7b 0a 23 69 66 64 65 66 20 45 58 45  ()) {.#ifdef EXE
1da0: 43 55 54 49 4e 47 5f 4d 41 43 52 4f 5f 4e 41 4d  CUTING_MACRO_NAM
1db0: 45 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  E.              
1dc0: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20 20    /**.          
1dd0: 20 20 20 20 20 20 20 2a 20 63 68 65 63 6b 20 66         * check f
1de0: 69 72 73 74 2c 20 69 66 20 6d 6f 72 65 20 63 68  irst, if more ch
1df0: 61 72 61 63 74 65 72 73 20 61 72 65 0a 20 20 20  aracters are.   
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20                * 
1e10: 61 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d 20 5f  available from _
1e20: 72 6c 5f 65 78 65 63 75 74 69 6e 67 5f 6d 61 63  rl_executing_mac
1e30: 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
1e40: 20 20 20 20 20 2a 20 62 65 63 61 75 73 65 20 54       * because T
1e50: 63 6c 5f 44 6f 4f 6e 65 45 76 65 6e 74 28 29 20  cl_DoOneEvent() 
1e60: 77 69 6c 6c 20 28 6e 61 74 75 72 61 6c 6c 79 29  will (naturally)
1e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e80: 20 20 2a 20 6e 6f 74 20 64 65 74 65 63 74 20 74    * not detect t
1e90: 68 69 73 20 60 65 76 65 6e 74 27 2e 0a 20 20 20  his `event'..   
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
1eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ec0: 20 69 66 20 28 45 58 45 43 55 54 49 4e 47 5f 4d   if (EXECUTING_M
1ed0: 41 43 52 4f 5f 4e 41 4d 45 29 0a 20 20 20 20 20  ACRO_NAME).     
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ef0: 63 6c 52 65 61 64 6c 69 6e 65 52 65 61 64 48 61  clReadlineReadHa
1f00: 6e 64 6c 65 72 28 28 43 6c 69 65 6e 74 44 61 74  ndler((ClientDat
1f10: 61 29 20 4e 55 4c 4c 2c 20 54 43 4c 5f 52 45 41  a) NULL, TCL_REA
1f20: 44 41 42 4c 45 29 3b 0a 20 20 20 20 20 20 20 20  DABLE);.        
1f30: 20 20 20 20 20 20 20 20 65 6c 73 65 0a 23 65 6e          else.#en
1f40: 64 69 66 0a 20 20 20 20 20 20 20 20 20 20 20 20  dif.            
1f50: 20 20 20 20 20 20 20 20 54 63 6c 5f 44 6f 4f 6e          Tcl_DoOn
1f60: 65 45 76 65 6e 74 28 54 43 4c 5f 41 4c 4c 5f 45  eEvent(TCL_ALL_E
1f70: 56 45 4e 54 53 29 3b 0a 20 20 20 20 20 20 20 20  VENTS);.        
1f80: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
1f90: 20 20 20 54 63 6c 5f 44 65 6c 65 74 65 46 69 6c     Tcl_DeleteFil
1fa0: 65 48 61 6e 64 6c 65 72 28 30 29 3b 0a 0a 20 20  eHandler(0);..  
1fb0: 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68            switch
1fc0: 20 28 74 63 6c 72 6c 5f 73 74 61 74 65 29 20 7b   (tclrl_state) {
1fd0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fe0: 20 20 63 61 73 65 20 4c 49 4e 45 5f 43 4f 4d 50    case LINE_COMP
1ff0: 4c 45 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20  LETE:.          
2000: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2010: 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 20 20   TCL_OK;.       
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2030: 4e 4f 54 52 45 41 43 48 45 44 20 2a 2f 0a 20 20  NOTREACHED */.  
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2050: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20    break;..      
2060: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 4c            case L
2070: 49 4e 45 5f 45 4f 46 3a 0a 20 20 20 20 20 20 20  INE_EOF:.       
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2090: 28 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e  (tclrl_eof_strin
20a0: 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g).             
20b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 63         return Tc
20c0: 6c 5f 45 76 61 6c 28 69 6e 74 65 72 70 2c 20 74  l_Eval(interp, t
20d0: 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 29  clrl_eof_string)
20e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
20f0: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2110: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20  eturn TCL_OK;.  
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2130: 20 20 2f 2a 20 4e 4f 54 52 45 41 43 48 45 44 20    /* NOTREACHED 
2140: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
2150: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2170: 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
2180: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2190: 72 6e 20 74 63 6c 72 6c 5f 73 74 61 74 65 3b 0a  rn tclrl_state;.
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b0: 20 20 20 20 2f 2a 20 4e 4f 54 52 45 41 43 48 45      /* NOTREACHE
21c0: 44 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  D */.           
21d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
21f0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2200: 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
2210: 43 4c 52 4c 5f 49 4e 49 54 49 41 4c 49 5a 45 3a  CLRL_INITIALIZE:
2220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2230: 28 33 20 21 3d 20 6f 62 6a 63 29 20 7b 0a 20 20  (3 != objc) {.  
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
2250: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
2260: 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20  nterp, 2, objv, 
2270: 22 68 69 73 74 6f 72 79 66 69 6c 65 22 29 3b 0a  "historyfile");.
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
22a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ;.            } 
22b0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
22c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 63         return Tc
22d0: 6c 52 65 61 64 6c 69 6e 65 49 6e 69 74 69 61 6c  lReadlineInitial
22e0: 69 7a 65 28 69 6e 74 65 72 70 2c 0a 20 20 20 20  ize(interp,.    
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
2310: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
2320: 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 3b 0a  j(objv[2], 0));.
2330: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
2340: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2350: 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
2360: 43 4c 52 4c 5f 57 52 49 54 45 3a 0a 20 20 20 20  CLRL_WRITE:.    
2370: 20 20 20 20 20 20 20 20 69 66 20 28 33 20 21 3d          if (3 !=
2380: 20 6f 62 6a 63 29 20 7b 0a 20 20 20 20 20 20 20   objc) {.       
2390: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f           Tcl_Wro
23a0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
23b0: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 68 69 73 74  , 2, objv, "hist
23c0: 6f 72 79 66 69 6c 65 22 29 3b 0a 20 20 20 20 20  oryfile");.     
23d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
23f0: 20 20 20 20 20 20 20 20 20 7d 20 20 65 6c 73 65           }  else
2400: 20 69 66 20 28 77 72 69 74 65 5f 68 69 73 74 6f   if (write_histo
2410: 72 79 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ry(Tcl_GetString
2420: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
2430: 20 30 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20   0))) {.        
2440: 20 20 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65          Tcl_Appe
2450: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
2460: 20 22 75 6e 61 62 6c 65 20 74 6f 20 77 72 69 74   "unable to writ
2470: 65 20 68 69 73 74 6f 72 79 20 74 6f 20 60 22 2c  e history to `",
2480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2490: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
24a0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ngFromObj(objv[2
24b0: 5d 2c 20 30 29 2c 20 22 27 5c 6e 22 2c 20 28 63  ], 0), "'\n", (c
24c0: 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20  har*) NULL);.   
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
24f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2500: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 63 6c           if (tcl
2510: 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65 6e 67 74  rl_history_lengt
2520: 68 20 3e 3d 20 30 29 20 7b 0a 20 20 20 20 20 20  h >= 0) {.      
2530: 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72            histor
2540: 79 5f 74 72 75 6e 63 61 74 65 5f 66 69 6c 65 28  y_truncate_file(
2550: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
2560: 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29  mObj(objv[2], 0)
2570: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2590: 74 63 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65  tclrl_history_le
25a0: 6e 67 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20  ngth);.         
25b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
25c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
25e0: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
25f0: 20 54 43 4c 52 4c 5f 41 44 44 3a 0a 20 20 20 20   TCLRL_ADD:.    
2600: 20 20 20 20 20 20 20 20 69 66 20 28 33 20 21 3d          if (3 !=
2610: 20 6f 62 6a 63 29 20 7b 0a 20 20 20 20 20 20 20   objc) {.       
2620: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f           Tcl_Wro
2630: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
2640: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 63 6f 6d 70  , 2, objv, "comp
2650: 6c 65 74 65 72 4c 69 6e 65 22 29 3b 0a 20 20 20  leterLine");.   
2660: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2670: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2680: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2690: 65 20 69 66 20 28 54 63 6c 52 65 61 64 6c 69 6e  e if (TclReadlin
26a0: 65 4b 6e 6f 77 6e 43 6f 6d 6d 61 6e 64 73 28 0a  eKnownCommands(.
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c0: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74           Tcl_Get
26d0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
26e0: 6a 76 5b 32 5d 2c 20 30 29 2c 0a 20 20 20 20 20  jv[2], 0),.     
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 20 20 28 69 6e 74 29 20 30 2c 20 5f 43 4d      (int) 0, _CM
2710: 44 5f 53 45 54 29 29 20 7b 0a 20 20 20 20 20 20  D_SET)) {.      
2720: 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 41 70            Tcl_Ap
2730: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2740: 70 2c 20 22 75 6e 61 62 6c 65 20 74 6f 20 61 64  p, "unable to ad
2750: 64 20 63 6f 6d 6d 61 6e 64 20 5c 22 22 2c 0a 20  d command \"",. 
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2770: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
2780: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
2790: 20 30 29 2c 20 22 5c 22 5c 6e 22 2c 20 28 63 68   0), "\"\n", (ch
27a0: 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  ar*) NULL);.    
27b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
27c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
27d0: 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 52 4c        case TCLRL
27e0: 5f 43 4f 4d 50 4c 45 54 45 3a 0a 20 20 20 20 20  _COMPLETE:.     
27f0: 20 20 20 20 20 20 20 69 66 20 28 33 20 21 3d 20         if (3 != 
2800: 6f 62 6a 63 29 20 7b 0a 20 20 20 20 20 20 20 20  objc) {.        
2810: 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e          Tcl_Wron
2820: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
2830: 20 32 2c 20 6f 62 6a 76 2c 20 22 6c 69 6e 65 22   2, objv, "line"
2840: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
2850: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2860: 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ROR;.           
2870: 20 7d 20 65 6c 73 65 20 69 66 20 28 54 63 6c 5f   } else if (Tcl_
2880: 43 6f 6d 6d 61 6e 64 43 6f 6d 70 6c 65 74 65 28  CommandComplete(
2890: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
28a0: 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29  mObj(objv[2], 0)
28b0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
28c0: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
28d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 31  esult(interp, "1
28e0: 22 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29  ", (char*) NULL)
28f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ;.            } 
2900: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
2910: 20 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e         Tcl_Appen
2920: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2930: 22 30 22 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c  "0", (char*) NUL
2940: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  L);.            
2950: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  }.            br
2960: 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
2970: 73 65 20 54 43 4c 52 4c 5f 43 55 53 54 4f 4d 43  se TCLRL_CUSTOMC
2980: 4f 4d 50 4c 45 54 45 52 3a 0a 20 20 20 20 20 20  OMPLETER:.      
2990: 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3e        if (objc >
29a0: 20 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20   3) {.          
29b0: 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e        Tcl_WrongN
29c0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32  umArgs(interp, 2
29d0: 2c 20 6f 62 6a 76 2c 20 22 3f 73 63 72 69 70 74  , objv, "?script
29e0: 43 6f 6d 70 6c 65 74 65 72 3f 22 29 3b 0a 20 20  Completer?");.  
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
2a20: 73 65 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63  se if (3 == objc
2a30: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
2a40: 20 20 20 20 69 66 20 28 74 63 6c 72 6c 5f 63 75      if (tclrl_cu
2a50: 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29 0a  stom_completer).
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a70: 20 20 20 20 46 52 45 45 28 74 63 6c 72 6c 5f 63      FREE(tclrl_c
2a80: 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29  ustom_completer)
2a90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
2aa0: 20 20 69 66 20 28 21 62 6c 61 6e 6b 5f 6c 69 6e    if (!blank_lin
2ab0: 65 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46  e(Tcl_GetStringF
2ac0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
2ad0: 30 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  0))).           
2ae0: 20 20 20 20 20 20 20 20 20 74 63 6c 72 6c 5f 63           tclrl_c
2af0: 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 20  ustom_completer 
2b00: 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  =.              
2b10: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 70             strip
2b20: 77 68 69 74 65 28 73 74 72 64 75 70 28 54 63 6c  white(strdup(Tcl
2b30: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
2b40: 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 29 3b  j(objv[2], 0)));
2b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
2b60: 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 41             Tcl_A
2b70: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
2b80: 72 70 2c 20 74 63 6c 72 6c 5f 63 75 73 74 6f 6d  rp, tclrl_custom
2b90: 5f 63 6f 6d 70 6c 65 74 65 72 2c 20 28 63 68 61  _completer, (cha
2ba0: 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20  r*) NULL);.     
2bb0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2bc0: 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 52         case TCLR
2bd0: 4c 5f 42 55 49 4c 54 49 4e 43 4f 4d 50 4c 45 54  L_BUILTINCOMPLET
2be0: 45 52 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ER:.            
2bf0: 69 66 20 28 6f 62 6a 63 20 3e 20 33 29 20 7b 0a  if (objc > 3) {.
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c10: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
2c20: 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76  (interp, 2, objv
2c30: 2c 20 22 3f 62 6f 6f 6c 65 61 6e 3f 22 29 3b 0a  , "?boolean?");.
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2c60: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ;.            } 
2c70: 65 6c 73 65 20 69 66 20 28 33 20 3d 3d 20 6f 62  else if (3 == ob
2c80: 6a 63 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  jc) {.          
2c90: 20 20 20 20 20 20 69 6e 74 20 62 6f 6f 6c 20 3d        int bool =
2ca0: 20 74 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c 74   tclrl_use_built
2cb0: 69 6e 5f 63 6f 6d 70 6c 65 74 65 72 3b 0a 20 20  in_completer;.  
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2cd0: 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 54 63 6c 5f   (TCL_OK != Tcl_
2ce0: 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 65 72  GetBoolean(inter
2cf0: 70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  p,.             
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d10: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
2d20: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d  gFromObj(objv[2]
2d30: 2c 20 30 29 2c 0a 20 20 20 20 20 20 20 20 20 20  , 0),.          
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d50: 20 20 20 20 20 20 20 26 62 6f 6f 6c 29 29 20 7b         &bool)) {
2d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d70: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
2d80: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a 20 20  esult(interp,.  
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da0: 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20 61        "wrong # a
2db0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 61  rgs: should be a
2dc0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 22   boolean value."
2dd0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2de0: 20 20 20 20 20 20 20 20 20 20 28 63 68 61 72 2a            (char*
2df0: 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20  ) NULL);.       
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e30: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 74 63 6c 72              tclr
2e50: 6c 5f 75 73 65 5f 62 75 69 6c 74 69 6e 5f 63 6f  l_use_builtin_co
2e60: 6d 70 6c 65 74 65 72 20 3d 20 62 6f 6f 6c 3b 0a  mpleter = bool;.
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e80: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
2ea0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
2eb0: 65 72 70 2c 20 74 63 6c 72 6c 5f 75 73 65 5f 62  erp, tclrl_use_b
2ec0: 75 69 6c 74 69 6e 5f 63 6f 6d 70 6c 65 74 65 72  uiltin_completer
2ed0: 20 3f 20 22 31 22 20 3a 20 22 30 22 2c 0a 20 20   ? "1" : "0",.  
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63                (c
2ef0: 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20  har*) NULL);.   
2f00: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2f10: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43  .        case TC
2f20: 4c 52 4c 5f 45 4f 46 43 48 41 52 3a 0a 20 20 20  LRL_EOFCHAR:.   
2f30: 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 62 6a           if (obj
2f40: 63 20 3e 20 33 29 20 7b 0a 20 20 20 20 20 20 20  c > 3) {.       
2f50: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f           Tcl_Wro
2f60: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
2f70: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 3f 73 63 72  , 2, objv, "?scr
2f80: 69 70 74 3f 22 29 3b 0a 20 20 20 20 20 20 20 20  ipt?");.        
2f90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
2fa0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  CL_ERROR;.      
2fb0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20        } else if 
2fc0: 28 33 20 3d 3d 20 6f 62 6a 63 29 20 7b 0a 20 20  (3 == objc) {.  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2fe0: 20 28 74 63 6c 72 6c 5f 65 6f 66 5f 73 74 72 69   (tclrl_eof_stri
2ff0: 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng).            
3000: 20 20 20 20 20 20 20 20 46 52 45 45 28 74 63 6c          FREE(tcl
3010: 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 29 3b 0a  rl_eof_string);.
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 69 66 20 28 21 62 6c 61 6e 6b 5f 6c 69 6e 65 28  if (!blank_line(
3040: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
3050: 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29  mObj(objv[2], 0)
3060: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
3070: 20 20 20 20 20 20 20 74 63 6c 72 6c 5f 65 6f 66         tclrl_eof
3080: 5f 73 74 72 69 6e 67 20 3d 0a 20 20 20 20 20 20  _string =.      
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 20 20 73 74 72 69 70 77 68 69 74 65 28 73 74 72    stripwhite(str
30b0: 64 75 70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e  dup(Tcl_GetStrin
30c0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d  gFromObj(objv[2]
30d0: 2c 20 30 29 29 29 3b 0a 20 20 20 20 20 20 20 20  , 0)));.        
30e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
30f0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
3100: 6c 74 28 69 6e 74 65 72 70 2c 20 74 63 6c 72 6c  lt(interp, tclrl
3110: 5f 65 6f 66 5f 73 74 72 69 6e 67 2c 20 28 63 68  _eof_string, (ch
3120: 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  ar*) NULL);.    
3130: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
3140: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c          case TCL
3150: 52 4c 5f 52 45 53 45 54 5f 54 45 52 4d 49 4e 41  RL_RESET_TERMINA
3160: 4c 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  L:.            /
3170: 2a 20 54 4f 44 4f 3a 20 61 64 64 20 74 68 69 73  * TODO: add this
3180: 20 74 6f 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   to the complete
3190: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  r */.           
31a0: 20 69 66 20 28 6f 62 6a 63 20 3e 20 33 29 20 7b   if (objc > 3) {
31b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
31d0: 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a  s(interp, 2, obj
31e0: 76 2c 20 22 3f 74 65 72 6d 69 6e 61 6c 2d 6e 61  v, "?terminal-na
31f0: 6d 65 3f 22 29 3b 0a 20 20 20 20 20 20 20 20 20  me?");.         
3200: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
3210: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20  L_ERROR;.       
3220: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
3230: 20 20 20 69 66 20 28 33 20 3d 3d 20 6f 62 6a 63     if (3 == objc
3240: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3250: 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20      /*.         
3260: 20 20 20 20 20 20 20 20 2a 20 2d 20 74 63 6c 38          * - tcl8
3270: 2e 30 20 64 6f 65 73 6e 27 74 20 68 61 76 65 20  .0 doesn't have 
3280: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
3290: 6d 4f 62 6a 28 29 0a 20 20 20 20 20 20 20 20 20  mObj().         
32a0: 20 20 20 20 20 20 20 20 2a 20 2d 20 72 6c 5f 72          * - rl_r
32b0: 65 73 65 74 5f 74 65 72 6d 69 6e 61 6c 28 29 20  eset_terminal() 
32c0: 6d 69 67 68 74 20 62 65 20 64 65 66 69 6e 65 64  might be defined
32d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e0: 20 20 2a 20 20 20 74 6f 20 74 61 6b 65 20 6e 6f    *   to take no
32f0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 69 73   arguments. This
3300: 20 6d 69 67 68 74 20 70 72 6f 64 75 63 65 0a 20   might produce. 
3310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3320: 2a 20 20 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  *   a compiler w
3330: 61 72 6e 69 6e 67 2e 0a 20 20 20 20 20 20 20 20  arning..        
3340: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20           */.    
3350: 20 20 20 20 20 20 20 20 20 20 20 20 72 6c 5f 72              rl_r
3360: 65 73 65 74 5f 74 65 72 6d 69 6e 61 6c 28 54 63  eset_terminal(Tc
3370: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
3380: 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 30 29 29 3b  bj(objv[2], 0));
3390: 0a 23 69 66 64 65 66 20 43 4c 45 41 4e 55 50 5f  .#ifdef CLEANUP_
33a0: 41 46 45 52 5f 53 49 47 4e 41 4c 0a 20 20 20 20  AFER_SIGNAL.    
33b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
33c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33d0: 20 72 6c 5f 63 6c 65 61 6e 75 70 5f 61 66 74 65   rl_cleanup_afte
33e0: 72 5f 73 69 67 6e 61 6c 28 29 3b 0a 23 65 6e 64  r_signal();.#end
33f0: 69 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  if.            }
3400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
3410: 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
3420: 65 20 54 43 4c 52 4c 5f 42 45 4c 4c 3a 0a 20 20  e TCLRL_BELL:.  
3430: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 62            if (ob
3440: 6a 63 20 21 3d 20 32 29 20 7b 0a 20 20 20 20 20  jc != 2) {.     
3450: 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57             Tcl_W
3460: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
3470: 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 22 29  rp, 2, objv, "")
3480: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
3490: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
34a0: 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  OR;.            
34b0: 7d 0a 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  }...            
34c0: 2f 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /*.             
34d0: 2a 20 72 69 6e 67 20 74 68 65 20 74 65 72 6d 69  * ring the termi
34e0: 6e 61 6c 20 62 65 6c 6c 20 6f 62 65 79 69 6e 67  nal bell obeying
34f0: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 20   the current.   
3500: 20 20 20 20 20 20 20 20 20 20 2a 20 73 65 74 74            * sett
3510: 69 6e 67 73 20 2d 2d 20 61 75 64 69 62 6c 65 20  ings -- audible 
3520: 6f 72 20 76 69 73 69 62 6c 65 2e 0a 20 20 20 20  or visible..    
3530: 20 20 20 20 20 20 20 20 20 2a 2f 0a 0a 20 20 20           */..   
3540: 20 20 20 20 20 20 20 20 20 72 6c 5f 64 69 6e 67           rl_ding
3550: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
3560: 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20  break;..        
3570: 63 61 73 65 20 54 43 4c 52 4c 5f 55 50 44 41 54  case TCLRL_UPDAT
3580: 45 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  E:.            i
3590: 66 20 28 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a  f (objc != 2) {.
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
35c0: 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76  (interp, 2, objv
35d0: 2c 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20  , "");.         
35e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
35f0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20  L_ERROR;.       
3600: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
3610: 20 20 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68      /* Update th
3620: 65 20 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f 0a  e input line */.
3630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3640: 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 29  (rl_line_buffer)
3650: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
3660: 20 20 20 72 6c 5f 66 6f 72 63 65 64 5f 75 70 64     rl_forced_upd
3670: 61 74 65 5f 64 69 73 70 6c 61 79 28 29 3b 0a 20  ate_display();. 
3680: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20             }..  
3690: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
36a0: 0a 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ...        case 
36b0: 54 43 4c 52 4c 5f 54 45 58 54 3a 0a 20 20 20 20  TCLRL_TEXT:.    
36c0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63          if (objc
36d0: 20 21 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 20   != 2) {.       
36e0: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f           Tcl_Wro
36f0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
3700: 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 2, objv, "");.
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3730: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
3740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  .            /* 
3750: 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  Return the curre
3760: 6e 74 20 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f  nt input line */
3770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c  .            Tcl
3780: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
3790: 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 20 20  terp,.          
37a0: 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
37b0: 6e 67 4f 62 6a 28 72 6c 5f 6c 69 6e 65 5f 62 75  ngObj(rl_line_bu
37c0: 66 66 65 72 20 3f 20 72 6c 5f 6c 69 6e 65 5f 62  ffer ? rl_line_b
37d0: 75 66 66 65 72 20 3a 20 22 22 2c 20 2d 31 29 29  uffer : "", -1))
37e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
37f0: 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 64 65  eak;..        de
3800: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20  fault:.         
3810: 20 20 20 67 6f 74 6f 20 42 41 44 5f 43 4f 4d 4d     goto BAD_COMM
3820: 41 4e 44 3b 0a 20 20 20 20 20 20 20 20 20 20 20  AND;.           
3830: 20 2f 2a 20 4e 4f 54 52 45 41 43 48 45 44 20 2a   /* NOTREACHED *
3840: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  /.            br
3850: 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  eak;.    }..    
3860: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a  return TCL_OK;..
3870: 42 41 44 5f 43 4f 4d 4d 41 4e 44 3a 0a 20 20 20  BAD_COMMAND:.   
3880: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
3890: 74 28 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20  t(interp,.      
38a0: 20 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a    "wrong # args:
38b0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 72 65 61   should be \"rea
38c0: 64 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 3f 61 72  dline option ?ar
38d0: 67 20 2e 2e 2e 3f 5c 22 22 2c 0a 20 20 20 20 20  g ...?\"",.     
38e0: 20 20 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29     (char*) NULL)
38f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
3900: 5f 45 52 52 4f 52 3b 0a 0a 7d 0a 0a 73 74 61 74  _ERROR;..}..stat
3910: 69 63 20 76 6f 69 64 0a 54 63 6c 52 65 61 64 6c  ic void.TclReadl
3920: 69 6e 65 52 65 61 64 48 61 6e 64 6c 65 72 28 43  ineReadHandler(C
3930: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
3940: 44 61 74 61 2c 20 69 6e 74 20 6d 61 73 6b 29 0a  Data, int mask).
3950: 7b 0a 20 20 20 20 69 66 20 28 6d 61 73 6b 20 26  {.    if (mask &
3960: 20 54 43 4c 5f 52 45 41 44 41 42 4c 45 29 20 7b   TCL_READABLE) {
3970: 0a 23 69 66 64 65 66 20 45 58 45 43 55 54 49 4e  .#ifdef EXECUTIN
3980: 47 5f 4d 41 43 52 4f 5f 4e 41 4d 45 0a 20 20 20  G_MACRO_NAME.   
3990: 20 20 20 20 20 64 6f 20 7b 0a 23 65 6e 64 69 66       do {.#endif
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6c 5f  .            rl_
39b0: 63 61 6c 6c 62 61 63 6b 5f 72 65 61 64 5f 63 68  callback_read_ch
39c0: 61 72 28 29 3b 0a 23 69 66 64 65 66 20 45 58 45  ar();.#ifdef EXE
39d0: 43 55 54 49 4e 47 5f 4d 41 43 52 4f 5f 4e 41 4d  CUTING_MACRO_NAM
39e0: 45 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20 20  E.        /**.  
39f0: 20 20 20 20 20 20 20 2a 20 63 68 65 63 6b 2c 20         * check, 
3a00: 69 66 20 77 65 27 72 65 20 69 6e 73 69 64 65 20  if we're inside 
3a10: 61 20 6d 61 63 72 6f 20 61 6e 64 0a 20 20 20 20  a macro and.    
3a20: 20 20 20 20 20 2a 20 69 66 20 73 6f 2c 20 72 65       * if so, re
3a30: 61 64 20 61 6c 6c 20 6d 61 63 72 6f 20 63 68 61  ad all macro cha
3a40: 72 61 63 74 65 72 73 0a 20 20 20 20 20 20 20 20  racters.        
3a50: 20 2a 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78   * until the nex
3a60: 74 20 65 6f 6c 2e 0a 20 20 20 20 20 20 20 20 20  t eol..         
3a70: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69  */.        } whi
3a80: 6c 65 20 28 45 58 45 43 55 54 49 4e 47 5f 4d 41  le (EXECUTING_MA
3a90: 43 52 4f 5f 4e 41 4d 45 20 26 26 20 21 54 63 6c  CRO_NAME && !Tcl
3aa0: 52 65 61 64 6c 69 6e 65 4c 69 6e 65 43 6f 6d 70  ReadlineLineComp
3ab0: 6c 65 74 65 28 29 29 3b 0a 23 65 6e 64 69 66 0a  lete());.#endif.
3ac0: 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20      }.}..static 
3ad0: 76 6f 69 64 0a 54 63 6c 52 65 61 64 6c 69 6e 65  void.TclReadline
3ae0: 4c 69 6e 65 43 6f 6d 70 6c 65 74 65 48 61 6e 64  LineCompleteHand
3af0: 6c 65 72 28 63 68 61 72 2a 20 70 74 72 29 0a 7b  ler(char* ptr).{
3b00: 0a 20 20 20 20 69 66 20 28 21 70 74 72 29 20 7b  .    if (!ptr) {
3b10: 20 2f 2a 20 3c 63 2d 64 3e 20 2a 2f 0a 0a 20 20   /* <c-d> */..  
3b20: 20 20 20 20 20 20 54 63 6c 52 65 61 64 6c 69 6e        TclReadlin
3b30: 65 54 65 72 6d 69 6e 61 74 65 28 4c 49 4e 45 5f  eTerminate(LINE_
3b40: 45 4f 46 29 3b 0a 0a 20 20 20 20 7d 20 65 6c 73  EOF);..    } els
3b50: 65 20 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a  e {..        /**
3b60: 0a 20 20 20 20 20 20 20 20 20 2a 20 46 72 6f 6d  .         * From
3b70: 20 76 65 72 73 69 6f 6e 20 30 2e 39 2e 33 20 75   version 0.9.3 u
3b80: 70 77 61 72 64 73 2c 20 61 6c 6c 20 6c 69 6e 65  pwards, all line
3b90: 73 20 61 72 65 0a 20 20 20 20 20 20 20 20 20 2a  s are.         *
3ba0: 20 72 65 74 75 72 6e 65 64 2c 20 65 76 65 6e 20   returned, even 
3bb0: 65 6d 70 74 79 20 6c 69 6e 65 73 2e 20 28 4f 6e  empty lines. (On
3bc0: 6c 79 20 6e 6f 6e 2d 65 6d 70 74 79 0a 20 20 20  ly non-empty.   
3bd0: 20 20 20 20 20 20 2a 20 6c 69 6e 65 73 20 61 72        * lines ar
3be0: 65 20 73 74 75 66 66 65 64 20 69 6e 20 72 65 61  e stuffed in rea
3bf0: 64 6c 69 6e 65 27 73 20 68 69 73 74 6f 72 79 2e  dline's history.
3c00: 29 0a 20 20 20 20 20 20 20 20 20 2a 20 54 68 65  ).         * The
3c10: 20 63 61 6c 6c 69 6e 67 20 73 63 72 69 70 74 20   calling script 
3c20: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
3c30: 6f 72 20 68 61 6e 64 6c 69 6e 67 0a 20 20 20 20  or handling.    
3c40: 20 20 20 20 20 2a 20 65 6d 70 74 79 20 73 74 72       * empty str
3c50: 69 6e 67 73 2e 0a 20 20 20 20 20 20 20 20 20 2a  ings..         *
3c60: 2f 0a 0a 20 20 20 20 20 20 20 20 63 68 61 72 2a  /..        char*
3c70: 20 65 78 70 61 6e 73 69 6f 6e 20 3d 20 28 63 68   expansion = (ch
3c80: 61 72 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  ar*) NULL;.     
3c90: 20 20 20 69 6e 74 20 73 74 61 74 75 73 20 3d 20     int status = 
3ca0: 68 69 73 74 6f 72 79 5f 65 78 70 61 6e 64 28 70  history_expand(p
3cb0: 74 72 2c 20 26 65 78 70 61 6e 73 69 6f 6e 29 3b  tr, &expansion);
3cc0: 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
3cd0: 61 74 75 73 20 3e 3d 20 32 29 20 7b 0a 20 20 20  atus >= 2) {.   
3ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4f 44 4f           /* TODO
3cf0: 3a 20 6d 61 6b 65 20 74 68 69 73 20 61 20 76 61  : make this a va
3d00: 6c 69 64 20 74 63 6c 20 6f 75 74 70 75 74 20 2a  lid tcl output *
3d10: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  /.            pr
3d20: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 65 78 70  intf("%s\n", exp
3d30: 61 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20  ansion);.       
3d40: 20 20 20 20 20 46 52 45 45 28 70 74 72 29 3b 0a       FREE(ptr);.
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 46 52 45 45              FREE
3d60: 28 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 20 20 20  (expansion);.   
3d70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
3d80: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
3d90: 69 66 20 28 73 74 61 74 75 73 20 3c 3d 20 2d 31  if (status <= -1
3da0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3db0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
3dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3dd0: 20 28 74 63 6c 72 6c 5f 69 6e 74 65 72 70 2c 20   (tclrl_interp, 
3de0: 22 65 72 72 6f 72 20 69 6e 20 68 69 73 74 6f 72  "error in histor
3df0: 79 20 65 78 70 61 6e 73 69 6f 6e 3a 20 22 2c 20  y expansion: ", 
3e00: 65 78 70 61 6e 73 69 6f 6e 2c 20 22 5c 6e 22 2c  expansion, "\n",
3e10: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a   (char*) NULL);.
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 54 63 6c 52 65 61 64 6c 69 6e 65 54 65 72 6d 69  TclReadlineTermi
3e40: 6e 61 74 65 28 54 43 4c 5f 45 52 52 4f 52 29 3b  nate(TCL_ERROR);
3e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 52 45  .            FRE
3e60: 45 28 70 74 72 29 3b 0a 20 20 20 20 20 20 20 20  E(ptr);.        
3e70: 20 20 20 20 46 52 45 45 28 65 78 70 61 6e 73 69      FREE(expansi
3e80: 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  on);.           
3e90: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
3ea0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
3eb0: 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64        Tcl_Append
3ec0: 52 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74  Result(tclrl_int
3ed0: 65 72 70 2c 20 65 78 70 61 6e 73 69 6f 6e 2c 20  erp, expansion, 
3ee0: 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20  (char*) NULL);. 
3ef0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 23 69         }..    #i
3f00: 66 64 65 66 20 45 58 45 43 55 54 49 4e 47 5f 4d  fdef EXECUTING_M
3f10: 41 43 52 4f 5f 4e 41 4d 45 0a 20 20 20 20 20 20  ACRO_NAME.      
3f20: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20 2a    /**.         *
3f30: 20 64 6f 6e 27 74 20 73 74 75 66 66 20 6d 61 63   don't stuff mac
3f40: 72 6f 20 6c 69 6e 65 73 0a 20 20 20 20 20 20 20  ro lines.       
3f50: 20 20 2a 20 69 6e 74 6f 20 72 65 61 64 6c 69 6e    * into readlin
3f60: 65 27 73 20 68 69 73 74 6f 72 79 2e 0a 20 20 20  e's history..   
3f70: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
3f80: 20 69 66 28 21 45 58 45 43 55 54 49 4e 47 5f 4d   if(!EXECUTING_M
3f90: 41 43 52 4f 5f 4e 41 4d 45 29 20 7b 0a 20 20 20  ACRO_NAME) {.   
3fa0: 20 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20   #endif.        
3fb0: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20      /**.        
3fc0: 20 20 20 20 20 2a 20 64 6f 6e 27 74 20 73 74 75       * don't stu
3fd0: 66 66 20 65 6d 70 74 79 20 6c 69 6e 65 73 0a 20  ff empty lines. 
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 6e              * in
3ff0: 74 6f 20 72 65 61 64 6c 69 6e 65 27 73 20 68 69  to readline's hi
4000: 73 74 6f 72 79 2e 0a 20 20 20 20 20 20 20 20 20  story..         
4010: 20 20 20 20 2a 20 64 6f 6e 27 74 20 73 74 75 66      * don't stuf
4020: 66 20 74 77 69 63 65 20 74 68 65 20 73 61 6d 65  f twice the same
4030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20  .             * 
4040: 6c 69 6e 65 20 69 6e 74 6f 20 72 65 61 64 6c 69  line into readli
4050: 6e 65 27 73 20 68 69 73 74 6f 72 79 2e 0a 20 20  ne's history..  
4060: 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
4070: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 78            if (ex
4080: 70 61 6e 73 69 6f 6e 20 26 26 20 2a 65 78 70 61  pansion && *expa
4090: 6e 73 69 6f 6e 20 26 26 20 28 21 74 63 6c 72 6c  nsion && (!tclrl
40a0: 5f 6c 61 73 74 5f 6c 69 6e 65 20 7c 7c 0a 20 20  _last_line ||.  
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40c0: 20 20 73 74 72 63 6d 70 28 74 63 6c 72 6c 5f 6c    strcmp(tclrl_l
40d0: 61 73 74 5f 6c 69 6e 65 2c 20 65 78 70 61 6e 73  ast_line, expans
40e0: 69 6f 6e 29 29 29 20 7b 0a 20 20 20 20 20 20 20  ion))) {.       
40f0: 20 20 20 20 20 20 20 20 20 61 64 64 5f 68 69 73           add_his
4100: 74 6f 72 79 28 65 78 70 61 6e 73 69 6f 6e 29 3b  tory(expansion);
4110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
4120: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
4130: 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69 6e 65 29 0a  clrl_last_line).
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 46 52 45 45 28 74 63 6c 72 6c 5f 6c 61 73 74 5f  FREE(tclrl_last_
4160: 6c 69 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 20  line);.         
4170: 20 20 20 74 63 6c 72 6c 5f 6c 61 73 74 5f 6c 69     tclrl_last_li
4180: 6e 65 20 3d 20 73 74 72 64 75 70 28 65 78 70 61  ne = strdup(expa
4190: 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 23 69 66 64  nsion);.    #ifd
41a0: 65 66 20 45 58 45 43 55 54 49 4e 47 5f 4d 41 43  ef EXECUTING_MAC
41b0: 52 4f 5f 4e 41 4d 45 0a 20 20 20 20 20 20 20 20  RO_NAME.        
41c0: 7d 0a 20 20 20 20 23 65 6e 64 69 66 0a 20 20 20  }.    #endif.   
41d0: 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20       /**.       
41e0: 20 20 2a 20 74 65 6c 6c 20 74 68 65 20 63 61 6c    * tell the cal
41f0: 6c 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 74 6f  ling routines to
4200: 20 74 65 72 6d 69 6e 61 74 65 2e 0a 20 20 20 20   terminate..    
4210: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4220: 54 63 6c 52 65 61 64 6c 69 6e 65 54 65 72 6d 69  TclReadlineTermi
4230: 6e 61 74 65 28 4c 49 4e 45 5f 43 4f 4d 50 4c 45  nate(LINE_COMPLE
4240: 54 45 29 3b 0a 20 20 20 20 20 20 20 20 46 52 45  TE);.        FRE
4250: 45 28 70 74 72 29 3b 0a 20 20 20 20 20 20 20 20  E(ptr);.        
4260: 46 52 45 45 28 65 78 70 61 6e 73 69 6f 6e 29 3b  FREE(expansion);
4270: 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6e 74 0a 54 63  .    }.}..int.Tc
4280: 6c 72 65 61 64 6c 69 6e 65 5f 53 61 66 65 49 6e  lreadline_SafeIn
4290: 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  it(Tcl_Interp *i
42a0: 6e 74 65 72 70 29 0a 7b 0a 20 20 20 20 72 65 74  nterp).{.    ret
42b0: 75 72 6e 20 54 63 6c 72 65 61 64 6c 69 6e 65 5f  urn Tclreadline_
42c0: 49 6e 69 74 28 69 6e 74 65 72 70 29 3b 0a 7d 0a  Init(interp);.}.
42d0: 0a 69 6e 74 0a 54 63 6c 72 65 61 64 6c 69 6e 65  .int.Tclreadline
42e0: 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70  _Init(Tcl_Interp
42f0: 20 2a 69 6e 74 65 72 70 29 0a 7b 0a 20 20 20 20   *interp).{.    
4300: 69 6e 74 20 73 74 61 74 75 73 3b 0a 20 20 20 20  int status;.    
4310: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
4320: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
4330: 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 72 65 61  tclreadline::rea
4340: 64 6c 69 6e 65 22 2c 20 54 63 6c 52 65 61 64 6c  dline", TclReadl
4350: 69 6e 65 43 6d 64 2c 0a 20 20 20 20 20 20 20 20  ineCmd,.        
4360: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 4e 55 4c  (ClientData) NUL
4370: 4c 2c 20 28 54 63 6c 5f 43 6d 64 44 65 6c 65 74  L, (Tcl_CmdDelet
4380: 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a  eProc *) NULL);.
4390: 20 20 20 20 74 63 6c 72 6c 5f 69 6e 74 65 72 70      tclrl_interp
43a0: 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 20 20 69   = interp;.    i
43b0: 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74  f (TCL_OK != (st
43c0: 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56  atus = Tcl_LinkV
43d0: 61 72 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63  ar(interp, "::tc
43e0: 6c 72 65 61 64 6c 69 6e 65 3a 3a 68 69 73 74 6f  lreadline::histo
43f0: 72 79 4c 65 6e 67 74 68 22 2c 0a 20 20 20 20 20  ryLength",.     
4400: 20 20 20 20 20 20 20 28 63 68 61 72 2a 29 20 26         (char*) &
4410: 74 63 6c 72 6c 5f 68 69 73 74 6f 72 79 5f 6c 65  tclrl_history_le
4420: 6e 67 74 68 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ngth, TCL_LINK_I
4430: 4e 54 29 29 29 0a 20 20 20 20 20 20 20 20 72 65  NT))).        re
4440: 74 75 72 6e 20 73 74 61 74 75 73 3b 0a 0a 20 20  turn status;..  
4450: 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20    if (TCL_OK != 
4460: 28 73 74 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69  (status = Tcl_Li
4470: 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 3a  nkVar(interp, ":
4480: 3a 74 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 6c 69  :tclreadline::li
4490: 62 72 61 72 79 22 2c 0a 20 20 20 20 20 20 20 20  brary",.        
44a0: 20 20 20 20 28 63 68 61 72 2a 29 20 26 74 63 6c      (char*) &tcl
44b0: 72 6c 5f 6c 69 62 72 61 72 79 2c 20 54 43 4c 5f  rl_library, TCL_
44c0: 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43  LINK_STRING | TC
44d0: 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  L_LINK_READ_ONLY
44e0: 29 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ))).        retu
44f0: 72 6e 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69  rn status;.    i
4500: 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74  f (TCL_OK != (st
4510: 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56  atus = Tcl_LinkV
4520: 61 72 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63  ar(interp, "::tc
4530: 6c 72 65 61 64 6c 69 6e 65 3a 3a 76 65 72 73 69  lreadline::versi
4540: 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  on",.           
4550: 20 28 63 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f   (char*) &tclrl_
4560: 76 65 72 73 69 6f 6e 5f 73 74 72 2c 20 54 43 4c  version_str, TCL
4570: 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54  _LINK_STRING | T
4580: 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c  CL_LINK_READ_ONL
4590: 59 29 29 29 0a 20 20 20 20 20 20 20 20 72 65 74  Y))).        ret
45a0: 75 72 6e 20 73 74 61 74 75 73 3b 0a 20 20 20 20  urn status;.    
45b0: 69 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73  if (TCL_OK != (s
45c0: 74 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b  tatus = Tcl_Link
45d0: 56 61 72 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  Var(interp, "::t
45e0: 63 6c 72 65 61 64 6c 69 6e 65 3a 3a 70 61 74 63  clreadline::patc
45f0: 68 4c 65 76 65 6c 22 2c 0a 20 20 20 20 20 20 20  hLevel",.       
4600: 20 20 20 20 20 28 63 68 61 72 2a 29 20 26 74 63       (char*) &tc
4610: 6c 72 6c 5f 70 61 74 63 68 6c 65 76 65 6c 5f 73  lrl_patchlevel_s
4620: 74 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  tr, TCL_LINK_STR
4630: 49 4e 47 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52  ING | TCL_LINK_R
4640: 45 41 44 5f 4f 4e 4c 59 29 29 29 0a 20 20 20 20  EAD_ONLY))).    
4650: 20 20 20 20 72 65 74 75 72 6e 20 73 74 61 74 75      return statu
4660: 73 3b 0a 20 20 20 20 69 66 20 28 54 43 4c 5f 4f  s;.    if (TCL_O
4670: 4b 20 21 3d 20 28 73 74 61 74 75 73 20 3d 20 54  K != (status = T
4680: 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
4690: 70 2c 20 22 3a 3a 74 63 6c 72 65 61 64 6c 69 6e  p, "::tclreadlin
46a0: 65 3a 3a 6c 69 63 65 6e 73 65 22 2c 0a 20 20 20  e::license",.   
46b0: 20 20 20 20 20 20 20 20 20 28 63 68 61 72 2a 29           (char*)
46c0: 20 26 74 63 6c 72 6c 5f 6c 69 63 65 6e 73 65 2c   &tclrl_license,
46d0: 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47   TCL_LINK_STRING
46e0: 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44   | TCL_LINK_READ
46f0: 5f 4f 4e 4c 59 29 29 29 0a 20 20 20 20 20 20 20  _ONLY))).       
4700: 20 72 65 74 75 72 6e 20 73 74 61 74 75 73 3b 0a   return status;.
4710: 0a 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20  .    if (TCL_OK 
4720: 21 3d 20 28 73 74 61 74 75 73 20 3d 20 54 63 6c  != (status = Tcl
4730: 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
4740: 20 22 74 63 6c 72 65 61 64 6c 69 6e 65 5f 6c 69   "tclreadline_li
4750: 62 72 61 72 79 22 2c 0a 20 20 20 20 20 20 20 20  brary",.        
4760: 20 20 20 20 28 63 68 61 72 2a 29 20 26 74 63 6c      (char*) &tcl
4770: 72 6c 5f 6c 69 62 72 61 72 79 2c 20 54 43 4c 5f  rl_library, TCL_
4780: 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43  LINK_STRING | TC
4790: 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  L_LINK_READ_ONLY
47a0: 29 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ))).        retu
47b0: 72 6e 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69  rn status;.    i
47c0: 66 20 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74  f (TCL_OK != (st
47d0: 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56  atus = Tcl_LinkV
47e0: 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 72  ar(interp, "tclr
47f0: 65 61 64 6c 69 6e 65 5f 76 65 72 73 69 6f 6e 22  eadline_version"
4800: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63  ,.            (c
4810: 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f 76 65 72  har*) &tclrl_ver
4820: 73 69 6f 6e 5f 73 74 72 2c 20 54 43 4c 5f 4c 49  sion_str, TCL_LI
4830: 4e 4b 5f 53 54 52 49 4e 47 20 7c 20 54 43 4c 5f  NK_STRING | TCL_
4840: 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 29  LINK_READ_ONLY))
4850: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
4860: 20 73 74 61 74 75 73 3b 0a 20 20 20 20 69 66 20   status;.    if 
4870: 28 54 43 4c 5f 4f 4b 20 21 3d 20 28 73 74 61 74  (TCL_OK != (stat
4880: 75 73 20 3d 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  us = Tcl_LinkVar
4890: 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 72 65 61  (interp, "tclrea
48a0: 64 6c 69 6e 65 5f 70 61 74 63 68 4c 65 76 65 6c  dline_patchLevel
48b0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  ",.            (
48c0: 63 68 61 72 2a 29 20 26 74 63 6c 72 6c 5f 70 61  char*) &tclrl_pa
48d0: 74 63 68 6c 65 76 65 6c 5f 73 74 72 2c 20 54 43  tchlevel_str, TC
48e0: 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 20 7c 20  L_LINK_STRING | 
48f0: 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
4900: 4c 59 29 29 29 0a 20 20 20 20 20 20 20 20 72 65  LY))).        re
4910: 74 75 72 6e 20 73 74 61 74 75 73 3b 0a 0a 20 20  turn status;..  
4920: 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 50 6b 67    return Tcl_Pkg
4930: 50 72 6f 76 69 64 65 28 69 6e 74 65 72 70 2c 20  Provide(interp, 
4940: 22 74 63 6c 72 65 61 64 6c 69 6e 65 22 2c 20 28  "tclreadline", (
4950: 63 68 61 72 2a 29 74 63 6c 72 6c 5f 76 65 72 73  char*)tclrl_vers
4960: 69 6f 6e 5f 73 74 72 29 3b 0a 7d 0a 0a 73 74 61  ion_str);.}..sta
4970: 74 69 63 20 69 6e 74 0a 54 63 6c 52 65 61 64 6c  tic int.TclReadl
4980: 69 6e 65 49 6e 69 74 69 61 6c 69 7a 65 28 54 63  ineInitialize(Tc
4990: 6c 5f 49 6e 74 65 72 70 2a 20 69 6e 74 65 72 70  l_Interp* interp
49a0: 2c 20 63 68 61 72 2a 20 68 69 73 74 6f 72 79 66  , char* historyf
49b0: 69 6c 65 29 0a 7b 0a 20 20 20 20 72 6c 5f 72 65  ile).{.    rl_re
49c0: 61 64 6c 69 6e 65 5f 6e 61 6d 65 20 3d 20 22 74  adline_name = "t
49d0: 63 6c 72 65 61 64 6c 69 6e 65 22 3b 0a 20 20 20  clreadline";.   
49e0: 20 2f 2a 20 20 20 20 72 6c 5f 73 70 65 63 69 61   /*    rl_specia
49f0: 6c 5f 70 72 65 66 69 78 65 73 20 3d 20 22 24 7b  l_prefixes = "${
4a00: 5c 22 5b 22 3b 20 2a 2f 0a 20 20 20 20 72 6c 5f  \"["; */.    rl_
4a10: 73 70 65 63 69 61 6c 5f 70 72 65 66 69 78 65 73  special_prefixes
4a20: 20 3d 20 22 24 22 3b 0a 20 20 20 20 2f 2a 2a 0a   = "$";.    /**.
4a30: 20 20 20 20 20 2a 20 64 65 66 61 75 6c 74 20 69       * default i
4a40: 73 20 22 20 5c 74 5c 6e 5c 22 5c 5c 27 60 40 24  s " \t\n\"\\'`@$
4a50: 3e 3c 3d 3b 7c 26 7b 28 22 0a 20 20 20 20 20 2a  ><=;|&{(".     *
4a60: 20 72 65 6d 6f 76 65 64 20 22 28 22 20 3c 2d 2d   removed "(" <--
4a70: 20 61 72 72 61 79 73 0a 20 20 20 20 20 2a 20 72   arrays.     * r
4a80: 65 6d 6f 76 65 64 20 22 7b 22 20 3c 2d 2d 20 60  emoved "{" <-- `
4a90: 24 7b 27 20 76 61 72 69 61 62 6c 65 73 0a 20 20  ${' variables.  
4aa0: 20 20 20 2a 20 72 65 6d 6f 76 65 64 20 22 3c 22     * removed "<"
4ab0: 20 3c 2d 2d 20 63 6f 6d 70 6c 65 74 69 6f 6e 20   <-- completion 
4ac0: 6c 69 73 74 73 20 77 69 74 68 20 3c 20 2e 2e 2e  lists with < ...
4ad0: 20 3e 0a 20 20 20 20 20 2a 20 61 64 64 65 64 20   >.     * added 
4ae0: 22 5b 5d 22 0a 20 20 20 20 20 2a 20 61 64 64 65  "[]".     * adde
4af0: 64 20 22 7d 22 0a 20 20 20 20 20 2a 2f 0a 20 20  d "}".     */.  
4b00: 20 20 2f 2a 20 31 31 2e 53 65 70 20 72 6c 5f 62    /* 11.Sep rl_b
4b10: 61 73 69 63 5f 77 6f 72 64 5f 62 72 65 61 6b 5f  asic_word_break_
4b20: 63 68 61 72 61 63 74 65 72 73 20 3d 20 22 20 5c  characters = " \
4b30: 74 5c 6e 5c 22 5c 5c 40 24 7d 3d 3b 7c 26 5b 5d  t\n\"\\@$}=;|&[]
4b40: 22 3b 20 2a 2f 0a 20 20 20 20 2f 2a 20 62 65 73  "; */.    /* bes
4b50: 73 65 72 20 28 31 31 2e 20 53 65 70 74 29 20 32  ser (11. Sept) 2
4b60: 2e 20 28 72 65 6d 6f 76 65 64 20 5c 22 29 20 2a  . (removed \") *
4b70: 2f 0a 20 20 20 20 2f 2a 20 72 6c 5f 62 61 73 69  /.    /* rl_basi
4b80: 63 5f 77 6f 72 64 5f 62 72 65 61 6b 5f 63 68 61  c_word_break_cha
4b90: 72 61 63 74 65 72 73 20 3d 20 22 20 5c 74 5c 6e  racters = " \t\n
4ba0: 5c 5c 40 24 7d 3d 3b 7c 26 5b 5d 22 3b 20 2a 2f  \\@$}=;|&[]"; */
4bb0: 0a 20 20 20 20 2f 2a 20 62 65 73 73 65 72 20 28  .    /* besser (
4bc0: 31 31 2e 20 53 65 70 74 29 20 33 2e 20 28 72 65  11. Sept) 3. (re
4bd0: 6d 6f 76 65 64 20 7d 29 20 2a 2f 0a 20 20 20 20  moved }) */.    
4be0: 72 6c 5f 62 61 73 69 63 5f 77 6f 72 64 5f 62 72  rl_basic_word_br
4bf0: 65 61 6b 5f 63 68 61 72 61 63 74 65 72 73 20 3d  eak_characters =
4c00: 20 22 20 5c 74 5c 6e 5c 5c 40 24 3d 3b 7c 26 5b   " \t\n\\@$=;|&[
4c10: 5d 22 3b 0a 23 69 66 20 30 0a 20 20 20 20 72 6c  ]";.#if 0.    rl
4c20: 5f 62 61 73 69 63 5f 71 75 6f 74 65 5f 63 68 61  _basic_quote_cha
4c30: 72 61 63 74 65 72 73 20 3d 20 22 5c 22 7b 22 3b  racters = "\"{";
4c40: 20 2f 2a 20 58 58 58 20 3f 3f 3f 20 58 58 58 20   /* XXX ??? XXX 
4c50: 2a 2f 0a 20 20 20 20 72 6c 5f 63 6f 6d 70 6c 65  */.    rl_comple
4c60: 74 65 72 5f 71 75 6f 74 65 5f 63 68 61 72 61 63  ter_quote_charac
4c70: 74 65 72 73 20 3d 20 22 5c 22 22 3b 0a 23 65 6e  ters = "\"";.#en
4c80: 64 69 66 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  dif.    /*.     
4c90: 20 20 72 6c 5f 66 69 6c 65 6e 61 6d 65 5f 71 75    rl_filename_qu
4ca0: 6f 74 65 5f 63 68 61 72 61 63 74 65 72 73 0a 20  ote_characters. 
4cb0: 20 20 20 20 20 20 3d 20 22 61 62 63 64 65 66 67        = "abcdefg
4cc0: 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77  hijklmnopqrstuvw
4cd0: 78 79 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d  xyzABCDEFGHIJKLM
4ce0: 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 22 3b 0a  NOPQRSTUVWXYZ";.
4cf0: 0a 20 20 20 20 20 20 20 72 6c 5f 66 69 6c 65 6e  .       rl_filen
4d00: 61 6d 65 5f 71 75 6f 74 69 6e 67 5f 66 75 6e 63  ame_quoting_func
4d10: 74 69 6f 6e 0a 20 20 20 20 20 20 20 3d 20 28 43  tion.       = (C
4d20: 50 46 75 6e 63 74 69 6f 6e 2a 29 20 54 63 6c 52  PFunction*) TclR
4d30: 65 61 64 6c 69 6e 65 46 69 6c 65 6e 61 6d 65 51  eadlineFilenameQ
4d40: 75 6f 74 69 6e 67 46 75 6e 63 74 69 6f 6e 3b 0a  uotingFunction;.
4d50: 20 20 20 20 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20       */.    /*. 
4d60: 20 20 20 20 20 20 72 6c 5f 66 69 6c 65 6e 61 6d        rl_filenam
4d70: 65 5f 71 75 6f 74 69 6e 67 5f 64 65 73 69 72 65  e_quoting_desire
4d80: 64 20 3d 20 31 3b 0a 20 20 20 20 20 2a 2f 0a 0a  d = 1;.     */..
4d90: 20 20 20 20 75 73 69 6e 67 5f 68 69 73 74 6f 72      using_histor
4da0: 79 28 29 3b 0a 20 20 20 20 69 66 20 28 21 74 63  y();.    if (!tc
4db0: 6c 72 6c 5f 65 6f 66 5f 73 74 72 69 6e 67 29 0a  lrl_eof_string).
4dc0: 20 20 20 20 20 20 20 20 74 63 6c 72 6c 5f 65 6f          tclrl_eo
4dd0: 66 5f 73 74 72 69 6e 67 20 3d 20 73 74 72 64 75  f_string = strdu
4de0: 70 28 22 70 75 74 73 20 7b 7d 3b 20 65 78 69 74  p("puts {}; exit
4df0: 22 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  ");..    /*.    
4e00: 20 2a 20 74 72 79 20 74 6f 20 72 65 61 64 20 68   * try to read h
4e10: 69 73 74 6f 72 79 66 69 6c 65 20 69 6e 20 68 6f  istoryfile in ho
4e20: 6d 65 0a 20 20 20 20 20 2a 20 64 69 72 65 63 74  me.     * direct
4e30: 6f 72 79 2e 20 49 66 20 74 68 69 73 20 66 61 69  ory. If this fai
4e40: 6c 65 73 2c 20 74 68 69 73 0a 20 20 20 20 20 2a  les, this.     *
4e50: 20 69 73 20 2a 6e 6f 74 2a 20 61 6e 20 65 72 72   is *not* an err
4e60: 6f 72 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  or..     */.    
4e70: 72 6c 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d  rl_attempted_com
4e80: 70 6c 65 74 69 6f 6e 5f 66 75 6e 63 74 69 6f 6e  pletion_function
4e90: 20 3d 20 28 43 50 50 46 75 6e 63 74 69 6f 6e 20   = (CPPFunction 
4ea0: 2a 29 20 54 63 6c 52 65 61 64 6c 69 6e 65 43 6f  *) TclReadlineCo
4eb0: 6d 70 6c 65 74 69 6f 6e 3b 0a 20 20 20 20 69 66  mpletion;.    if
4ec0: 20 28 72 65 61 64 5f 68 69 73 74 6f 72 79 28 68   (read_history(h
4ed0: 69 73 74 6f 72 79 66 69 6c 65 29 29 20 7b 0a 20  istoryfile)) {. 
4ee0: 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74 65         if (write
4ef0: 5f 68 69 73 74 6f 72 79 28 68 69 73 74 6f 72 79  _history(history
4f00: 66 69 6c 65 29 29 20 7b 0a 20 20 20 20 20 20 20  file)) {.       
4f10: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
4f20: 65 73 75 6c 74 20 28 69 6e 74 65 72 70 2c 20 22  esult (interp, "
4f30: 77 61 72 6e 69 6e 67 3a 20 60 22 2c 0a 20 20 20  warning: `",.   
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73               his
4f50: 74 6f 72 79 66 69 6c 65 2c 20 22 27 20 69 73 20  toryfile, "' is 
4f60: 6e 6f 74 20 77 72 69 74 61 62 6c 65 2e 22 2c 20  not writable.", 
4f70: 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20  (char*) NULL);. 
4f80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20         }.    }. 
4f90: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
4fa0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a  ;.}..static int.
4fb0: 62 6c 61 6e 6b 5f 6c 69 6e 65 28 63 68 61 72 2a  blank_line(char*
4fc0: 20 73 74 72 29 0a 7b 0a 20 20 20 20 63 68 61 72   str).{.    char
4fd0: 2a 20 70 74 72 3b 0a 20 20 20 20 66 6f 72 20 28  * ptr;.    for (
4fe0: 70 74 72 20 3d 20 73 74 72 3b 20 70 74 72 20 26  ptr = str; ptr &
4ff0: 26 20 2a 70 74 72 3b 20 70 74 72 2b 2b 29 20 7b  & *ptr; ptr++) {
5000: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 49 53  .        if (!IS
5010: 57 48 49 54 45 28 2a 70 74 72 29 29 0a 20 20 20  WHITE(*ptr)).   
5020: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5030: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  0;.    }.    ret
5040: 75 72 6e 20 31 3b 0a 7d 0a 0a 73 74 61 74 69 63  urn 1;.}..static
5050: 20 63 68 61 72 2a 2a 0a 54 63 6c 52 65 61 64 6c   char**.TclReadl
5060: 69 6e 65 43 6f 6d 70 6c 65 74 69 6f 6e 28 63 68  ineCompletion(ch
5070: 61 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74  ar* text, int st
5080: 61 72 74 2c 20 69 6e 74 20 65 6e 64 29 0a 7b 0a  art, int end).{.
5090: 20 20 20 20 63 68 61 72 2a 2a 20 6d 61 74 63 68      char** match
50a0: 65 73 20 3d 20 28 63 68 61 72 2a 2a 29 20 4e 55  es = (char**) NU
50b0: 4c 4c 3b 0a 20 20 20 20 69 6e 74 20 73 74 61 74  LL;.    int stat
50c0: 75 73 3b 0a 20 20 20 20 72 6c 5f 63 6f 6d 70 6c  us;.    rl_compl
50d0: 65 74 69 6f 6e 5f 61 70 70 65 6e 64 5f 63 68 61  etion_append_cha
50e0: 72 61 63 74 65 72 20 3d 20 27 20 27 3b 20 2f 2a  racter = ' '; /*
50f0: 20 72 65 73 65 74 2c 20 6a 75 73 74 20 69 6e 20   reset, just in 
5100: 63 61 73 65 20 2e 2e 2e 20 2a 2f 0a 0a 20 20 20  case ... */..   
5110: 20 69 66 20 28 74 65 78 74 20 26 26 20 28 27 21   if (text && ('!
5120: 27 20 3d 3d 20 74 65 78 74 5b 30 5d 0a 20 20 20  ' == text[0].   
5130: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 73 74 61           || (sta
5140: 72 74 20 26 26 20 72 6c 5f 6c 69 6e 65 5f 62 75  rt && rl_line_bu
5150: 66 66 65 72 5b 73 74 61 72 74 20 2d 20 31 5d 20  ffer[start - 1] 
5160: 3d 3d 20 27 21 27 20 2f 2a 20 66 6f 72 20 27 24  == '!' /* for '$
5170: 27 20 2a 2f 29 29 29 20 7b 0a 20 20 20 20 20 20  ' */))) {.      
5180: 20 20 63 68 61 72 2a 20 65 78 70 61 6e 73 69 6f    char* expansio
5190: 6e 20 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c  n = (char*) NULL
51a0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 6c  ;.        int ol
51b0: 64 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 72 6c  dlen = strlen(rl
51c0: 5f 6c 69 6e 65 5f 62 75 66 66 65 72 29 3b 0a 20  _line_buffer);. 
51d0: 20 20 20 20 20 20 20 73 74 61 74 75 73 20 3d 20         status = 
51e0: 68 69 73 74 6f 72 79 5f 65 78 70 61 6e 64 28 72  history_expand(r
51f0: 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 2c 20 26  l_line_buffer, &
5200: 65 78 70 61 6e 73 69 6f 6e 29 3b 0a 20 20 20 20  expansion);.    
5210: 20 20 20 20 69 66 20 28 73 74 61 74 75 73 20 3e      if (status >
5220: 3d 20 31 29 20 7b 0a 20 20 20 20 20 20 20 20 20  = 1) {.         
5230: 20 20 20 72 6c 5f 65 78 74 65 6e 64 5f 6c 69 6e     rl_extend_lin
5240: 65 5f 62 75 66 66 65 72 28 73 74 72 6c 65 6e 28  e_buffer(strlen(
5250: 65 78 70 61 6e 73 69 6f 6e 29 20 2b 20 31 29 3b  expansion) + 1);
5260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
5270: 63 70 79 28 72 6c 5f 6c 69 6e 65 5f 62 75 66 66  cpy(rl_line_buff
5280: 65 72 2c 20 65 78 70 61 6e 73 69 6f 6e 29 3b 0a  er, expansion);.
5290: 20 20 20 20 20 20 20 20 20 20 20 20 72 6c 5f 65              rl_e
52a0: 6e 64 20 3d 20 73 74 72 6c 65 6e 28 65 78 70 61  nd = strlen(expa
52b0: 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20  nsion);.        
52c0: 20 20 20 20 72 6c 5f 70 6f 69 6e 74 20 2b 3d 20      rl_point += 
52d0: 73 74 72 6c 65 6e 28 65 78 70 61 6e 73 69 6f 6e  strlen(expansion
52e0: 29 20 2d 20 6f 6c 64 6c 65 6e 3b 0a 20 20 20 20  ) - oldlen;.    
52f0: 20 20 20 20 20 20 20 20 46 52 45 45 28 65 78 70          FREE(exp
5300: 61 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20  ansion);.       
5310: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20       /*.        
5320: 20 20 20 20 20 2a 20 54 4f 44 4f 3a 0a 20 20 20       * TODO:.   
5330: 20 20 20 20 20 20 20 20 20 20 2a 20 62 65 63 61            * beca
5340: 75 73 65 20 77 65 20 72 65 74 75 72 6e 20 30 20  use we return 0 
5350: 3d 3d 20 6d 61 74 63 68 65 73 2c 0a 20 20 20 20  == matches,.    
5360: 20 20 20 20 20 20 20 20 20 2a 20 74 68 65 20 66           * the f
5370: 69 6c 65 6e 61 6d 65 20 63 6f 6d 70 6c 65 74 65  ilename complete
5380: 72 20 77 69 6c 6c 20 73 74 69 6c 6c 20 62 65 65  r will still bee
5390: 70 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  p..             
53a0: 72 6c 5f 69 6e 68 69 62 69 74 5f 63 6f 6d 70 6c  rl_inhibit_compl
53b0: 65 74 69 6f 6e 20 3d 20 31 3b 0a 20 20 20 20 20  etion = 1;.     
53c0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
53d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 61         return ma
53e0: 74 63 68 65 73 3b 0a 20 20 20 20 20 20 20 20 7d  tches;.        }
53f0: 0a 20 20 20 20 20 20 20 20 46 52 45 45 28 65 78  .        FREE(ex
5400: 70 61 6e 73 69 6f 6e 29 3b 0a 20 20 20 20 7d 0a  pansion);.    }.
5410: 0a 20 20 20 20 69 66 20 28 74 63 6c 72 6c 5f 63  .    if (tclrl_c
5420: 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 29  ustom_completer)
5430: 20 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20   {.        char 
5440: 73 74 61 72 74 5f 73 5b 42 55 46 53 49 5a 5d 2c  start_s[BUFSIZ],
5450: 20 65 6e 64 5f 73 5b 42 55 46 53 49 5a 5d 3b 0a   end_s[BUFSIZ];.
5460: 20 20 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 2a          Tcl_Obj*
5470: 20 6f 62 6a 3b 0a 20 20 20 20 20 20 20 20 54 63   obj;.        Tc
5480: 6c 5f 4f 62 6a 2a 2a 20 6f 62 6a 76 3b 0a 20 20  l_Obj** objv;.  
5490: 20 20 20 20 20 20 69 6e 74 20 6f 62 6a 63 3b 0a        int objc;.
54a0: 20 20 20 20 20 20 20 20 69 6e 74 20 73 74 61 74          int stat
54b0: 65 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 2a  e;.        char*
54c0: 20 71 75 6f 74 65 64 5f 74 65 78 74 20 3d 20 54   quoted_text = T
54d0: 63 6c 52 65 61 64 6c 69 6e 65 51 75 6f 74 65 28  clReadlineQuote(
54e0: 74 65 78 74 2c 20 22 24 5b 5d 7b 7d 5c 22 22 29  text, "$[]{}\"")
54f0: 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 2a 20  ;.        char* 
5500: 71 75 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62  quoted_rl_line_b
5510: 75 66 66 65 72 20 3d 20 54 63 6c 52 65 61 64 6c  uffer = TclReadl
5520: 69 6e 65 51 75 6f 74 65 28 72 6c 5f 6c 69 6e 65  ineQuote(rl_line
5530: 5f 62 75 66 66 65 72 2c 20 22 24 5b 5d 7b 7d 5c  _buffer, "$[]{}\
5540: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 73 70 72  "");.        spr
5550: 69 6e 74 66 28 73 74 61 72 74 5f 73 2c 20 22 25  intf(start_s, "%
5560: 64 22 2c 20 73 74 61 72 74 29 3b 0a 20 20 20 20  d", start);.    
5570: 20 20 20 20 73 70 72 69 6e 74 66 28 65 6e 64 5f      sprintf(end_
5580: 73 2c 20 22 25 64 22 2c 20 65 6e 64 29 3b 0a 20  s, "%d", end);. 
5590: 20 20 20 20 20 20 20 54 63 6c 5f 52 65 73 65 74         Tcl_Reset
55a0: 52 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74  Result(tclrl_int
55b0: 65 72 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20 72  erp); /* clear r
55c0: 65 73 75 6c 74 20 73 70 61 63 65 20 2a 2f 0a 20  esult space */. 
55d0: 20 20 20 20 20 20 20 73 74 61 74 65 20 3d 20 54         state = T
55e0: 63 6c 5f 56 61 72 45 76 61 6c 28 74 63 6c 72 6c  cl_VarEval(tclrl
55f0: 5f 69 6e 74 65 72 70 2c 20 74 63 6c 72 6c 5f 63  _interp, tclrl_c
5600: 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65 74 65 72 2c  ustom_completer,
5610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 20 5c  .            " \
5620: 22 22 2c 20 71 75 6f 74 65 64 5f 74 65 78 74 2c  "", quoted_text,
5630: 20 22 5c 22 20 22 2c 20 73 74 61 72 74 5f 73 2c   "\" ", start_s,
5640: 20 22 20 22 2c 20 65 6e 64 5f 73 2c 0a 20 20 20   " ", end_s,.   
5650: 20 20 20 20 20 20 20 20 20 22 20 5c 22 22 2c 20           " \"", 
5660: 71 75 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62  quoted_rl_line_b
5670: 75 66 66 65 72 2c 20 22 5c 22 22 2c 20 28 63 68  uffer, "\"", (ch
5680: 61 72 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  ar*) NULL);.    
5690: 20 20 20 20 69 66 20 28 54 43 4c 5f 4f 4b 20 21      if (TCL_OK !
56a0: 3d 20 73 74 61 74 65 29 20 7b 0a 20 20 20 20 20  = state) {.     
56b0: 20 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e         Tcl_Appen
56c0: 64 52 65 73 75 6c 74 20 28 74 63 6c 72 6c 5f 69  dResult (tclrl_i
56d0: 6e 74 65 72 70 2c 20 22 20 60 22 2c 20 74 63 6c  nterp, " `", tcl
56e0: 72 6c 5f 63 75 73 74 6f 6d 5f 63 6f 6d 70 6c 65  rl_custom_comple
56f0: 74 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ter,.           
5700: 20 20 20 20 20 22 20 5c 22 22 2c 20 71 75 6f 74       " \"", quot
5710: 65 64 5f 74 65 78 74 2c 20 22 5c 22 20 22 2c 20  ed_text, "\" ", 
5720: 73 74 61 72 74 5f 73 2c 20 22 20 22 2c 20 65 6e  start_s, " ", en
5730: 64 5f 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20  d_s,.           
5740: 20 20 20 20 20 22 20 5c 22 22 2c 20 71 75 6f 74       " \"", quot
5750: 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65  ed_rl_line_buffe
5760: 72 2c 20 22 5c 22 27 20 66 61 69 6c 65 64 2e 22  r, "\"' failed."
5770: 2c 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 29 3b  , (char*) NULL);
5780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c  .            Tcl
5790: 52 65 61 64 6c 69 6e 65 54 65 72 6d 69 6e 61 74  ReadlineTerminat
57a0: 65 28 73 74 61 74 65 29 3b 0a 20 20 20 20 20 20  e(state);.      
57b0: 20 20 20 20 20 20 46 52 45 45 28 71 75 6f 74 65        FREE(quote
57c0: 64 5f 74 65 78 74 29 3b 0a 20 20 20 20 20 20 20  d_text);.       
57d0: 20 20 20 20 20 46 52 45 45 28 71 75 6f 74 65 64       FREE(quoted
57e0: 5f 72 6c 5f 6c 69 6e 65 5f 62 75 66 66 65 72 29  _rl_line_buffer)
57f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ;.            re
5800: 74 75 72 6e 20 6d 61 74 63 68 65 73 3b 0a 20 20  turn matches;.  
5810: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5820: 46 52 45 45 28 71 75 6f 74 65 64 5f 74 65 78 74  FREE(quoted_text
5830: 29 3b 0a 20 20 20 20 20 20 20 20 46 52 45 45 28  );.        FREE(
5840: 71 75 6f 74 65 64 5f 72 6c 5f 6c 69 6e 65 5f 62  quoted_rl_line_b
5850: 75 66 66 65 72 29 3b 0a 20 20 20 20 20 20 20 20  uffer);.        
5860: 6f 62 6a 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a  obj = Tcl_GetObj
5870: 52 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e 74  Result(tclrl_int
5880: 65 72 70 29 3b 0a 20 20 20 20 20 20 20 20 73 74  erp);.        st
5890: 61 74 75 73 20 3d 20 54 63 6c 5f 4c 69 73 74 4f  atus = Tcl_ListO
58a0: 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 74 63  bjGetElements(tc
58b0: 6c 72 6c 5f 69 6e 74 65 72 70 2c 20 6f 62 6a 2c  lrl_interp, obj,
58c0: 20 26 6f 62 6a 63 2c 20 26 6f 62 6a 76 29 3b 0a   &objc, &objv);.
58d0: 20 20 20 20 20 20 20 20 69 66 20 28 54 43 4c 5f          if (TCL_
58e0: 4f 4b 20 21 3d 20 73 74 61 74 75 73 29 0a 20 20  OK != status).  
58f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5900: 20 6d 61 74 63 68 65 73 3b 0a 0a 20 20 20 20 20   matches;..     
5910: 20 20 20 69 66 20 28 6f 62 6a 63 29 20 7b 0a 20     if (objc) {. 
5920: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
5930: 2c 20 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20  , length;.      
5940: 20 20 20 20 20 20 6d 61 74 63 68 65 73 20 3d 20        matches = 
5950: 28 63 68 61 72 2a 2a 29 20 4d 41 4c 4c 4f 43 28  (char**) MALLOC(
5960: 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 20 2a 20  sizeof(char*) * 
5970: 28 6f 62 6a 63 20 2b 20 31 29 29 3b 0a 20 20 20  (objc + 1));.   
5980: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 20           for (i 
5990: 3d 20 30 3b 20 69 20 3c 20 6f 62 6a 63 3b 20 69  = 0; i < objc; i
59a0: 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ++) {.          
59b0: 20 20 20 20 20 20 6d 61 74 63 68 65 73 5b 69 5d        matches[i]
59c0: 20 3d 20 73 74 72 64 75 70 28 54 63 6c 5f 47 65   = strdup(Tcl_Ge
59d0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
59e0: 62 6a 76 5b 69 5d 2c 20 26 6c 65 6e 67 74 68 29  bjv[i], &length)
59f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
5a00: 20 20 20 69 66 20 28 31 20 3d 3d 20 6f 62 6a 63     if (1 == objc
5a10: 20 26 26 20 21 73 74 72 6c 65 6e 28 6d 61 74 63   && !strlen(matc
5a20: 68 65 73 5b 69 5d 29 29 20 7b 0a 20 20 20 20 20  hes[i])) {.     
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
5a40: 52 45 45 28 6d 61 74 63 68 65 73 5b 69 5d 29 3b  REE(matches[i]);
5a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5a60: 20 20 20 20 20 46 52 45 45 28 6d 61 74 63 68 65       FREE(matche
5a70: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
5a80: 20 20 20 20 20 20 20 20 54 63 6c 5f 52 65 73 65          Tcl_Rese
5a90: 74 52 65 73 75 6c 74 28 74 63 6c 72 6c 5f 69 6e  tResult(tclrl_in
5aa0: 74 65 72 70 29 3b 20 2f 2a 20 63 6c 65 61 72 20  terp); /* clear 
5ab0: 72 65 73 75 6c 74 20 73 70 61 63 65 20 2a 2f 0a  result space */.
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ad0: 20 20 20 20 72 65 74 75 72 6e 20 28 63 68 61 72      return (char
5ae0: 2a 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20  **) NULL;.      
5af0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
5b00: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
5b10: 20 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20         /**.     
5b20: 20 20 20 20 20 20 20 20 2a 20 74 68 69 73 20 69          * this i
5b30: 73 20 61 20 73 70 65 63 69 61 6c 20 6f 6e 65 3a  s a special one:
5b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20  .             * 
5b50: 69 66 20 74 68 65 20 73 63 72 69 70 74 20 72 65  if the script re
5b60: 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20 74 77  turns exactly tw
5b70: 6f 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 20  o arguments.    
5b80: 20 20 20 20 20 20 20 20 20 2a 20 61 6e 64 20 74           * and t
5b90: 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65  he second argume
5ba0: 6e 74 20 69 73 20 74 68 65 20 65 6d 70 74 79 20  nt is the empty 
5bb0: 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 20 20  string,.        
5bc0: 20 20 20 20 20 2a 20 74 68 65 20 72 6c 5f 63 6f       * the rl_co
5bd0: 6d 70 6c 65 74 69 6f 6e 5f 61 70 70 65 6e 64 5f  mpletion_append_
5be0: 63 68 61 72 61 63 74 65 72 20 69 73 20 73 65 74  character is set
5bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20  .             * 
5c00: 74 65 6d 70 6f 72 61 72 69 6c 79 20 74 6f 20 4e  temporarily to N
5c10: 55 4c 4c 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ULL..           
5c20: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20    */.           
5c30: 20 69 66 20 28 32 20 3d 3d 20 6f 62 6a 63 20 26   if (2 == objc &
5c40: 26 20 21 73 74 72 6c 65 6e 28 6d 61 74 63 68 65  & !strlen(matche
5c50: 73 5b 31 5d 29 29 20 7b 0a 20 20 20 20 20 20 20  s[1])) {.       
5c60: 20 20 20 20 20 20 20 20 20 69 2d 2d 3b 0a 20 20           i--;.  
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52                FR
5c80: 45 45 28 6d 61 74 63 68 65 73 5b 31 5d 29 3b 0a  EE(matches[1]);.
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 61 70  rl_completion_ap
5cb0: 70 65 6e 64 5f 63 68 61 72 61 63 74 65 72 20 3d  pend_character =
5cc0: 20 27 5c 30 27 3b 0a 20 20 20 20 20 20 20 20 20   '\0';.         
5cd0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
5ce0: 20 20 6d 61 74 63 68 65 73 5b 69 5d 20 3d 20 28    matches[i] = (
5cf0: 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 20 2f 2a 20  char*) NULL; /* 
5d00: 74 65 72 6d 69 6e 61 74 65 20 2a 2f 0a 20 20 20  terminate */.   
5d10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 54       }.        T
5d20: 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 74  cl_ResetResult(t
5d30: 63 6c 72 6c 5f 69 6e 74 65 72 70 29 3b 20 2f 2a  clrl_interp); /*
5d40: 20 63 6c 65 61 72 20 72 65 73 75 6c 74 20 73 70   clear result sp
5d50: 61 63 65 20 2a 2f 0a 20 20 20 20 7d 0a 0a 20 20  ace */.    }..  
5d60: 20 20 69 66 20 28 21 6d 61 74 63 68 65 73 20 26    if (!matches &
5d70: 26 20 74 63 6c 72 6c 5f 75 73 65 5f 62 75 69 6c  & tclrl_use_buil
5d80: 74 69 6e 5f 63 6f 6d 70 6c 65 74 65 72 29 20 7b  tin_completer) {
5d90: 0a 20 20 20 20 20 20 20 20 6d 61 74 63 68 65 73  .        matches
5da0: 20 3d 20 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e   = rl_completion
5db0: 5f 6d 61 74 63 68 65 73 28 74 65 78 74 2c 20 28  _matches(text, (
5dc0: 72 6c 5f 63 6f 6d 70 65 6e 74 72 79 5f 66 75 6e  rl_compentry_fun
5dd0: 63 5f 74 20 2a 29 54 63 6c 52 65 61 64 6c 69 6e  c_t *)TclReadlin
5de0: 65 30 67 65 6e 65 72 61 74 6f 72 29 3b 0a 20 20  e0generator);.  
5df0: 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20    }..    return 
5e00: 6d 61 74 63 68 65 73 3b 0a 7d 0a 0a 73 74 61 74  matches;.}..stat
5e10: 69 63 20 63 68 61 72 2a 0a 54 63 6c 52 65 61 64  ic char*.TclRead
5e20: 6c 69 6e 65 30 67 65 6e 65 72 61 74 6f 72 28 63  line0generator(c
5e30: 68 61 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73  har* text, int s
5e40: 74 61 74 65 29 0a 7b 0a 20 20 20 20 72 65 74 75  tate).{.    retu
5e50: 72 6e 20 54 63 6c 52 65 61 64 6c 69 6e 65 4b 6e  rn TclReadlineKn
5e60: 6f 77 6e 43 6f 6d 6d 61 6e 64 73 28 74 65 78 74  ownCommands(text
5e70: 2c 20 73 74 61 74 65 2c 20 5f 43 4d 44 5f 47 45  , state, _CMD_GE
5e80: 54 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 63 68  T);.}..static ch
5e90: 61 72 2a 0a 54 63 6c 52 65 61 64 6c 69 6e 65 4b  ar*.TclReadlineK
5ea0: 6e 6f 77 6e 43 6f 6d 6d 61 6e 64 73 28 63 68 61  nownCommands(cha
5eb0: 72 2a 20 74 65 78 74 2c 20 69 6e 74 20 73 74 61  r* text, int sta
5ec0: 74 65 2c 20 69 6e 74 20 6d 6f 64 65 29 0a 7b 0a  te, int mode).{.
5ed0: 20 20 20 20 73 74 61 74 69 63 20 69 6e 74 20 6c      static int l
5ee0: 65 6e 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63  en;.    static c
5ef0: 6d 64 73 5f 74 20 2a 63 6d 64 73 20 3d 20 28 63  mds_t *cmds = (c
5f00: 6d 64 73 5f 74 20 2a 29 20 4e 55 4c 4c 2c 20 2a  mds_t *) NULL, *
5f10: 6e 65 77 3b 0a 20 20 20 20 63 68 61 72 2a 20 74  new;.    char* t
5f20: 6d 70 3b 0a 20 20 20 20 63 68 61 72 2a 20 61 72  mp;.    char* ar
5f30: 67 73 5b 32 35 36 5d 3b 0a 20 20 20 20 69 6e 74  gs[256];.    int
5f40: 20 69 2c 20 61 72 67 63 3b 0a 20 20 20 20 63 68   i, argc;.    ch
5f50: 61 72 2a 2a 20 6e 61 6d 65 3b 0a 0a 20 20 20 20  ar** name;..    
5f60: 63 68 61 72 2a 20 6c 6f 63 61 6c 5f 6c 69 6e 65  char* local_line
5f70: 20 3d 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b   = (char*) NULL;
5f80: 0a 20 20 20 20 69 6e 74 20 73 75 62 3b 0a 0a 0a  .    int sub;...
5f90: 20 20 20 20 73 77 69 74 63 68 20 28 6d 6f 64 65      switch (mode
5fa0: 29 20 7b 0a 0a 20 20 20 20 20 20 20 20 63 61 73  ) {..        cas
5fb0: 65 20 5f 43 4d 44 5f 53 45 54 3a 0a 0a 20 20 20  e _CMD_SET:..   
5fc0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 3d 20 28           new = (
5fd0: 63 6d 64 73 5f 74 20 2a 29 20 4d 41 4c 4c 4f 43  cmds_t *) MALLOC
5fe0: 28 73 69 7a 65 6f 66 28 63 6d 64 73 5f 74 29 29  (sizeof(cmds_t))
5ff0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ;.            ne
6000: 77 2d 3e 6e 65 78 74 20 3d 20 28 63 6d 64 73 5f  w->next = (cmds_
6010: 74 20 2a 29 20 4e 55 4c 4c 3b 0a 0a 20 20 20 20  t *) NULL;..    
6020: 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6d 64          if (!cmd
6030: 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  s) {.           
6040: 20 20 20 20 20 63 6d 64 73 20 3d 20 6e 65 77 3b       cmds = new;
6050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6060: 20 63 6d 64 73 2d 3e 70 72 65 76 20 3d 20 6e 65   cmds->prev = ne
6070: 77 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  w;.            }
6080: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
6090: 20 20 20 20 20 20 20 20 63 6d 64 73 2d 3e 70 72          cmds->pr
60a0: 65 76 2d 3e 6e 65 78 74 20 3d 20 6e 65 77 3b 0a  ev->next = new;.
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60c0: 63 6d 64 73 2d 3e 70 72 65 76 20 3d 20 6e 65 77  cmds->prev = new
60d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
60e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 6d 70  .            tmp
60f0: 20 3d 20 73 74 72 64 75 70 28 74 65 78 74 29 3b   = strdup(text);
6100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67  .            arg
6110: 63 20 3d 20 54 63 6c 52 65 61 64 6c 69 6e 65 50  c = TclReadlineP
6120: 61 72 73 65 28 61 72 67 73 2c 20 73 69 7a 65 6f  arse(args, sizeo
6130: 66 28 61 72 67 73 29 2c 20 74 6d 70 29 3b 0a 0a  f(args), tmp);..
6140: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d              new-
6150: 3e 63 6d 64 20 3d 20 28 63 68 61 72 2a 2a 29 20  >cmd = (char**) 
6160: 4d 41 4c 4c 4f 43 28 73 69 7a 65 6f 66 28 63 68  MALLOC(sizeof(ch
6170: 61 72 2a 29 20 2a 20 28 61 72 67 63 20 2b 20 31  ar*) * (argc + 1
6180: 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
6190: 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c   for (i = 0; i <
61a0: 20 61 72 67 63 3b 20 69 2b 2b 29 0a 20 20 20 20   argc; i++).    
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d              new-
61c0: 3e 63 6d 64 5b 69 5d 20 3d 20 61 72 67 73 5b 69  >cmd[i] = args[i
61d0: 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
61e0: 6e 65 77 2d 3e 63 6d 64 5b 61 72 67 63 5d 20 3d  new->cmd[argc] =
61f0: 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 0a   (char*) NULL;..
6200: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6210: 72 6e 20 28 63 68 61 72 2a 29 20 4e 55 4c 4c 3b  rn (char*) NULL;
6220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  .            /* 
6230: 4e 4f 54 52 45 41 43 48 45 44 20 2a 2f 0a 20 20  NOTREACHED */.  
6240: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6250: 0a 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ...        case 
6260: 5f 43 4d 44 5f 47 45 54 3a 0a 0a 20 20 20 20 20  _CMD_GET:..     
6270: 20 20 20 20 20 20 20 6c 6f 63 61 6c 5f 6c 69 6e         local_lin
6280: 65 20 3d 20 73 74 72 64 75 70 28 72 6c 5f 6c 69  e = strdup(rl_li
6290: 6e 65 5f 62 75 66 66 65 72 29 3b 0a 20 20 20 20  ne_buffer);.    
62a0: 20 20 20 20 20 20 20 20 73 75 62 20 3d 20 54 63          sub = Tc
62b0: 6c 52 65 61 64 6c 69 6e 65 50 61 72 73 65 28 61  lReadlineParse(a
62c0: 72 67 73 2c 20 73 69 7a 65 6f 66 28 61 72 67 73  rgs, sizeof(args
62d0: 29 2c 20 6c 6f 63 61 6c 5f 6c 69 6e 65 29 3b 0a  ), local_line);.
62e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
62f0: 28 30 20 3d 3d 20 73 75 62 20 7c 7c 20 28 31 20  (0 == sub || (1 
6300: 3d 3d 20 73 75 62 20 26 26 20 27 5c 30 27 20 21  == sub && '\0' !
6310: 3d 20 74 65 78 74 5b 30 5d 29 29 20 7b 0a 20 20  = text[0])) {.  
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6330: 20 28 21 73 74 61 74 65 29 20 7b 0a 20 20 20 20   (!state) {.    
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6350: 6e 65 77 20 3d 20 63 6d 64 73 3b 0a 20 20 20 20  new = cmds;.    
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6370: 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 74 65 78  len = strlen(tex
6380: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
6390: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
63a0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 6e 65 77        while (new
63b0: 20 26 26 20 28 6e 61 6d 65 20 3d 20 6e 65 77 2d   && (name = new-
63c0: 3e 63 6d 64 29 29 20 7b 0a 20 20 20 20 20 20 20  >cmd)) {.       
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
63e0: 20 3d 20 6e 65 77 2d 3e 6e 65 78 74 3b 0a 20 20   = new->next;.  
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 20 69 66 20 28 21 73 74 72 6e 63 6d 70 28 6e    if (!strncmp(n
6410: 61 6d 65 5b 30 5d 2c 20 74 65 78 74 2c 20 6c 65  ame[0], text, le
6420: 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)).            
6430: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6440: 72 6e 20 73 74 72 64 75 70 28 6e 61 6d 65 5b 30  rn strdup(name[0
6450: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
6460: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
6470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 63 68        return (ch
6480: 61 72 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  ar*) NULL;.     
6490: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
64a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
64b0: 20 69 66 20 28 21 73 74 61 74 65 29 20 7b 0a 0a   if (!state) {..
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64d0: 20 20 20 20 6e 65 77 20 3d 20 63 6d 64 73 3b 0a      new = cmds;.
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 20 20 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e      len = strlen
6500: 28 74 65 78 74 29 3b 0a 0a 20 20 20 20 20 20 20  (text);..       
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
6520: 6c 65 20 28 6e 65 77 20 26 26 20 28 6e 61 6d 65  le (new && (name
6530: 20 3d 20 6e 65 77 2d 3e 63 6d 64 29 29 20 7b 0a   = new->cmd)) {.
6540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6550: 20 20 20 20 20 20 20 20 69 66 20 28 21 73 74 72          if (!str
6560: 63 6d 70 28 6e 61 6d 65 5b 30 5d 2c 20 61 72 67  cmp(name[0], arg
6570: 73 5b 30 5d 29 29 0a 20 20 20 20 20 20 20 20 20  s[0])).         
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6590: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65b0: 20 20 6e 65 77 20 3d 20 6e 65 77 2d 3e 6e 65 78    new = new->nex
65c0: 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t;.             
65d0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
65f0: 20 28 21 6e 65 77 29 0a 20 20 20 20 20 20 20 20   (!new).        
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6610: 72 65 74 75 72 6e 20 28 63 68 61 72 2a 29 20 4e  return (char*) N
6620: 55 4c 4c 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  ULL;..          
6630: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
6640: 20 3d 20 30 3b 20 6e 65 77 2d 3e 63 6d 64 5b 69   = 0; new->cmd[i
6650: 5d 3b 20 69 2b 2b 29 20 2f 2a 20 45 4d 50 54 59  ]; i++) /* EMPTY
6660: 20 2a 2f 3b 0a 0a 20 20 20 20 20 20 20 20 20 20   */;..          
6670: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
6680: 62 20 3c 20 69 20 26 26 20 21 73 74 72 6e 63 6d  b < i && !strncm
6690: 70 28 6e 65 77 2d 3e 63 6d 64 5b 73 75 62 5d 2c  p(new->cmd[sub],
66a0: 20 74 65 78 74 2c 20 6c 65 6e 29 29 0a 20 20 20   text, len)).   
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66c0: 20 20 20 20 20 72 65 74 75 72 6e 20 73 74 72 64       return strd
66d0: 75 70 28 6e 65 77 2d 3e 63 6d 64 5b 73 75 62 5d  up(new->cmd[sub]
66e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
66f0: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
6700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6710: 20 20 20 20 72 65 74 75 72 6e 20 28 63 68 61 72      return (char
6720: 2a 29 20 4e 55 4c 4c 3b 0a 0a 20 20 20 20 20 20  *) NULL;..      
6730: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
6740: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
6750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6760: 20 20 20 20 20 72 65 74 75 72 6e 20 28 63 68 61       return (cha
6770: 72 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20  r*) NULL;.      
6780: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
6790: 20 20 20 20 20 2f 2a 20 4e 4f 54 52 45 41 43 48       /* NOTREACH
67a0: 45 44 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ED */.          
67b0: 20 20 62 72 65 61 6b 3b 0a 0a 0a 20 20 20 20 20    break;...     
67c0: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
67d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
67e0: 63 68 61 72 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20  char*) NULL;.   
67f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 4f 54 52           /* NOTR
6800: 45 41 43 48 45 44 20 2a 2f 0a 20 20 20 20 20 20  EACHED */.      
6810: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
6820: 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e    }.}..static in
6830: 74 0a 54 63 6c 52 65 61 64 6c 69 6e 65 50 61 72  t.TclReadlinePar
6840: 73 65 28 63 68 61 72 2a 2a 20 61 72 67 73 2c 20  se(char** args, 
6850: 69 6e 74 20 6d 61 78 61 72 67 73 2c 20 63 68 61  int maxargs, cha
6860: 72 2a 20 62 75 66 29 0a 7b 0a 20 20 20 20 69 6e  r* buf).{.    in
6870: 74 20 6e 72 20 3d 20 30 3b 0a 0a 20 20 20 20 77  t nr = 0;..    w
6880: 68 69 6c 65 20 28 2a 62 75 66 20 21 3d 20 27 5c  hile (*buf != '\
6890: 30 27 20 26 26 20 6e 72 20 3c 20 6d 61 78 61 72  0' && nr < maxar
68a0: 67 73 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  gs) {.        /*
68b0: 0a 20 20 20 20 20 20 20 20 20 2a 20 53 74 72 69  .         * Stri
68c0: 70 20 77 68 69 74 65 73 70 61 63 65 2e 20 20 55  p whitespace.  U
68d0: 73 65 20 6e 75 6c 6c 73 2c 20 73 6f 0a 20 20 20  se nulls, so.   
68e0: 20 20 20 20 20 20 2a 20 74 68 61 74 20 74 68 65        * that the
68f0: 20 70 72 65 76 69 6f 75 73 20 61 72 67 75 6d 65   previous argume
6900: 6e 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65 64  nt is terminated
6910: 0a 20 20 20 20 20 20 20 20 20 2a 20 61 75 74 6f  .         * auto
6920: 6d 61 74 69 63 61 6c 6c 79 2e 0a 20 20 20 20 20  matically..     
6930: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 77      */.        w
6940: 68 69 6c 65 20 28 49 53 57 48 49 54 45 28 2a 62  hile (ISWHITE(*b
6950: 75 66 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  uf)).           
6960: 20 2a 62 75 66 2b 2b 20 3d 20 27 5c 30 27 3b 0a   *buf++ = '\0';.
6970: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 28 2a  .        if (!(*
6980: 62 75 66 29 29 20 2f 2a 20 64 6f 6e 27 74 20 63  buf)) /* don't c
6990: 6f 75 6e 74 20 74 68 65 20 74 65 72 6d 69 6e 61  ount the termina
69a0: 74 69 6e 67 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  ting NULL */.   
69b0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
69c0: 0a 20 20 20 20 20 20 20 20 2a 61 72 67 73 2b 2b  .        *args++
69d0: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
69e0: 6e 72 2b 2b 3b 0a 0a 20 20 20 20 20 20 20 20 77  nr++;..        w
69f0: 68 69 6c 65 20 28 28 27 5c 30 27 20 21 3d 20 2a  hile (('\0' != *
6a00: 62 75 66 29 20 26 26 20 21 49 53 57 48 49 54 45  buf) && !ISWHITE
6a10: 28 2a 62 75 66 29 29 0a 20 20 20 20 20 20 20 20  (*buf)).        
6a20: 20 20 20 20 62 75 66 2b 2b 3b 0a 20 20 20 20 7d      buf++;.    }
6a30: 0a 0a 20 20 20 20 2a 61 72 67 73 20 3d 20 27 5c  ..    *args = '\
6a40: 30 27 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e  0';.    return n
6a50: 72 3b 0a 7d 0a 0a                                r;.}..