summaryrefslogtreecommitdiffstats
path: root/tkblt/generic/tkbltParse.C
diff options
context:
space:
mode:
Diffstat (limited to 'tkblt/generic/tkbltParse.C')
-rw-r--r--tkblt/generic/tkbltParse.C388
1 files changed, 0 insertions, 388 deletions
diff --git a/tkblt/generic/tkbltParse.C b/tkblt/generic/tkbltParse.C
deleted file mode 100644
index 095b16a..0000000
--- a/tkblt/generic/tkbltParse.C
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Smithsonian Astrophysical Observatory, Cambridge, MA, USA
- * This code has been modified under the terms listed below and is made
- * available under the same terms.
- */
-
-/*
- *
- * This file is copied from tclParse.c in the TCL library distribution.
- *
- * Copyright (c) 1987-1993 The Regents of the University of
- * California.
- *
- * Copyright (c) 1994-1998 Sun Microsystems, Inc.
- *
- */
-
-/*
- * Since TCL 8.1.0 these routines have been replaced by ones that
- * generate byte-codes. But since these routines are used in vector
- * expressions, where no such byte-compilation is necessary, I now
- * include them. In fact, the byte-compiled versions would be slower
- * since the compiled code typically runs only one time.
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <iostream>
-#include <sstream>
-#include <iomanip>
-using namespace std;
-
-#include <tcl.h>
-
-#include "tkbltParse.h"
-
-using namespace Blt;
-
-/*
- * A table used to classify input characters to assist in parsing
- * TCL commands. The table should be indexed with a signed character
- * using the CHAR_TYPE macro. The character may have a negative
- * value. The CHAR_TYPE macro takes a pointer to a signed character
- * and a pointer to the last character in the source string. If the
- * src pointer is pointing at the terminating null of the string,
- * CHAR_TYPE returns TCL_COMMAND_END.
- */
-
-#define STATIC_STRING_SPACE 150
-#define TCL_NORMAL 0x01
-#define TCL_SPACE 0x02
-#define TCL_COMMAND_END 0x04
-#define TCL_QUOTE 0x08
-#define TCL_OPEN_BRACKET 0x10
-#define TCL_OPEN_BRACE 0x20
-#define TCL_CLOSE_BRACE 0x40
-#define TCL_BACKSLASH 0x80
-#define TCL_DOLLAR 0x00
-
-/*
- * The following table assigns a type to each character. Only types
- * meaningful to TCL parsing are represented here. The table is
- * designed to be referenced with either signed or unsigned characters,
- * so it has 384 entries. The first 128 entries correspond to negative
- * character values, the next 256 correspond to positive character
- * values. The last 128 entries are identical to the first 128. The
- * table is always indexed with a 128-byte offset (the 128th entry
- * corresponds to a 0 character value).
- */
-
-static unsigned char tclTypeTable[] =
-{
- /*
- * Negative character values, from -128 to -1:
- */
-
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
-
- /*
- * Positive character values, from 0-127:
- */
-
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_SPACE, TCL_COMMAND_END, TCL_SPACE,
- TCL_SPACE, TCL_SPACE, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_SPACE, TCL_NORMAL, TCL_QUOTE, TCL_NORMAL,
- TCL_DOLLAR, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_COMMAND_END,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_OPEN_BRACKET,
- TCL_BACKSLASH, TCL_COMMAND_END, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_OPEN_BRACE,
- TCL_NORMAL, TCL_CLOSE_BRACE, TCL_NORMAL, TCL_NORMAL,
-
- /*
- * Large unsigned character values, from 128-255:
- */
-
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
- TCL_NORMAL, TCL_NORMAL, TCL_NORMAL, TCL_NORMAL,
-};
-
-#define CHAR_TYPE(src,last) \
- (((src)==(last))?TCL_COMMAND_END:(tclTypeTable+128)[(int)*(src)])
-
-int Blt::ParseNestedCmd(Tcl_Interp* interp, const char *string,
- int flags, const char **termPtr, ParseValue *parsePtr)
-
-{
- return TCL_ERROR;
-}
-
-int Blt::ParseBraces(Tcl_Interp* interp, const char *string,
- const char **termPtr, ParseValue *parsePtr)
-{
- int level;
- const char *src;
- char *dest, *end;
- char c;
- const char *lastChar = string + strlen(string);
-
- src = string;
- dest = parsePtr->next;
- end = parsePtr->end;
- level = 1;
-
- /*
- * Copy the characters one at a time to the result area, stopping
- * when the matching close-brace is found.
- */
-
- for (;;) {
- c = *src;
- src++;
-
- if (dest == end) {
- parsePtr->next = dest;
- (*parsePtr->expandProc) (parsePtr, 20);
- dest = parsePtr->next;
- end = parsePtr->end;
- }
- *dest = c;
- dest++;
-
- if (CHAR_TYPE(src - 1, lastChar) == TCL_NORMAL) {
- continue;
- } else if (c == '{') {
- level++;
- } else if (c == '}') {
- level--;
- if (level == 0) {
- dest--; /* Don't copy the last close brace. */
- break;
- }
- } else if (c == '\\') {
- int count;
-
- /*
- * Must always squish out backslash-newlines, even when in
- * braces. This is needed so that this sequence can appear
- * anywhere in a command, such as the middle of an expression.
- */
-
- if (*src == '\n') {
- dest[-1] = Tcl_Backslash(src - 1, &count);
- src += count - 1;
- } else {
- Tcl_Backslash(src - 1, &count);
- while (count > 1) {
- if (dest == end) {
- parsePtr->next = dest;
- (*parsePtr->expandProc) (parsePtr, 20);
- dest = parsePtr->next;
- end = parsePtr->end;
- }
- *dest = *src;
- dest++;
- src++;
- count--;
- }
- }
- } else if (c == '\0') {
- Tcl_AppendResult(interp, "missing close-brace", (char *)NULL);
- *termPtr = string - 1;
- return TCL_ERROR;
- }
- }
-
- *dest = '\0';
- parsePtr->next = dest;
- *termPtr = src;
- return TCL_OK;
-}
-
-void Blt::ExpandParseValue(ParseValue *parsePtr, int needed)
-
-{
- /*
- * Either double the size of the buffer or add enough new space
- * to meet the demand, whichever produces a larger new buffer.
- */
- int size = (parsePtr->end - parsePtr->buffer) + 1;
- if (size < needed)
- size += needed;
- else
- size += size;
-
- char* buffer = (char*)malloc((unsigned int)size);
-
- /*
- * Copy from old buffer to new, free old buffer if needed, and
- * mark new buffer as malloc-ed.
- */
- memcpy((VOID *) buffer, (VOID *) parsePtr->buffer,
- (size_t) (parsePtr->next - parsePtr->buffer));
- parsePtr->next = buffer + (parsePtr->next - parsePtr->buffer);
- if (parsePtr->clientData != 0) {
- free(parsePtr->buffer);
- }
- parsePtr->buffer = buffer;
- parsePtr->end = buffer + size - 1;
- parsePtr->clientData = (ClientData)1;
-}
-
-int Blt::ParseQuotes(Tcl_Interp* interp, const char *string, int termChar,
- int flags, const char **termPtr, ParseValue *parsePtr)
-{
- const char *src;
- char *dest, c;
- const char *lastChar = string + strlen(string);
-
- src = string;
- dest = parsePtr->next;
-
- for (;;) {
- if (dest == parsePtr->end) {
- /*
- * Target buffer space is about to run out. Make more space.
- */
- parsePtr->next = dest;
- (*parsePtr->expandProc) (parsePtr, 1);
- dest = parsePtr->next;
- }
- c = *src;
- src++;
- if (c == termChar) {
- *dest = '\0';
- parsePtr->next = dest;
- *termPtr = src;
- return TCL_OK;
- } else if (CHAR_TYPE(src - 1, lastChar) == TCL_NORMAL) {
- copy:
- *dest = c;
- dest++;
- continue;
- } else if (c == '$') {
- int length;
- const char *value;
-
- value = Tcl_ParseVar(interp, src - 1, termPtr);
- if (value == NULL) {
- return TCL_ERROR;
- }
- src = *termPtr;
- length = strlen(value);
- if ((parsePtr->end - dest) <= length) {
- parsePtr->next = dest;
- (*parsePtr->expandProc) (parsePtr, length);
- dest = parsePtr->next;
- }
- strcpy(dest, value);
- dest += length;
- continue;
- } else if (c == '[') {
- int result;
-
- parsePtr->next = dest;
- result = ParseNestedCmd(interp, src, flags, termPtr, parsePtr);
- if (result != TCL_OK) {
- return result;
- }
- src = *termPtr;
- dest = parsePtr->next;
- continue;
- } else if (c == '\\') {
- int nRead;
-
- src--;
- *dest = Tcl_Backslash(src, &nRead);
- dest++;
- src += nRead;
- continue;
- } else if (c == '\0') {
- Tcl_ResetResult(interp);
- ostringstream str;
- str << "missing " << termChar << ends;
- Tcl_SetStringObj(Tcl_GetObjResult(interp), str.str().c_str(), 9);
- *termPtr = string - 1;
- return TCL_ERROR;
- } else {
- goto copy;
- }
- }
-}
-