Ginger Bill 9 years ago
parent
commit
2e506b7e6e
5 changed files with 204 additions and 189 deletions
  1. 5 5
      build.bat
  2. 15 181
      code/demo.odin
  3. 1 1
      code/game.odin
  4. 181 0
      code/http_test.odin
  5. 2 2
      code/punity.odin

+ 5 - 5
build.bat

@@ -4,7 +4,7 @@
 set exe_name=odin.exe
 
 :: Debug = 0, Release = 1
-set release_mode=0
+set release_mode=1
 
 set compiler_flags= -nologo -Oi -TP -W4 -fp:fast -fp:except- -Gm- -MP -FC -GS- -EHsc- -GR-
 
@@ -46,10 +46,10 @@ rem pushd %build_dir%
 	del *.pdb > NUL 2> NUL
 	del *.ilk > NUL 2> NUL
 
-	cl %compiler_settings% "src\main.cpp" ^
-		/link %linker_settings% -OUT:%exe_name% ^
-	&& odin run code/demo.odin
-	rem odin run code/demo.odin
+	rem cl %compiler_settings% "src\main.cpp" ^
+		rem /link %linker_settings% -OUT:%exe_name% ^
+	rem && odin run code/demo.odin
+	odin run code/demo.odin
 
 
 	:do_not_compile_exe

+ 15 - 181
code/demo.odin

@@ -1,5 +1,8 @@
 #import "fmt.odin"
 #import "os.odin"
+// #import "http_test.odin" as ht
+// #import "game.odin" as game
+// #import "punity.odin" as pn
 
 
 
