|
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