More compilation.

Moved windows typedefs to a separate file.

Included public domain md5 routines (from dpkg).
This commit is contained in:
Steven Fuller 2001-07-28 04:44:27 +00:00 committed by Patryk Obara
parent 6d5a3cec55
commit f759e35cd8
15 changed files with 414 additions and 93 deletions

View file

@ -10,11 +10,19 @@ LDLIBS += `sdl-config --libs`
AFLAGS = -g -Iinclude/ -w+macro-params -w+orphan-labels -w+number-overflow
ROOT = afont.c frustum.c kshape.c map.c maths.c mem3dc.c mem3dcpp.cpp module.c morph.c mslhand.c object.c shpanim.c sphere.c tables.c vdb.c version.c
AVP = ai_sight.c avpview.c bh_agun.c bh_ais.c bh_alien.c bh_binsw.c bh_cable.c bh_corpse.c bh_deathvol.c bh_debri.c bh_dummy.c bh_fan.c bh_far.c bh_fhug.c bh_gener.c bh_ldoor.c bh_lift.c bh_light.c bh_lnksw.c bh_ltfx.c bh_marin.c bh_mission.c bh_near.c bh_pargen.c bh_plachier.c bh_plift.c bh_pred.c bh_queen.c bh_rubberduck.c bh_selfdest.c bh_snds.c bh_spcl.c bh_swdor.c bh_track.c bh_types.c bh_videoscreen.c bh_waypt.c bh_weap.c bh_xeno.c bonusabilities.c cheatmodes.c comp_map.c comp_shp.c consolelog.cpp deaths.c decal.c detaillevels.c dynamics.c dynblock.c equipmnt.c equiputl.cpp extents.c game.c gameflow.c hmodel.c hud.c inventry.c language.c lighting.c load_shp.c los.c maps.c mempool.c messagehistory.c movement.c paintball.c particle.c pfarlocs.c pheromon.c pmove.c psndproj.c pvisible.c
ROOT = afont.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c mslhand.c object.c shpanim.c sphere.c tables.c vdb.c version.c
AVP = ai_sight.c avpview.c bh_agun.c bh_ais.c bh_alien.c bh_binsw.c bh_cable.c bh_corpse.c bh_deathvol.c bh_debri.c bh_dummy.c bh_fan.c bh_far.c bh_fhug.c bh_gener.c bh_ldoor.c bh_lift.c bh_light.c bh_lnksw.c bh_ltfx.c bh_marin.c bh_mission.c bh_near.c bh_pargen.c bh_plachier.c bh_plift.c bh_pred.c bh_queen.c bh_rubberduck.c bh_selfdest.c bh_snds.c bh_spcl.c bh_swdor.c bh_track.c bh_types.c bh_videoscreen.c bh_waypt.c bh_weap.c bh_xeno.c bonusabilities.c cheatmodes.c comp_map.c comp_shp.c consolelog.cpp deaths.c decal.c detaillevels.c dynamics.c dynblock.c equipmnt.c equiputl.cpp extents.c game.c gameflow.c hmodel.c hud.c inventry.c language.c lighting.c load_shp.c los.c maps.c mempool.c messagehistory.c movement.c paintball.c particle.c pfarlocs.c pheromon.c pmove.c psndproj.c pvisible.c secstats.c sfx.c stratdef.c targeting.c track.c triggers.c weapons.c
SHAPES = cube.c
SUPPORT =
AVPWIN95 = avpchunk.cpp
FRONTEND =
GADGETS =
WIN95 = huffman.cpp string.cpp
# AVP:
# unused?: avpitems.cpp avppages.cpp
# not needed: mp_launch.c
# need fix: cconvars.cpp cdtrackselection.cpp davehook.cpp game_statistics.c gamecmds.cpp gamevars.cpp missions.cpp player.c psnd.c
# need fix: cconvars.cpp cdtrackselection.cpp davehook.cpp game_statistics.c gamecmds.cpp gamevars.cpp missions.cpp player.c psnd.c savegame.c scream.cpp
# the following should really be autogenerated...
@ -26,9 +34,15 @@ ROOTSRC = $(ROOT)
ROOTOBJ = $(call OBJNAMES1,$(ROOT))
AVPSRC = $(call SRCNAMES,$(AVP),avp)
AVPOBJ = $(call OBJNAMES,$(AVP),avp)
SHAPESSRC = $(call SRCNAMES,$(SHAPES),avp/shapes)
SHAPESOBJ = $(call OBJNAMES,$(SHAPES),avp/shapes)
AVPWIN95SRC = $(call SRCNAMES,$(AVPWIN95),avp/win95)
AVPWIN95OBJ = $(call OBJNAMES,$(AVPWIN95),avp/win95)
WIN95SRC = $(call SRCNAMES,$(WIN95),win95)
WIN95OBJ = $(call OBJNAMES,$(WIN95),win95)
SRC = $(ROOTSRC) $(AVPSRC)
OBJ = $(ROOTOBJ) $(AVPOBJ)
SRC = $(ROOTSRC) $(AVPSRC) $(SHAPESSRC) $(AVPWIN95SRC) $(WIN95SRC)
OBJ = $(ROOTOBJ) $(AVPOBJ) $(SHAPESOBJ) $(AVPWIN95OBJ) $(WIN95OBJ)
.SUFFIXES: .asm

