Sign in to follow this  
Drakkcon

Can someone help me fix my bitmap loader?

Recommended Posts

#include "SDL.h"

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

void SetPixel8Bit(SDL_Surface *surface, int x, int y, Uint8 Color);
void SetPixel32Bit(SDL_Surface *surface, int x, int y, Uint32 Color);
SDL_Surface * Load24BitBitmap(char *FileName);

struct BitmapFileHeader
{
    unsigned short bfType; //must be 19778
    unsigned int bfSize;
    unsigned short bfReserved1, bfReserved2;
    unsigned int bfOffBits;
};

struct BitmapInfoHeader
{
    unsigned int biSize;
    unsigned int biWidth;
    unsigned int biHeight;
    unsigned short biPlanes;
    unsigned short biBitCount;
    unsigned int biCompression;
    unsigned int biSizeImage;
    unsigned int biXPelsPerMeter;
    unsigned int biYPelsPerMeter;
    unsigned int biClrUsed;
    unsigned int biClrImportant;
};

struct RgbQuadLilEndian
{
    char rgbBlue;
    char rgbGreen;
    char rgbRed;
    char rgbReserved;
};

struct Bitmap
{
    BitmapFileHeader BitmapFile;
    BitmapInfoHeader BitmapInfo;
    RgbQuadLilEndian* BitmapData;
};

int main(int argc, char **argv)
{
    SDL_Init(SDL_INIT_VIDEO);
    
    SDL_Surface *screen = SDL_SetVideoMode
        (640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    
    srand(time(NULL));
    
    SDL_Surface *image = Load24BitBitmap("test2.bmp");
    
    SDL_BlitSurface(image, NULL, screen, NULL);
    
    SDL_Flip(screen);
    
    SDL_Delay(2000);
    
    SDL_Quit();
    
    
    return 0;
}

void SetPixel8Bit(SDL_Surface *surface, int x, int y, Uint8 Color)
{
    Uint8 *bufp;
    bufp = (Uint8 *)surface->pixels + y*surface->pitch + x;
    *bufp = Color;
}

void SetPixel32Bit(SDL_Surface *surface, int x, int y, Uint32 Color)
{
     Uint32 *pBuf = (Uint32*)surface->pixels + y * surface->pitch/4 + x;
    *(Uint32*)pBuf = Color;
}

SDL_Surface* Load24BitBitmap(char *FileName)
{
    Bitmap BitmapToLoad;  //bitmap structure
    SDL_Surface *surface; //surface to load the bitmap to
    
    fstream File(FileName, ios::in | ios::binary); //open bitmap file
    //load the bitmap File Header
    File.read((char*)&BitmapToLoad.BitmapFile.bfType, sizeof(unsigned short));
    File.read((char*)&BitmapToLoad.BitmapFile.bfSize, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapFile.bfReserved1, sizeof(unsigned short));
    File.read((char*)&BitmapToLoad.BitmapFile.bfReserved2, sizeof(unsigned short));
    File.read((char*)&BitmapToLoad.BitmapFile.bfOffBits, sizeof(unsigned int));
    //load the bitmap data header
    File.read((char*)&BitmapToLoad.BitmapInfo.biSize, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biWidth, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biHeight, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biPlanes, sizeof(unsigned short));
    File.read((char*)&BitmapToLoad.BitmapInfo.biBitCount, sizeof(unsigned short));
    File.read((char*)&BitmapToLoad.BitmapInfo.biCompression, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biSizeImage, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biXPelsPerMeter, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biYPelsPerMeter, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biClrUsed, sizeof(unsigned int));
    File.read((char*)&BitmapToLoad.BitmapInfo.biClrImportant, sizeof(unsigned int));
    
    int TotalPixels = BitmapToLoad.BitmapInfo.biWidth * BitmapToLoad.BitmapInfo.biHeight;
    
    BitmapToLoad.BitmapData = new RgbQuadLilEndian[TotalPixels];
    
    int Width = BitmapToLoad.BitmapInfo.biWidth;
    int Height = BitmapToLoad.BitmapInfo.biHeight;
    
    //Load the rest of the file, minus the BitmapFile & BitmapInfo (which are 54 bytes total)
    File.read((char*)&BitmapToLoad.BitmapData, BitmapToLoad.BitmapFile.bfSize - 
                        (sizeof(BitmapToLoad.BitmapFile) - sizeof(BitmapToLoad.BitmapInfo)));

    File.close();
    
    //draw the pixel data bottom to top because that's how a BMP is stored  
    for(int i = 0; i == Width; ++i)
        for(int j = Height; j == 0; --j)
        {
            char r = BitmapToLoad.BitmapData[i*j].rgbRed;
            char b = BitmapToLoad.BitmapData[i*j].rgbBlue;
            char g = BitmapToLoad.BitmapData[i*j].rgbGreen;
            SetPixel32Bit(surface, i, j, SDL_MapRGB(surface->format, r, g, b));
        }
        
    delete BitmapToLoad.BitmapData;
    
    return surface;
}


Whenever I run my program it exits immediately. On debug I get a segmentation fault, but that's all the debugger tells me (it won't tell me where). I'm using MinGW. Can someone help? PS: Don't tell me to use SDL_Image. I'm doing this for the sake of knowledge, not a professional project.

