home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1991
/
04
/
txl
/
3_preis
/
fast
/
ibefehle.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-15
|
5KB
|
259 lines
/* ibefehle.c
In diesem File befinden sich die Befehle des
Interpreters.
(c) 1990 Michael Beising & TOOLBOX
*/
#include <dos.h>
#include <alloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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- */
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 ("<setze> Zuweisung erwartet! ");
}
else
serror ("<setze> 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<drucke> ... Formelinterpreter nicht implementiert! ");
break;
default :
serror ("<drucke> 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<gehezu> Sprungziel nicht gefunden! ");
return (FALSE); /* Sprungziel nicht gefunden */
}
}
else
printf ("\n<gehezu> 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 ("<wenn> 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<lauf> Kein Programm im Speicher! \n");
return (OK);
}
/* cende () ende des Interpreterprogramms */
extern PRGZEILE *FirstLine;
int
cende ()
{
printf ("\n Normales Programmende... \n");
return (FALSE);
}
/* cinfo: Versionsnummer des TXL-Interpreters */
int
cinfo ()
{
printf ("\n TXL-Interpreter Version 2.0\n");
return (OK);
}
/* 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 ("<lade> 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 ("<speichere> Kein Filename angegeben! ");
return (OK);
}
/* cneu
Aktuelles Programm aus dem Speicher löschen.
*/
int
cneu ()
{
ClearProg (); /* Programm löschen */
return (OK);
}