mxDatei.h


/*
 * mxDatei.h
 *
 * ====================================================================================================================
 * Das Modul mxDatei ermoeglicht es, die Benutzerprozesse als externe Bestandteile von MinMax
 * erst zur Laufzeit des Betriebssystems aus einem "Dateisystem" zu laden.
 * ACHTUNG: gehoert *nicht* zum initialen MinMax, erst ab Aufgabe 5 noetig!
 * ====================================================================================================================
 */

#ifndef __mxDatei__
#define __mxDatei__


#include "mxStrukturen.h"

/***************
** defines    **
***************/
#define cMaxDateiAnzahl   20
#define cFuellZeichen     0

#define cProgrammFix      1
#define cKonstantenFix    2
#define cDatenFix         3


/***************
** Typen      **
***************/
typedef struct {                                                        /* Typ für LiesVerzeichnis()                    */
  long       Anzahl;                                                    /* KEINE Verwendung innerhalb des Dateisystems! */
  tDateiName Namen[cMaxDateiAnzahl];
} tNamenVerzeichnis;


typedef struct {                                                        /* Programm-Vorspann in der Ramdisk             */
  unsigned long ProgrammGroesse;                                        /* Groesse des Programms                        */
  unsigned long KonstantenGroesse;                                      /* Groesse des Konstantenbereichs               */
  unsigned long DatenGroesse;                                           /* Groesse des benoetigten Datensegments        */
  unsigned long StackGroesse;                                           /* Groesse des benoetigten Stacksegments        */
  unsigned long FixupAnzahl;                                            /* Anzahl der Stellen an denen im Programm      */
} tProgrammInfo;                                                        /* Adressumsetzung gemacht werden muss          */


typedef struct {                                                        /* ein Eintrag in der Fixup-Tabelle             */
  unsigned long Wohin;                                                  /* in welches Segment geht dieser Zugriff       */
  unsigned long Wo;                                                     /* in welchem Segment steht dieser Zugriff      */
  unsigned long Offset;                                                 /* wo im Wo-Segment muss die Umsetzung erfolgen */
} tFixup;


typedef struct {                                                        /* Eintrag im Dateiverzeichnis                  */
  tDateiName Name;                                                      /* Dateiname, mit cFuellZeichen aufgefuellt     */
  unsigned long Offset;                                                 /* Offset im Speicherbereich des Datei-         */
                                                                        /* systems an der einer Datei beginnt           */
} tVerzeichnisEintrag;

typedef tVerzeichnisEintrag tVerzeichnis[cMaxDateiAnzahl+1];            /* Dateiverzeichnis                             */

/* -------------------------------------------------------------------------------------------------------------------- */
/***************
** Prototypen **
***************/

int SucheDatei(char *DateiName);
/* Sucht im Dateisystem nach einem Programm mit dem Namen <Dateiname> und
 * gibt seine Kennung zurueck. Falls kein Programm mit dem Namen existiert,
 * wird -1 zurueckgegeben.
 */

void LiesVerzeichnis(tNamenVerzeichnis *Verzeichnis);
/* Gibt die Namen aller im Dateisystem vorhandener Programme zurueck
 */

void LiesProgrammInfo(int DateiKennung, tProgrammInfo *Info);
/* Liest den Infoblock einer Datei aus
 */

void LiesProgramm(int DateiKennung, void* Wohin);
/* Liest das Programm aus einer Datei in das Speicherstueck dessen
 * Anfangsadresse in <Wohin> uebergeben wird
 */

void LiesKonstanten(int DateiKennung, void* Wohin);
/* Liest den Konstantenbereich aus einer Datei in das Speicherstueck,
 * dessen Anfangsadresse in <Wohin> uebergeben wird
 */

void LiesFixup(int DateiKennung, int Index, tFixup *Fixup);
/* Liest das <Index>-te Fixup aus einer Datei (Beginn bei 0)
 */

int InitDatei(void);
/* Init für das Modul Datei
 */

#endif


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