DEFINITION MODULE RESOURCE ;
(*$LargeVars := FALSE *)
(*$LongAlign := TRUE *)
(* - Dateiübergabe per Kommandozeilenparameter *)
(* - Ton bei Fehler *)
IMPORT DosL , ExecL , Windows , GfxMacros ;
IMPORT GraphicsL , Hardware , Detach , LayersL ;
IMPORT IntuiL : IntuitionL , ReqTFileReq ;
IMPORT rt : ReqTools , rts : ReqToolsSupport , String , Heap ;
IMPORT pp : PowerPacker ;
FROM Arts IMPORT kickVersion, thisTask, returnVal, Error ;
FROM Conversions IMPORT ValToStr ;
FROM SYSTEM IMPORT LONGSET, ADR, ADDRESS, CAST, TAG ;
FROM IntuitionD   IMPORT Gadget, GadgetPtr, IntuiText, IntuiTextPtr, ExtNewScreen,
                         Screen, ScreenPtr, DrawInfo, DrawInfoPtr,
                         customScreen, oScanText, Border, BorderPtr,
                         ExtNewWindow, Window, WindowPtr, PropInfo,
                         boolGadget, IntuiMessagePtr, IntuiMessage,
                         PropInfoPtr, propGadget,
                         IDCMPFlagSet, WindowFlagSet,
                         ScreenFlagSet, ScreenFlags,
                         GadgetFlagSet, GadgetFlags,
                         ActivationFlagSet, ActivationFlags,
                         IDCMPFlags, WindowFlags,
                         PropInfoFlagSet, PropInfoFlags, SaTags, WaTags;
FROM ExecD        IMPORT MemReqs, MemReqSet ;
FROM GraphicsD    IMPORT ViewModes, ViewModeSet, RastPortPtr, jam1, Rectangle,
                         RectanglePtr, invalidID, RastPort, UCopListPtr,
                         ViewPortPtr, UCopList, Region, RegionPtr,
                         TextExtent, TextFontPtr, TextAttr, CopListPtr ;
FROM RandomNumber IMPORT Random, PutSeed;
FROM FileSystem   IMPORT Response, File, Lookup, SetPos, ReadByteBlock,
                         WriteByteBlock, WriteBytes, Close;
FROM Windows      IMPORT WinGad, WinGadSet ;
FROM InputEvent   IMPORT Qualifiers, QualifierSet ;
(*----------------------------------------------------------------------------*)
CONST Maxzahl = 300; LMaxzahl = 400 ; GadgetZahl = 15 ;
      (* GadgetIDs *)
      tagEnd = LONGCARD(0) ;
      Esc = 69 ; Return = 68 ;
      CrsrUp = 76 ; CrsrDown = 77 ;
      ProgTitle = "»»» VOK Release 1.0 © 1994 K.A.Richter «««" ;
      ReqTitle = "VOK 1.0 Information" ;
      PrefsDateiName = "VOK1_0.prefs" ;
      Farbe = 0 ; (* Farbregister für Coppereffekt *)
