Index: Daodan/Flatline/build_test.bat
===================================================================
--- Daodan/Flatline/build_test.bat	(revision 457)
+++ Daodan/Flatline/build_test.bat	(revision 457)
@@ -0,0 +1,2 @@
+gcc -O3 -s -Wall -o testserver src/testserver.c src/Flatline.c src/Flatline_Win32.c -lws2_32
+gcc -O3 -s -Wall -o testclient src/testclient.c src/Flatline.c src/Flatline_Win32.c -lws2_32
Index: Daodan/Flatline/build_test.sh
===================================================================
--- Daodan/Flatline/build_test.sh	(revision 457)
+++ Daodan/Flatline/build_test.sh	(revision 457)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo "Coming soon ^_^"
Index: Daodan/Flatline/src/Flatline.c
===================================================================
--- Daodan/Flatline/src/Flatline.c	(revision 457)
+++ Daodan/Flatline/src/Flatline.c	(revision 457)
@@ -0,0 +1,103 @@
+#include "Flatline.h"
+
+bool Net_Listen(uint16_t port, bool (*packet_callback)(char* data, int datalen, int from))
+{
+	int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+	
+	if (sock < 0)
+	{
+		DDrStartupMessage("could not create socket");
+		return false;
+	}
+	
+	sockaddr_in address;
+	memset(&address, 0, sizeof(sockaddr_in));
+	address.sin_family = AF_INET;
+	address.sin_addr.s_addr = htonl(INADDR_ANY);
+	address.sin_port = htons(port);
+	
+	if (bind(sock, (sockaddr*)&address, sizeof(sockaddr_in)) < 0)
+	{
+		DDrStartupMessage("could not bind port %d", port);
+		closesocket(sock);
+		return false;
+	}
+	
+	char data[65537];
+	data[sizeof(data) - 1] = '\0';
+	sockaddr_in from;
+	int recvlen;
+	for (;;)
+	{
+		int fromlen = sizeof(sockaddr_in);
+		memset(&from, 0, sizeof(sockaddr_in));
+		recvlen = recvfrom(sock, data, sizeof(data) - 1, 0, (sockaddr*)&from, (void*)&fromlen);
+		if (!packet_callback(data, recvlen, ntohl(from.sin_addr.s_addr)))
+			break;
+	}
+	closesocket(sock);
+	return true;
+}
+
+int Net_CreateSocket(uint16_t port)
+{
+	int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+	
+	if (sock < 0)
+	{
+		DDrStartupMessage("could not create socket");
+		return -1;
+	}
+	
+	sockaddr_in address;
+	memset(&address, 0, sizeof(sockaddr_in));
+	address.sin_family = AF_INET;
+	address.sin_addr.s_addr = htonl(INADDR_ANY);
+	address.sin_port = htons(port);
+	
+	if (bind(sock, (sockaddr*)&address, sizeof(sockaddr_in)) < 0)
+	{
+		DDrStartupMessage("could not bind port %d", port);
+		return false;
+	}
+	
+	unsigned long nonBlocking = 1;
+	if (ioctlsocket(sock, FIONBIO, &nonBlocking))
+	{
+		DDrStartupMessage("failed to set non-blocking socket");
+		return false;
+	}
+	
+	return sock;
+}
+
+bool Net_Send(int socket, int ip, uint16_t port, char* data, int datalen)
+{
+	sockaddr_in address;
+	memset(&address, 0, sizeof(sockaddr_in));
+	address.sin_family = AF_INET;
+	address.sin_addr.s_addr = ip;
+	address.sin_port = htons(port);
+	
+	return sendto(socket, data, datalen, 0, (sockaddr*)&address, sizeof(address));
+}
+
+void Net_CloseSocket(int sock)
+{
+	closesocket(sock);
+}
+
+bool FLrListen_PacketCallback(char* data, int datalen, int from)
+{
+	static int recieved = 0;
+	
+	data[datalen] = '\0';
+	if (!strcmp(data, "hi"))
+		printf("\r%d packets recieved                                ", ++recieved);
+	return true;
+}
+
+bool FLrListen_Run()
+{
+	return Net_Listen(27777, FLrListen_PacketCallback);
+}
Index: Daodan/Flatline/src/Flatline.h
===================================================================
--- Daodan/Flatline/src/Flatline.h	(revision 457)
+++ Daodan/Flatline/src/Flatline.h	(revision 457)
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <stdlib.h>
+#include <stdio.h>
+#define DDrStartupMessage printf
+
+#include <string.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#ifdef WIN32
+#include <winsock2.h>
+#include "Flatline_Win32.h"
+#else
+#include <sys/ioctl.h> 
+#include <sys/types.h>
+#include <sys/socket.h> 
+#include <unistd.h> 
+#include <stropts.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#define NetPlatform_Initalize() /* */
+#define NetPlatform_Shutdown() /* */
+#define closesocket close
+#define ioctlsocket ioctl
+#endif
+
+typedef struct sockaddr sockaddr;
+typedef struct sockaddr_in sockaddr_in;
+
+bool Net_Listen(uint16_t port, bool (*packet_callback)(char* data, int datalen, int from));
+int Net_CreateSocket(uint16_t port);
+bool Net_Send(int socket, int ip, uint16_t port, char* data, int datalen);
+void Net_CloseSocket(int sock);
+bool FLrListen_PacketCallback(char* data, int datalen, int from);
+bool FLrListen_Run();
Index: Daodan/Flatline/src/Flatline_Win32.c
===================================================================
--- Daodan/Flatline/src/Flatline_Win32.c	(revision 457)
+++ Daodan/Flatline/src/Flatline_Win32.c	(revision 457)
@@ -0,0 +1,20 @@
+#include "Flatline.h"
+
+bool NetPlatform_Initalize()
+{
+	WSADATA wsaData;
+	
+	if (WSAStartup(MAKEWORD(2, 2), &wsaData))
+	{
+		DDrStartupMessage("WSA initalization failed");
+		return false;
+	}
+	DDrStartupMessage("net started using WSA version %d.%d", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
+	return true;
+}
+
+bool NetPlatform_Shutdown()
+{
+	WSACleanup();
+	return true;
+}
Index: Daodan/Flatline/src/Flatline_Win32.h
===================================================================
--- Daodan/Flatline/src/Flatline_Win32.h	(revision 457)
+++ Daodan/Flatline/src/Flatline_Win32.h	(revision 457)
@@ -0,0 +1,4 @@
+#pragma once
+
+bool NetPlatform_Initalize();
+bool NetPlatform_Shutdown();
Index: Daodan/Flatline/src/testclient.c
===================================================================
--- Daodan/Flatline/src/testclient.c	(revision 457)
+++ Daodan/Flatline/src/testclient.c	(revision 457)
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include "Flatline.h"
+
+int main()
+{
+	NetPlatform_Initalize();
+	int sock = Net_CreateSocket(0);
+	puts("Sending 100 two byte packets . . .");
+	
+	int i;
+	for (i = 0; i < 100; i ++)
+	{
+		if (Net_Send(sock, inet_addr("127.0.0.1"), 27777, "hi", 3))
+			putchar('*');
+		else
+			putchar('x');
+	}
+	Net_CloseSocket(sock);
+	NetPlatform_Shutdown();
+	return 0;
+}
Index: Daodan/Flatline/src/testserver.c
===================================================================
--- Daodan/Flatline/src/testserver.c	(revision 457)
+++ Daodan/Flatline/src/testserver.c	(revision 457)
@@ -0,0 +1,10 @@
+#include "Flatline.h"
+
+int main()
+{
+	NetPlatform_Initalize();
+	FLrListen_Run();
+	NetPlatform_Shutdown();
+	return 0;
+}
+// 27777 and neighbouring ports are unassigned
Index: Daodan/build_inifile.bat
===================================================================
--- Daodan/build_inifile.bat	(revision 457)
+++ Daodan/build_inifile.bat	(revision 457)
@@ -0,0 +1,1 @@
+gcc -O3 -s -Wall src/inifile_reader.c src/inifile_test.c -o obj/inifile_test
Index: Daodan/inifile.bat
===================================================================
--- Daodan/inifile.bat	(revision 456)
+++ 	(revision )
@@ -1,1 +1,0 @@
-gcc -O3 -s -Wall src/inifile_reader.c src/inifile_test.c -o obj/inifile_test