@@ -11,6 +14,15 @@ main :: proc() {
 	// crazy_introspection()
 	// namespaces_and_files()
 	// miscellany()
+
+	// ht.run()
+	// game.run()
+	// {
+	// 	init :: proc(c: ^pn.Core) {}
+	// 	step :: proc(c: ^pn.Core) {}
+
+	// 	pn.run(init, step)
+	// }
 }
 
 struct_padding :: proc() {
@@ -260,6 +272,8 @@ crazy_introspection :: proc() {
 			fmt.printf("\t%\t= %,\n", info.names[i], info.values[i])
 		}
 		fmt.printf("}\n")
+
+		// NOTE(bill): look at that type-safe printf!
 	}
 
 	{
@@ -276,6 +290,7 @@ crazy_introspection :: proc() {
 	// n.b. This pretty much "solves" serialization (to strings)
 }
 
+// #import "test.odin"
 
 namespaces_and_files :: proc() {
 	/*
@@ -317,184 +332,3 @@ miscellany :: proc() {
 
 
 
-
-// #import "fmt.odin" as fmt
-
-// #foreign_system_library "Ws2_32"
-
-
-// SOCKET :: type uint
-// INVALID_SOCKET :: ~(0 as SOCKET)
-
-// AF :: enum i32 {
-// 	UNSPEC    = 0,       // unspecified
-// 	UNIX      = 1,       // local to host (pipes, portals)
-// 	INET      = 2,       // internetwork: UDP, TCP, etc.
-// 	IMPLINK   = 3,       // arpanet imp addresses
-// 	PUP       = 4,       // pup protocols: e.g. BSP
-// 	CHAOS     = 5,       // mit CHAOS protocols
-// 	NS        = 6,       // XEROX NS protocols
-// 	ISO       = 7,       // ISO protocols
-// 	OSI       = ISO,     // OSI is ISO
-// 	ECMA      = 8,       // european computer manufacturers
-// 	DATAKIT   = 9,       // datakit protocols
-// 	CCITT     = 10,      // CCITT protocols, X.25 etc
-// 	SNA       = 11,      // IBM SNA
-// 	DECnet    = 12,      // DECnet
-// 	DLI       = 13,      // Direct data link interface
-// 	LAT       = 14,      // LAT
-// 	HYLINK    = 15,      // NSC Hyperchannel
-// 	APPLETALK = 16,      // AppleTalk
-// 	ROUTE     = 17,      // Internal Routing Protocol
-// 	LINK      = 18,      // Link layer interface
-// 	XTP       = 19,      // eXpress Transfer Protocol (no AF)
-// 	COIP      = 20,      // connection-oriented IP, aka ST II
-// 	CNT       = 21,      // Computer Network Technology
-// 	RTIP      = 22,      // Help Identify RTIP packets
-// 	IPX       = 23,      // Novell Internet Protocol
-// 	SIP       = 24,      // Simple Internet Protocol
-// 	PIP       = 25,      // Help Identify PIP packets
-// 	MAX       = 26,
-// }
-
-// SOCK_STREAM  :: 1
-// SOCKET_ERROR :: -1
-// IPPROTO_TCP  :: 6
-// AI_PASSIVE   :: 0x0020
-// SOMAXCONN    :: 128
-
-// SD_RECEIVE :: 0
-// SD_SEND    :: 1
-// SD_BOTH    :: 2
-
-// WSADESCRIPTION_LEN :: 256
-// WSASYS_STATUS_LEN  :: 128
-// WSADATA :: struct #ordered {
-// 	version:       i16
-// 	high_version:  i16
-
-
-// // NOTE(bill): This is x64 ordering
-// 	max_sockets:   u16
-// 	max_udp_dg:    u16
-// 	vendor_info:   ^byte
-// 	description:   [WSADESCRIPTION_LEN+1]byte
-// 	system_status: [WSASYS_STATUS_LEN+1]byte
-// }
-
-// addrinfo :: struct #ordered {
-// 	flags:     i32
-// 	family:    i32
-// 	socktype:  i32
-// 	protocol:  i32
-// 	addrlen:   uint
-// 	canonname: ^u8
-// 	addr:      ^sockaddr
-// 	next:      ^addrinfo
-// }
-
-// sockaddr :: struct #ordered {
-// 	family: u16
-// 	data:   [14]byte
-// }
-
-
-// WSAStartup      :: proc(version_requested: i16, data: ^WSADATA) -> i32                             #foreign #dll_import
-// WSACleanup      :: proc() -> i32                                                                   #foreign #dll_import
-// getaddrinfo     :: proc(node_name, service_name: ^u8, hints: ^addrinfo, result: ^^addrinfo) -> i32 #foreign #dll_import
-// freeaddrinfo    :: proc(ai: ^addrinfo)                                                             #foreign #dll_import
-// socket          :: proc(af, type_, protocol: i32) -> SOCKET                                        #foreign #dll_import
-// closesocket     :: proc(s: SOCKET) -> i32                                                          #foreign #dll_import
-// bind            :: proc(s: SOCKET, name: ^sockaddr, name_len: i32) -> i32                          #foreign #dll_import
-// listen          :: proc(s: SOCKET, back_log: i32) -> i32                                           #foreign #dll_import
-// accept          :: proc(s: SOCKET, addr: ^sockaddr, addr_len: i32) -> SOCKET                       #foreign #dll_import
-// recv            :: proc(s: SOCKET, buf: ^byte, len: i32, flags: i32) -> i32                        #foreign #dll_import
-// send            :: proc(s: SOCKET, buf: ^byte, len: i32, flags: i32) -> i32                        #foreign #dll_import
-// shutdown        :: proc(s: SOCKET, how: i32) -> i32                                                #foreign #dll_import
-// WSAGetLastError :: proc() -> i32                                                                   #foreign #dll_import
-
-// to_c_string :: proc(s: string) -> ^byte {
-// 	c_str := new_slice(byte, s.count+1)
-// 	assert(c_str.data != null)
-// 	copy(c_str, s as []byte)
-// 	c_str[s.count] = 0
-// 	return c_str.data
-// }
-
-// main :: proc() {
-// 	wsa: WSADATA
-// 	res:  ^addrinfo = null
-// 	hints: addrinfo
-// 	s, client: SOCKET
-
-// 	if WSAStartup(2 | (2 << 8), ^wsa) != 0 {
-// 		fmt.println("WSAStartup failed: ", WSAGetLastError())
-// 		return
-// 	}
-// 	defer WSACleanup()
-
-// 	hints.family   = AF.INET as i32
-// 	hints.socktype = SOCK_STREAM
-// 	hints.protocol = IPPROTO_TCP
-// 	hints.flags    = AI_PASSIVE
-
-// 	if getaddrinfo(null, to_c_string("8080"), ^hints, ^res) != 0 {
-// 		fmt.println("getaddrinfo failed: ", WSAGetLastError())
-// 		return
-// 	}
-// 	defer freeaddrinfo(res)
-
-// 	s = socket(res.family, res.socktype, res.protocol)
-// 	if s == INVALID_SOCKET {
-// 		fmt.println("socket failed: ", WSAGetLastError())
-// 		return
-// 	}
-// 	defer closesocket(s)
-
-// 	bind(s, res.addr, res.addrlen as i32)
-// 	listen(s, SOMAXCONN)
-
-// 	client = accept(s, null, null)
-// 	if client == INVALID_SOCKET {
-// 		fmt.println("socket failed: ", WSAGetLastError())
-// 		return
-// 	}
-// 	defer closesocket(client)
-
-// 	html :=
-// `HTTP/1.1 200 OK
-// Connection: close
-// Content-type: text/html
-
-// <html>
-// <head>
-// 	<title>Demo Title</title>
-// </head>
-// <body>
-// 	<h1 style="color: orange;">Odin Server Demo</h1>
-// </body>
-// </html>
-// `
-
-// 	buf: [1024]byte
-// 	for {
-// 		bytes := recv(client, ^buf[0], buf.count as i32, 0)
-// 		if bytes > 0 {
-// 			// fmt.println(buf[:bytes] as string)
-// 			bytes_sent := send(client, html.data, (html.count-1) as i32, 0)
-// 			if bytes_sent == SOCKET_ERROR {
-// 				fmt.println("send failed: ", WSAGetLastError())
-// 				return
-// 			}
-// 			break
-// 		} else if bytes == 0 {
-// 			fmt.println("Connection closing...")
-// 			break
-// 		} else {
-// 			fmt.println("recv failed: ", WSAGetLastError())
-// 			return
-// 		}
-// 	}
-
-// 	shutdown(client, SD_SEND)
-// }

+ 1 - 1
code/game.odin

@@ -134,7 +134,6 @@ run :: proc() {
 		return DefWindowProcA(hwnd, msg, wparam, lparam)
 	}
 
-
 	window, window_success := make_window("Odin Language Demo", 854, 480, win32_proc)
 	if !window_success {
 		return
@@ -142,6 +141,7 @@ run :: proc() {
 	defer destroy_window(^window)
 
 
+
 	prev_time := time_now()
 	running := true
 

+ 181 - 0
code/http_test.odin

@@ -0,0 +1,181 @@
+
+#import "fmt.odin" as fmt
+
+#foreign_system_library "Ws2_32"
+
+
+SOCKET :: type uint
+INVALID_SOCKET :: ~(0 as SOCKET)
+
+AF :: enum i32 {
+	UNSPEC    = 0,       // unspecified
+	UNIX      = 1,       // local to host (pipes, portals)
+	INET      = 2,       // internetwork: UDP, TCP, etc.
+	IMPLINK   = 3,       // arpanet imp addresses
+	PUP       = 4,       // pup protocols: e.g. BSP
+	CHAOS     = 5,       // mit CHAOS protocols
+	NS        = 6,       // XEROX NS protocols
+	ISO       = 7,       // ISO protocols
+	OSI       = ISO,     // OSI is ISO
+	ECMA      = 8,       // european computer manufacturers
+	DATAKIT   = 9,       // datakit protocols
+	CCITT     = 10,      // CCITT protocols, X.25 etc
+	SNA       = 11,      // IBM SNA
+	DECnet    = 12,      // DECnet
+	DLI       = 13,      // Direct data link interface
+	LAT       = 14,      // LAT
+	HYLINK    = 15,      // NSC Hyperchannel
+	APPLETALK = 16,      // AppleTalk
+	ROUTE     = 17,      // Internal Routing Protocol
+	LINK      = 18,      // Link layer interface
+	XTP       = 19,      // eXpress Transfer Protocol (no AF)
+	COIP      = 20,      // connection-oriented IP, aka ST II
+	CNT       = 21,      // Computer Network Technology
+	RTIP      = 22,      // Help Identify RTIP packets
+	IPX       = 23,      // Novell Internet Protocol
+	SIP       = 24,      // Simple Internet Protocol
+	PIP       = 25,      // Help Identify PIP packets
+	MAX       = 26,
+}
+
+SOCK_STREAM  :: 1
+SOCKET_ERROR :: -1
+IPPROTO_TCP  :: 6
+AI_PASSIVE   :: 0x0020
+SOMAXCONN    :: 128
+
+SD_RECEIVE :: 0
+SD_SEND    :: 1
+SD_BOTH    :: 2
+
+WSADESCRIPTION_LEN :: 256
+WSASYS_STATUS_LEN  :: 128
+WSADATA :: struct #ordered {
+	version:       i16
+	high_version:  i16
+
+
+// NOTE(bill): This is x64 ordering
+	max_sockets:   u16
+	max_udp_dg:    u16
+	vendor_info:   ^byte
+	description:   [WSADESCRIPTION_LEN+1]byte
+	system_status: [WSASYS_STATUS_LEN+1]byte
+}
+
+addrinfo :: struct #ordered {
+	flags:     i32
+	family:    i32
+	socktype:  i32
+	protocol:  i32
+	addrlen:   uint
+	canonname: ^u8
+	addr:      ^sockaddr
+	next:      ^addrinfo
+}
+
+sockaddr :: struct #ordered {
+	family: u16
+	data:   [14]byte
+}
+
+
+WSAStartup      :: proc(version_requested: i16, data: ^WSADATA) -> i32                             #foreign #dll_import
+WSACleanup      :: proc() -> i32                                                                   #foreign #dll_import
+getaddrinfo     :: proc(node_name, service_name: ^u8, hints: ^addrinfo, result: ^^addrinfo) -> i32 #foreign #dll_import
+freeaddrinfo    :: proc(ai: ^addrinfo)                                                             #foreign #dll_import
+socket          :: proc(af, type_, protocol: i32) -> SOCKET                                        #foreign #dll_import
+closesocket     :: proc(s: SOCKET) -> i32                                                          #foreign #dll_import
+bind            :: proc(s: SOCKET, name: ^sockaddr, name_len: i32) -> i32                          #foreign #dll_import
+listen          :: proc(s: SOCKET, back_log: i32) -> i32                                           #foreign #dll_import
+accept          :: proc(s: SOCKET, addr: ^sockaddr, addr_len: i32) -> SOCKET                       #foreign #dll_import
+recv            :: proc(s: SOCKET, buf: ^byte, len: i32, flags: i32) -> i32                        #foreign #dll_import
+send            :: proc(s: SOCKET, buf: ^byte, len: i32, flags: i32) -> i32                        #foreign #dll_import
+shutdown        :: proc(s: SOCKET, how: i32) -> i32                                                #foreign #dll_import
+WSAGetLastError :: proc() -> i32                                                                   #foreign #dll_import
+
+to_c_string :: proc(s: string) -> ^byte {
+	c_str := new_slice(byte, s.count+1)
+	assert(c_str.data != null)
+	copy(c_str, s as []byte)
+	c_str[s.count] = 0
+	return c_str.data
+}
+
+run :: proc() {
+	wsa: WSADATA
+	res:  ^addrinfo = null
+	hints: addrinfo
+	s, client: SOCKET
+
+	if WSAStartup(2 | (2 << 8), ^wsa) != 0 {
+		fmt.println("WSAStartup failed: ", WSAGetLastError())
+		return
+	}
+	defer WSACleanup()
+
+	hints.family   = AF.INET as i32
+	hints.socktype = SOCK_STREAM
+	hints.protocol = IPPROTO_TCP
+	hints.flags    = AI_PASSIVE
+
+	if getaddrinfo(null, to_c_string("8080"), ^hints, ^res) != 0 {
+		fmt.println("getaddrinfo failed: ", WSAGetLastError())
+		return
+	}
+	defer freeaddrinfo(res)
+
+	s = socket(res.family, res.socktype, res.protocol)
+	if s == INVALID_SOCKET {
+		fmt.println("socket failed: ", WSAGetLastError())
+		return
+	}
+	defer closesocket(s)
+
+	bind(s, res.addr, res.addrlen as i32)
+	listen(s, SOMAXCONN)
+
+	client = accept(s, null, null)
+	if client == INVALID_SOCKET {
+		fmt.println("socket failed: ", WSAGetLastError())
+		return
+	}
+	defer closesocket(client)
+
+	html :=
+`HTTP/1.1 200 OK
+Connection: close
+Content-type: text/html
+
+<html>
+<head>
+	<title>Demo Title</title>
+</head>
+<body>
+	<h1 style="color: orange;">Odin Server Demo</h1>
+</body>
+</html>
+`
+
+	buf: [1024]byte
+	for {
+		bytes := recv(client, ^buf[0], buf.count as i32, 0)
+		if bytes > 0 {
+			// fmt.println(buf[:bytes] as string)
+			bytes_sent := send(client, html.data, (html.count-1) as i32, 0)
+			if bytes_sent == SOCKET_ERROR {
+				fmt.println("send failed: ", WSAGetLastError())
+				return
+			}
+			break
+		} else if bytes == 0 {
+			fmt.println("Connection closing...")
+			break
+		} else {
+			fmt.println("recv failed: ", WSAGetLastError())
+			return
+		}
+	}
+
+	shutdown(client, SD_SEND)
+}

+ 2 - 2
code/punity.odin

@@ -434,7 +434,7 @@ run :: proc(user_init, user_step: proc(c: ^Core)) {
 		{
 			data: [128]byte
 			buf := data[:0]
-			fmt.printf_to_buffer(^buf, "Punity: % ms\x00", dt*1000)
+			fmt.bprintf(^buf, "Punity: % ms\x00", dt*1000)
 			win32.SetWindowTextA(win32_window, buf.data)
 		}
 
@@ -447,7 +447,7 @@ run :: proc(user_init, user_step: proc(c: ^Core)) {
 			}
 		}
 
-		memory_zero(^_core.key_deltas[0], size_of(_core.key_deltas[0]))
+		memory_zero(^_core.key_deltas[0], size_of_val(_core.key_deltas[0]))
 
 
 		for PeekMessageA(^message, null, 0, 0, PM_REMOVE) != 0 {