@@ -1,11 +1,11 @@ /* ================================================================== - FILE: "/home/joze/src/tclreadline/tclreadline.c" - LAST MODIFIED: "Sun Feb 28 15:01:31 1999 (joze)" - (C) 1998, 1999 by Johannes Zellner - Johannes.Zellner@physik.uni-karlsruhe.de + + FILE: "/krispc6/home/joze/src/tclreadline/tclreadline.c" + LAST MODIFICATION: "Sat May 8 16:20:59 1999 (joze)" + (C) 1998, 1999 by Johannes Zellner, $Id$ --- tclreadline -- gnu readline for tcl Copyright (C) 1999 Johannes Zellner @@ -22,36 +22,39 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - Johannes.Zellner@physik.uni-karlsruhe.de - http://krisal.physik.uni-karlsruhe.de/~joze + , http://www.zellner.org/tclreadline/ + ================================================================== */ #include #include #include #include +#define READLINE_LIBRARY #include #include #include #define MALLOC(size) Tcl_Alloc ((int) size) #define FREE(ptr) if (ptr) Tcl_Free ((char *) ptr) -#define _CMD_SET (1 << 0) -#define _CMD_GET (1 << 1) -#define _CMD_SUB_GET (1 << 2) +enum { + _CMD_SET = (1 << 0), + _CMD_GET = (1 << 1), + _CMD_SUB_GET = (1 << 2) +}; typedef struct cmds_t { - struct cmds_t *prev; - char **cmd; - struct cmds_t *next; + struct cmds_t *prev; + char **cmd; + struct cmds_t *next; } cmds_t; #define STRIPLEFT(ptr) \ do { \ @@ -74,29 +77,26 @@ STRIPLEFT (ptr); \ STRIPRIGHT (ptr); \ } while (0) - - - /* * forward declarations. */ -int TclReadlineCmd (ClientData clientData, Tcl_Interp *interp, +int TclReadlineCmd (ClientData clientData, Tcl_Interp *interp, int argc, char **argv); -void TclReadlineDataAvailableHandler (ClientData clientData, int mask); -void TclReadlineLineCompleteHandler (char *ptr); -int Tclreadline_SafeInit (Tcl_Interp *interp); -int Tclreadline_Init (Tcl_Interp *interp); -char *TclReadlineInitialize (char *historyfile); -char **TclReadlineCompletion (char *text, int start, int end); -char *TclReadline0generator (char *text, int state); -char *TclReadline1generator (char *text, int state); -char *TclReadlineKnownCommands (char *text, int state, int mode); -int TclReadlineEventHook (void); -int TclReadlineParse (char **args, int maxargs, char *buf); +void TclReadlineDataAvailableHandler (ClientData clientData, int mask); +void TclReadlineLineCompleteHandler (char *ptr); +int Tclreadline_SafeInit (Tcl_Interp *interp); +int Tclreadline_Init (Tcl_Interp *interp); +char* TclReadlineInitialize (char *historyfile); +char** TclReadlineCompletion (char *text, int start, int end); +char* TclReadline0generator (char *text, int state); +char* TclReadline1generator (char *text, int state); +char* TclReadlineKnownCommands (char *text, int state, int mode); +int TclReadlineEventHook (void); +int TclReadlineParse (char **args, int maxargs, char *buf); static int line_complete = 0; static char *line = (char *) NULL; @@ -124,11 +124,10 @@ return TCL_ERROR; } c = argv[1][0]; length = strlen(argv[1]); - if (c == 'r' && strncmp (argv[1], "read", length) == 0) { char *expansion = (char *) NULL; @@ -228,14 +227,12 @@ return (Tclreadline_Init (interp)); } int Tclreadline_Init (Tcl_Interp *interp) { - Tcl_CreateCommand (interp, "::tclreadline::readline", TclReadlineCmd, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); - return (Tcl_PkgProvide (interp, "tclreadline", TCLREADLINE_VERSION)); } char *TclReadlineInitialize (char *historyfile) { @@ -418,24 +415,16 @@ *buf++ = '\0'; if (!(*buf)) /* don't count the terminating NULL */ break; - /* ----------------- - * Save the argument. - * ----------------- - */ *args++ = buf; nr++; - /* ---------------------- - * Skip over the argument. - * ---------------------- - */ while ((*buf!='\0') && (*buf!=' ') && (*buf!='\t') && (*buf!='\n')) buf++; } *args = '\0'; return nr; }