honki_tonks_zivilisationen_0.5.5305_cfbe2104/src/Logik/Einlesen/Nutzereinstellungeneinlesesystem/EinlesenNutzereinstellungenLogik.adb

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
with Ada.Directories; use Ada.Directories;
with Ada.Strings.UTF_Encoding.Wide_Wide_Strings; use Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
with Ada.Exceptions; use Ada.Exceptions;

with OptionenVariablen;
with VerzeichnisKonstanten;
with SystemRecordKonstanten;

with SchreibeOptionen;

with Fehlermeldungssystem;

-- Beim Record kann ich theoretisch alles beliebig neu ordnen, beim Einlesen/Schreiben muss ich aber immer alles neue an das Ende anhängen!
package body EinlesenNutzereinstellungenLogik is

   procedure Nutzereinstellungen
   is begin
      
      case
        Exists (Name => VerzeichnisKonstanten.Spieleinstellungen)
      is
         when False =>
            OptionenVariablen.StandardNutzereinstellungenLaden;
            return;
            
         when True =>
            Open (File => DateiNutzereinstellungen,
                  Mode => In_File,
                  Name => VerzeichnisKonstanten.Spieleinstellungen,
                  Form => "WCEM=8");
      end case;
      
      case
        NutzereinstellungenDurchgehen (LadenPrüfenExtern => False,
                                       DateiLadenExtern  => DateiNutzereinstellungen)
      is
         when False =>
            OptionenVariablen.StandardNutzereinstellungenLaden;
            
         when True =>
            Nullwert := NutzereinstellungenDurchgehen (LadenPrüfenExtern => True,
                                                       DateiLadenExtern  => DateiNutzereinstellungen);
      end case;

      Close (File => DateiNutzereinstellungen);
      
   exception
      when StandardAdaFehler : others =>
         Fehlermeldungssystem.Logik (FehlermeldungExtern => "EinlesenNutzereinstellungenLogik.Nutzereinstellungen: Konnte nicht geladen werden: " & Decode (Item => Exception_Information (X => StandardAdaFehler)));
         OptionenVariablen.StandardNutzereinstellungenLaden;
         
         case
           Is_Open (File => DateiNutzereinstellungen)
         is
            when True =>
               Close (File => DateiNutzereinstellungen);
               
            when False =>
               null;
         end case;
      
   end Nutzereinstellungen;
   
   
   
   function NutzereinstellungenDurchgehen
     (LadenPrüfenExtern : in Boolean;
      DateiLadenExtern : in File_Type)
      return Boolean
   is begin
      
      if
        LadenPrüfenExtern = False
      then
         case
           End_Of_File (File => DateiLadenExtern)
         is
            when True =>
               return False;
            
            when False =>
               Unbounded_Wide_Wide_String'Read (Stream (File => DateiLadenExtern),
                                                Sprache);
         end case;
      
         case
           End_Of_File (File => DateiLadenExtern)
         is
            when True =>
               AnzahlAutospeichern := SystemRecordKonstanten.StandardNutzereinstellungen.AnzahlAutospeichern;
            
            when False =>
               ZahlenDatentypen.EigenesNatural'Read (Stream (File => DateiLadenExtern),
                                                     AnzahlAutospeichern);
         end case;
      
         case
           End_Of_File (File => DateiLadenExtern)
         is
            when True =>
               RundenAutospeichern := SystemRecordKonstanten.StandardNutzereinstellungen.RundenAutospeichern;
            
            when False =>
               ZahlenDatentypen.EigenesPositive'Read (Stream (File => DateiLadenExtern),
                                                      RundenAutospeichern);
         end case;
         
         case
           End_Of_File (File => DateiLadenExtern)
         is
            when True =>
               Dezimaltrennzeichen := SystemRecordKonstanten.StandardNutzereinstellungen.Dezimaltrennzeichen;
               
            when False =>
               Wide_Wide_Character'Read (Stream (File => DateiLadenExtern),
                                         Dezimaltrennzeichen);
         end case;
         
         case
           End_Of_File (File => DateiLadenExtern)
         is
            when True =>
               SicherheitsfragenAnzeigen := SystemRecordKonstanten.StandardNutzereinstellungen.SicherheitsfragenAnzeigen;
               
            when False =>
               Boolean'Read (Stream (File => DateiLadenExtern),
                             SicherheitsfragenAnzeigen);
         end case;
         
         -- Diese Prüfung muss am Ende aller Einlesefunktionen stehen, um sicher zu sein dass die Datei vollständig eingelesen wurde!
         -- Sollte Probleme mit geänderten Datentypen teilweise vorbeugen.
         return End_Of_File (File => DateiLadenExtern);
      
      else
         SchreibeOptionen.GanzeSpieleinstellungen (EinstellungenExtern => (
                                                                           Sprache                   => Sprache,
                                                                           AnzahlAutospeichern       => AnzahlAutospeichern,
                                                                           RundenAutospeichern       => RundenAutospeichern,
                                                                           Dezimaltrennzeichen       => Dezimaltrennzeichen,
                                                                           SicherheitsfragenAnzeigen => SicherheitsfragenAnzeigen
                                                                          ));
      
         return True;
      end if;
      
   exception
      when StandardAdaFehler : others =>
         Fehlermeldungssystem.Logik (FehlermeldungExtern => "EinlesenNutzereinstellungenLogik.NutzereinstellungenDurchgehen: Konnte nicht geladen werden: "
                                     & Decode (Item => Exception_Information (X => StandardAdaFehler)));
                  
         return False;
         
   end NutzereinstellungenDurchgehen;

end EinlesenNutzereinstellungenLogik;