summaryrefslogtreecommitdiff
path: root/setedit/sdg/mliediti.cc
diff options
context:
space:
mode:
Diffstat (limited to 'setedit/sdg/mliediti.cc')
-rw-r--r--setedit/sdg/mliediti.cc178
1 files changed, 178 insertions, 0 deletions
diff --git a/setedit/sdg/mliediti.cc b/setedit/sdg/mliediti.cc
new file mode 100644
index 0000000..b3a0352
--- /dev/null
+++ b/setedit/sdg/mliediti.cc
@@ -0,0 +1,178 @@
+/* Copyright (C) 1996-2001 by Salvador E. Tropea (SET),
+ see copyrigh file for details */
+#include <stdio.h>
+#include <ctype.h>
+#define Uses_TNoCaseStringCollection
+#include <settvuti.h>
+#define Uses_TLispVariableCol
+#define Uses_TMLIEditor
+#define Uses_TMLIArraySimple
+#define Uses_TLispVar
+#include <mli.h>
+#include <edmsg.h>
+
+int MLIEditorError;
+char *MLIEditorTypeError;
+char *MLIEditorErrorName;
+char *MLIEditorErrorCode;
+
+static TMLIArraySimple *array=0;
+static TLispVariableCol *vars=0;
+static TMLIEditor *Interpreter=0;
+static int okInit=0;
+
+int InitLispEditor(void)
+{
+ if (!okInit)
+ {
+ array=new TMLIArraySimple(10,10);
+ vars=new TLispVariableCol(5,5);
+ if (array && vars)
+ {
+ Interpreter=new TMLIEditor(array,vars,stdout);
+ if (Interpreter)
+ {
+ okInit=1;
+ }
+ }
+ }
+ return okInit;
+}
+
+void DeInitLispEditor(void)
+{
+ if (Interpreter)
+ delete Interpreter;
+ Interpreter=0;
+}
+
+char *InterpretLispEditor(char *s, Boolean print)
+{
+ if (!okInit)
+ {
+ MLIEditorError=0;
+ MLIEditorTypeError=MLIEditorErrorName=MLIEditorErrorCode="";
+ return NULL;
+ }
+
+ if (print)
+ EdShowMessage("Running sLisp macro ...",True);
+ Interpreter->Error=0;
+ TLispVar *val=Interpreter->Interpret(s);
+
+ if (!val)
+ {
+ MLIEditorError=Interpreter->Error;
+ MLIEditorTypeError=Interpreter->GetTypeError();
+ MLIEditorErrorName=Interpreter->GetError();
+ MLIEditorErrorCode=Interpreter->GetCodeError();
+ return NULL;
+ }
+ else
+ {
+ if (print)
+ {
+ char *v=val->toStr();
+ EdShowMessageI(__("Return value:"));
+ EdShowMessage(v);
+ delete[] v;
+ }
+ destroyFloatVar(val);
+ }
+
+ return Interpreter->EndCode+1;
+}
+
+int InterpretLispEditorFile(char *s)
+{
+ while (*s)
+ {
+ if (*s==';')
+ {
+ while (*s && *s!='\n') s++;
+ if (!*s)
+ break;
+ }
+ else
+ if (*s=='(')
+ {
+ s=InterpretLispEditor(s);
+ if (!s)
+ return 0;
+ }
+ s++;
+ }
+ return 1;
+}
+
+extern ccIndex SLPChoose(TNoCaseStringCollection *);
+static ccIndex LastChoose=-1;
+
+int ChooseAndRunLispEditor(void)
+{
+ if (!okInit)
+ return SLP_NO_INIT;
+
+ TMacrosColl *Col=Interpreter->Macros;
+
+ int cant=Col->getCount();
+ if (!cant)
+ return SLP_NO_MACROS;
+
+ ccIndex ind=SLPChoose(Col);
+ if (ind<0)
+ return SLP_OK;
+
+ LastChoose=ind;
+ MLIMacro *m=(MLIMacro *)(Col->at(ind));
+ return InterpretLispEditor(m->start)==NULL ? SLP_ERROR : SLP_OK;
+}
+
+TNoCaseStringCollection *GetMacrosList(void)
+{
+ if (!okInit)
+ return 0;
+
+ return Interpreter->Macros;
+}
+
+int ReRunLastChooseLispEditor(void)
+{
+ if (!okInit)
+ return SLP_NO_INIT;
+
+ TNoCaseStringCollection *Col=Interpreter->Macros;
+ if (LastChoose<0 || LastChoose>=Col->getCount())
+ return SLP_NO_CHOOSE;
+
+ MLIMacro *m=(MLIMacro *)(Col->at(LastChoose));
+ return InterpretLispEditor(m->start)==NULL ? SLP_ERROR : SLP_OK;
+}
+
+int MLIEdSeachAndRunCom(char *name, Boolean verbose)
+{
+ if (!okInit)
+ return SLP_NO_INIT;
+
+ TNoCaseStringCollection *Col=Interpreter->Macros;
+ ccIndex i;
+ ccIndex c=Col->getCount();
+ for (i=0; i<c; i++)
+ {
+ MLIMacro *m=(MLIMacro *)(Col->at(i));
+ if (strcmp(m->Name,name)==0)
+ return InterpretLispEditor(m->start,verbose)==NULL ? SLP_ERROR : SLP_OK;
+ }
+ return SLP_NO_CHOOSE;
+}
+
+int MLIEdIsolateCode(char *start, char *&end)
+{
+ int error;
+ char *ret=TMLIBase::SkipCode(start,error);
+ if (!ret)
+ return SLP_ERROR;
+ end=ret;
+ return SLP_OK;
+}
+