|
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