home *** CD-ROM | disk | FTP | other *** search
- /* ibefehle.c
- In diesem File befinden sich die Befehle des
- Interpreters.
- (c) 1990 Michael Beising & TOOLBOX
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include "interp.h"
-
- /* Benötigte Globalvariablen */
- extern PRGZEILE *FirstLine; /* erste Interpreterzeile */
- extern PRGZEILE *ActLine; /* aktuelle interpretierte Zeile */
- extern char *LinePos; /* Zeilenposition der aktuellen Zeile*/
- extern int Steuer; /* der aufrufenden Routine wird mit- */
- /* geteilt, um was es sich handelt. */
- extern char ScanBuffer[ZEILENLAENGE]; /* Ergebnisbuffer des Scanners */
-
- /* cset() Zuweisen eines Wertes einer Variablen */
- int
- cset(void)
- {
- VAR Variable;
-
- Scan (); /* Name der Variablen lesen */
- if (Steuer == ALPHA) {
- strcpy (Variable.VarName,ScanBuffer); /* Variablennamen setzen */
- Scan ();
- if ((Steuer == SONDER) && (*ScanBuffer == '=')) {
- SetVar (&Variable);
-
- }
- else
- serror ("Zuweisung erwartet! ");
- }
- else
- serror ("Variablenname erwartet! ");
-
- return (OK);
- }
-
- /* cdruck () Ausgabe von Werten auf dem Bildschirm */
- int
- cdruck(void)
- {
- VAR *Variable;
- int Error;
- char PrintBuf[200];
-
- Scan();
- switch (Steuer) {
- case EOLCHAR:
- printf ("\n");
- break;
- case STRING:
- sprintf (PrintBuf,"%s",ScanBuffer);
- printf (PrintBuf);
- break;
- case ZIFFER:
- sprintf (PrintBuf,"%s",ScanBuffer);
- printf (PrintBuf);
- break;
- case ALPHA:
- PrintVar (ScanBuffer);
- break;
- case SONDER:
- printf ("\n ... Formelinterpreter nicht implementiert! ");
- break;
- default :
- serror (" Nicht druckbarer Ausdruck! ");
- break;
- }
-
- return (OK);
- }
-
- /* cgoto () Fortführen des Programms an einer anderen Stelle */
- extern int GetNextLine; /* Nächste Zeile ausführen */
-
- int
- cgoto(void)
- {
- register int error,LineNumber;
-
- Scan ();
- /* Ist es eine Ziffer und gibt es ein Programm dazu? */
- if ((Steuer == ZIFFER) && FirstLine) {
- LineNumber = atoi (ScanBuffer); /* Calculate Jump Line */
- if (FindInsPos (LineNumber,&ActLine)) {
- ActLine = ActLine->PrevZeile;
- GetNextLine = FALSE; /* Zeile ist aktuelle Zeile */
- return (OK);
- }
- else {
- printf ("\n Sprungziel nicht gefunden! ");
- return (FALSE); /* Sprungziel nicht gefunden */
- }
- }
- else
- printf ("\n Kein Programm im Speicher! ");
-
- return (OK);
- }
-
-
- /* cif () bedingte Ausführung von Befehlen */
- int
- cif()
- {
- int result = OK;
-
- /* Wenn Bedingung nicht erfüllt, dann übernächste Zeile */
- if (CmpVar ()) {
- ActLine = ActLine->NextZeile; /* Dann-Zeile auswählen */
- LinePos = ActLine->Zeile; /* Zeilenanfang */
- result = InterpLine (); /* Dann-Zweig ausführen */
- ActLine = ActLine->NextZeile;
- }
- else
- if (ActLine->NextZeile)
- ActLine = ActLine->NextZeile; /* Sonst-Zweig ausführen */
- else
- serror (" Kein Sonst-Zweig vorhanden! ");
-
- return (result);
- }
-
-
- int
- crun ()
- {
-
- if (FirstLine) {
- ActLine = FirstLine;
- /* alle Zeilen bis zur letzten oder bis Ende-Befehl ausführen */
- DoProgram ();
- }
- else
- printf ("\n Kein Programm im Speicher! \n");
-
- return (OK);
- }
-
- /* cende () ende des Interpreterprogramms */
- extern PRGZEILE *FirstLine;
-
- int
- cende ()
- {
-
- printf ("\n Normales Programmende... \n");
-
- return (FALSE);
- }
-
-
- /* cexit: Ende des Interpreters */
-
- int
- cexit ()
- {
- printf ("\n Interpreter verlassen... \n");
- exit (0);
-
- return (OK);
- }
-
- int
- cmerke ()
- {
-
- return (OK);
- }
-
- /* clist: Auflisten des aktuellen Programms
- */
-
- int
- clist ()
- {
- PRGZEILE *FindZeile;
- char *Line;
-
-
- /* Wenn es eine erste Zeile gibt, setze Zeiger darauf */
- if ((FindZeile = FirstLine) != NULL) {
- printf ("\n ### Aktuelles Programm auflisten: ###\n");
- while ( FindZeile) {
- ShowLine (FindZeile);
- FindZeile = FindZeile->NextZeile;
- }
- printf ("\n ### Ende des aktuellen Programms! ###\n");
- }
-
- return (TRUE);
- }
-
- /* cload
- Laden eines Interpreterprogramms in den Hauptspeicher.
- */
-
- int
- cload ()
- {
-
- Scan(); /* Filename einlesen */
- if (Steuer == STRING) {
- SetFileName (ScanBuffer); /* Filename setzen */
- ReadProg (); /* Programm einlesen */
- }
- else
- serror ("Kein Filename angegeben! ");
-
- return (OK);
- }
-
- /* csave
- Speichern eines Interpreterprogramms in den Hauptspeicher.
- */
-
- int
- csave ()
- {
-
- Scan(); /* Filename einlesen */
- if (Steuer == STRING) {
- SetFileName (ScanBuffer); /* Filename setzen */
- WriteProg (); /* Programm einlesen */
- }
- else
- serror ("Kein Filename angegeben! ");
- return (OK);
- }
-
- /* cneu
- Aktuelles Programm aus dem Speicher löschen.
- */
-
- int
- cneu ()
- {
- ClearProg (); /* Programm löschen */
-
- return (OK);
- }
-
- /* Ende des Files IBEFEHLE.C */
-