Skip to content

Commit 599692a

Browse files
authored
Merge pull request #120 from DDP-Projekt/network
Duden/Netzwerk
2 parents 129fa83 + 4b82b3e commit 599692a

File tree

20 files changed

+678
-11
lines changed

20 files changed

+678
-11
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/build
2-
/llvm_build
2+
/llvm_build*
33
.idea
44
*.exe
55
/.vscode/*.log

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ Der Changelog von DDP. Sortiert nach Release.
1111

1212
## In Entwicklung
1313

14+
- [Fix] Duden/Uri parset nun absolute Uris der Form /pfad?query korrekt
15+
- [Neu] Duden/Netzwerk stellt Typen und Funktionen für (low-level) TCP und UDP Kommunikation zur Verfügung.
16+
- [Fix] Konstanten können nun nicht mehr in Zuweisungen oder als Referenzen verwendet werden
1417
- [Neu] Numerische Datentypen werden in Zuweisungen jetzt automatisch in einander umgewandelt
1518
- [Neu] Es gibt jetzt den Byte Datentyp, der eine natürliche Zahl im Bereich 0 bis einschließlich 255 darstellt
1619
- [Neu] Typanpassende Ausdrücke können nun als Referenzen übergeben werden, solange sie nur Typaliase bzw. Typdefinitionen behandeln

cmd/internal/linker/link.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"path/filepath"
7+
"runtime"
78
"strings"
89

910
"github.com/DDP-Projekt/Kompilierer/cmd/internal/gcc"
@@ -138,6 +139,9 @@ func LinkDDPFiles(options Options) ([]byte, error) {
138139
args = append(args, "-llzma")
139140
args = append(args, "-lbz2")
140141
args = append(args, "-llz4")
142+
if runtime.GOOS == "windows" {
143+
args = append(args, "-lws2_32")
144+
}
141145

142146
// add additional gcc-flags such as other needed libraries
143147
if options.GCCFlags != "" {

lib/runtime/include/DDP/ddpwindows.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010

1111
#define NOMINMAX
1212
#define WIN32_LEAN_AND_MEAN
13+
14+
#ifndef WINVER
15+
#define WINVER 0x0A00
16+
#endif // WINVER
17+
18+
#ifndef _WIN32_WINNT
19+
#define _WIN32_WINNT 0x0A00
20+
#endif // _WIN32_WINNT
21+
1322
#include <Windows.h>
1423

1524
#endif // DDPOS_WINDOWS

lib/stdlib/Duden/C.ddp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
[ Repräsentiert einen C-Zeiger (void*) ]
77
Wir definieren einen Zeiger öffentlich als eine Zahl.
8+
[ Repräsentiert einen int ]
9+
Wir definieren einen C_int oeffentlich als einen Buchstaben.
810

911
Die öffentliche Funktion C_Null gibt einen Zeiger zurück, macht:
1012
Gib 0 als Zeiger zurück.
@@ -46,3 +48,10 @@ Die öffentliche Funktion Erstelle_Byte_Puffer mit dem Parameter n vom Typ Zahl,
4648
ist in "libddpstdlib.a" definiert
4749
Und kann so benutzt werden:
4850
"ein neuer Puffer der Länge <n>"
51+
52+
[ close(int fd) ]
53+
Die oeffentliche Funktion close mit dem Parameter fd vom Typ C_int, gibt nichts zurück,
54+
ist in "libddpstdlib.a" definiert
55+
und kann so benutzt werden:
56+
"Schließe <fd>",
57+
"schließe <fd>"

lib/stdlib/Duden/Listen.ddp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ ist in "libddpstdlib.a" definiert
1414
Und kann so benutzt werden:
1515
"efficient_list_append <list> <elem> <v>"
1616

17+
[Hilfsfunktion für Hinzufügen_X]
18+
Die generische Funktion efficient_list_append_list mit den Parametern list, other und v vom Typ T Listen Referenz, T Listen Referenz und Variablen Referenz, gibt nichts zurück,
19+
ist in "libddpstdlib.a" definiert
20+
Und kann so benutzt werden:
21+
"efficient_list_append_list <list> <other> <v>"
22+
1723
[
1824
Fügt ein Element ans Ende der gegeben Liste an.
1925
]
@@ -24,6 +30,16 @@ Und kann so benutzt werden:
2430
"Füge <elm> an <liste> an",
2531
"füge <elm> an <liste> an"
2632

33+
[
34+
Fügt eine Liste ans Ende der gegeben Liste an.
35+
]
36+
Die öffentliche generische Funktion Hinzufügen_Liste_Liste mit den Parametern liste und other vom Typ T Listen Referenz und T Liste, gibt nichts zurück, macht:
37+
Die Variable v ist der Standardwert von einem T.
38+
efficient_list_append_list liste other v.
39+
Und kann so benutzt werden:
40+
"Füge <other> an <liste> an",
41+
"füge <other> an <liste> an"
42+
2743
Die generische Funktion efficient_list_insert mit den Parametern list, index, elem und v vom Typ T Listen Referenz, Zahl, T Referenz und Variablen Referenz, gibt nichts zurück,
2844
ist in "libddpstdlib.a" definiert
2945
Und kann so benutzt werden:
@@ -59,6 +75,11 @@ ist in "libddpstdlib.a" definiert
5975
Und kann so benutzt werden:
6076
"efficient_list_prepend <liste> <elem> <v>"
6177

78+
Die generische Funktion efficient_list_prepend_list mit den Parametern liste, other und v vom Typ T Listen Referenz, T Listen Referenz und Variablen Referenz, gibt nichts zurück,
79+
ist in "libddpstdlib.a" definiert
80+
Und kann so benutzt werden:
81+
"efficient_list_prepend_list <liste> <other> <v>"
82+
6283
[
6384
Fügt ein Element an Anfang der gegeben Liste an.
6485
Ist der Index invalide wird ein Laufzeitfehler ausgelöst
@@ -70,6 +91,17 @@ Die öffentliche generische Funktion Voranstellen_Liste mit den Parametern liste
7091
Und kann so benutzt werden:
7192
"Stelle <elm> vor <liste>"
7293

94+
[
95+
Fügt eine Liste an Anfang der gegeben Liste an.
96+
Ist der Index invalide wird ein Laufzeitfehler ausgelöst
97+
]
98+
Die öffentliche generische Funktion Voranstellen_Liste_Liste mit den Parametern liste und other vom Typ T Listen Referenz und T Liste, gibt nichts zurück, macht:
99+
[Speichere elm verkettet mit liste in liste.]
100+
Die Variable v ist der Standardwert von einem T.
101+
efficient_list_prepend_list liste other v.
102+
Und kann so benutzt werden:
103+
"Stelle <other> vor <liste>"
104+
73105
Die generische Funktion efficient_list_delete_range mit den Parametern list, start, end und v vom Typ T Listen Referenz, Zahl, Zahl und Variablen Referenz, gibt nichts zurück,
74106
ist in "libddpstdlib.a" definiert
75107
Und kann so benutzt werden:

lib/stdlib/Duden/Netzwerk.ddp

Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
[
2+
Duden/Netzwerk stellt low-level Funktionen zum Arbeiten mit Sockets zur Verfügung.
3+
]
4+
5+
Binde "Duden/C" ein.
6+
Binde "Duden/Fehlerbehandlung" ein.
7+
Binde "Duden/Laufzeit" ein.
8+
Binde "Duden/Texte" ein.
9+
10+
Die Funktion Init_Windows gibt einen Wahrheitswert zurück,
11+
ist in "libddpstdlib.a" definiert
12+
und kann so benutzt werden:
13+
"windows sockets initialisiert wurden"
14+
15+
Der Wahrheitswert windows_initialisiert ist wahr, wenn windows sockets initialisiert wurden.
16+
17+
Wir definieren eine AddressInfo öffentlich als einen Zeiger.
18+
19+
Wir nennen die öffentliche Kombination aus
20+
der Zahl padding1,
21+
der Zahl padding2,
22+
der Zahl padding3,
23+
der Zahl padding4,
24+
der Zahl padding5,
25+
der Zahl padding6,
26+
der Zahl padding7,
27+
der Zahl padding8,
28+
der Zahl padding9,
29+
der Zahl padding10,
30+
der Zahl padding11,
31+
der Zahl padding12,
32+
der Zahl padding13,
33+
der Zahl padding14,
34+
der Zahl padding15,
35+
der Zahl padding16,
36+
dem C_int size,
37+
eine KlientenAddresse,
38+
und erstellen sie so:
39+
"eine leere KlientenAddresse",
40+
"eine ungefüllte KlientenAddresse"
41+
42+
Wir nennen die öffentliche Kombination aus
43+
dem C_int fd,
44+
dem C_int familie,
45+
dem C_int typ,
46+
einen Socket.
47+
48+
[ AF_UNSPEC ]
49+
Der öffentliche C_int IPV4_ODER_IPV6 ist 0 als Buchstabe als C_int.
50+
[ AF_INET ]
51+
Der öffentliche C_int IPV4 ist 2 als Buchstabe als C_int.
52+
[ SOCK_STREAM ]
53+
Der öffentliche C_int TCP ist 1 als Buchstabe als C_int.
54+
[ SOCK_DGRAM ]
55+
Der öffentliche C_int UDP ist 2 als Buchstabe als C_int.
56+
57+
[ AF_INET6 ]
58+
Die öffentliche Funktion AF_IPV6 gibt einen C_int zurück, macht:
59+
Gib (26, falls das Betriebssystem gleich "Windows" ist, ansonsten 10) als Buchstabe als C_int zurück.
60+
Und kann so benutzt werden:
61+
"IPV6"
62+
63+
Die öffentliche Funktion Lade_AddressInfo mit den Parametern familie, typ, name und service vom Typ C_int, C_int, Text und Text, gibt eine AddressInfo zurück,
64+
ist in "libddpstdlib.a" definiert
65+
und kann so benutzt werden:
66+
"die AddressInfo der Familie <familie> vom Typ <typ> für den Namen <name> und den Service <service>" oder
67+
"die <familie> <typ> AddressInfo für den Namen <name> und den Service <service>" oder
68+
"eine AddressInfo der Familie <familie> vom Typ <typ> für den Namen <name> und den Service <service>" oder
69+
"eine <familie> <typ> AddressInfo für den Namen <name> und den Service <service>"
70+
71+
Die öffentliche Funktion freeaddrinfo mit dem Parameter info vom Typ AddressInfo, gibt nichts zurück,
72+
ist in "libddpstdlib.a" definiert
73+
und kann so benutzt werden:
74+
"Befreie <info>"
75+
76+
[
77+
Wandelt die ERSTE addresse in AddrInfo zu einem Text um.
78+
]
79+
Die öffentliche Funktion AddressInfo_zu_Text mit dem Parameter info vom Typ AddressInfo, gibt einen Text zurück,
80+
ist in "libddpstdlib.a" definiert
81+
und überlädt den "als" Operator.
82+
83+
Die öffentliche Funktion Socket_Erstellen mit den Parametern familie und typ vom Typ C_int und C_int, gibt einen Socket zurück,
84+
ist in "libddpstdlib.a" definiert
85+
und kann so benutzt werden:
86+
"ein Socket der Familie <familie> vom Typ <typ>",
87+
"einen Socket der Familie <familie> vom Typ <typ>"
88+
89+
Die öffentliche Funktion Socket_Erstellen_Typ mit dem Parameter typ vom Typ C_int, gibt einen Socket zurück, macht:
90+
Gib einen Socket der Familie IPV4 vom Typ typ zurück.
91+
Und kann so benutzt werden:
92+
"ein <typ> Socket",
93+
"einen <typ> Socket"
94+
95+
Die Funktion Schließe_Socket_Windows mit dem Parameter sock vom Typ Socket, gibt nichts zurück,
96+
ist in "libddpstdlib.a" definiert
97+
und kann so benutzt werden:
98+
"schließe <sock> unter Windows"
99+
100+
Die öffentliche Funktion Schließe_Socket mit dem Parameter sock vom Typ Socket, gibt nichts zurück, macht:
101+
Wenn das Betriebssystem gleich "Windows" ist, schließe sock unter Windows.
102+
Sonst schließe (fd von sock).
103+
Und kann so benutzt werden:
104+
"Schließe <sock>"
105+
106+
Die öffentliche Funktion Socket_Binden mit den Parametern sock und info vom Typ Socket und AddressInfo, gibt nichts zurück,
107+
ist in "libddpstdlib.a" definiert
108+
und kann so benutzt werden:
109+
"Setze <sock> auf <info>"
110+
111+
Die öffentliche Funktion Socket_Binden_Name_Service mit den Parametern sock, name und service vom Typ Socket, Text und Text, gibt nichts zurück, macht:
112+
Die AddressInfo info ist die AddressInfo der Familie (familie von sock) vom Typ (typ von sock) für den Namen name und den Service service.
113+
Setze sock auf info.
114+
Befreie info.
115+
Und kann so benutzt werden:
116+
"Setze <sock> auf <name> <service>"
117+
118+
Die öffentliche Funktion Socket_Binden_Name_Port mit den Parametern sock, name und service vom Typ Socket, Text und Zahl, gibt nichts zurück, macht:
119+
Setze sock auf name (service als Text).
120+
Und kann so benutzt werden:
121+
"Setze <sock> auf <name> <service>"
122+
123+
Die öffentliche Funktion Socket_Verbinden mit den Parametern sock und info vom Typ Socket und AddressInfo, gibt nichts zurück,
124+
ist in "libddpstdlib.a" definiert
125+
und kann so benutzt werden:
126+
"Verbinde <sock> mit <info>"
127+
128+
Die öffentliche Funktion Socket_Verbinden_Name_Service mit den Parametern sock, name und service vom Typ Socket, Text und Text, gibt nichts zurück, macht:
129+
Die AddressInfo info ist die AddressInfo der Familie (familie von sock) vom Typ (typ von sock) für den Namen name und den Service service.
130+
Verbinde sock mit info.
131+
Befreie info.
132+
Und kann so benutzt werden:
133+
"Verbinde <sock> mit <name> <service>"
134+
135+
Die öffentliche Funktion Socket_Verbinden_Name_Port mit den Parametern sock, name und port vom Typ Socket, Text und Zahl, gibt nichts zurück, macht:
136+
Verbinde sock mit name (port als Text).
137+
Und kann so benutzt werden:
138+
"Verbinde <sock> mit <name> <port>"
139+
140+
Die öffentliche Funktion Socket_Zuhoeren mit den Parametern sock und backlog vom Typ Socket und Zahl, gibt nichts zurück,
141+
ist in "libddpstdlib.a" definiert
142+
und kann so benutzt werden:
143+
"Lass <sock> auf maximal <backlog> Verbindungen warten" oder
144+
"Lass <sock> auf maximal <backlog> Verbindung warten"
145+
146+
Die öffentliche Funktion Socket_Verbindung_Annehmen mit den Parametern sock und client vom Typ Socket und KlientenAddresse Referenz, gibt einen Socket zurück,
147+
ist in "libddpstdlib.a" definiert
148+
und kann so benutzt werden:
149+
"die nächste Verbindung von <client> auf <sock>"
150+
151+
Die öffentliche Funktion Socket_Verbindung_Annehmen_Ohne_Klient mit dem Parameter sock vom Typ Socket, gibt einen Socket zurück, macht:
152+
Die KlientenAddresse client ist eine leere KlientenAddresse.
153+
Der Socket verbindung ist die nächste Verbindung von client auf sock.
154+
Gib verbindung zurück.
155+
Und kann so benutzt werden:
156+
"die nächste Verbindung auf <sock>"
157+
158+
Die öffentliche Funktion Socket_Senden mit den Parametern verbindung und daten vom Typ Socket und Byte Listen Referenz, gibt eine Zahl zurück,
159+
ist in "libddpstdlib.a" definiert
160+
und kann so benutzt werden:
161+
"Sende <daten> über <verbindung>" oder
162+
"wie viele Bytes von <daten> über <verbindung> gesendet wurden"
163+
164+
Die öffentliche Funktion Socket_Senden_Wert mit den Parametern verbindung und daten vom Typ Socket und Byte Liste, gibt eine Zahl zurück, macht:
165+
Gib wie viele Bytes von daten über verbindung gesendet wurden zurück.
166+
Und kann so benutzt werden:
167+
"Sende <daten> über <verbindung>" oder
168+
"wie viele Bytes von <daten> über <verbindung> gesendet wurden"
169+
170+
Die öffentliche Funktion Socket_Empfangen mit den Parametern verbindung und max vom Typ Socket und Zahl, gibt eine Byte Liste zurück,
171+
ist in "libddpstdlib.a" definiert
172+
und kann so benutzt werden:
173+
"maximal <max> Bytes aus <verbindung>",
174+
"maximal die nächsten <max> Bytes aus <verbindung>",
175+
"maximal den nächsten <max> Bytes aus <verbindung>"
176+
177+
Die öffentliche Funktion Socket_Senden_An_Klient mit den Parametern verbindung, daten und client vom Typ Socket, Byte Listen Referenz und KlientenAddresse, gibt eine Zahl zurück,
178+
ist in "libddpstdlib.a" definiert
179+
und kann so benutzt werden:
180+
"Sende <daten> über <verbindung> an <client>" oder
181+
"wie viele Bytes von <daten> über <verbindung> an <client> gesendet wurden"
182+
183+
Die öffentliche Funktion Socket_Senden_An mit den Parametern verbindung, daten und info vom Typ Socket, Byte Listen Referenz und AddressInfo, gibt eine Zahl zurück,
184+
ist in "libddpstdlib.a" definiert
185+
und kann so benutzt werden:
186+
"Sende <daten> über <verbindung> an <info>" oder
187+
"wie viele Bytes von <daten> über <verbindung> an <info> gesendet wurden"
188+
189+
Die öffentliche Funktion Socket_Empfangen_Von mit den Parametern verbindung, max und client vom Typ Socket, Zahl und KlientenAddresse Referenz, gibt eine Byte Liste zurück,
190+
ist in "libddpstdlib.a" definiert
191+
und kann so benutzt werden:
192+
"das nächste maximal <max> Bytes große Packet aus <verbindung> von <client>",
193+
"dem nächsten maximal <max> Bytes großen Packet aus <verbindung> von <client>"
194+
195+
Die öffentliche Funktion Socket_Empfangen_Von_Ohne_Klient mit den Parametern verbindung und max vom Typ Socket und Zahl, gibt eine Byte Liste zurück, macht:
196+
Die KlientenAddresse client ist eine leere KlientenAddresse.
197+
Gib das nächste maximal max Bytes große Packet aus verbindung von client zurück.
198+
Und kann so benutzt werden:
199+
"das nächste maximal <max> Bytes große Packet aus <verbindung>",
200+
"dem nächsten maximal <max> Bytes großen Packet aus <verbindung>"
201+
202+
Die öffentliche Funktion Socket_Senden_Text mit den Parametern verbindung und daten vom Typ Socket und Text Referenz, gibt eine Zahl zurück, macht:
203+
Gib wie viele Bytes von (den Bytes von daten) über verbindung gesendet wurden zurück.
204+
Und kann so benutzt werden:
205+
"Sende <daten> über <verbindung>" oder
206+
"wie viele Bytes von <daten> über <verbindung> gesendet wurden"
207+
208+
Die öffentliche Funktion Socket_Senden_Text_Wert mit den Parametern verbindung und daten vom Typ Socket und Text, gibt eine Zahl zurück, macht:
209+
Gib wie viele Bytes von daten über verbindung gesendet wurden zurück.
210+
Und kann so benutzt werden:
211+
"Sende <daten> über <verbindung>" oder
212+
"wie viele Bytes von <daten> über <verbindung> gesendet wurden"
213+
214+
Die öffentliche Funktion Socket_Empfangen_Text mit den Parametern verbindung und max vom Typ Socket und Zahl, gibt einen Text zurück, macht:
215+
Gib die Bytes (maximal max Bytes aus verbindung) als Text zurück.
216+
Und kann so benutzt werden:
217+
"der maximal <max> Bytes lange Text aus <verbindung>",
218+
"der nächste maximal <max> Bytes lange Text aus <verbindung>",
219+
"dem nächste maximal <max> Bytes lange Text aus <verbindung>"
220+
221+
Die öffentliche Funktion Socket_Senden_An_Klient_Text mit den Parametern verbindung, daten und client vom Typ Socket, Text Referenz und KlientenAddresse, gibt eine Zahl zurück, macht:
222+
Gib wie viele Bytes von (den Bytes von daten) über verbindung gesendet wurden zurück.
223+
Und kann so benutzt werden:
224+
"Sende <daten> über <verbindung> an <client>" oder
225+
"wie viele Bytes von <daten> über <verbindung> an <client> gesendet wurden"
226+
227+
Die öffentliche Funktion Socket_Senden_An_Text mit den Parametern verbindung, daten und info vom Typ Socket, Text Referenz und AddressInfo, gibt eine Zahl zurück, macht:
228+
Gib wie viele Bytes von daten über verbindung an info gesendet wurden zurück.
229+
Und kann so benutzt werden:
230+
"Sende <daten> über <verbindung> an <info>" oder
231+
"wie viele Bytes von <daten> über <verbindung> an <info> gesendet wurden"
232+
233+
Die öffentliche Funktion Socket_Empfangen_Von_Text mit den Parametern verbindung, max und client vom Typ Socket, Zahl und KlientenAddresse Referenz, gibt einen Text zurück, macht:
234+
Gib die Bytes (das nächste maximal max Bytes große Packet aus verbindung von client) als Text zurück.
235+
Und kann so benutzt werden:
236+
"der nächste maximal <max> Bytes große Text aus <verbindung> von <client>",
237+
"dem nächsten maximal <max> Bytes großen Text aus <verbindung> von <client>"
238+
239+
Die öffentliche Funktion Socket_Empfangen_Von_Ohne_Klient_Text mit den Parametern verbindung und max vom Typ Socket und Zahl, gibt einen Text zurück, macht:
240+
Die KlientenAddresse client ist eine leere KlientenAddresse.
241+
Gib die Bytes (das nächste maximal max Bytes große Packet aus verbindung von client) als Text zurück.
242+
Und kann so benutzt werden:
243+
"der nächste maximal <max> Bytes große Text aus <verbindung>",
244+
"dem nächsten maximal <max> Bytes großen Text aus <verbindung>"

0 commit comments

Comments
 (0)