Share this post


Link to post
Share on other sites
Well, first off, do any of those read() calls fail?
Does surface need allocated/initialized?
Does SetPixel... fail?

And I've never encountered a debugger that doesn't say where access violations occur. Even if it doesn't, set a breakpoint at the beginning of the function and step through until it dies. That'll give you a great indication of where it dies, which should narrow down the possible reasons why it dies.

Share this post


Link to post
Share on other sites
Quote:
Original post by Telastyn
Well, first off, do any of those read() calls fail?
Does surface need allocated/initialized?
Does SetPixel... fail?

And I've never encountered a debugger that doesn't say where access violations occur. Even if it doesn't, set a breakpoint at the beginning of the function and step through until it dies. That'll give you a great indication of where it dies, which should narrow down the possible reasons why it dies.


Thanks I'll try that.

Quote:

use SDL_LoadBMP, it is built in to SDL. Might as well use it.


for the sake of knowledge.

Share this post


Link to post
Share on other sites
No that didn't fix it.
I have already tested that exact set pixel function. It works perfectly.
Oh. And the debugger that comes with Dev-C++ is extremly glitchy and poor. It only gives me the information about half of the time.

Share this post


Link to post
Share on other sites

#include "SDL.h"

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define RMASK 0xFF000000
#define BMASK 0x00FF0000
#define GMASK 0x0000FF00
#define AMASK 0x000000FF
#else
#define AMASK 0xFF000000
#define BMASK 0x00FF0000
#define GMASK 0x0000FF00
#define RMASK 0x000000FF
#endif

using namespace std;

void SetPixel8Bit(SDL_Surface *surface, int x, int y, Uint8 Color);
void SetPixel32Bit(SDL_Surface *surface, int x, int y, Uint32 Color);
SDL_Surface * Load24BitBitmap(char *FileName);

struct BitmapFileHeader
{
unsigned short bfType; //must be 19778
unsigned int bfSize;
unsigned short bfReserved1, bfReserved2;
unsigned int bfOffBits;
};

struct BitmapInfoHeader
{
unsigned int biSize;
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
unsigned int biXPelsPerMeter;
unsigned int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};

struct RgbQuadLilEndian
{
char rgbReserved;
char rgbBlue;
char rgbGreen;
char rgbRed;
};

struct Bitmap
{
BitmapFileHeader BitmapFile;
BitmapInfoHeader BitmapInfo;
RgbQuadLilEndian* BitmapData;
};

