Input problems with DJGPP?
Hi,
Iīve written this program to input some data, and make some calculation on this data. Problem is that I cannot get the input working. Iīve copied the code from another program of mine where there are no problems. Iīm using DJGPP, and Iīve tried to compile it on Solaris too. On Solaris it works fine - THE SAME CODE!!1
Can anyone help me explain this??
Code is as goes:
Code:
#include <math.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
using namespace std;
void calcProbs(unsigned char* data ,int* probs,int size);
double getEntropy(int* probs,int size);
void makeDiffs(unsigned char* data,int size);
#define MAXFILESIZE 1000000
int main(int argc,char** argv){
unsigned char* data; // Data buffer
unsigned char* data2; // Data buffer
int i,j; // Loop vars
int probs[256]; // Probability vars
double entropy; // Calculated Entropy
ifstream in; // Input Filestream
char* temp; // Temporary var
if(argc!=2){ cerr << "Wrong number of arguments" << endl; return 0;}
data=(unsigned char*) malloc(MAXFILESIZE); // Alloc some memory
if(data==NULL){ return 0; }
data2=(unsigned char*) malloc(MAXFILESIZE); // Alloc some memory
if(data2==NULL){ free(data); return 0; }
i=0;
in.open(argv[1],ifstream::in); // open file
while(in.good()){
data[i++]=in.get();
}
in.close(); // close file
// Read input!
cout << i << endl; // Output numbers of bytes read
calcProbs(data,probs,i);
entropy=getEntropy(probs,i);
cout << "original entropy: " << entropy << endl;
makeDiffs(data,i);
calcProbs(data,probs,i);
entropy=getEntropy(probs,i);
cout << "difference entropy: " << entropy << endl;
free(data);
free(data2);
}
void calcProbs(unsigned char* data ,int* probs,int size){
int i;
unsigned char c;
for(i=0;i<256;i++){
probs[i]=0;
}
for(i=0;i<size;i++){
c=data[i];
probs[c]++;
}
}
double getEntropy(int* probs,int size){
int i;
double size2,temp,temp2;
temp2=0.0;
size2=(double) size;
for(i=0;i<256;i++){
if(probs[i]){
temp=(double) probs[i];
temp/=size2;
temp2+=temp*log(temp);
}
}
temp2/=log(2.0);
temp2=-temp2;
return temp2;
}
void makeDiffs(unsigned char* data,int size){
unsigned char c,d;
int i;
c=0;
for(i=0;i<size;i++){
d=data[i];
data[i]=d-c;
c=d;
}
}