View file

@ -26,13 +26,12 @@
#include "bh_videoscreen.h"
#include "bh_plift.h"
#include "bh_ldoor.h"
#include "AvP_Menus.h"
#include "avp_menus.h"
#include "game_statistics.h"
#include "AvP_UserProfile.h"
#include "avp_userprofile.h"
#include "savegame.h"
#include "huffman.hpp"
#include "smacker.h"
#define UseLocalAssert Yes
#include "ourasert.h"

View file

@ -1,11 +1,8 @@
#include <stdio.h>
#include "system.h"
#if PSX
#else //PSX
#include "shape.h"
/*
CUBE_
@ -164,5 +161,3 @@ int *CUBE_items[]={
2*1,1*1,0*1,3*1,
Term
};
#endif //PSX

View file

@ -58,7 +58,7 @@
#include "targeting.h"
#include "extents.h"
#include "scream.h"
#include "AvP_UserProfile.h"
#include "avp_userprofile.h"
#define BITE_HEALTH_RECOVERY (50)
#define BITE_ARMOUR_RECOVERY (30)

62
src/fixer.h Normal file
View file

@ -0,0 +1,62 @@
#ifndef __FIXER_H__
#define __FIXER_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h> // int64_t
#define PACKED __attribute__((packed))
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#define __cdecl
#define TRUE 1
#define FALSE 0
#define stricmp strcasecmp
#define _stricmp strcasecmp
/* windows junk */
typedef int GUID;
typedef int DPID;
typedef int HINSTANCE;
typedef int WPARAM;
typedef int LPARAM;
typedef int HANDLE;
typedef int BOOL;
typedef struct RECT
{
int left;
int top;
int right;
int bottom;
} RECT;
typedef RECT RECT_AVP;
typedef int64_t __int64;
typedef int FILETIME;
typedef struct SYSTEMTIME
{
//#warning "TODO: SYSTEMTIME format is not correct"
int wHour;
int wMinute;
int wSecond;
int wYear;
int wMonth;
int wDay;
} SYSTEMTIME;
#endif

253
src/md5.c Normal file
View file