int main(int argc, char **argv)
{
SDL_Init(SDL_INIT_VIDEO);

SDL_Surface *screen = SDL_SetVideoMode
(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

srand(time(NULL));

SDL_Surface *image = Load24BitBitmap("test2.bmp");

SDL_BlitSurface(image, NULL, screen, NULL);

SDL_Flip(screen);

SDL_Delay(2000);

SDL_Quit();


return 0;
}

void SetPixel8Bit(SDL_Surface *surface, int x, int y, Uint8 Color)
{
Uint8 *bufp;
bufp = (Uint8 *)surface->pixels + y*surface->pitch + x;
*bufp = Color;
}

void SetPixel32Bit(SDL_Surface *surface, int x, int y, Uint32 Color)
{
Uint32 *pBuf = (Uint32*)surface->pixels + y * surface->pitch/4 + x;
*(Uint32*)pBuf = Color;
}

SDL_Surface* Load24BitBitmap(char *FileName)
{
Bitmap BitmapToLoad; //bitmap structure
SDL_Surface *surface; //surface to load the bitmap to

fstream File(FileName, ios::in | ios::binary); //open bitmap file
//load the bitmap File Header
File.read((char*)&BitmapToLoad.BitmapFile.bfType, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapFile.bfSize, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapFile.bfReserved1, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapFile.bfReserved2, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapFile.bfOffBits, sizeof(unsigned int));
//load the bitmap data header
File.read((char*)&BitmapToLoad.BitmapInfo.biSize, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biWidth, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biHeight, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biPlanes, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapInfo.biBitCount, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapInfo.biCompression, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biSizeImage, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biXPelsPerMeter, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biYPelsPerMeter, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biClrUsed, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biClrImportant, sizeof(unsigned int));

int TotalPixels = BitmapToLoad.BitmapInfo.biWidth * BitmapToLoad.BitmapInfo.biHeight;

BitmapToLoad.BitmapData = new RgbQuadLilEndian[TotalPixels];

int Width = BitmapToLoad.BitmapInfo.biWidth;
int Height = BitmapToLoad.BitmapInfo.biHeight;

//Load the rest of the file, minus the BitmapFile & BitmapInfo (which are 54 bytes total)
File.read((char*)&BitmapToLoad.BitmapData, BitmapToLoad.BitmapFile.bfSize -
BitmapToLoad.BitmapFile.bfOffBits);

File.close();

surface = SDL_CreateRGBSurface
(SDL_HWSURFACE, Width, Height, 32, RMASK, GMASK, BMASK, AMASK);

//draw the pixel data bottom to top because that's how a BMP is stored
for(int i = 0; i == Width; ++i)
for(int j = Height; j == 0; --j)
{
char r = BitmapToLoad.BitmapData[i*j].rgbRed;
char b = BitmapToLoad.BitmapData[i*j].rgbBlue;
char g = BitmapToLoad.BitmapData[i*j].rgbGreen;
SetPixel32Bit(surface, i, j, SDL_MapRGB(surface->format, r, g, b));
}

delete BitmapToLoad.BitmapData;

return surface;
}



This is the updated source.

Share this post


Link to post
Share on other sites

for(int i = 0; i == Width; ++i)
for(int j = Height; j == 0; --j)


Eh? Aren't those 2nd params supposed to be != or perpaps even < or <=?

Share this post


Link to post
Share on other sites
I feel horrifically stupid right now. You have to understand, it's late right now :) Hold on.
No, it still doesn't work.

Edit:
And now that I've rebuilt my project it's telling me where the seg fault is, so I'm going to try again.

[Edited by - Drakkcon on June 30, 2005 11:09:59 PM]

Share this post


Link to post
Share on other sites
Okay, this makes no sense. It's telling me that there's a segmentation fault on this line:

char r = BitmapToLoad.BitmapData[i*j].rgbRed;
it says that i * j = 0

Um, is that a problem? Don't arrays count from 0?

Share this post


Link to post
Share on other sites
I think your problem is that j is wrong. You should be using j = (Height - 1). I'm still working on it, but I believe that this is why you're getting that error.

Edit: Ok, I've found an access violation on this line:
File.read((char*)&BitmapToLoad.BitmapData, BitmapToLoad.BitmapFile.bfSize - 
BitmapToLoad.BitmapFile.bfOffBits);


Also, since you're using new[] you should be using delete[]
delete [] BitmapToLoad.BitmapData;


Well, I tried but I just don't know enough about the BMP fileformat and SDL. Drew_Benton also caught the & operator (in the above line) that I didn't. Good luck!

[Edited by - Programmer16 on July 1, 2005 12:59:04 AM]

Share this post


Link to post
Share on other sites
Doing a little debugging, did you know you have a "First-chance exception in Drakkcon.exe (MSVCP60D.DLL): 0xC0000005: Access Violation." on this line:
//Load the rest of the file, minus the BitmapFile & BitmapInfo (which are 54 bytes total)
File.read((char*)&BitmapToLoad.BitmapData, BitmapToLoad.BitmapFile.bfSize - BitmapToLoad.BitmapFile.bfOffBits);


You need to take out the & so you are reading into memory rather than the address. Next your loop is wrong! It should look like this:

//draw the pixel data bottom to top because that's how a BMP is stored
for(int i = 0; i < Width; ++i)
{
for(int j = Height - 1; j >= 0; --j)
{
char r = BitmapToLoad.BitmapData[i + j*Width].rgbRed;
char b = BitmapToLoad.BitmapData[i + j*Width].rgbBlue;
char g = BitmapToLoad.BitmapData[i + j*Width].rgbGreen;
SetPixel32Bit(surface, i, j, SDL_MapRGB(surface->format, r, g, b));
}
}




Note how j needs to be Height - 1, access of the data is i + j * Width (standard way of accessing an array that is meant to act as a matrix). Now that does not fix everything but that should at least give you a good start. Right now it's sorta displaying my image, but it's all grabled, but I can kinda see it, so you are close! Good luck!

Share this post


Link to post
Share on other sites
you're requesting a hardware surface and writing to it without locking it. i'm pretty sure that can cause an access violation.

before you write to the pixels of a surface:

if ( SDL_MUSTLOCK( surface ) ) SDL_LockSurface( surface );
// write pixels to surface
if ( SDL_MUSTLOCK( surface ) ) SDL_UnlockSurface( surface );


edit:
Quote:

PS: Don't tell me to use SDL_Image. I'm doing this for the sake of knowledge, not a professional project.

SDL.h has SDL_LoadBMP and SDL_SaveBMP if you weren't aware. SDL_Image has other formats.

Share this post


Link to post
Share on other sites
Alright, thanks everyone! I'll be fixing it today. As soon as I get on my main computer I'll try this and rate everyone up.

Share this post


Link to post
Share on other sites
Quote:
Original post by Drew_Benton
Doing a little debugging, did you know you have a "First-chance exception in Drakkcon.exe (MSVCP60D.DLL): 0xC0000005: Access Violation." on this line:
//Load the rest of the file, minus the BitmapFile & BitmapInfo (which are 54 bytes total)
File.read((char*)&BitmapToLoad.BitmapData, BitmapToLoad.BitmapFile.bfSize - BitmapToLoad.BitmapFile.bfOffBits);


You need to take out the & so you are reading into memory rather than the address. Next your loop is wrong! It should look like this:
*** Source Snippet Removed ***

Note how j needs to be Height - 1, access of the data is i + j * Width (standard way of accessing an array that is meant to act as a matrix). Now that does not fix everything but that should at least give you a good start. Right now it's sorta displaying my image, but it's all grabled, but I can kinda see it, so you are close! Good luck!


Thank you very much! I see it too, almost there!

@Gumpy MacDrunken: I know about SDL_LoadBMP. I know it's not in SDL_Image, but since I'm doing it to learn about BMP formats I obviously don't want to use those functions. Oh, and thank you for reminding me to lock the surface.

Share this post


Link to post
Share on other sites
Alright, the color data is almost there. The problem was that I thought there was 8 bits of reserved data after the bgr, but there isn't. The only problem I have left is that I can't seem to orient the picture right (I'll try to fix the color inversion):

The base image:


The blitted image:


this is the new source code, I stopped using the pixel struct I was using, and all is well on that side:

#include "SDL.h"

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define RMASK 0xFF000000
#define BMASK 0x00FF0000
#define GMASK 0x0000FF00
#define AMASK 0x000000FF
#else
#define AMASK 0xFF000000
#define BMASK 0x00FF0000
#define GMASK 0x0000FF00
#define RMASK 0x000000FF
#endif

using namespace std;

bool Running();
void SetPixel8Bit(SDL_Surface *surface, int x, int y, Uint8 Color);
void SetPixel32Bit(SDL_Surface *surface, int x, int y, Uint32 Color);
SDL_Surface * Load24BitBitmap(char *FileName);

struct BitmapFileHeader
{
unsigned short bfType; //must be 19778
unsigned int bfSize;
unsigned short bfReserved1, bfReserved2;
unsigned int bfOffBits;
};

struct BitmapInfoHeader
{
unsigned int biSize;
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
unsigned int biXPelsPerMeter;
unsigned int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};

struct Bitmap
{
BitmapFileHeader BitmapFile;
BitmapInfoHeader BitmapInfo;
};

int main(int argc, char **argv)
{
SDL_Init(SDL_INIT_VIDEO);

SDL_Surface *screen = SDL_SetVideoMode
(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

srand(time(NULL));

SDL_Surface *image = Load24BitBitmap("test2.bmp");

SDL_BlitSurface(image, NULL, screen, NULL);

SDL_Flip(screen);

while(Running())
{
SDL_Delay(100);
}

SDL_Quit();


return 0;
}

void SetPixel8Bit(SDL_Surface *surface, int x, int y, Uint8 Color)
{
Uint8 *bufp;
bufp = (Uint8 *)surface->pixels + y*surface->pitch + x;
*bufp = Color;
}

void SetPixel32Bit(SDL_Surface *surface, int x, int y, Uint32 Color)
{
Uint32 *pBuf = (Uint32*)surface->pixels + y * surface->pitch/4 + x;
*(Uint32*)pBuf = Color;
}

SDL_Surface* Load24BitBitmap(char *FileName)
{
Bitmap BitmapToLoad; //bitmap structure
SDL_Surface *surface; //surface to load the bitmap to

fstream File(FileName, ios::in | ios::binary); //open bitmap file
//load the bitmap File Header
File.read((char*)&BitmapToLoad.BitmapFile.bfType, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapFile.bfSize, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapFile.bfReserved1, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapFile.bfReserved2, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapFile.bfOffBits, sizeof(unsigned int));
//load the bitmap data header
File.read((char*)&BitmapToLoad.BitmapInfo.biSize, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biWidth, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biHeight, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biPlanes, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapInfo.biBitCount, sizeof(unsigned short));
File.read((char*)&BitmapToLoad.BitmapInfo.biCompression, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biSizeImage, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biXPelsPerMeter, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biYPelsPerMeter, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biClrUsed, sizeof(unsigned int));
File.read((char*)&BitmapToLoad.BitmapInfo.biClrImportant, sizeof(unsigned int));

int TotalPixels = BitmapToLoad.BitmapInfo.biWidth * BitmapToLoad.BitmapInfo.biHeight;

int Width = BitmapToLoad.BitmapInfo.biWidth;
int Height = BitmapToLoad.BitmapInfo.biHeight;

surface = SDL_CreateRGBSurface
(SDL_HWSURFACE, Width, Height, 32, RMASK, GMASK, BMASK, AMASK);

if ( SDL_MUSTLOCK( surface ) ) SDL_LockSurface( surface );

for(int i = 0; i < Width; ++i)
for(int j = Height - 1; j >= 0; --j)
{
char r, g, b;
File.read((char*)&b, sizeof(char));
File.read((char*)&g, sizeof(char));
File.read((char*)&r, sizeof(char));
//File.read((char*)&reserved, sizeof(char));
SetPixel32Bit(surface, i, j, SDL_MapRGB(surface->format, r, g, b));
}

if ( SDL_MUSTLOCK( surface ) ) SDL_UnlockSurface( surface );

File.close();

return surface;
}

bool Running()
{
static SDL_Event event;
SDL_PollEvent(&event);

if(event.type == SDL_QUIT)
return false;

if(event.type == SDL_KEYDOWN)
if(event.key.keysym.sym == SDLK_ESCAPE)
return false;

return true;
}









Edit: I fixed the color problem, I was using big endian instead of little.

[Edited by - Drakkcon on July 1, 2005 3:19:47 PM]

Share this post


Link to post
Share on other sites
Changing the loop to this seems to work:

for(int j = Height - 1; j >= 0; --j)
{
for(int i = 0; i < Width; ++i)
{
char r, g, b;
File.read((char*)&b, sizeof(char));
File.read((char*)&g, sizeof(char));
File.read((char*)&r, sizeof(char));
SetPixel32Bit(surface, i, j, SDL_MapRGB(surface->format, r, g, b));
}
}


I switch the i into the inner loop.

This is how I've always done it and how I've always seen it done (but I don't know why it wasn't working correctly.)

Share this post


Link to post
Share on other sites
Yes! Thanks man, works perfectly! I would rate you up, but it seems that I have already done so...:(

Now that my curiosity of the bitmap file format has been satiated, I shall use SDL_LoadBMP :)

Edit: No. Now I'm going to create my own file format (muahahahah)

Share this post


Link to post
Share on other sites
Now why didn't I think of that? You could come out with a whole line of "internet" file formats:
stfu
wtf
1337
nOOb
newb
pwnd
ownd
The list goes on :D

PS: How come when I rated you up you went from 1160 to 1160 (you didn't even go up a point)?

Share this post


Link to post
Share on other sites
Quote:
Original post by Programmer16
Now why didn't I think of that? You could come out with a whole line of "internet" file formats:
stfu
wtf
1337
nOOb
newb
pwnd
ownd
The list goes on :D

PS: How come when I rated you up you went from 1160 to 1160 (you didn't even go up a point)?


Those are all good :)

As for the rating, are you using CProgrammer's FireFox plugin? I am, and it usually takes me a while to realize that I have already rated someone up. But don't worry about it, it's the thought that counts :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this