fceux-server: switch to unix endlines

This commit is contained in:
punkrockguy318 2011-12-01 05:32:10 +00:00
parent 95e7d4ca21
commit 1b728ca591
6 changed files with 1380 additions and 1380 deletions

View File

@ -1,266 +1,266 @@
/* FCE Ultra Network Play Server /* FCE Ultra Network Play Server
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* */ * */
/* /*
* RFC 1321 compliant MD5 implementation, * RFC 1321 compliant MD5 implementation,
* by Christophe Devine <devine@cr0.net>; * by Christophe Devine <devine@cr0.net>;
* this program is licensed under the GPL. * this program is licensed under the GPL.
*/ */
/* Modified October 3, 2003, to remove testing code, and add /* Modified October 3, 2003, to remove testing code, and add
include of "types.h". include of "types.h".
Added simple MD5 to ASCII string conversion function. Added simple MD5 to ASCII string conversion function.
-Xodnizel -Xodnizel
*/ */
#include <string.h> #include <string.h>
#include "types.h" #include "types.h"
#include "md5.h" #include "md5.h"
#define GET_UINT32(n,b,i) \ #define GET_UINT32(n,b,i) \
{ \ { \
(n) = ( (uint32) (b)[(i) + 3] << 24 ) \ (n) = ( (uint32) (b)[(i) + 3] << 24 ) \
| ( (uint32) (b)[(i) + 2] << 16 ) \ | ( (uint32) (b)[(i) + 2] << 16 ) \
| ( (uint32) (b)[(i) + 1] << 8 ) \ | ( (uint32) (b)[(i) + 1] << 8 ) \
| ( (uint32) (b)[(i) ] ); \ | ( (uint32) (b)[(i) ] ); \
} }
#define PUT_UINT32(n,b,i) \ #define PUT_UINT32(n,b,i) \
{ \ { \
(b)[(i) ] = (uint8) ( (n) ); \ (b)[(i) ] = (uint8) ( (n) ); \
(b)[(i) + 1] = (uint8) ( (n) >> 8 ); \ (b)[(i) + 1] = (uint8) ( (n) >> 8 ); \
(b)[(i) + 2] = (uint8) ( (n) >> 16 ); \ (b)[(i) + 2] = (uint8) ( (n) >> 16 ); \
(b)[(i) + 3] = (uint8) ( (n) >> 24 ); \ (b)[(i) + 3] = (uint8) ( (n) >> 24 ); \
} }
void md5_starts( struct md5_context *ctx ) void md5_starts( struct md5_context *ctx )
{ {
ctx->total[0] = 0; ctx->total[0] = 0;
ctx->total[1] = 0; ctx->total[1] = 0;
ctx->state[0] = 0x67452301; ctx->state[0] = 0x67452301;
ctx->state[1] = 0xEFCDAB89; ctx->state[1] = 0xEFCDAB89;
ctx->state[2] = 0x98BADCFE; ctx->state[2] = 0x98BADCFE;
ctx->state[3] = 0x10325476; ctx->state[3] = 0x10325476;
} }
void md5_process( struct md5_context *ctx, uint8 data[64] ) void md5_process( struct md5_context *ctx, uint8 data[64] )
{ {
uint32 A, B, C, D, X[16]; uint32 A, B, C, D, X[16];
GET_UINT32( X[0], data, 0 ); GET_UINT32( X[0], data, 0 );
GET_UINT32( X[1], data, 4 ); GET_UINT32( X[1], data, 4 );
GET_UINT32( X[2], data, 8 ); GET_UINT32( X[2], data, 8 );
GET_UINT32( X[3], data, 12 ); GET_UINT32( X[3], data, 12 );
GET_UINT32( X[4], data, 16 ); GET_UINT32( X[4], data, 16 );
GET_UINT32( X[5], data, 20 ); GET_UINT32( X[5], data, 20 );
GET_UINT32( X[6], data, 24 ); GET_UINT32( X[6], data, 24 );
GET_UINT32( X[7], data, 28 ); GET_UINT32( X[7], data, 28 );
GET_UINT32( X[8], data, 32 ); GET_UINT32( X[8], data, 32 );
GET_UINT32( X[9], data, 36 ); GET_UINT32( X[9], data, 36 );
GET_UINT32( X[10], data, 40 ); GET_UINT32( X[10], data, 40 );
GET_UINT32( X[11], data, 44 ); GET_UINT32( X[11], data, 44 );
GET_UINT32( X[12], data, 48 ); GET_UINT32( X[12], data, 48 );
GET_UINT32( X[13], data, 52 ); GET_UINT32( X[13], data, 52 );
GET_UINT32( X[14], data, 56 ); GET_UINT32( X[14], data, 56 );
GET_UINT32( X[15], data, 60 ); GET_UINT32( X[15], data, 60 );
#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) #define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
#define P(a,b,c,d,k,s,t) \ #define P(a,b,c,d,k,s,t) \
{ \ { \
a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
} }
A = ctx->state[0]; A = ctx->state[0];
B = ctx->state[1]; B = ctx->state[1];
C = ctx->state[2]; C = ctx->state[2];
D = ctx->state[3]; D = ctx->state[3];
#define F(x,y,z) (z ^ (x & (y ^ z))) #define F(x,y,z) (z ^ (x & (y ^ z)))
P( A, B, C, D, 0, 7, 0xD76AA478 ); P( A, B, C, D, 0, 7, 0xD76AA478 );
P( D, A, B, C, 1, 12, 0xE8C7B756 ); P( D, A, B, C, 1, 12, 0xE8C7B756 );
P( C, D, A, B, 2, 17, 0x242070DB ); P( C, D, A, B, 2, 17, 0x242070DB );
P( B, C, D, A, 3, 22, 0xC1BDCEEE ); P( B, C, D, A, 3, 22, 0xC1BDCEEE );
P( A, B, C, D, 4, 7, 0xF57C0FAF ); P( A, B, C, D, 4, 7, 0xF57C0FAF );
P( D, A, B, C, 5, 12, 0x4787C62A ); P( D, A, B, C, 5, 12, 0x4787C62A );
P( C, D, A, B, 6, 17, 0xA8304613 ); P( C, D, A, B, 6, 17, 0xA8304613 );
P( B, C, D, A, 7, 22, 0xFD469501 ); P( B, C, D, A, 7, 22, 0xFD469501 );
P( A, B, C, D, 8, 7, 0x698098D8 ); P( A, B, C, D, 8, 7, 0x698098D8 );
P( D, A, B, C, 9, 12, 0x8B44F7AF ); P( D, A, B, C, 9, 12, 0x8B44F7AF );
P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
P( B, C, D, A, 11, 22, 0x895CD7BE ); P( B, C, D, A, 11, 22, 0x895CD7BE );
P( A, B, C, D, 12, 7, 0x6B901122 ); P( A, B, C, D, 12, 7, 0x6B901122 );
P( D, A, B, C, 13, 12, 0xFD987193 ); P( D, A, B, C, 13, 12, 0xFD987193 );
P( C, D, A, B, 14, 17, 0xA679438E ); P( C, D, A, B, 14, 17, 0xA679438E );
P( B, C, D, A, 15, 22, 0x49B40821 ); P( B, C, D, A, 15, 22, 0x49B40821 );
#undef F #undef F
#define F(x,y,z) (y ^ (z & (x ^ y))) #define F(x,y,z) (y ^ (z & (x ^ y)))
P( A, B, C, D, 1, 5, 0xF61E2562 ); P( A, B, C, D, 1, 5, 0xF61E2562 );
P( D, A, B, C, 6, 9, 0xC040B340 ); P( D, A, B, C, 6, 9, 0xC040B340 );
P( C, D, A, B, 11, 14, 0x265E5A51 ); P( C, D, A, B, 11, 14, 0x265E5A51 );
P( B, C, D, A, 0, 20, 0xE9B6C7AA ); P( B, C, D, A, 0, 20, 0xE9B6C7AA );
P( A, B, C, D, 5, 5, 0xD62F105D ); P( A, B, C, D, 5, 5, 0xD62F105D );
P( D, A, B, C, 10, 9, 0x02441453 ); P( D, A, B, C, 10, 9, 0x02441453 );
P( C, D, A, B, 15, 14, 0xD8A1E681 ); P( C, D, A, B, 15, 14, 0xD8A1E681 );
P( B, C, D, A, 4, 20, 0xE7D3FBC8 ); P( B, C, D, A, 4, 20, 0xE7D3FBC8 );
P( A, B, C, D, 9, 5, 0x21E1CDE6 ); P( A, B, C, D, 9, 5, 0x21E1CDE6 );
P( D, A, B, C, 14, 9, 0xC33707D6 ); P( D, A, B, C, 14, 9, 0xC33707D6 );
P( C, D, A, B, 3, 14, 0xF4D50D87 ); P( C, D, A, B, 3, 14, 0xF4D50D87 );
P( B, C, D, A, 8, 20, 0x455A14ED ); P( B, C, D, A, 8, 20, 0x455A14ED );
P( A, B, C, D, 13, 5, 0xA9E3E905 ); P( A, B, C, D, 13, 5, 0xA9E3E905 );
P( D, A, B, C, 2, 9, 0xFCEFA3F8 ); P( D, A, B, C, 2, 9, 0xFCEFA3F8 );
P( C, D, A, B, 7, 14, 0x676F02D9 ); P( C, D, A, B, 7, 14, 0x676F02D9 );
P( B, C, D, A, 12, 20, 0x8D2A4C8A ); P( B, C, D, A, 12, 20, 0x8D2A4C8A );
#undef F #undef F
#define F(x,y,z) (x ^ y ^ z) #define F(x,y,z) (x ^ y ^ z)
P( A, B, C, D, 5, 4, 0xFFFA3942 ); P( A, B, C, D, 5, 4, 0xFFFA3942 );
P( D, A, B, C, 8, 11, 0x8771F681 ); P( D, A, B, C, 8, 11, 0x8771F681 );
P( C, D, A, B, 11, 16, 0x6D9D6122 ); P( C, D, A, B, 11, 16, 0x6D9D6122 );
P( B, C, D, A, 14, 23, 0xFDE5380C ); P( B, C, D, A, 14, 23, 0xFDE5380C );
P( A, B, C, D, 1, 4, 0xA4BEEA44 ); P( A, B, C, D, 1, 4, 0xA4BEEA44 );
P( D, A, B, C, 4, 11, 0x4BDECFA9 ); P( D, A, B, C, 4, 11, 0x4BDECFA9 );
P( C, D, A, B, 7, 16, 0xF6BB4B60 ); P( C, D, A, B, 7, 16, 0xF6BB4B60 );
P( B, C, D, A, 10, 23, 0xBEBFBC70 ); P( B, C, D, A, 10, 23, 0xBEBFBC70 );
P( A, B, C, D, 13, 4, 0x289B7EC6 ); P( A, B, C, D, 13, 4, 0x289B7EC6 );
P( D, A, B, C, 0, 11, 0xEAA127FA ); P( D, A, B, C, 0, 11, 0xEAA127FA );
P( C, D, A, B, 3, 16, 0xD4EF3085 ); P( C, D, A, B, 3, 16, 0xD4EF3085 );
P( B, C, D, A, 6, 23, 0x04881D05 ); P( B, C, D, A, 6, 23, 0x04881D05 );
P( A, B, C, D, 9, 4, 0xD9D4D039 ); P( A, B, C, D, 9, 4, 0xD9D4D039 );
P( D, A, B, C, 12, 11, 0xE6DB99E5 ); P( D, A, B, C, 12, 11, 0xE6DB99E5 );
P( C, D, A, B, 15, 16, 0x1FA27CF8 ); P( C, D, A, B, 15, 16, 0x1FA27CF8 );
P( B, C, D, A, 2, 23, 0xC4AC5665 ); P( B, C, D, A, 2, 23, 0xC4AC5665 );
#undef F #undef F
#define F(x,y,z) (y ^ (x | ~z)) #define F(x,y,z) (y ^ (x | ~z))
P( A, B, C, D, 0, 6, 0xF4292244 ); P( A, B, C, D, 0, 6, 0xF4292244 );
P( D, A, B, C, 7, 10, 0x432AFF97 ); P( D, A, B, C, 7, 10, 0x432AFF97 );
P( C, D, A, B, 14, 15, 0xAB9423A7 ); P( C, D, A, B, 14, 15, 0xAB9423A7 );
P( B, C, D, A, 5, 21, 0xFC93A039 ); P( B, C, D, A, 5, 21, 0xFC93A039 );
P( A, B, C, D, 12, 6, 0x655B59C3 ); P( A, B, C, D, 12, 6, 0x655B59C3 );
P( D, A, B, C, 3, 10, 0x8F0CCC92 ); P( D, A, B, C, 3, 10, 0x8F0CCC92 );
P( C, D, A, B, 10, 15, 0xFFEFF47D ); P( C, D, A, B, 10, 15, 0xFFEFF47D );
P( B, C, D, A, 1, 21, 0x85845DD1 ); P( B, C, D, A, 1, 21, 0x85845DD1 );
P( A, B, C, D, 8, 6, 0x6FA87E4F ); P( A, B, C, D, 8, 6, 0x6FA87E4F );
P( D, A, B, C, 15, 10, 0xFE2CE6E0 ); P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
P( C, D, A, B, 6, 15, 0xA3014314 ); P( C, D, A, B, 6, 15, 0xA3014314 );
P( B, C, D, A, 13, 21, 0x4E0811A1 ); P( B, C, D, A, 13, 21, 0x4E0811A1 );
P( A, B, C, D, 4, 6, 0xF7537E82 ); P( A, B, C, D, 4, 6, 0xF7537E82 );
P( D, A, B, C, 11, 10, 0xBD3AF235 ); P( D, A, B, C, 11, 10, 0xBD3AF235 );
P( C, D, A, B, 2, 15, 0x2AD7D2BB ); P( C, D, A, B, 2, 15, 0x2AD7D2BB );
P( B, C, D, A, 9, 21, 0xEB86D391 ); P( B, C, D, A, 9, 21, 0xEB86D391 );
#undef F #undef F
ctx->state[0] += A; ctx->state[0] += A;
ctx->state[1] += B; ctx->state[1] += B;
ctx->state[2] += C; ctx->state[2] += C;
ctx->state[3] += D; ctx->state[3] += D;
} }
void md5_update( struct md5_context *ctx, uint8 *input, uint32 length ) void md5_update( struct md5_context *ctx, uint8 *input, uint32 length )
{ {
uint32 left, fill; uint32 left, fill;
if( ! length ) return; if( ! length ) return;
left = ( ctx->total[0] >> 3 ) & 0x3F; left = ( ctx->total[0] >> 3 ) & 0x3F;
fill = 64 - left; fill = 64 - left;
ctx->total[0] += length << 3; ctx->total[0] += length << 3;
ctx->total[1] += length >> 29; ctx->total[1] += length >> 29;
ctx->total[0] &= 0xFFFFFFFF; ctx->total[0] &= 0xFFFFFFFF;
ctx->total[1] += ctx->total[0] < ( length << 3 ); ctx->total[1] += ctx->total[0] < ( length << 3 );
if( left && length >= fill ) if( left && length >= fill )
{ {
memcpy( (void *) (ctx->buffer + left), (void *) input, fill ); memcpy( (void *) (ctx->buffer + left), (void *) input, fill );
md5_process( ctx, ctx->buffer ); md5_process( ctx, ctx->buffer );
length -= fill; length -= fill;
input += fill; input += fill;
left = 0; left = 0;
} }
while( length >= 64 ) while( length >= 64 )
{ {
md5_process( ctx, input ); md5_process( ctx, input );
length -= 64; length -= 64;
input += 64; input += 64;
} }
if( length ) if( length )
{ {
memcpy( (void *) (ctx->buffer + left), (void *) input, length ); memcpy( (void *) (ctx->buffer + left), (void *) input, length );
} }
} }
static uint8 md5_padding[64] = static uint8 md5_padding[64] =
{ {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}; };
void md5_finish( struct md5_context *ctx, uint8 digest[16] ) void md5_finish( struct md5_context *ctx, uint8 digest[16] )
{ {
uint32 last, padn; uint32 last, padn;
uint8 msglen[8]; uint8 msglen[8];
PUT_UINT32( ctx->total[0], msglen, 0 ); PUT_UINT32( ctx->total[0], msglen, 0 );
PUT_UINT32( ctx->total[1], msglen, 4 ); PUT_UINT32( ctx->total[1], msglen, 4 );
last = ( ctx->total[0] >> 3 ) & 0x3F; last = ( ctx->total[0] >> 3 ) & 0x3F;
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
md5_update( ctx, md5_padding, padn ); md5_update( ctx, md5_padding, padn );
md5_update( ctx, msglen, 8 ); md5_update( ctx, msglen, 8 );
PUT_UINT32( ctx->state[0], digest, 0 ); PUT_UINT32( ctx->state[0], digest, 0 );
PUT_UINT32( ctx->state[1], digest, 4 ); PUT_UINT32( ctx->state[1], digest, 4 );
PUT_UINT32( ctx->state[2], digest, 8 ); PUT_UINT32( ctx->state[2], digest, 8 );
PUT_UINT32( ctx->state[3], digest, 12 ); PUT_UINT32( ctx->state[3], digest, 12 );
} }
/* Uses a static buffer, so beware of how it's used. */ /* Uses a static buffer, so beware of how it's used. */
char *md5_asciistr(uint8 digest[16]) char *md5_asciistr(uint8 digest[16])
{ {
static char str[33]; static char str[33];
static char trans[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; static char trans[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int x; int x;
for(x=0;x<16;x++) for(x=0;x<16;x++)
{ {
str[x*2]=trans[digest[x]&0x0F]; str[x*2]=trans[digest[x]&0x0F];
str[x*2+1]=trans[digest[x]>>4]; str[x*2+1]=trans[digest[x]>>4];
} }
return(str); return(str);
} }

View File

@ -1,37 +1,37 @@
/* FCE Ultra Network Play Server /* FCE Ultra Network Play Server
* *
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#ifndef _MD5_H #ifndef _MD5_H
#define _MD5_H #define _MD5_H
struct md5_context struct md5_context
{ {
uint32 total[2]; uint32 total[2];
uint32 state[4]; uint32 state[4];
uint8 buffer[64]; uint8 buffer[64];
}; };
void md5_starts( struct md5_context *ctx ); void md5_starts( struct md5_context *ctx );
void md5_update( struct md5_context *ctx, uint8 *input, uint32 length ); void md5_update( struct md5_context *ctx, uint8 *input, uint32 length );
void md5_finish( struct md5_context *ctx, uint8 digest[16] ); void md5_finish( struct md5_context *ctx, uint8 digest[16] );
/* Uses a static buffer, so beware of how it's used. */ /* Uses a static buffer, so beware of how it's used. */
char *md5_asciistr(uint8 digest[16]); char *md5_asciistr(uint8 digest[16]);
#endif /* md5.h */ #endif /* md5.h */

File diff suppressed because it is too large Load Diff

View File

@ -1,102 +1,102 @@
/* FCE Ultra Network Play Server /* FCE Ultra Network Play Server
* *
* Copyright notice for this file: * Copyright notice for this file:
* Copyright (C) 2004 Xodnizel * Copyright (C) 2004 Xodnizel
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#include "types.h" #include "types.h"
#include "throttle.h" #include "throttle.h"
#ifdef TODO #ifdef TODO
THROTTLE *MakeThrottle(uint32 fps) THROTTLE *MakeThrottle(uint32 fps)
{ {
} }
/* Returns 1 if it's time to run, 0 if it's not time yet. */ /* Returns 1 if it's time to run, 0 if it's not time yet. */
int TestThrottle(THROTTLE *throt) int TestThrottle(THROTTLE *throt)
{ {
} }
/* Pass it a pointer to an array of THROTTLE structs */ /* Pass it a pointer to an array of THROTTLE structs */
/* It will check */ /* It will check */
void DoAllThrottles(THROTTLE *throt) void DoAllThrottles(THROTTLE *throt)
{ {
} }
void KillThrottle(THROTTLE *throt) void KillThrottle(THROTTLE *throt)
{ {
} }
#endif #endif
static uint64 tfreq; static uint64 tfreq;
static uint64 desiredfps; static uint64 desiredfps;
int32 FCEUI_GetDesiredFPS(void) int32 FCEUI_GetDesiredFPS(void)
{ {
//if(PAL) //if(PAL)
// return(838977920); // ~50.007 // return(838977920); // ~50.007
//else //else
return(1008307711); // ~60.1 return(1008307711); // ~60.1
} }
void RefreshThrottleFPS(int divooder) void RefreshThrottleFPS(int divooder)
{ {
desiredfps=(FCEUI_GetDesiredFPS() / divooder)>>8; desiredfps=(FCEUI_GetDesiredFPS() / divooder)>>8;
tfreq=1000000; tfreq=1000000;
tfreq<<=16; /* Adjustment for fps returned from FCEUI_GetDesiredFPS(). */ tfreq<<=16; /* Adjustment for fps returned from FCEUI_GetDesiredFPS(). */
} }
static uint64 GetCurTime(void) static uint64 GetCurTime(void)
{ {
uint64 ret; uint64 ret;
struct timeval tv; struct timeval tv;
gettimeofday(&tv,0); gettimeofday(&tv,0);
ret=(uint64)tv.tv_sec*1000000; ret=(uint64)tv.tv_sec*1000000;
ret+=tv.tv_usec; ret+=tv.tv_usec;
return(ret); return(ret);
} }
void SpeedThrottle(void) void SpeedThrottle(void)
{ {
static uint64 ttime,ltime; static uint64 ttime,ltime;
waiter: waiter:
ttime=GetCurTime(); ttime=GetCurTime();
if( (ttime-ltime) < (tfreq/desiredfps) ) if( (ttime-ltime) < (tfreq/desiredfps) )
{ {
usleep(1000); usleep(1000);
goto waiter; goto waiter;
} }
if( (ttime-ltime) >= (tfreq*4/desiredfps)) if( (ttime-ltime) >= (tfreq*4/desiredfps))
ltime=ttime; ltime=ttime;
else else
ltime+=tfreq/desiredfps; ltime+=tfreq/desiredfps;
} }

View File

@ -1,23 +1,23 @@
/* FCE Ultra Network Play Server /* FCE Ultra Network Play Server
* *
* Copyright notice for this file: * Copyright notice for this file:
* Copyright (C) 2004 Xodnizel * Copyright (C) 2004 Xodnizel
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* */ * */
void RefreshThrottleFPS(int divooder); void RefreshThrottleFPS(int divooder);
void SpeedThrottle(void); void SpeedThrottle(void);

View File

@ -1,38 +1,38 @@
/* FCE Ultra Network Play Server /* FCE Ultra Network Play Server
* *
* Copyright notice for this file: * Copyright notice for this file:
* Copyright (C) 2004 Xodnizel * Copyright (C) 2004 Xodnizel
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#ifndef __FCEU_TYPES #ifndef __FCEU_TYPES
#define __FCEU_TYPES #define __FCEU_TYPES
#include <inttypes.h> #include <inttypes.h>
typedef int8_t int8; typedef int8_t int8;
typedef int16_t int16; typedef int16_t int16;
typedef int32_t int32; typedef int32_t int32;
typedef uint8_t uint8; typedef uint8_t uint8;
typedef uint16_t uint16; typedef uint16_t uint16;
typedef uint32_t uint32; typedef uint32_t uint32;
typedef unsigned long long uint64; typedef unsigned long long uint64;
typedef long long int64; typedef long long int64;
#define INLINE inline #define INLINE inline
#define GINLINE inline #define GINLINE inline
#endif #endif