/* Client zur Anfrage an den Cookie-Server */

#include <stdio.h>
#include <fcntl.h>

/* Datei mit den Namen der Statusfiles */
#include "filenames.h"

/* Solange warten, bis die Datei WAITING existiert. Dies signalisiert,
   dass der Server Anfragen entgegennehmen kann. WAITING realisiert
   damit den gegenseitigen Ausschluss beim Server */
void WarteBisServerFrei () {
    while (unlink (WAITING) == -1)
	sleep (1);
}

/* Erzeugen der Datei WAITING. Dadurch wird der Server 'frei' und der
   naechste Client kann eine Anfrage starten. */
void GibServerFrei () {
    creat (WAITING, 0666);
}

/* Starten der Anfrage beim Server durch Anlegen des Statusfiles REQUEST
 * */
void ErzeugeRequest () {
    creat (REQUEST, 0666);
}

/* Solange abwarten, bis der Server signalisiert, dass er die Anfrage 
   beantwortet hat, d.h. bis das Statusfile READY exisitiert */
void WarteBisServerFertig () {
    while (unlink (READY) == -1)
	sleep (1);
}

/* Ausgabe der Antwort des Servers aus der Datei RESPONSE auf dem
   Bildschirm */
void ZeigeAntwortAn () {
    FILE *datei;
    char c;

    datei = fopen (RESPONSE, "r");
    while (!feof (datei))
	if ((c = fgetc (datei)) >= ' ')
	    printf ("%c", c);
    printf ("\n");
    fclose (datei);
    unlink (RESPONSE);
}

/* */
void main (int argc, char *argv[]) {
    if (argc > 1)
	chdir (argv[1]);

    WarteBisServerFrei ();
    ErzeugeRequest ();
    WarteBisServerFertig ();
    ZeigeAntwortAn ();
    GibServerFrei ();
}
