I am working on a pretty simple game with a couple of friends and i have a constructor that reads from a file. It works fine in windows but in linux it just freezes up. There are no windows specific routines in the constructor but for some reason it will not work. Can anyone help me figure out what is causing this. Any help would be uber appreciated.

It is an allegro program. In windows i use devc++ to link the allegro libraries. In linux i am using code::blocks and i have `allegro-config --libs` in the 'other linker' box. That is what i have found to do the trick. `allegro-config --libs` is also how i compile allegro from the command line.

card.cpp
Code:
#include <allegro.h>
#include "standard_tcg.h"
#include "card.h"
#include "buttons.h"
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cstring>
using namespace std;

Card::Card(char id[7])
{
    char set[4];
    char card[5];
    char fname[255];

    // parse the id into a set and card number
    for(int i = 0; i < 7; i++)
    {
        if(i < 3)
        {
            set[i] = id[i];
        }
        else
        {
            card[i-3] = id[i];
        }
    }
    card[4] = '\0';


    strcpy(fname, "card_data\\set");
    strcat(fname, set);
    strcat(fname, ".tcg");
    strcpy(filename, fname);

    ifstream IFP (fname);

    char comp_card[4];
    char send_buffer[512];
    char check;
    int  Icheck;

    int index = 0;

    while(!IFP.eof())
    {
        if(check == '[')
        {
            if(strcmp(card, comp_card) == 0)
            {
                // parsing starts
                IFP >> check >> check;

                while(check != '>')
                    IFP >> check;

                index = 0;
                while(check != '#')
                {
                    IFP >> check;
                    send_buffer[index] = check;
                    index++;
                }
                send_buffer[index-1] = '\0';
                strcpy(Name, send_buffer);

                while(check != '>')
                    IFP >> check;

                IFP >> skipws;
                IFP >> Icheck;
                type1 = Icheck;

                IFP >> noskipws >> check;
                while(check != '>')
                    IFP >> check;

                IFP >> skipws;
                IFP >> Icheck;
                type2 = Icheck;

                IFP >> noskipws >> check;

                while(check != '>')
                    IFP >> check;

                //getting ability number 1
                index = 0;
                while(check != '#')
                {
                    IFP >> check;

					send_buffer[index] = check;
					index++;
                }
				send_buffer[index-1] = '\0';
				strcpy(ability_1, send_buffer);
            }
        }
        IFP >> check;
    }
}

int Card::Print_Card(BITMAP *bmp, int x, int y)
{
    textprintf_ex(bmp, font, x, y+10, WHITE, -1,"%d", type1);
    textprintf_ex(bmp, font, x, y+20, WHITE, -1,"%d", type2);
    textprintf_ex(bmp, font, x, y+30, WHITE, -1,"%s", ability_1);
    textprintf_ex(bmp, font, x, y+100, WHITE, -1,"%s", filename);
    return 0;
}
I'm at a loss here...