home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 04 / txl / 2_preis / source / itracer.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-01-18  |  2.9 KB  |  108 lines

  1. /**********************************************************/
  2. /*                       ITRACER.C                        */
  3. /*             Wenn der Programmierer lacht               */
  4. /*     der Tracer ihm die Fehlersuche einfach macht       */
  5. /*                                                        */
  6. /*          (c) 1991 Ralf Morgenstern & toolbox           */
  7. /**********************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <ctype.h>
  12. #include <ext.h>
  13. #include "interp.h"
  14.  
  15. /* lokale Prototypen */
  16. void  Trace (void);
  17. void  ShowVars (void);
  18. void  SetNewVal (void);
  19. void  HelpMe (void);
  20.  
  21.  
  22. /* Benoetigte Globalvariablen */
  23. extern  PRGZEILE  *ActLine;   /* aktuelle interp. Zeile   */
  24. extern  char      *LinePos;   /* Zeilenpos. der Akt. Zeile*/
  25. extern  VAR  *FirstVar;  /* Zeiger auf die erste Variable */
  26. extern int traceFlag;
  27. extern int IntError;
  28.  
  29. /* Trace : der Tracer
  30.    Funktionen siehe HelpMe  */
  31.    
  32. void Trace()
  33. {
  34. char   name[NAMLEN];
  35. char   ch;
  36.  
  37.  ShowLine ( ActLine );
  38.  do {
  39.    printf( "\nT:" );
  40.  
  41.  /* Bereitschaft anzeigen */
  42.  
  43.    ch = toupper(getch());
  44.  
  45.  /* groß und klein gleichberechtigt */
  46.  
  47.    if ( ch == 'V' ) ShowVars();
  48.    else if ( ch == 'N' ) {
  49.      /* Name erfragen und entsprechende Variable anzeigen */
  50.      printf( "Name ? " ); scanf( "%s",name );
  51.      PrintVar ( name );
  52.    }
  53.    else if ( ch == 'A' ) {
  54.      printf( "Verfolgung abbrechen" );
  55.      traceFlag = FALSE; ch = CR;
  56.    }
  57.    else if ( ch == 'S' ) SetNewVal();
  58.    else if ( ch == 'L' ) ShowLine( ActLine );
  59.    else if ( ch == 'H' ) HelpMe();
  60.    else if ( ch == 'B' ){ IntError = TRUE; ch = CR; }
  61.  } while ( ch != CR );
  62.  printf( "\n" );
  63. }/* Trace */
  64.  
  65. /* ShowVars : zeigt alle derzeit definierten Variablen an */
  66.  
  67. void ShowVars()
  68. {
  69. VAR *Variable;
  70.  
  71.  printf( "zeige Variablen\n" );
  72.  for ( Variable=FirstVar;Variable;
  73.        Variable=Variable->NextVar )
  74.        {
  75.         printf( "%s = ",Variable->VarName );
  76.         PrintVar ( Variable->VarName ); printf( "\n" );
  77.        }
  78. }
  79.  
  80. /* SetNewVal : Setzt Variable auf neuen Wert */
  81.  
  82. void SetNewVal()
  83. {
  84. VAR  *Variable;
  85. char name[NAMLEN],wert[ZEILENLAENGE];
  86.  
  87.   printf( "setze Variable neu; Name ? " ); gets( name );
  88.   if (( Variable = IsVariable( name )) != NULL ) {
  89.     printf( "neuer Wert = " ); gets ( wert );
  90.     LinePos = wert; SkipChar();  ReadValue ( Variable );
  91.   }
  92.   else printf( "existiert nicht" );
  93. }
  94.  
  95. /* HelpMe : gibt kurze Hilfstexte zu Tracer-Funktionen aus*/
  96.  
  97. void HelpMe()
  98. {
  99.  printf( "\nA : Tracer verlassen\n" );
  100.  printf( "B : Programm beenden\n" );
  101.  printf( "L : aktuelle Zeile zeigen\n" );
  102.  printf( "N : Name erfragen, variable anzeigen\n" );
  103.  printf( "S : Variable auf Wert setzen\n" );
  104.  printf( "V : Variablen mit Name und Wert anzeigen\n" );
  105. }
  106. /**********************************************************/
  107. /*                   Ende von ITRACER                     */                                   */
  108.