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