15 void* _cdecl
dlmalloc(size_t);
16 void _cdecl
dlfree(void*);
17 void _cdecl
mf_init();
19 #define malloc dlmalloc
21 #define realloc dlrealloc
25 #ifndef B_HOST_IS_LENDIAN
26 #define B_HOST_IS_LENDIAN 1
28 #if !defined(sparc) && B_HOST_IS_LENDIAN
31 ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \
32 (((unsigned long int)(x) & 0x0000ff00U) << 8) | \
33 (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \
34 (((unsigned long int)(x) & 0xff000000U) >> 24)))
39 ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \
40 (((unsigned short int)(x) & 0xff00) >> 8)))
44 #define htonl(x) ntohl(x)
47 #define htons(x) ntohs(x)
59 #ifndef IPPORT_USERRESERVED
60 #define IPPORT_USERRESERVED 5000
63 int DOOMPORT
= (IPPORT_USERRESERVED
+0x1d);
64 int sendsocket
[MAXNETNODES
];
67 void (*netget
) (void);
68 void (*netsend
) (void);
70 static int first_user_port
=IPPORT_USERRESERVED
+0x1D+0x10;
73 int GetAvailPort(void)
78 // __asm__ __volatile__(
81 // :"0"(53),"b"(9),"c"(first_user_port+i));
82 // if(d0==1) return i+first_user_port;
84 I_Error("Unable to get new port\n");
89 int CreateInputUDPsocket(void)
92 //__asm__ __volatile__(
95 // :"0"(53),"b"(1),"c"(DOOMPORT),"d"(0),"S"(0));
98 I_Error("Unable to create socket\n");
103 int CreateOutputUDPSocket(int remote_ip
)
108 // __asm__ __volatile__(
111 // :"0"(53),"b"(0),"c"(p),"d"(DOOMPORT),"S"(remote_ip));
112 // if(d0==0xffffffff)
114 I_Error("Unable to create output socket\n");
122 void PacketSend (void)
128 //printf("ERROR Packet Send\n\r");
132 sw
.checksum
= htonl(netbuffer
->checksum
);
133 sw
.player
= netbuffer
->player
;
134 sw
.retransmitfrom
= netbuffer
->retransmitfrom
;
135 sw
.starttic
= netbuffer
->starttic
;
136 sw
.numtics
= netbuffer
->numtics
;
137 for (c
=0 ; c
< netbuffer
->numtics
; c
++)
139 sw
.cmds
[c
].forwardmove
= netbuffer
->cmds
[c
].forwardmove
;
140 sw
.cmds
[c
].sidemove
= netbuffer
->cmds
[c
].sidemove
;
141 sw
.cmds
[c
].angleturn
= htons(netbuffer
->cmds
[c
].angleturn
);
142 sw
.cmds
[c
].consistancy
= htons(netbuffer
->cmds
[c
].consistancy
);
143 sw
.cmds
[c
].chatchar
= netbuffer
->cmds
[c
].chatchar
;
144 sw
.cmds
[c
].buttons
= netbuffer
->cmds
[c
].buttons
;
146 // __libclog_printf("Sending packet %u to node %u\n",gametic,
147 // doomcom->remotenode);
148 // __asm__ __volatile__(
151 // :"0"(53),"b"(4),"c"(sendsocket[doomcom->remotenode]),
152 // "d"(doomcom->datalength),"S"((long)&sw));
155 // __libclog_printf("Unable to send packet to remote node\n");
162 void PacketGet (void)
166 int GetLocalAddress (void)
169 // __asm__ __volatile__(
181 void I_InitNetwork (void)
183 boolean trueval
= true;
187 doomcom
= malloc (sizeof (*doomcom
) );
188 memset (doomcom
, 0, sizeof(*doomcom
) );
190 // set up for network
191 i
= M_CheckParm ("-dup");
192 if (i
&& i
< myargc
-1)
194 doomcom
->ticdup
= myargv
[i
+1][0]-'0';
195 if (doomcom
->ticdup
< 1)
197 if (doomcom
->ticdup
> 9)
201 doomcom
-> ticdup
= 1;
203 if (M_CheckParm ("-extratic"))
204 doomcom
-> extratics
= 1;
206 doomcom
-> extratics
= 0;
208 p
= M_CheckParm ("-port");
211 DOOMPORT
= atoi (myargv
[p
+1]);
212 // __libclog_printf ("using alternate port %i\n",DOOMPORT);
215 // parse network game options,
216 // -net <consoleplayer> <host> <host> ...
217 i
= M_CheckParm ("-net");
221 // single player game
223 doomcom
->id
= DOOMCOM_ID
;
224 doomcom
->numplayers
= doomcom
->numnodes
= 1;
225 doomcom
->deathmatch
= false;
226 doomcom
->consoleplayer
= 0;
230 netsend
= PacketSend
;
234 // parse player number and host list
235 doomcom
->consoleplayer
= myargv
[i
+1][0]-'1';
237 doomcom
->numnodes
= 1; // this node for sure
238 doomcom
->id
= DOOMCOM_ID
;
239 doomcom
->numplayers
= doomcom
->numnodes
;
241 for(i
=1;i
<MAXNETNODES
;i
++)
245 insocket
=CreateInputUDPsocket();
246 // __libclog_printf("DOOM: Input UDP socket is %d\n",insocket);
253 //printf("ERROR NetCmd");
256 if (doomcom
->command
== CMD_SEND
)
260 else if (doomcom
->command
== CMD_GET
)
265 I_Error ("Bad net cmd: %i\n",doomcom
->command
);