mxInterpreter.c


/* mxInterpreter.c */

#include "mxInterpreter.h"
#include "mxLED.h"
#include "mxStrukturen.h"
#include "mxSystemAufruf.h"
#include "mxBenutzer.h"
#include "mxLib.h"


/***************
** Funktionen **
***************/

void SchreibStatus(tProzessStatus Status)
/*
 * Gibt den uebergebenen Prozessstatus als String aus
 */
{
  switch (Status) {
  case eFrei:
    printf("Frei");
    break;

  case eExistent:
    printf("Existent");
    break;

  case eBereit:
    printf("Bereit");
    break;

  case eLaufend:
    printf("Laufend" );
    break;

  case eTerminiert:
    printf("Terminiert");
    break;
  }
} /* SchreibStatus */

/* -------------------------------------------------------------------------------------------------------------------- */

void ProzessStatus(void)
/*
 * Behandelt die Eingabe des "P"rozessstatus-Kommandos:
 * gibt Informationen zu allen verwendeten Prozessnummern aus
 */
{
  tInformationsFeld Infos;                                              /* Informationen zu allen Prozessen             */
  tProzessNummer i;                                                     /* Schleifenzaehler                             */

  sys_ProzessInformationen(&Infos);                                     /* Prozessinformationen holen                   */
  printf("In MinMax existieren folgende Prozesse:\n");
  for (i = 0; i < cMaximaleProzessAnzahl; i++) {
    if (Infos[i].Status != eFrei) {                                     /* nur wenn Prozessnummer verwendet wird, Info  */
                                                                        /* ausgeben                                     */
      printf("Prozess %2d (%s) mit Status ", i, Infos[i].Name);
      SchreibStatus(Infos[i].Status);
      if (Infos[i].AmTerminieren) {
	printf("; am Terminieren");
      }
      if (Infos[i].Abgeschossen) {
	printf("; abgeschossen");
      }
      if (Infos[i].ImKern) {
	printf("; im Kern");
      }
      printf("\n");
    }
  }
} /* ProzessStatus */

/* -------------------------------------------------------------------------------------------------------------------- */

void Hilfe(void)
/*
 * Behandelt das "H"ilfe-Kommando:
 * gibt eine kurze Information ueber die verfuegbaren Kommandos aus
 */
{
  printf("Verfuegbare Kommandos:\n");
  printf("  H bzw. ?    - gibt diese Information aus\n");
  printf("  A           - startet bzw. terminiert ProzessA\n");
  printf("  B           - startet bzw. terminiert ProzessB\n");
  printf("  C           - startet bzw. terminiert ProzessC\n");
  printf("  P           - gibt alle Prozesse aus\n");
  printf("  J           - gibt die Anzahl der Sekunden seit Systemstart aus\n");
  printf("  E           - beendet den Kommandointerpreter\n");
} /* Hilfe */

/* -------------------------------------------------------------------------------------------------------------------- */

void ProzessBehandlung(char Welcher)
{
  int               id;
  tInformationsFeld Infos;                                              /* Informationen zu allen Prozessen             */
  tProzessNummer    ProzessNummer;
  int               Starten;
  char              P[] = "x";                                          /* Prozessname (x ist Platzhalter)              */

  P[0] = Welcher & ~('a' - 'A');                                        /* Gross-/Kleinschreibung egal                  */
  Starten = 1;
  sys_ProzessInformationen(&Infos);
  for (id=0; id<cMaximaleProzessAnzahl; id++) {                         /* laeuft der Prozess schon?                    */
    if (Infos[id].Status != eFrei && !strcmp(Infos[id].Name, P)) {
      Starten = 0;                                                      /*   ja, wird terminiert statt gestartet!       */
      break;
    }
  }

  if (Starten) {
    ProzessNummer = sys_StarteProzess(P, "");
    if (ProzessNummer == 0) {                                           /* geklappt ?                                   */
      printf("Prozess konnte nicht gestartet werden\n");      		/* nein -> Fehler ausgeben                      */
    }
  } else {
    sys_TerminiereProzess(id);                                          /* Prozess terminieren                          */
  }
} /* ProzessBehandlung */

/* -------------------------------------------------------------------------------------------------------------------- */


void Interpreter(int argc, char *argv[])
{
  int            Ende = FALSE;                                          /* Ende des Kommandointerpreters                */
  char           ch;                                                    /* Benutzereingaben                             */
  tSystemStatus  status;                                                /* fuer sys_SystemStatus()                      */

  do {
    printf("$ ");                                                       /* "Prompt" ausgeben                            */
    ch = sys_LiesZeichen();                                             /* Benutzereingaben lesen                       */

    printf("%c\n", ch);
    switch (ch) {                                                       /* Kommando auswerten                           */
    case 'P':
    case 'p':
      ProzessStatus();
      break;

    case 'A':
    case 'B':
    case 'C':
    case 'a':
    case 'b':
    case 'c':
      ProzessBehandlung( ch );
      break;

    case 'H':
    case 'h':
    case '?':
      Hilfe();
      break;

    case 'E':
    case 'e':
      Ende = TRUE;
      break;

    case 'J':
    case 'j':
      sys_SystemStatus(&status);
      printf("Jiffies: %u\n", status.uptime);
      break;

    case cNUL:
      break;

    default:
      printf("unbekanntes Kommando: `%c'\n", ch);
    }
  } while (!(Ende));
} /* Interpreter */




Bei Problemen mit der Seite bitte eine Mail an Marek
Converted with C2HTML V0.669 by Iluvatar
Prozeßdatenverarbeitung