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 | with Ada.Strings.UTF_Encoding.Wide_Wide_Strings; use Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
with TextArrays;
with TextKonstanten;
with VerzeichnisKonstanten;
with EinlesenAllgemeinesLogik;
package body EinlesenSpracheLogik is
function EinlesenSprache
return Boolean
is begin
TextArrays.SprachenEinlesen := (others => TextKonstanten.LeerUnboundedString);
Start_Search (Search => Suche,
Directory => VerzeichnisKonstanten.Sprachen,
Pattern => "",
Filter => (Directory => True,
others => False));
VerzeichnisAußenSchleife:
while More_Entries (Search => Suche) = True loop
Get_Next_Entry (Search => Suche,
Directory_Entry => Verzeichnis);
if
EinlesenAllgemeinesLogik.VerboteneVerzeichnissnamen (NameExtern => Simple_Name (Directory_Entry => Verzeichnis)) = True
then
null;
elsif
-- Das hier noch durch eine Windows uns eine Linuxversion ersetzen. äöü
-- Kann das nicht einfach raus wenn irgendwann einmal Wide_Wide_Directories da ist? äöü
-- Das ist je nur vorhandene Ordner durchgehen und man kann ja keine Dateien/Ordner anlegen die das Dateisystem nicht unterstützen. äöü
EinlesenAllgemeinesLogik.NamensprüfungWindows (NameExtern => Decode (Item => Simple_Name (Directory_Entry => Verzeichnis))) = False
then
null;
elsif
-- Das ausgeklammerte funktioniert unter Windwos nicht, wenn man Sonderzeichen verwendet.
-- EinlesenAllgemeinesLogik.LeeresVerzeichnis (VerzeichnisExtern => VerzeichnisKonstanten.SprachenStrich & Simple_Name (Directory_Entry => Verzeichnis)) = True
Exists (Name => VerzeichnisKonstanten.SprachenStrich & Simple_Name (Directory_Entry => Verzeichnis) & VerzeichnisKonstanten.NullDatei) = False
then
null;
else
Test := To_Unbounded_Wide_Wide_String (Source => Decode (Item => Simple_Name (Directory_Entry => Verzeichnis)));
VerzeichnisInnenSchleife:
for SpracheSchleifenwert in TextArrays.SprachenEinlesen'Range loop
if
TextArrays.SprachenEinlesen (SpracheSchleifenwert) /= TextKonstanten.LeerUnboundedString
then
null;
else
TextArrays.SprachenEinlesen (SpracheSchleifenwert) := Test;
exit VerzeichnisInnenSchleife;
end if;
end loop VerzeichnisInnenSchleife;
end if;
end loop VerzeichnisAußenSchleife;
if
TextArrays.SprachenEinlesen (1) = TextKonstanten.LeerUnboundedString
then
return False;
else
SprachenSortieren;
return True;
end if;
end EinlesenSprache;
procedure SprachenSortieren
is begin
SortierSchleife:
for PositionSchleifenwert in TextArrays.SprachenEinlesen'First + 1 .. TextArrays.SprachenEinlesen'Last loop
if
TextArrays.SprachenEinlesen (PositionSchleifenwert) = TextKonstanten.LeerUnboundedString
then
exit SortierSchleife;
else
SchleifenAbzug := 0;
PrüfSchleife:
loop
if
PositionSchleifenwert - SchleifenAbzug > TextArrays.SprachenEinlesen'First
and then
TextArrays.SprachenEinlesen (PositionSchleifenwert) < TextArrays.SprachenEinlesen (PositionSchleifenwert - SchleifenAbzug - 1)
then
SchleifenAbzug := SchleifenAbzug + 1;
else
if
PositionSchleifenwert = SchleifenAbzug
then
SchleifenAbzug := SchleifenAbzug - 1;
else
null;
end if;
VerschiebungSchleife:
while SchleifenAbzug > 0 loop
ZwischenSpeicher := TextArrays.SprachenEinlesen (PositionSchleifenwert);
TextArrays.SprachenEinlesen (PositionSchleifenwert) := TextArrays.SprachenEinlesen (PositionSchleifenwert - SchleifenAbzug);
TextArrays.SprachenEinlesen (PositionSchleifenwert - SchleifenAbzug) := ZwischenSpeicher;
SchleifenAbzug := SchleifenAbzug - 1;
end loop VerschiebungSchleife;
exit PrüfSchleife;
end if;
end loop PrüfSchleife;
end if;
end loop SortierSchleife;
end SprachenSortieren;
end EinlesenSpracheLogik;
|