|
mxSystemAufruf.c |
/* mxSystemAufruf.c */
#include "mxSystemAufruf.h"
#include "mxStrukturen.h"
#include "mxDienstStruk.h"
#include "mxTrap.h"
#include "mxLib.h"
/* -------------------------------------------------------------------------------------------------------------------- */
/***************
** Funktionen **
***************/
int printf(char *format, ...)
{
tSystemAufrufPaket Paket;
char buffer[500]; /* maximale Laenge der printf-Ausgabe! */
int len;
char *src = buffer;
int i;
len = vsnprintf(buffer, sizeof(buffer), format, ((int *) &format) + 1);
while (*src) /* mehrere Systemaufrufe, wenn Ausgabe zu lang! */
{
Paket.Typ = eSchreibString; /* Typ des Aufrufs in das Paket schreiben */
for (i = 0; *src && i < (cStringLaenge - 1); i++, src++) /* String in Paket kopieren */
Paket.Daten.String[i] = *src;
Paket.Daten.String[i] = '\0';
SystemAufruf(&Paket, 4+i+1); /* Systemaufruf-Trap ausloesen */
}
return len;
}
/* -------------------------------------------------------------------------------------------------------------------- */
tProzessNummer sys_StarteProzess(char *Name, char *ArgZeile)
{
tSystemAufrufPaket Paket;
Paket.Typ = eStarteProzess; /* Typ des Aufrufs in das Paket schreiben */
strncpy(Paket.Daten.Start.Name, Name, cDateiNameLaenge);
Paket.Daten.Start.Name[cDateiNameLaenge] = 0;
if (!ArgZeile) ArgZeile = "";
strncpy(Paket.Daten.Start.ArgZeile, ArgZeile, cStringLaenge);
Paket.Daten.Start.ArgZeile[cStringLaenge] = 0;
SystemAufruf(&Paket, 4+sizeof(Paket.Daten.Start)); /* Systemaufruf-Trap ausloesen */
return Paket.Daten.Prozess;
} /* StarteProzess */
/* -------------------------------------------------------------------------------------------------------------------- */
void sys_TerminiereProzess(tProzessNummer ProzessNummer)
{
tSystemAufrufPaket Paket;
Paket.Typ = eTerminiereProzess; /* Typ des Aufrufs in das Paket schreiben */
Paket.Daten.Prozess = ProzessNummer;
SystemAufruf(&Paket, 4+sizeof(Paket.Daten.Prozess)); /* Systemaufruf-Trap ausloesen */
} /* TerminiereProzess */
/* -------------------------------------------------------------------------------------------------------------------- */
void sys_ProzessInformationen(tInformationsFeld *Infos)
{
tSystemAufrufPaket Paket;
Paket.Typ = eProzessInformationen; /* Typ des Aufrufs in das Paket schreiben */
SystemAufruf(&Paket, 4+sizeof(Paket.Daten.Infos)); /* Systemaufruf-Trap ausloesen */
memcpy(Infos, &(Paket.Daten.Infos), sizeof(tInformationsFeld)); /* Ist erlaubt weil keine Pointer in der */
/* Struktur enthalten sind */
} /* ProzessInformationen */
/* -------------------------------------------------------------------------------------------------------------------- */
char sys_LiesZeichen(void)
{
tSystemAufrufPaket Paket;
Paket.Typ = eLiesZeichen; /* Typ des Aufrufs in das Paket schreiben */
SystemAufruf(&Paket, 4+sizeof(Paket.Daten.Zeichen)); /* Systemaufruf-Trap ausloesen */
return Paket.Daten.Zeichen; /* gelesenes Zeichen aus Paket holen */
} /* LiesZeichen */
/* -------------------------------------------------------------------------------------------------------------------- */
void sys_Terminiere(void)
{
tSystemAufrufPaket Paket;
Paket.Typ = eTerminiere; /* Typ des Aufrufs in das Paket schreiben */
SystemAufruf(&Paket, 4); /* Systemaufruf-Trap ausloesen */
} /* Terminiere */
/* -------------------------------------------------------------------------------------------------------------------- */
void sys_SystemStatus(tSystemStatus *Status)
{
tSystemAufrufPaket Paket;
Paket.Typ = eLiesSystemStatus; /* Typ des Aufrufs in das Paket schreiben */
SystemAufruf(&Paket, 4+sizeof(Paket.Daten.Status)); /* Systemaufruf-Trap ausloesen */
/* 96 Bytes Raum fuer eigene Erweiterungen! */
memcpy(Status, &(Paket.Daten.Status), sizeof(tSystemStatus)); /* Ist erlaubt weil keine Pointer in der */
/* Struktur enthalten sind */
} /* SystemStatus */
/* -------------------------------------------------------------------------------------------------------------------- */
void sys_Setze7Segment(int Zahl, int Stellen)
{
tSystemAufrufPaket Paket;
Paket.Typ = eSetze7Segment; /* Typ des Aufrufs in das Paket schreiben */
Paket.Daten.LED.Zahl = Zahl;
Paket.Daten.LED.Stellen = Stellen;
SystemAufruf(&Paket, 4+sizeof(Paket.Daten.LED)); /* Systemaufruf-Trap ausloesen */
} /* Setze7Segment */
/* -------------------------------------------------------------------------------------------------------------------- */
int InitSystemAufruf(void)
{
return TRUE;
}
Bei Problemen mit der Seite bitte eine Mail an Marek
Converted with C2HTML V0.669 by Iluvatar
Prozeßdatenverarbeitung