TYPE STRING = ARRAY [0..Maxzahl] OF CHAR;
     LONGSTRING = ARRAY [0..LMaxzahl] OF CHAR ;
     STRPTR = POINTER TO STRING ;
     MenuT = SET OF [0..15] ;
     Unterscheidungstyp = (Fremdwort, Bedeutung);
     VzahlTyp = LONGCARD ;
     Datenblock = RECORD
                   Wort : STRING;
                   Typ : Unterscheidungstyp;
                  END; (* von RECORD *)
     ZeigeraufEintrag = POINTER TO Listeneintrag;
     ZeigeraufBDE = POINTER TO BDListeneintrag;
     Lerntyp = (ungenuegend, mangelhaft, ausreichend, befriedigend, gut, sehrgut) ;
     Listeneintrag  = RECORD
                       Wortdaten : Datenblock;
                       Lernerfolg : Lerntyp;
                       BDListe : ZeigeraufBDE;
                       Letzter, Naechster : ZeigeraufEintrag;
                      END; (* von RECORD *)
     BDListeneintrag  = RECORD
                         Zeiger : ZeigeraufEintrag;
                         Naechster : ZeigeraufBDE;
                        END; (* von RECORD *)
     Liste = ZeigeraufEintrag;
     Antwort = (Weiter, Abbruch, Fehler);
     Suchwahl = (FListe, BListe) ;
     FehlerTyp = (DateizumSchreibenoeffnen, Speichermangel, nichts, nichtda,
                  nixFenster, nixScreen, falschePrefs, ZeigerFehler,
                  Screennichtfrei, keineScreenDaten, Packenfehlgeschlagen,
                  Datenb, regionFehler, Dateigesichert,
                  keinRahmen, unbekannteDatei, PPVersion, Speicherleer,
                  PackenfehlgeschlagenEnde, Dateizukurz,
                  ungScreenModeID, Fontoeffnen, CaseIndex) ;
     AbfrageTyp = (DeutschZufall, DeutschReihenfolge, FremdZufall,
                   FremdReihenfolge, AllesZufall) ;
     TitleT = (Save, Load, Default) ;
     PrefsT = RECORD
               Vokabelverzeichnis           : STRING ;
               BedeutungbeirichtigerAntwort : BOOLEAN ;
               Beep                         : BOOLEAN ;
               Copper                       : BOOLEAN ;
               WB                           : BOOLEAN ;
               KIProzent                    : INTEGER ;
               Detach                       : BOOLEAN ;
               Crunch                       : BOOLEAN ;
               Copyright                    : BOOLEAN ;
              END ;
     PrefsZT = POINTER TO PrefsT ;
     StatistikT = ARRAY [0..5] OF LONGCARD ;
     StatZT = POINTER TO StatistikT ;
     GMPT =
      RECORD
       RahmenPos : INTEGER ;
       xPos, yPos, width, height : INTEGER ;
       GadgetZ : INTEGER ; toggle : BOOLEAN ;
       GadgetParm : ARRAY [0..GadgetZahl] OF Gadget ;
       GadPos     : ARRAY [0..GadgetZahl] OF INTEGER ;
       GadText    : ARRAY [0..GadgetZahl] OF IntuiText ;
       GadHeight, GadWidth, vertGadHeight, vertGadWidth : INTEGER ;
       Menuepunkt : ARRAY [0..GadgetZahl] OF STRING ;
      END ;
     GMPZT = POINTER TO GMPT ;
     tagtype = ARRAY [0..200] OF LONGINT ;
     tagPtrtype = POINTER TO tagtype ;
(*----------------------------------------------------------------------------*)
     Rahmenkoordinaten = ARRAY [0..19] OF INTEGER ;
     RktZT             = POINTER TO Rahmenkoordinaten ;
     CopperlistT       = ARRAY [0..500] OF UCopListPtr ;

CONST MaxLerntyp = Lerntyp{sehrgut} ;
      MinLerntyp = Lerntyp{ungenuegend} ;

(* globale Variablen *)

VAR FWZahl, BDZahl, letzteWahl : VzahlTyp ;
    RequesterTags              : LONGINT ;
    Prefs                      : PrefsT ;
    gesichert                  : BOOLEAN ;
    StatZ                      : StatZT ;
    TaskAddress                : STRING ;
    Color0, Color1             : INTEGER ;
    CopperlistZ1, CopperlistZ2 : CopperlistT ;
    WinZ                       : WindowPtr ;
    CopListZ                   : CopListPtr ;

PROCEDURE DiskFehlermeldung (Fehler : Response) ;

PROCEDURE Fehlermeldung (Fehler : FehlerTyp) ;

PROCEDURE InitScreenParm (VAR ScreenParm : ExtNewScreen ;
                          VAR ScrTitle   : ARRAY OF CHAR ;
                          VAR tagbuf     : tagtype;
                          VAR MyFontZ    : TextFontPtr;
                          VAR MyFontParm : TextAttr) ;

(* Prozedur trägt Werte in ExtNewScreen - Struktur zum öffnen eines Screens ein *)

PROCEDURE InitWindowParm (VAR WindowParm  : ExtNewWindow;
                          VAR WindowTitle : ARRAY OF CHAR ;
                              ScreenZ     : ScreenPtr ;
                          VAR tagbuf      : tagtype;
                              GadgetZahl  : INTEGER) ;

PROCEDURE InitIntuiText (VAR ScrZ : ScreenPtr ;
                         VAR IntuiTextS : IntuiText; x, y: INTEGER ;
                         VAR Text : STRING) ;

PROCEDURE InitEinstellungsMenue (VAR GMParm : GMPT) ;

PROCEDURE InitHauptmenue (VAR GMParm : GMPT) ;

PROCEDURE DisposeRahmen (BorderZ : BorderPtr) ;

PROCEDURE Writevertical (VAR RastPortZ : RastPortPtr ;
                         x, y : INTEGER;
                         Text : STRING) ;

PROCEDURE ClearWindow (VAR WinZ : WindowPtr) ;

PROCEDURE About () ;

PROCEDURE Listeleer (VAR L : Liste) : BOOLEAN ;

