mxFenster.h


/*
 * mxFenster.h
 *
 * ====================================================================================================================
 * Das Modul stellt Prozeduren zur Unterteilung des Bildschirms in
 * unabhaenige Abschnitte (Fenster) zur Verfuegung.
 * ACHTUNG: gehoert *nicht* zum initialen MinMax, erst ab Aufgabe 3 noetig!
 * ====================================================================================================================
 */

#ifndef __mxFenster__
#define __mxFenster__

#include "mxStrukturen.h"
#include "mxEingabePuffer.h"

/* -------------------------------------------------------------------------------------------------------------------- */
/************
** Defines **
************/
#define cFensterAnzahl      4                                           /* Mindestens 4, mehr nach Wahl                 */

#define cBildschirmBreite 120
#define cBildschirmHoehe   60

/* -------------------------------------------------------------------------------------------------------------------- */
/***************
** Strukturen **
***************/
typedef struct {                                                        /* Informationen ueber ein Fenster              */
                                                                        /* linke obere Ecke des Bildschirms hat die     */
                                                                        /* Koordinaten (1,1)                            */
  tProzessNummer Besitzer;                                              /* Welchem Prozess gehoert das Fenster gerade   */
  tSemaphor      Zuteilung;                                             /* Semaphor zum gegenseitigen Ausschluss        */
  int            Breite;                                                /* Fensterbreite                                */
  int            Hoehe;                                                 /* Fensterhoehe                                 */
  int            AnfangX;                                               /* erste Bildschirmspalte des Fensters*         */
  int            EndeX;                                                 /* letzte Bildschirmspalte des Fensters*        */
  int            AnfangY;                                               /* erste Bildschirmzeile des Fensters           */
  int            EndeY;                                                 /* letzte Bildschirmzeile des Fensters          */
  int            X,Y;                                                   /* Cursorposition im Fenster, links oben=(1,1)  */
  tEingabePuffer Puffer;                                                /* Eingabepuffer fuer dieses Fenster            */
} tFenster;

/*
 * *ACHTUNG: Nebeneinanderliegende Fenster werden von den vorgegebenen Hilfsprozeduren nicht vollstaendig
 *           unterstuetzt. Dazu muesste auf die Verwendung von ScrollRegions verzichtet werden!
 */


/* -------------------------------------------------------------------------------------------------------------------- */
/**********************
** Globale Variablen **
**********************/
extern tFenster       FensterTabelle[cFensterAnzahl];                   /* Tabelle, in der die Daten aller Fenster      */
                                                                        /* verwaltet werden                             */
extern tFensterNummer EingabeFokus;                                     /* Fenster, in dem aktuell die Eingaben landen  */

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

tFensterNummer FensterOeffnen( tFensterNummer Fenster );
/* Reserviert dem Aufrufer das gewuenschte Fenster. Ist das Fenster
 * gerade von einem anderen Prozess belegt, wird der Aufrufer
 * blockiert, bis es wieder frei ist. Es wird auch sein aktives Fenster.
 * Bei Aufruf mit cKeinFenster reserviert FensterOeffnen das naechste
 * freie Fenster oder gibt ohne Blockieren cKeinFenster zurueck, wenn alle belegt sind.
 * Nach erfolgter Reservierung wird stets die reservierte Fensternummer zurueckgegeben.
 */

void FensterSchliessen( tFensterNummer Fenster );
/* Gibt ein vorher mit <FensterOeffnen> reserviertes Fenster wieder frei.
 */

void FensterWechseln( tFensterNummer Fenster );
/* Mit FensterWechseln gibt ein Prozess an, welches der von ihm reservierten
 * Fenster er als naechstes benutzen will.
 */

void FensterLesen( char *s, int Wieviel );
/* Eingabe aus einem Fenster
 * Der gelesene String <s> ist nullterminiert. <Wieviel> gibt den Platz
 * in <s> an (einschliesslich \0).
 */

char FensterZeichenLesen( void );
/* Eingabe eines einzelnen Zeichens aus einem Fenster ohne Echo
 * Loest LiesZeichen() als Dienstfunktion zu sys_LiesZeichen ab!
 */

void FensterSchreiben( char *Was, int Wieviel );
/* Ausgabe in das aktuelle Fenster
 * Loest Schreibe() als Dienstfunktion zu printf ab!
 */

void FensterXY( int X, int Y );
/* Positioniert den Cursor innerhalb des aktiven Fensters des aufrufenden Prozesses.
 * X im Bereich 1..Breite, Y im Bereich 1..Hoehe
 */

void FensterFreigeben( tProzessNummer ProzessNummer );
/* Gibt alle Fenster, die der Prozess <ProzessNummer> reserviert, hat frei.
 */

int InitFenster(void);
/* Init fuer das Modul mxFenster
 */

#endif


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