Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

BUFFER.C

Go to the documentation of this file.
00001 /****************************************************************************************/
00002 /*  Buffer.c                                                                            */
00003 /*                                                                                      */
00004 /*  Author: John Pollard                                                                */
00005 /*  Description:                                                                        */
00006 /*                                                                                      */
00007 /*  Copyright (c) 1997, 1999, Eclipse Entertainment; All rights reserved.               */
00008 /*                                                                                      */
00009 /*  See the accompanying file LICENSE.TXT for terms on the use of this library.         */
00010 /*  This library is distributed in the hope that it will be useful but WITHOUT          */
00011 /*  ANY WARRANTY OF ANY KIND and without any implied warranty of MERCHANTABILITY        */
00012 /*  or FITNESS FOR ANY PURPOSE.  Refer to LICENSE.TXT for more details.                 */
00013 /*                                                                                      */
00014 /****************************************************************************************/
00015 #include <Windows.h>
00016 #include <Assert.h>
00017 
00018 #include "Genesis.h"
00019 
00020 #include "Buffer.h"
00021 
00022 typedef struct Pos2
00023 {
00024         int16   X, Y, Z;
00025 } Pos2;
00026 
00027 geBoolean Buffer_FillByte(Buffer_Data *Buffer, uint8 Byte)
00028 {
00029         assert(Buffer->Pos + (int32)sizeof(uint8) < Buffer->Size);
00030 
00031         if (Buffer->Pos + (int32)sizeof(uint8) >= Buffer->Size)
00032                 return GE_FALSE;
00033 
00034         Buffer->Data[Buffer->Pos] = Byte;
00035 
00036         Buffer->Pos += sizeof(uint8);
00037 
00038         return GE_TRUE;
00039 }
00040 
00041 geBoolean Buffer_FillShort(Buffer_Data *Buffer, uint16 Short)
00042 {
00043         uint16  *Data;
00044 
00045         assert(Buffer->Pos + (int32)sizeof(uint16) < Buffer->Size);
00046 
00047         if (Buffer->Pos + (int32)sizeof(uint16) >= Buffer->Size)
00048                 return GE_FALSE;
00049 
00050         Data = (uint16*)&Buffer->Data[Buffer->Pos];
00051 
00052         *Data = Short;
00053 
00054         Buffer->Pos += sizeof(uint16);
00055 
00056         return GE_TRUE;
00057 }
00058 
00059 geBoolean Buffer_FillLong(Buffer_Data *Buffer, uint32 Long)
00060 {
00061         uint32  *Data;
00062 
00063         assert(Buffer->Pos + (int32)sizeof(uint32) < Buffer->Size);
00064 
00065         if (Buffer->Pos + (int32)sizeof(uint32) >= Buffer->Size)
00066                 return GE_FALSE;
00067 
00068         Data = (uint32*)&Buffer->Data[Buffer->Pos];
00069 
00070         *Data = Long;
00071 
00072         Buffer->Pos += sizeof(uint32);
00073 
00074         return GE_TRUE;
00075 }
00076 
00077 geBoolean Buffer_FillSLong(Buffer_Data *Buffer, int32 Long)
00078 {
00079         int32   *Data;
00080 
00081         assert(Buffer->Pos + (int32)sizeof(int32) < Buffer->Size);
00082 
00083         if (Buffer->Pos + (int32)sizeof(int32) >= Buffer->Size)
00084                 return GE_FALSE;
00085 
00086         Data = (int32*)&Buffer->Data[Buffer->Pos];
00087 
00088         *Data = Long;
00089 
00090         Buffer->Pos += sizeof(int32);
00091 
00092         return GE_TRUE;
00093 }
00094 
00095 geBoolean Buffer_FillFloat(Buffer_Data *Buffer, float Float)
00096 {
00097         float *Data;
00098 
00099         assert(Buffer->Pos + (int32)sizeof(float) < Buffer->Size);
00100 
00101         if (Buffer->Pos + (int32)sizeof(float) >= Buffer->Size)
00102                 return GE_FALSE;
00103 
00104         Data = (float*)&Buffer->Data[Buffer->Pos];
00105 
00106         *Data = Float;
00107 
00108         Buffer->Pos += sizeof(float);
00109 
00110         return GE_TRUE;
00111 }
00112 
00113 geBoolean Buffer_FillFloat2(Buffer_Data *Buffer, float Float, float Max)
00114 {
00115         uint16 *Data;
00116 
00117         assert(Float <= Max);
00118         assert(Buffer->Pos + (int32)sizeof(uint16) < Buffer->Size);
00119 
00120         if (Buffer->Pos + (int32)sizeof(uint16) >= Buffer->Size)
00121                 return GE_FALSE;
00122 
00123         Data = (uint16*)&Buffer->Data[Buffer->Pos];
00124 
00125         *Data = (uint16)((Float/Max)*65535);
00126 
00127         Buffer->Pos += sizeof(uint16);
00128 
00129         return GE_TRUE;
00130 }
00131 
00132 geBoolean Buffer_FillAngle(Buffer_Data *Buffer, geVec3d Angle)
00133 {
00134         geVec3d *Data;
00135 
00136         assert(Buffer->Pos + (int32)sizeof(geVec3d) < Buffer->Size);
00137         
00138         if (Buffer->Pos + (int32)sizeof(geVec3d) >= Buffer->Size)
00139                 return GE_FALSE;
00140 
00141         Data = (geVec3d*)&Buffer->Data[Buffer->Pos];
00142 
00143         *Data = Angle;
00144 
00145         Buffer->Pos += sizeof(geVec3d);
00146 
00147         return GE_TRUE;
00148 }
00149 
00150 geBoolean Buffer_FillPos(Buffer_Data *Buffer, geVec3d Pos)
00151 {
00152         geVec3d         *Data;
00153 
00154         assert(Buffer->Pos + (int32)sizeof(geVec3d) < Buffer->Size);
00155 
00156         if (Buffer->Pos + (int32)sizeof(geVec3d) >= Buffer->Size)
00157                 return GE_FALSE;
00158 
00159         Data = (geVec3d*)&Buffer->Data[Buffer->Pos];
00160 
00161         *Data = Pos;
00162 
00163         Buffer->Pos += sizeof(geVec3d);
00164 
00165         return GE_TRUE;
00166 }
00167 
00168 geBoolean Buffer_FillString(Buffer_Data *Buffer, uint8 *Str)
00169 {
00170         int32           i;
00171 
00172         assert(Buffer->Pos + (int32)strlen((char*)Str)+1 < Buffer->Size);
00173         
00174         if (Buffer->Pos + (int32)strlen((char*)Str)+1 >= Buffer->Size)
00175                 return GE_FALSE;
00176 
00177         for (i=0; i< (int32)strlen((char*)Str)+1; i++)
00178                 Buffer->Data[Buffer->Pos++] = Str[i];
00179 
00180         return GE_TRUE;
00181 }
00182 
00183 geBoolean Buffer_FillBuffer(Buffer_Data *Buffer1, Buffer_Data *Buffer2)
00184 {
00185         int32           i;
00186 
00187         assert(Buffer2->Pos + Buffer1->Pos < Buffer1->Size);
00188 
00189         if (Buffer2->Pos + Buffer1->Pos >= Buffer1->Size)
00190                 return GE_FALSE;
00191 
00192         for (i=0; i< Buffer2->Pos; i++)
00193                 Buffer1->Data[Buffer1->Pos++] = Buffer2->Data[i];
00194 
00195         return GE_TRUE;
00196 }
00197 
00198 geBoolean Buffer_FillData(Buffer_Data *Buffer1, uint8 *Data, int32 Size)
00199 {
00200         int32           i;
00201 
00202         assert(Buffer1->Pos + Size < Buffer1->Size);
00203 
00204         if (Buffer1->Pos + Size >= Buffer1->Size)
00205                 return GE_FALSE;
00206 
00207         for (i=0; i< Size; i++)
00208                 Buffer1->Data[Buffer1->Pos++] = Data[i];
00209 
00210         return GE_TRUE;
00211 }
00212 
00213 geBoolean Buffer_GetByte(Buffer_Data *Buffer, uint8 *Byte)
00214 {
00215         assert(Buffer->Pos + (int32)sizeof(uint8) <= Buffer->Size);
00216 
00217         *Byte = Buffer->Data[Buffer->Pos];
00218 
00219         Buffer->Pos += sizeof(uint8);
00220 
00221         return GE_TRUE;
00222 }
00223 
00224 geBoolean Buffer_GetShort(Buffer_Data *Buffer, uint16 *Short)
00225 {
00226         assert(Buffer->Pos + (int32)sizeof(uint16) <= Buffer->Size);
00227 
00228         *Short = *((uint16*)&Buffer->Data[Buffer->Pos]);
00229 
00230         Buffer->Pos += sizeof(uint16);
00231 
00232         return GE_TRUE;
00233 }
00234 
00235 geBoolean Buffer_GetLong(Buffer_Data *Buffer, uint32 *Long)
00236 {
00237         assert(Buffer->Pos + (int32)sizeof(uint32) <= Buffer->Size);
00238 
00239         *Long = *((uint32*)&Buffer->Data[Buffer->Pos]);
00240 
00241         Buffer->Pos += sizeof(uint32);
00242         
00243         return GE_TRUE;
00244 }
00245 
00246 geBoolean Buffer_GetSLong(Buffer_Data *Buffer, int32 *Long)
00247 {
00248         assert(Buffer->Pos + (int32)sizeof(int32) <= Buffer->Size);
00249 
00250         *Long = *((int32*)&Buffer->Data[Buffer->Pos]);
00251 
00252         Buffer->Pos += sizeof(int32);
00253         
00254         return GE_TRUE;
00255 }
00256 
00257 geBoolean Buffer_GetFloat(Buffer_Data *Buffer, float *Float)
00258 {
00259         assert(Buffer->Pos + (int32)sizeof(float) <= Buffer->Size);
00260 
00261         *Float = *((float*)&Buffer->Data[Buffer->Pos]);
00262 
00263         Buffer->Pos += sizeof(float);
00264         
00265         return GE_TRUE;
00266 }
00267 
00268 geBoolean Buffer_GetFloat2(Buffer_Data *Buffer, float *Float, float Max)
00269 {
00270         uint16  Temp16;
00271 
00272         assert(Buffer->Pos + (int32)sizeof(uint16) <= Buffer->Size);
00273 
00274         Temp16 = *((uint16*)&Buffer->Data[Buffer->Pos]);
00275 
00276         *Float = ((float)Temp16 / 65535.0f) * Max;
00277 
00278         Buffer->Pos += sizeof(uint16);
00279         
00280         return GE_TRUE;
00281 }
00282 
00283 geBoolean Buffer_GetAngle(Buffer_Data *Buffer, geVec3d *Angle)
00284 {
00285         assert(Buffer->Pos + (int32)sizeof(geVec3d) <= Buffer->Size);
00286 
00287         *Angle = *(geVec3d*)&Buffer->Data[Buffer->Pos];
00288 
00289         Buffer->Pos += sizeof(geVec3d);
00290         
00291         return GE_TRUE;
00292 }
00293 
00294 geBoolean Buffer_GetPos(Buffer_Data *Buffer, geVec3d *Pos)
00295 {
00296         assert(Buffer->Pos + (int32)sizeof(geVec3d) <= Buffer->Size);
00297 
00298         *Pos = *(geVec3d*)&Buffer->Data[Buffer->Pos];
00299         
00300         Buffer->Pos += sizeof(geVec3d);
00301         
00302         return GE_TRUE;
00303 }
00304 
00305 geBoolean Buffer_GetString(Buffer_Data *Buffer, uint8 *Str)
00306 {
00307         int32   i = 0;
00308         uint8   c = 0;
00309 
00310         do 
00311         {
00312                 assert(Buffer->Pos+1 <= Buffer->Size);
00313 
00314                 c = Buffer->Data[Buffer->Pos++];
00315                 Str[i++] = c;
00316         } while (c != -1 && c != 0);
00317 
00318         return GE_TRUE;
00319 }
00320 
00321 geBoolean Buffer_GetData(Buffer_Data *Buffer1, uint8 *Data, int32 Size)
00322 {
00323         int32           i;
00324 
00325         assert(Buffer1->Pos + Size <= Buffer1->Size);
00326 
00327         for (i=0; i< Size; i++)
00328                 Data[i] = Buffer1->Data[Buffer1->Pos++];
00329 
00330         return GE_TRUE;
00331 }
00332 
00333 geBoolean Buffer_Set(Buffer_Data *Buffer, char *Data, int32 Size)
00334 {
00335         assert(Buffer);
00336 
00337         Buffer->Data = Data;
00338         Buffer->Size = Size;
00339         Buffer->Pos = 0;
00340 
00341         return GE_TRUE;
00342 }

Generated on Tue Sep 30 12:35:22 2003 for GTestAndEngine by doxygen 1.3.2