@ -0,0 +1,253 @@
/*
* This code implements the MD5 message-digest algorithm.
* The algorithm is due to Ron Rivest. This code was
* written by Colin Plumb in 1993, no copyright is claimed.
* This code is in the public domain; do with it what you wish.
*
* Equivalent code is available from RSA Data Security, Inc.
* This code has been tested against that, and is equivalent,
* except that you don't need to include two pages of legalese
* with every copy.
*
* To compute the message digest of a chunk of bytes, declare an
* MD5Context structure, pass it to MD5Init, call MD5Update as
* needed on buffers full of bytes, and then call MD5Final, which
* will fill a supplied 16-byte array with the digest.
*
* Changed so as no longer to depend on Colin Plumb's `usual.h' header
* definitions; now uses stuff from dpkg's config.h.
* - Ian Jackson <ijackson@nyx.cs.du.edu>.
* Still in the public domain.
*
* md5_buffer added by Steven Fuller
*/
#include <string.h> /* for memcpy() */
#include <sys/types.h> /* for stupid systems */
#include <netinet/in.h> /* for ntohl() */
//#include "config.h"
#include "md5.h"
#ifdef WORDS_BIGENDIAN
void
byteSwap(UWORD32 *buf, unsigned words)
{
md5byte *p = (md5byte *)buf;
do {
*buf++ = (UWORD32)((unsigned)p[3] << 8 | p[2]) << 16 |
((unsigned)p[1] << 8 | p[0]);
p += 4;
} while (--words);
}
#else
#define byteSwap(buf,words)
#endif
/* md5_buffer frontend added for AvP */
void md5_buffer(const char *buffer, unsigned len, char *digest)
{
struct MD5Context md5c;
MD5Init(&md5c);
MD5Update(&md5c, (md5byte const *)buffer, len);
MD5Final((md5byte *)digest, &md5c);
}
/*
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
* initialization constants.
*/
void
MD5Init(struct MD5Context *ctx)
{
ctx->buf[0] = 0x67452301;
ctx->buf[1] = 0xefcdab89;
ctx->buf[2] = 0x98badcfe;
ctx->buf[3] = 0x10325476;
ctx->bytes[0] = 0;
ctx->bytes[1] = 0;
}
/*
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
void
MD5Update(struct MD5Context *ctx, md5byte const *buf, unsigned len)
{
UWORD32 t;
/* Update byte count */
t = ctx->bytes[0];
if ((ctx->bytes[0] = t + len) < t)
ctx->bytes[1]++; /* Carry from low to high */
t = 64 - (t & 0x3f); /* Space available in ctx->in (at least 1) */
if (t > len) {
memcpy((md5byte *)ctx->in + 64 - t, buf, len);
return;
}
/* First chunk is an odd size */
memcpy((md5byte *)ctx->in + 64 - t, buf, t);
byteSwap(ctx->in, 16);
MD5Transform(ctx->buf, ctx->in);
buf += t;
len -= t;
/* Process data in 64-byte chunks */
while (len >= 64) {
memcpy(ctx->in, buf, 64);
byteSwap(ctx->in, 16);
MD5Transform(ctx->buf, ctx->in);
buf += 64;
len -= 64;
}
/* Handle any remaining bytes of data. */
memcpy(ctx->in, buf, len);
}
/*
* Final wrapup - pad to 64-byte boundary with the bit pattern
* 1 0* (64-bit count of bits processed, MSB-first)
*/
void
MD5Final(md5byte digest[16], struct MD5Context *ctx)
{
int count = ctx->bytes[0] & 0x3f; /* Number of bytes in ctx->in */
md5byte *p = (md5byte *)ctx->in + count;
/* Set the first char of padding to 0x80. There is always room. */
*p++ = 0x80;
/* Bytes of padding needed to make 56 bytes (-8..55) */
count = 56 - 1 - count;
if (count < 0) { /* Padding forces an extra block */
memset(p, 0, count + 8);
byteSwap(ctx->in, 16);
MD5Transform(ctx->buf, ctx->in);
p = (md5byte *)ctx->in;
count = 56;
}
memset(p, 0, count);
byteSwap(ctx->in, 14);
/* Append length in bits and transform */
ctx->in[14] = ctx->bytes[0] << 3;
ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
MD5Transform(ctx->buf, ctx->in);
byteSwap(ctx->buf, 4);
memcpy(digest, ctx->buf, 16);
memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
}
#ifndef ASM_MD5
/* The four core functions - F1 is optimized somewhat */
/* #define F1(x, y, z) (x & y | ~x & z) */
#define F1(x, y, z) (z ^ (x & (y ^ z)))
#define F2(x, y, z) F1(z, x, y)
#define F3(x, y, z) (x ^ y ^ z)
#define F4(x, y, z) (y ^ (x | ~z))
/* This is the central step in the MD5 algorithm. */
#define MD5STEP(f,w,x,y,z,in,s) \
(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
/*
* The core of the MD5 algorithm, this alters an existing MD5 hash to
* reflect the addition of 16 longwords of new data. MD5Update blocks
* the data and converts bytes into longwords for this routine.
*/
void
MD5Transform(UWORD32 buf[4], UWORD32 const in[16])
{
register UWORD32 a, b, c, d;
a = buf[0];
b = buf[1];
c = buf[2];
d = buf[3];
MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
buf[0] += a;
buf[1] += b;
buf[2] += c;
buf[3] += d;
}
#endif

46
src/md5.h Normal file
View file

@ -0,0 +1,46 @@
/*
* This is the header file for the MD5 message-digest algorithm.
* The algorithm is due to Ron Rivest. This code was
* written by Colin Plumb in 1993, no copyright is claimed.
* This code is in the public domain; do with it what you wish.
*
* Equivalent code is available from RSA Data Security, Inc.
* This code has been tested against that, and is equivalent,
* except that you don't need to include two pages of legalese
* with every copy.
*
* To compute the message digest of a chunk of bytes, declare an
* MD5Context structure, pass it to MD5Init, call MD5Update as
* needed on buffers full of bytes, and then call MD5Final, which
* will fill a supplied 16-byte array with the digest.
*
* Changed so as no longer to depend on Colin Plumb's `usual.h'
* header definitions; now uses stuff from dpkg's config.h
* - Ian Jackson <ijackson@nyx.cs.du.edu>.
* Still in the public domain.
*
* md5_buffer added by Steven Fuller
*/
#ifndef MD5_H
#define MD5_H
typedef unsigned int UWORD32;
#define md5byte unsigned char
struct MD5Context {
UWORD32 buf[4];
UWORD32 bytes[2];
UWORD32 in[16];
};
void MD5Init(struct MD5Context *context);
void MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len);
void MD5Final(unsigned char digest[16], struct MD5Context *context);
void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]);
/* md5_buffer frontend added for AvP */
void md5_buffer(const char *buffer, unsigned len, char *digest);
#endif /* !MD5_H */