PROCEDURE StatWortzahlStr (Statistik   : StatistikT;
                           Lernerfolg  : Lerntyp;
                           VAR Ausgabe : STRING;
                           neat        : BOOLEAN) ;

PROCEDURE Statistikausgeben (Stat : StatistikT) ;

PROCEDURE StatistikinString (VAR Ausgabe : STRING;
                             VAR StatZ   : StatZT) ;

PROCEDURE Init3dRahmen (VAR WinZ    : WindowPtr ;
                        VAR BorderZ : BorderPtr;
                            x1, y1, w, h : INTEGER;
                            positiv, delete : BOOLEAN) : BOOLEAN ;

PROCEDURE InitKnob (VAR WinZ       : WindowPtr ;
                    VAR GadgetS    : Gadget;
                        x, y, w, h : INTEGER;
                        Text       : IntuiTextPtr;
                        toggle     : BOOLEAN ;
                        ID         : INTEGER) ;

PROCEDURE ScreenZeiger (VAR ScrZ : ScreenPtr) ;

PROCEDURE InitSignal (VAR CopperlistZ : CopperlistT ;
                          ScrZ        : ScreenPtr ;
                          type        : BOOLEAN) ;

PROCEDURE SetSignal (VAR Copperlist  : CopperlistT ;
                         ScrZ        : ScreenPtr ;
                         type        : BOOLEAN) ;

PROCEDURE RemoveSignal (ScrZ : ScreenPtr) ;

PROCEDURE CenterGadText (VAR gadText : IntuiText ;
                             gadWidth, gadHeight : INTEGER;
                             ScreenZ : ScreenPtr) ;

PROCEDURE Sicherheitsabfrage (VorText : STRING) : BOOLEAN ;

PROCEDURE KillGadgets (VAR WinZ : WindowPtr ;
                       VAR GadgetParm : ARRAY OF Gadget ;
                           GadgetZahl : INTEGER) ;

PROCEDURE MakeGadgets (VAR WinZ       : WindowPtr ;
                       VAR GadgetParm : ARRAY OF Gadget ;
                       VAR GadPos     : ARRAY OF INTEGER ;
                       VAR GadText    : ARRAY OF IntuiText ;
                           GadgetZahl : INTEGER ;
                       VAR Menuepunkt : ARRAY OF STRING ;
                           toggle     : BOOLEAN) ;

PROCEDURE LongestiTextLength (VAR  Texte : ARRAY OF IntuiText;
                              VAR    Pos : INTEGER) : INTEGER ;

PROCEDURE CreateGadgetMenu (    ScrZ   : ScreenPtr ;
                            VAR GMP    : GMPT             ;
                            VAR Result : MenuT) : INTEGER ;


PROCEDURE FRAC(Zahl : REAL) : REAL;

PROCEDURE Vgl (String1, String2 : ARRAY OF CHAR) : BOOLEAN;

PROCEDURE Recognize (String1, String2 : STRING; Prozent : INTEGER) : BOOLEAN;

PROCEDURE Listeninitialisieren (VAR LF, LD : Liste) : BOOLEAN ;

PROCEDURE WortHochstufen (VAR Wort : ZeigeraufEintrag) ;

PROCEDURE WortAbstufen (VAR Wort : ZeigeraufEintrag) ;

PROCEDURE WortNeueinstufen (VAR Wort : ZeigeraufEintrag) ;

PROCEDURE WortausStatloeschen (VAR Wort : ZeigeraufEintrag) ;

PROCEDURE Worthinzufuegen (VAR L : Liste; Wort : STRING) :
                               ZeigeraufEintrag;

PROCEDURE BDinBDListe (BDListe : ZeigeraufBDE; Bedeutung : STRING) : BOOLEAN;

PROCEDURE BDinBDListeI (BDListe : ZeigeraufBDE;
                        Bedeutung : STRING) : ZeigeraufBDE;

PROCEDURE BDListenEintraghinzufuegen (VAR QuellZeiger : ZeigeraufEintrag;
                                      VAR BDZeiger : ZeigeraufEintrag) : BOOLEAN ;

PROCEDURE Bedeutungzuordnen (VAR L : Liste;
                             VAR Eintrag : ZeigeraufEintrag;
                             Bedeutung : STRING) : BOOLEAN;

PROCEDURE LernerfolgToStr (Lernerfolg : Lerntyp; VAR Ergebnis : STRING) ;

PROCEDURE Lernerfolgausgeben (WinZ : WindowPtr; Lernerfolg : Lerntyp);

PROCEDURE Listewaehlen (Title : ARRAY OF CHAR) : BOOLEAN ;

