home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 04 / txl / 3_preis / fast / ibefehle.c < prev    next >
C/C++ Source or Header  |  1991-01-15  |  5KB  |  259 lines

  1. /* ibefehle.c
  2. In diesem File befinden sich die Befehle des
  3. Interpreters.
  4. (c) 1990 Michael Beising & TOOLBOX
  5. */
  6.  
  7. #include <dos.h>
  8. #include <alloc.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include "interp.h"
  13.  
  14. /* Benötigte Globalvariablen */
  15. extern    PRGZEILE    *FirstLine;        /* erste Interpreterzeile */
  16. extern    PRGZEILE    *ActLine;        /* aktuelle interpretierte Zeile */
  17. extern    char        *LinePos;        /* Zeilenposition der aktuellen Zeile*/
  18. extern  int             Steuer;                 /* der aufrufenden Routine wird mit-    */
  19. extern    char    ScanBuffer[ZEILENLAENGE]; /* Ergebnisbuffer des Scanners */
  20.  
  21. /* cset() Zuweisen eines Wertes einer Variablen */
  22. int
  23. cset(void)
  24. {
  25. VAR        Variable;
  26.  
  27.     Scan ();    /* Name der Variablen lesen */
  28.     if (Steuer == ALPHA) {
  29.       strcpy (Variable.VarName,ScanBuffer);        /* Variablennamen setzen */
  30.       Scan ();
  31.       if ((Steuer == SONDER) && (*ScanBuffer == '=')) {
  32.         SetVar (&Variable);
  33.         
  34.       }
  35.       else
  36.         serror ("<setze>  Zuweisung erwartet! ");
  37.     }
  38.     else
  39.       serror ("<setze>  Variablenname erwartet! ");
  40.  
  41. return (OK);
  42. }
  43.  
  44. /* cdruck () Ausgabe von Werten auf dem Bildschirm */
  45. int
  46. cdruck(void)
  47. {
  48. VAR        *Variable;
  49. int        Error;
  50. char    PrintBuf[200];
  51.  
  52.       Scan();
  53.       switch (Steuer) {
  54.         case EOLCHAR:
  55.             printf ("\n");
  56.             break;
  57.         case STRING:
  58.             sprintf (PrintBuf,"%s",ScanBuffer);
  59.             printf (PrintBuf);
  60.             break;
  61.         case ZIFFER:
  62.             sprintf (PrintBuf,"%s",ScanBuffer);
  63.             printf (PrintBuf);
  64.             break;
  65.         case ALPHA:
  66.             PrintVar (ScanBuffer);
  67.             break;
  68.         case SONDER:
  69.             printf ("\n<drucke>  ... Formelinterpreter nicht implementiert! ");
  70.             break;
  71.         default :
  72.             serror ("<drucke>  Nicht druckbarer Ausdruck! ");
  73.             break;
  74.       }
  75.  
  76. return (OK);
  77. }
  78.  
  79. /* cgoto () Fortführen des Programms an einer anderen Stelle */
  80. extern    int    GetNextLine;        /* Nächste Zeile ausführen */
  81.  
  82. int
  83. cgoto(void)
  84. {
  85. register        int     error,LineNumber;
  86.  
  87.     Scan ();
  88.             /* Ist es eine Ziffer und gibt es ein Programm dazu? */
  89.     if ((Steuer == ZIFFER) && FirstLine)    {
  90.       LineNumber = atoi (ScanBuffer);       /* Calculate Jump Line */
  91.  
  92.       if (FindInsPos (LineNumber,&ActLine)) {
  93.         ActLine = ActLine->PrevZeile;
  94.         GetNextLine = FALSE;                /* Zeile ist aktuelle Zeile */
  95.         return (OK);
  96.       }
  97.       else {
  98.         printf ("\n<gehezu>  Sprungziel nicht gefunden! ");
  99.         return (FALSE);                /* Sprungziel nicht gefunden */
  100.       }
  101.     }
  102.     else
  103.       printf ("\n<gehezu>  Kein Programm im Speicher! ");
  104.  
  105. return (OK);
  106. }
  107.  
  108.  
  109. /* cif () bedingte Ausführung von Befehlen */
  110. int
  111. cif()
  112. {
  113. int    result = OK;
  114.  
  115.         /* Wenn Bedingung nicht erfüllt, dann übernächste Zeile */
  116.     if (CmpVar ()) {
  117.       ActLine = ActLine->NextZeile; /* Dann-Zeile auswählen */
  118.       LinePos = ActLine->Zeile;        /* Zeilenanfang */
  119.       result = InterpLine ();        /* Dann-Zweig ausführen */
  120.       ActLine = ActLine->NextZeile;
  121.     }
  122.     else
  123.       if (ActLine->NextZeile)
  124.         ActLine = ActLine->NextZeile;    /* Sonst-Zweig ausführen */
  125.       else
  126.         serror ("<wenn>  Kein Sonst-Zweig vorhanden! ");
  127.     
  128. return (result);
  129. }
  130.  
  131.  
  132. int
  133. crun ()
  134. {
  135.  
  136.     if (FirstLine) {
  137.       ActLine = FirstLine;
  138.       /* alle Zeilen bis zur letzten oder bis Ende-Befehl ausführen */
  139.       DoProgram ();
  140.     }
  141.     else
  142.       printf ("\n<lauf>  Kein Programm im Speicher! \n");
  143.  
  144. return (OK);
  145. }
  146.  
  147. /* cende () ende des Interpreterprogramms */
  148. extern PRGZEILE *FirstLine;
  149.  
  150. int
  151. cende ()
  152. {
  153.  
  154.     printf ("\n Normales Programmende... \n");
  155.     
  156. return (FALSE);
  157. }
  158.  
  159. /*     cinfo: Versionsnummer des TXL-Interpreters */
  160.  
  161. int
  162. cinfo ()
  163. {
  164.        printf ("\n TXL-Interpreter Version 2.0\n");
  165. return (OK);
  166. }
  167.  
  168.  
  169.  
  170. /*    cexit: Ende des Interpreters */
  171.  
  172. int
  173. cexit ()
  174. {
  175.   printf ("\n Interpreter verlassen... \n");
  176.   exit (0);
  177.  
  178. return (OK);
  179. }
  180.  
  181. int
  182. cmerke ()
  183. {
  184.  
  185. return (OK);
  186. }
  187.  
  188. /* clist: Auflisten des aktuellen Programms
  189. */
  190.  
  191. int
  192. clist ()
  193. {
  194. PRGZEILE    *FindZeile;
  195. char        *Line;
  196.  
  197.     
  198.          /* Wenn es eine erste Zeile gibt, setze Zeiger darauf */
  199.     if ((FindZeile = FirstLine) != NULL) {
  200.         printf ("\n    ### Aktuelles Programm auflisten: ###\n");
  201.         while ( FindZeile) {
  202.           ShowLine (FindZeile);
  203.           FindZeile = FindZeile->NextZeile;
  204.         }
  205.         printf ("\n    ### Ende des aktuellen Programms! ###\n");
  206.     }
  207.     
  208. return (TRUE);
  209. }
  210.  
  211. /*    cload
  212.     Laden eines Interpreterprogramms in den Hauptspeicher.
  213. */
  214.  
  215. int
  216. cload ()
  217. {
  218.  
  219.     Scan();        /* Filename einlesen */
  220.     if (Steuer == STRING) {
  221.       SetFileName (ScanBuffer);    /* Filename setzen */
  222.       ReadProg ();                /* Programm einlesen */
  223.     }
  224.     else
  225.       serror ("<lade> Kein Filename angegeben! ");
  226.  
  227. return (OK);    
  228. }
  229.  
  230. /*    csave
  231.     Speichern eines Interpreterprogramms in den Hauptspeicher.
  232. */
  233.  
  234. int
  235. csave ()
  236. {
  237.  
  238.     Scan();        /* Filename einlesen */
  239.     if (Steuer == STRING) {
  240.       SetFileName (ScanBuffer);    /* Filename setzen */
  241.       WriteProg ();                /* Programm einlesen */
  242.     }
  243.     else
  244.       serror ("<speichere> Kein Filename angegeben! ");
  245. return (OK);
  246. }
  247.  
  248. /*    cneu
  249.     Aktuelles Programm aus dem Speicher löschen.
  250. */
  251.  
  252. int
  253. cneu ()
  254. {
  255.     ClearProg ();            /* Programm löschen */
  256.     
  257. return (OK);
  258. }
  259.