Rev 4283 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4283 | esevece | 1 | #include |
4298 | esevece | 2 | #include |
4283 | esevece | 3 | |
4 | |||
5 | #define NULL 0 |
||
6 | #define __stdcall __attribute__((stdcall)) |
||
7 | |||
8 | extern int dll_load(); |
||
9 | extern int mem_Free(); |
||
10 | extern int mem_Alloc(); |
||
11 | extern int mem_ReAlloc(); |
||
12 | |||
13 | int kol_exit(){ |
||
14 | __menuet__sys_exit(); |
||
15 | } |
||
16 | |||
17 | int (* __stdcall network_init)(); |
||
18 | void (* __stdcall freeaddrinfo)(struct addrinfo* ai); |
||
19 | int (* __stdcall getaddrinfo)( const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo **res); |
||
20 | char * (* __stdcall inet_ntoa)(struct in_addr in); |
||
21 | unsigned long (* __stdcall inet_addr)( const char* hostname); |
||
22 | |||
23 | |||
24 | int NETWORK_YAY(){ |
||
25 | asm volatile ("pusha\n\ |
||
26 | movl $mem_Alloc, %eax\n\ |
||
27 | movl $mem_Free, %ebx\n\ |
||
28 | movl $mem_ReAlloc, %ecx\n\ |
||
29 | movl $dll_load, %edx\n\ |
||
30 | movl network_init, %esi\n\ |
||
31 | call *%esi\n\ |
||
32 | popa\n"); |
||
33 | } |
||
34 | |||
35 | |||
36 | void NETWORK_INIT() |
||
37 | { |
||
38 | IMP_ENTRY *imp; |
||
39 | |||
40 | imp = __kolibri__cofflib_load("/sys/lib/network.obj"); |
||
41 | if (imp == NULL) |
||
42 | kol_exit(); |
||
43 | |||
44 | network_init = ( __stdcall int(*)()) |
||
45 | __kolibri__cofflib_getproc (imp, "lib_init"); |
||
46 | if (network_init == NULL) |
||
47 | kol_exit(); |
||
48 | |||
49 | freeaddrinfo = ( __stdcall void (*)(struct addrinfo*)) |
||
50 | __kolibri__cofflib_getproc (imp, "freeaddrinfo"); |
||
51 | if (freeaddrinfo == NULL) |
||
52 | kol_exit(); |
||
53 | |||
54 | getaddrinfo = ( __stdcall int (*)(const char*, const char*, const struct addrinfo*, struct addrinfo **)) |
||
55 | __kolibri__cofflib_getproc (imp, "getaddrinfo"); |
||
56 | if (getaddrinfo == NULL) |
||
57 | kol_exit(); |
||
58 | |||
59 | inet_ntoa = ( __stdcall char * (*)(struct in_addr)) |
||
60 | __kolibri__cofflib_getproc (imp, "inet_ntoa"); |
||
61 | if (inet_ntoa == NULL) |
||
62 | kol_exit(); |
||
63 | |||
64 | inet_addr = ( __stdcall unsigned long (*)(const char *)) |
||
65 | __kolibri__cofflib_getproc (imp, "inet_addr"); |
||
66 | if (inet_addr == NULL) |
||
67 | kol_exit(); |
||
68 | |||
69 | __menuet__debug_out("NETWORK init...\n"); |
||
70 | |||
71 | NETWORK_YAY(); |
||
72 | |||
73 | __menuet__debug_out("ok...\n"); |
||
74 | |||
75 | } |