(*--------------------------------------------------------------------------
 :Program.    ErgebnisInOut.mod
 :Author.     Marcus Stratmann
 :Address.    Böttcherstraße 13, D-4250 Bottrop-Kirchhellen
 :Phone.      02045/5191
 :Copyright.  Public Domain
 :Language.   MODULA-II
 :Translator. M2Amiga v3.3d
 :Imports.    typdefs, IntuiOps, TabellenOps
 :History.    V1.0,  26-Sep-89
 :History.    V1.1,  16-May-90
 :Contents.   Input and output of results
--------------------------------------------------------------------------*)

IMPLEMENTATION MODULE ErgebnisInOut;  (* $S- $R- $V- $F- *)

FROM Conversions IMPORT ValToStr;
FROM Exec        IMPORT GetMsg, ReplyMsg;
FROM IntuiOps    IMPORT Fenster, WriteWin, OeffneFenster, SchliesseFenster,
                        WaehleVerein, WaehleZahl, MyRequest, LoescheFenster,
                        OeffneSpezFenster, WriteZahl, Linie, KeineDaten,
                        MacheTitelzeile;
FROM Intuition   IMPORT IDCMPFlagSet, IDCMPFlags, WindowFlagSet,
                        WindowFlags, WindowToFront, IntuiMessagePtr,
                        GadgetPtr;
FROM Storage     IMPORT ALLOCATE, DEALLOCATE, Available;
FROM Strings     IMPORT Insert, Length, last;
FROM SYSTEM      IMPORT ADR, ADDRESS;
FROM TabellenOps IMPORT DatenAuswertung;
FROM typdefs     IMPORT Daten, Namen, TabellenBerechnet, DatenAusgewertet,
                        DatenGesichert, StatistikBerechnet, AnzMan,
                        TorePunkte;

TYPE
  EintragPtr = POINTER TO FensterEintrag;
  FensterEintrag = RECORD
                     nextWin: EintragPtr;
                     Win: Fenster;
                     Nr: CARDINAL;
                   END;

