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