View file

@ -3,6 +3,7 @@
#ifndef _chunk_hpp
#define _chunk_hpp 1
#include "fixer.h"
#if engine
@ -78,6 +79,8 @@
extern char users_name[];
#endif
#include "list_tem.hpp"
#ifndef RIFF_OPTIMIZE // define this to get compiler errors where you are calling the old slow functions
extern List<int> list_chunks_in_file (HANDLE &, const char * chunk_id);
#endif

View file

@ -1,4 +1,4 @@
#include "DummyObjectChunk.hpp"
#include "dummyobjectchunk.hpp"
#ifdef cencon
#define new my_new

View file

@ -1,7 +1,9 @@
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fixer.h"
#include "huffman.hpp"
/* KJL 17:12:25 17/09/98 - Huffman compression/decompression routines */
@ -28,17 +30,17 @@ typedef struct HuffNode // 16-byte node structure
struct HuffNode *parent; // the THIRD four bytes, parent node
union
{ // the FOURTH four bytes
// union
// { // the FOURTH four bytes
unsigned int bits; // the bit pattern of this end node
struct
{
unsigned char flag;
unsigned char curdepth;
unsigned char maxdepth;
unsigned char unused;
};
};
// struct
// {
// unsigned char flag;
// unsigned char curdepth;
// unsigned char maxdepth;
// unsigned char unused;
// };
// };
} HuffNode;
@ -99,7 +101,7 @@ extern HuffmanPackage *HuffmanCompression(unsigned char *sourcePtr, int length)
{
outpackage->CodelengthCount[n] = Depths[n + 1];
}
for (n = 0; n < 256; n++)
for (int n = 0; n < 256; n++)
{
outpackage->ByteAssignment[n] = SymbolCensus[n + 1].Symbol;
}

View file

@ -1,12 +1,13 @@
#ifndef _INCLUDED_IFF_HPP_
#define _INCLUDED_IFF_HPP_
#include "fixer.h"
#if defined(_WIN32) || defined(WIN32) || defined(WINDOWS) || defined(_WINDOWS)
#define _IFF_WIN_TARGET
#include <windows.h>
#else // ! WIN32 && ! _WIN32 && ! WINDOWS && ! _WINDOWS
#include <stdio.h>
#include <conio.h>
#endif // ! WIN32 && ! _WIN32 && ! WINDOWS && ! _WINDOWS
#include "media.hpp"

View file

@ -1,4 +1,4 @@
#include "ILBM_ext.hpp"
#include "ilbm_ext.hpp"
IFF_IMPLEMENT_DYNCREATE("ILBM","TRAN",IlbmTranChunk)
IFF_IMPLEMENT_DYNCREATE("ILBM","ALPH",IlbmAlphChunk)

View file

@ -2,7 +2,7 @@
#define _INCLUDED_ILBM_EXT_HPP_
#include "iff.hpp"
#include "iff_ILBM.hpp"
#include "iff_ilbm.hpp"
namespace IFF
{

View file

@ -6,8 +6,8 @@
#include <windows.h>
#endif // WIN32 || _WIN32 || WINDOWS || _WINDOWS
#include <stdio.h>
#include <conio.h>
#include <limits.h>
#include <string.h>

View file

@ -1,10 +1,7 @@
#ifndef PLATFORM_INCLUDED
#define PLATFORM_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h> // int64_t
#include "fixer.h"
#include "shape.h" // struct imageheader
@ -18,55 +15,15 @@
extern "C" {
#endif
#define PACKED __attribute__((packed))
//#include "fastfile.h"
#define platform_pc Yes
#define Saturn No
#define Hardware2dTextureClipping No
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#define TRUE 1
#define FALSE 0
#define stricmp strcasecmp
#define _stricmp strcasecmp
/* Types */
/* windows junk */
typedef int GUID;
typedef int DPID;
typedef int HINSTANCE;
typedef int WPARAM;
typedef int LPARAM;
typedef int BOOL;
typedef struct RECT
{
int left;
int top;
int right;
int bottom;
} RECT;
typedef RECT RECT_AVP;
typedef int64_t __int64;
/* Watcom C 64-bit values */
typedef struct LONGLONGCH {
unsigned int lo32;
@ -74,26 +31,15 @@ typedef struct LONGLONGCH {
} LONGLONGCH;
typedef int FILETIME;
typedef struct SYSTEMTIME
{
//#warning "SYSTEMTIME format is not correct"
int wHour;
int wMinute;
int wSecond;
int wYear;
int wMonth;
int wDay;
} SYSTEMTIME;
/*
Sine and Cosine
*/
extern int sine[];
extern int cosine[];
#define GetSin(a) sine[a]
#define GetCos(a) cosine[a]