PROCEDURE ErgebnisEingabe;

  VAR
    textFenster, vereinFenster, torFenster: Fenster;
    out: ARRAY[0..25] OF CHAR;
    RqStr: ARRAY[0..80] OF CHAR;
    err, ok: BOOLEAN;
    Gast, Heim: CARDINAL;
    HeimTor, GastTor, pos: INTEGER;

  BEGIN
    IF AnzMan = 0 THEN
      KeineDaten;
      RETURN;
    END;
    textFenster := OeffneFenster(0, 30, 220, 90, ADR("Ergebniseingabe"));
    IF textFenster = NIL THEN
      RETURN
    END;
    WriteWin(textFenster, 10, 20, "Heimmannschaft?");
    vereinFenster := NIL;
    torFenster := NIL;
    Heim := WaehleVerein(vereinFenster, 230, 12);
    WHILE Heim # 0 DO
      WriteWin(textFenster, 10, 28, Namen[Heim]);
      RqStr := "";
      Insert(RqStr, last, Namen[Heim]);
      Insert(RqStr, last, " - ");
      WriteWin(textFenster, 10, 38, "Gastmannschaft?");
      REPEAT
        Gast := WaehleVerein(vereinFenster, -1, -1);
      UNTIL Gast # Heim;
      SchliesseFenster(vereinFenster);
      IF Gast # 0 THEN
        WriteWin(textFenster, 10, 46, Namen[Gast]);
        Insert(RqStr, last, Namen[Gast]);
        Insert(RqStr, last, " ");
        WriteWin(textFenster, 10, 56, "Tore für Heimmannschaft?");
        HeimTor := WaehleZahl(torFenster, FALSE);
        IF HeimTor # -1 THEN
          ValToStr(HeimTor, FALSE, out, 10, 2, " ", err);
          WriteWin(textFenster, 10, 64, out);
          Insert(RqStr, last, out);
          Insert(RqStr, last, ":");
          WriteWin(textFenster, 10, 74, "Tore für Gastmannschaft?");
          GastTor := WaehleZahl(torFenster, FALSE);
          SchliesseFenster(torFenster);
          IF GastTor # -1 THEN
            ValToStr(GastTor, FALSE, out, 10, 2, " ", err);
            WriteWin(textFenster, 10, 82, out);
            Insert(RqStr, last, out);
          ELSE
            HeimTor := -1;
            pos := Length(RqStr);
            Insert(RqStr, pos - 3, " löschen");
            RqStr[pos+5] := CHR(0);
          END;
        ELSE
          GastTor := -1;
          Insert(RqStr, last, " löschen");
          SchliesseFenster(torFenster);
        END;
        ok := MyRequest(ADR("Stimmt's?"), RqStr, "Richtig", "Nein!", FALSE,
                        TRUE);
        IF ok THEN
          Daten[Heim,0,Gast] := HeimTor;
          Daten[Gast,1,Heim] := GastTor;
          TabellenBerechnet := FALSE;
          DatenAusgewertet := FALSE;
          StatistikBerechnet := FALSE;
          DatenGesichert := FALSE;
          MacheTitelzeile;
        END;
        LoescheFenster(textFenster, 5, 15);
        WriteWin(textFenster, 10, 20, "Heimmannschaft?");
        Heim := WaehleVerein(vereinFenster, 230, 12);
      ELSE  (*  Gast = 0  *)
        Heim := 0;
      END;  (*  IF Gast # 0  *)
    END;  (*  WHILE Heim # 0  *)
    SchliesseFenster(textFenster);
    SchliesseFenster(vereinFenster);
  END ErgebnisEingabe;


PROCEDURE ErgebnisAusgabe;

  VAR
    verein, aktuell, zeile, i: CARDINAL;
    WahlFenster, AusgabeFenster: Fenster;

  BEGIN
    IF AnzMan = 0 THEN
      KeineDaten;
      RETURN;
    END;
    IF NOT DatenAusgewertet THEN
      DatenAuswertung;
    END;
    AusgabeFenster := OeffneSpezFenster(250, 12, 324, 8 * (AnzMan - 1) + 44,
                                        IDCMPFlagSet{}, WindowFlagSet{},
                                        NIL, NIL);
    IF AusgabeFenster = NIL THEN
      RETURN;
    END;
    WahlFenster := NIL;
    verein := WaehleVerein(WahlFenster, 10, 12);
    IF WahlFenster = NIL THEN
      RETURN;
    END;
    WHILE verein # 0 DO
      aktuell := verein;
      WriteWin(AusgabeFenster, 10, 10, Namen[verein]);
      WriteWin(AusgabeFenster, 226, 10, "Heim  Ausw");
      Linie(AusgabeFenster, 10, 13, 304, TRUE);
      zeile := 16;
      FOR i := 1 TO AnzMan DO
        IF i # verein THEN
          INC(zeile, 8);
          WriteWin(AusgabeFenster, 10, zeile, Namen[i]);
          IF Daten[verein,0,i] > -1 THEN
            WriteZahl(AusgabeFenster, Daten[verein,0,i], 3, 218, zeile);
            WriteWin(AusgabeFenster, 242, zeile, ":");
            WriteZahl(AusgabeFenster, Daten[i,1,verein], -3, 250, zeile);
          END;
          IF Daten[i,0,verein] > -1 THEN
            WriteZahl(AusgabeFenster, Daten[verein,1,i], 3, 266, zeile);
            WriteWin(AusgabeFenster, 290, zeile, ":");
            WriteZahl(AusgabeFenster, Daten[i,0,verein], -3, 298, zeile);
          END;
        END;
      END;
      Linie(AusgabeFenster, 10, zeile + 3, 304, TRUE);
      INC(zeile, 12);
      WriteWin(AusgabeFenster, 10, zeile, "Gesamt Tore:");
      WriteZahl(AusgabeFenster, TorePunkte.heim[verein,1], 3, 218, zeile);
      WriteWin(AusgabeFenster, 242, zeile, ":");
      WriteZahl(AusgabeFenster, TorePunkte.heim[verein,2], -2, 250, zeile);
      WriteZahl(AusgabeFenster, TorePunkte.ausw[verein,1], 3, 266, zeile);
      WriteWin(AusgabeFenster, 290, zeile, ":");
      WriteZahl(AusgabeFenster, TorePunkte.ausw[verein,2], -2, 298, zeile);
      INC(zeile, 10);
      WriteWin(AusgabeFenster, 66, zeile, "Punkte:");
      WriteZahl(AusgabeFenster, TorePunkte.heim[verein,3], 3, 218, zeile);
      WriteWin(AusgabeFenster, 242, zeile, ":");
      WriteZahl(AusgabeFenster, TorePunkte.heim[verein,4], -2, 250, zeile);
      WriteZahl(AusgabeFenster, TorePunkte.ausw[verein,3], 3, 266, zeile);
      WriteWin(AusgabeFenster, 290, zeile, ":");
      WriteZahl(AusgabeFenster, TorePunkte.ausw[verein,4], -2, 298, zeile);

      REPEAT
        verein := WaehleVerein(WahlFenster, 0, 0);
      UNTIL verein # aktuell;
      LoescheFenster(AusgabeFenster, 0, 0);
    END;
    SchliesseFenster(WahlFenster);
    SchliesseFenster(AusgabeFenster);
  END ErgebnisAusgabe;


END ErgebnisInOut.