PROCEDURE Lernerfolgabfragen() : Lerntyp;

PROCEDURE WortundAequivReqausgeben (VAR Zeiger : ZeigeraufEintrag;
                                        VorText : STRING);

PROCEDURE WortundAequivausgeben (WinZ : WindowPtr;
                                 Zeiger : ZeigeraufEintrag;
                                 Breite, Laenge : CARDINAL);

(* ACHTUNG !!! Verwendet globale Variablen Color0, Color1 *)

(* Diese Prozedur gibt ein Wort und seine Bedeutungen aus *)
(* WinZ : Zeiger auf das Fenster, in die die Ausgabe erfolgt *)
(* Zeiger : Zeiger auf das Wort, das ausgegeben werden soll *)
(* Breite : Fensterbreite in Zeichen *)
(* Laenge : FensterLaenge in Zeichen *)

PROCEDURE Wortnummerxholen (L : Liste; Nummer : LONGCARD;
                            Lernerfolg : Lerntyp) :
                            ZeigeraufEintrag;

(* Diese Prozedur zaehlt alle Wörter mit schlechterem Lernerfolg als *)
(* angegeben durch, bis die gewünschte Nummer erreicht ist. *)
(* Dann gibt sie den Zeiger auf das Wort mit der gewünschten Nummer zurück, *)
(* oder NIL, falls alle Wörter bereits einen besseren Lernerfolg als angegeben *)
(* haben. *)

PROCEDURE Wortlisteausgeben (L : Liste; ScreenZ : ScreenPtr) ;

PROCEDURE Listewaehlenundausgeben (    LD, LF : Liste;
                                       ScreenZ : ScreenPtr) ;

(*PROCEDURE LetzterEintrag (L:Liste) : ZeigeraufEintrag ;

BEGIN
 IF (L^.Naechster # NIL)
 THEN
  RETURN LetzterEintrag (L^.Naechster) ;
 ELSE
  RETURN L ;
 END ;
END LetzterEintrag;*)

PROCEDURE FindeWort (L : Liste; Suchwort : STRING) : ZeigeraufEintrag;

PROCEDURE FindeWortI (       L : Liste;
                      Suchwort : STRING;
                       Prozent : LONGINT) : ZeigeraufEintrag;

PROCEDURE Wortsuchen (L1, L2 : Liste; ScreenZ : ScreenPtr) ;

PROCEDURE ZausBDListeloeschen (VAR QuellZ : ZeigeraufBDE;
                                   VerweisZ : ZeigeraufEintrag) ;

PROCEDURE LoescheVerweisaufEintrag (VAR EintragZ : ZeigeraufEintrag);

PROCEDURE WortundVerkettungloeschen (VAR WortZ : ZeigeraufEintrag) ;

(* Diese Prozedur soll aus L1 das übergebene Wort loeschen und sämtliche *)
(* Querverweise von diesem Wort und auf dieses Wort beseitigen *)

PROCEDURE Wortloeschen (VAR L1, L2 : Liste) ;

PROCEDURE Wortaendern (VAR LF, LD : Liste) ;

PROCEDURE Wortlisteloeschen (VAR L : Liste) ;

PROCEDURE NeuesWorteingeben (VAR L1, L2 : Liste;
                                 ScreenZ : ScreenPtr);

(* L1 : in diese Liste wird das neue Wort eingefuegt *)
(* L2 : hier werden die Bedeutungen eingefuegt *)

PROCEDURE ListeauswaehlenundWoertereingeben (VAR LD, LF  : Liste;
                                                 ScreenZ : ScreenPtr) ;

PROCEDURE ListeabxausgebenoB (VAR WinZ : WindowPtr; L : Liste ;
                                  Nr : LONGCARD ;
                                  x, y, width, height : INTEGER) ;

PROCEDURE Zufall (Zahl : LONGCARD) : LONGCARD;

PROCEDURE Lernerfolgzuruecksetzen (VAR L : Liste) ;

PROCEDURE Wortauswaehlenundabfragen (VAR LF, LD      : Liste;
                                         Reihenfolge : AbfrageTyp;
                                         ScreenZ     : ScreenPtr);

PROCEDURE WortTest (LF, LD : Liste; ScreenZ : ScreenPtr) ;

PROCEDURE Dateinamenerfragen (VAR ScreenZ   : ScreenPtr ;
                              VAR Dateiname : STRING;
                                  Title     : TitleT) : BOOLEAN ;

(*PROCEDURE Dateidirektspeichern (VAR ScreenZ : ScreenPtr ;*)

END RESOURCE.
