home *** CD-ROM | disk | FTP | other *** search
- /***
- Schnittstelle Datenbank - TXL,
- Stackfunktionen und Menüs
- (c) 1991 by Elmar Warken
- ***/
-
-
- #include <string.h>
- #include <conio.h>
- #include <alloc.h>
- #include "interp.h"
- #include "windows.h"
- #include "db.h"
- #include "macros.c"
-
- extern int Steuer;
- extern char ScanBuffer[ZEILENLAENGE];
-
- extern struct windowdata *FirstWindow;
- extern int WEITER;
-
- int cdefDB(void)
- {
- long nr,str,len;
- if ( GetIntegerParam(&nr) &&
- GetIntegerParam(&str) &&
- GetIntegerParam(&len) )
- AddDefinition(nr,str,len);
-
- else
- {
- serror(" Parameterfehler bei 'DefDB'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- int copenDB(void)
- {
- long nr;
- char *name;
-
- if ( GetIntegerParam(&nr) &&
- GetStringParam(&name) )
- {
- if (!OpenFile(nr,name))
- {
- serror(" Fehler beim Öffnen der Datei! ");
- return(FALSE);
- }
- }
- else
- {
- serror(" Parameterfehler bei 'OpenDB'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- int ccreateDB(void)
- {
- long nr;
- char *name;
-
- if ( GetIntegerParam(&nr) &&
- GetStringParam(&name) )
- {
- if (!CreateFile(nr,name))
- {
- serror(" Fehler beim Erstellen der Datei! ");
- return(FALSE);
- }
- }
- else
- {
- serror(" Parameterfehler bei 'CreateDB'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- int cWriteDB(void)
- {
- long dbnr,satznr,zahl;
- char *str, string[200];
-
- if ( GetIntegerParam(&dbnr) &&
- GetIntegerParam(&satznr) &&
- GetStringParam(&str) && strcpy(string,str) &&
- GetIntegerParam(&zahl) )
-
- BeschreibeSatz(dbnr,satznr,string,zahl);
-
- else
- {
- serror(" Parameterfehler bei 'WriteDB'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- int cReadDB(void)
- {
- long dbnr,feldnr;
- int zahl;
- char str[300];
- char VarName1[50],VarName2[50];
-
-
- if ( GetIntegerParam(&dbnr) &&
- GetIntegerParam(&feldnr) )
- {
- Scan();
- if (Steuer == ALPHA) {
- strcpy (VarName1,ScanBuffer);
-
- Scan();
- if (Steuer==ALPHA)
- strcpy(VarName2,ScanBuffer);
- else
- {
- serror ("Variablenname erwartet! ");
- return(FALSE);
- }
-
- LeseSatz(dbnr,feldnr,str,&zahl);
-
- SetVarStr(VarName1,str);
- SetVarInt(VarName2,zahl);
- }
- else
- {
- serror ("Variablenname erwartet! ");
- return(FALSE);
- }
- }
- else
- {
- serror(" Parameterfehler bei 'ReadDB'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- int cAddDB(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- WriteToFile(dbnr);
- else
- {
- serror(" Parameterfehler bei 'AddDB'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cGotoBegin(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- GotoFileBegin(dbnr);
- else
- {
- serror(" Parameterfehler bei 'GotoFileBegin'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cGotoEnd(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- GotoFileEnd(dbnr);
- else
- {
- serror(" Parameterfehler bei 'GotoFileEnd'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cGoBackward(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- GoBackward(dbnr);
- else
- {
- serror(" Parameterfehler bei 'GoBackward'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cGoForward(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- GoForward(dbnr);
- else
- {
- serror(" Parameterfehler bei 'GoForward'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cGoTo(void)
- {
- long dbnr,spos;
-
- if (GetIntegerParam(&dbnr) &&
- GetIntegerParam(&spos) )
-
- GoTo(dbnr,spos);
- else
- {
- serror(" Parameterfehler bei 'GoTo'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cGoToNr(void)
- {
- long dbnr,snr;
-
- if (GetIntegerParam(&dbnr) &&
- GetIntegerParam(&snr) )
-
- GoToNr(dbnr,snr);
- else
- {
- serror(" Parameterfehler bei 'GoToNr'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cCloseFile(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- CloseFile(dbnr);
- else
- {
- serror(" Parameterfehler bei 'CloseFile'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cMakeTree(void)
- {
- long dbnr,fnr;
-
- if (GetIntegerParam(&dbnr) &&
- GetIntegerParam(&fnr) )
-
- MakeTree(dbnr,fnr);
- else
- {
- serror(" Parameterfehler bei 'MakeTree'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cMarkCurrent(void)
- {
- long dbnr,markval;
-
- if (GetIntegerParam(&dbnr) &&
- GetIntegerParam(&markval) )
-
- MarkCurrent(dbnr,markval);
- else
- {
- serror(" Parameterfehler bei 'MarkCurrent'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cUnMarkAll(void)
- {
- long dbnr,markval;
-
- if (GetIntegerParam(&dbnr))
- UnMarkAll(dbnr);
- else
- {
- serror(" Parameterfehler bei 'UnMarkAll'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cDelTree(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- DelTree(dbnr);
- else
- {
- serror(" Parameterfehler bei 'DelTree'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cDelMarked(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- DelMarked(dbnr);
- else
- {
- serror(" Parameterfehler bei 'DelMarked'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cListTree(void)
- {
- long dbnr;
-
- if (GetIntegerParam(&dbnr))
- ListTree(dbnr);
- else
- {
- serror(" Parameterfehler bei 'ListTree'! ");
- return(FALSE);
- }
- return(OK);
- }
-
- long testprog,ausgproc;
- int gefunden;
-
- int cGefundenOK(void)
- {
- gefunden=1;
-
- return(OK);
- }
-
- int cStopSearch(void)
- {
- WEITER=0;
-
- return(OK);
- }
-
- int TestP()
- {
- gefunden=0;
-
- if (testprog==0)
- gefunden=1;
- else dogosub(testprog);
-
- return(gefunden);
- }
-
- void AusgP()
- {
- dogosub(ausgproc);
- }
-
- int cSearchDB(void)
- {
- long nr;
-
- if ( GetIntegerParam(&nr) &&
- GetIntegerParam(&testprog) &&
- GetIntegerParam(&ausgproc) )
-
- DurchSuche(nr,TestP,AusgP);
-
- else
- {
- serror(" Parameterfehler bei 'SearchDB'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- int cSearchTree(void)
- {
- long dbnr,pos;
- char VarName[50];
- char *str;
-
- if ( GetIntegerParam(&dbnr) )
- {
- Scan();
- if (Steuer == ALPHA) {
- strcpy (VarName,ScanBuffer);
-
- if (GetStringParam(&str))
- {
- if (!SearchTree(dbnr,&pos,str))
- pos=1000000000; /** Position 1 Milliarde bedeutet Fehler, da **/
- /** Gigabyte-Dateien sehr unwahrscheinlich **/
- } else
- {
- serror(" Parameterfehler bei 'SearchTree'! ");
- return(FALSE);
- }
-
- SetVarInt(VarName,pos);
- }
- else
- {
- serror ("Variablenname erwartet! ");
- return(FALSE);
- }
- }
- else
- {
- serror(" Parameterfehler bei 'SearchTree'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
-
- int cDurchsucheTree(void)
- {
- long nr;
-
- if ( GetIntegerParam(&nr) &&
- GetIntegerParam(&testprog) &&
- GetIntegerParam(&ausgproc) )
-
- DurchsucheTree(nr,TestP,AusgP);
-
- else
- {
- serror(" Parameterfehler bei 'DurchsucheTree'! ");
- return(FALSE);
- }
-
- return(OK);
- }
-
- /** Pulldownmenüs für TXL : **/
- /** Es werden solange Unterprogramme aufgerufen, bis ESC gedrückt wird. **/
- int cMenue(void)
- {
- char Punkte[20][30]; /*** 20 Punkte je maximal 29 Zeichen ***/
- long Subs[20]; /*** 20 Unterprogramme ***/
- char *str;
- int x1,y1,i,breite=0,punkte=0;
- int wahl;
- char c;
-
- while (GetStringParam(&str))
- {
- strcpy(Punkte[punkte],str);
- if (strlen(str) > breite)
- breite=strlen(str);
- if (!GetIntegerParam(&Subs[punkte]))
- {
- serror(" Unterprogrammzeile für Menüpunkt erwartet. ");
- return(FALSE);
- }
- punkte++;
- }
- if (!FirstWindow)
- {
- serror(" Das Fenster für das Menü muß bereits geöffnet sein. ");
- return(FALSE);
- }
- x1=FirstWindow->x1; y1=FirstWindow->y1;
- for (i=0; i<punkte; i++)
- {
- SET_POS(x1+1,y1+i+1);
- WR_STRMAX(Punkte[i],FirstWindow->BackCol,breite);
- }
- wahl=1;
- SET_POS(x1+1,y1+wahl);
- WR_STRMAX(Punkte[wahl-1],FirstWindow->FrameCol,breite);
- while ((c=getch())!=27)
- {
- SET_POS(x1+1,y1+wahl);
- WR_STRMAX(Punkte[wahl-1],FirstWindow->BackCol,breite);
- switch (c)
- {
- case 0 :
- c=getch();
- switch(c)
- {
- case 80 : wahl++; break;
- case 72 : wahl--; break;
- case 71 : wahl=1; break;
- case 79 : wahl=punkte;
- } break;
- case 13 :
- dogosub(Subs[wahl-1]);
- }
- if (wahl==0) wahl=punkte;
- if (wahl>punkte) wahl=1;
- SET_POS(x1+1,y1+wahl);
- WR_STRMAX(Punkte[wahl-1],FirstWindow->FrameCol,breite);
- }
- return(OK);
- }
-
- typedef struct stack
- {
- long val;
- struct stack *Next;
- } Stack;
-
- Stack *Top;
-
- int cpush()
- {
- long wert;
- Stack *new;
-
- if (GetIntegerParam(&wert))
- {
- if ((new=malloc(sizeof(Stack)))==NULL)
- {
- serror(" Stacküberlauf bzw. Speicher voll. ");
- return(FALSE);
- }
- new->val=wert;
- new->Next=Top;
- Top=new;
- } else
- {
- serror(" Falscher Parameter von 'push' ");
- return(FALSE);
- }
- return(OK);
- }
-
- int cpop()
- {
- long *wert;
- Stack *alt;
-
- if (GetNumbVarParam(&wert))
- {
- if (Top)
- {
- *wert=Top->val;
- alt=Top;
- Top=Top->Next;
- free(alt);
- }
- else
- {
- serror(" Stack ist leer. ");
- return(FALSE);
- }
- } else
- {
- serror(" Falscher Parameter von 'pop' ");
- return(FALSE);
- }
- return(OK);
- }
-
- /** Auswahlliste für TXL : **/
- /** Ein Menüpunkt wird ausgewählt und dessen
- Nummer auf dem Stack zurückgegeben. **/
-
- int cAuswahl(void)
- {
- char Punkte[20][30]; /*** 20 Punkte je maximal 29 Zeichen ***/
- long Subs[20]; /*** 20 Unterprogramme ***/
- char *str;
- int x1,y1,i,breite=0,punkte=0;
- int wahl;
- char c;
- Stack *new;
-
- while (GetStringParam(&str))
- {
- strcpy(Punkte[punkte],str);
- if (strlen(str) > breite)
- breite=strlen(str);
- punkte++;
- }
- if (!FirstWindow)
- {
- serror(" Das Fenster für das Menü muß bereits geöffnet sein. ");
- return(FALSE);
- }
- x1=FirstWindow->x1; y1=FirstWindow->y1;
- for (i=0; i<punkte; i++)
- {
- SET_POS(x1+1,y1+i+1);
- WR_STRMAX(Punkte[i],FirstWindow->BackCol,breite);
- }
- wahl=1;
- SET_POS(x1+1,y1+wahl);
- WR_STRMAX(Punkte[wahl-1],FirstWindow->FrameCol,breite);
- while ((c=getch())!=13)
- {
- SET_POS(x1+1,y1+wahl);
- WR_STRMAX(Punkte[wahl-1],FirstWindow->BackCol,breite);
- if (c==0)
- {
- c=getch();
- switch(c)
- {
- case 80 : wahl++; break;
- case 72 : wahl--; break;
- case 71 : wahl=1; break;
- case 79 : wahl=punkte;
- }
- }
- if (wahl==0) wahl=punkte;
- if (wahl>punkte) wahl=1;
- SET_POS(x1+1,y1+wahl);
- WR_STRMAX(Punkte[wahl-1],FirstWindow->FrameCol,breite);
- }
-
- if ((new=malloc(sizeof(Stack)))==NULL)
- {
- serror(" Stacküberlauf bzw. Speicher voll. ");
- return(FALSE);
- }
- new->val=wahl;
- new->Next=Top;
- Top=new;
-
- return(OK);
- }
-
- int cReadKey()
- {
- long *val;
- char c;
-
- if (GetNumbVarParam(&val))
- {
- if ((c=getch())==0)
- *val=(getch() << 8) & c;
- else *val=c;
- }
- else
- {
- serror(" ReadKey : Integervariable erwartet. ");
- return(FALSE);
- }
- return(OK);
- }
-
-