home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 20 / dos_txl / source / ibefehle.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-06  |  4.9 KB  |  249 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.  
  160. /*    cexit: Ende des Interpreters */
  161.  
  162. int
  163. cexit ()
  164. {
  165.   printf ("\n Interpreter verlassen... \n");
  166.   exit (0);
  167.  
  168. return (OK);
  169. }
  170.  
  171. int
  172. cmerke ()
  173. {
  174.  
  175. return (OK);
  176. }
  177.  
  178. /* clist: Auflisten des aktuellen Programms
  179. */
  180.  
  181. int
  182. clist ()
  183. {
  184. PRGZEILE    *FindZeile;
  185. char        *Line;
  186.  
  187.     
  188.          /* Wenn es eine erste Zeile gibt, setze Zeiger darauf */
  189.     if ((FindZeile = FirstLine) != NULL) {
  190.         printf ("\n    ### Aktuelles Programm auflisten: ###\n");
  191.         while ( FindZeile) {
  192.           ShowLine (FindZeile);
  193.           FindZeile = FindZeile->NextZeile;
  194.         }
  195.         printf ("\n    ### Ende des aktuellen Programms! ###\n");
  196.     }
  197.     
  198. return (TRUE);
  199. }
  200.  
  201. /*    cload
  202.     Laden eines Interpreterprogramms in den Hauptspeicher.
  203. */
  204.  
  205. int
  206. cload ()
  207. {
  208.  
  209.     Scan();        /* Filename einlesen */
  210.     if (Steuer == STRING) {
  211.       SetFileName (ScanBuffer);    /* Filename setzen */
  212.       ReadProg ();                /* Programm einlesen */
  213.     }
  214.     else
  215.       serror ("<lade> Kein Filename angegeben! ");
  216.  
  217. return (OK);    
  218. }
  219.  
  220. /*    csave
  221.     Speichern eines Interpreterprogramms in den Hauptspeicher.
  222. */
  223.  
  224. int
  225. csave ()
  226. {
  227.  
  228.     Scan();        /* Filename einlesen */
  229.     if (Steuer == STRING) {
  230.       SetFileName (ScanBuffer);    /* Filename setzen */
  231.       WriteProg ();                /* Programm einlesen */
  232.     }
  233.     else
  234.       serror ("<speichere> Kein Filename angegeben! ");
  235. return (OK);
  236. }
  237.  
  238. /*    cneu
  239.     Aktuelles Programm aus dem Speicher löschen.
  240. */
  241.  
  242. int
  243. cneu ()
  244. {
  245.     ClearProg ();            /* Programm löschen */
  246.     
  247. return (OK);
  248. }
  249.