Thread: allocate function

  1. #1
    Registered User
    Join Date
    Apr 2005
    Posts
    10

    allocate function

    Is there an allocate function define in the c++ library. I am using microsoft visual c++ to compile the following code but on the following line #include<alloc.h> it is giving me an error that the library doesn't exist. any idea how to fix it or was this create it by the person who wrote the code.

    Here are the codes:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <alloc.h>
    
    /*-------STRUCTURES---------*/
    typedef struct {int rows; int cols; unsigned char* data;} sImage;
    
    /*-------PROTOTYPES---------*/
    long getImageInfo(FILE*, long, int);
    void copyImageInfo(FILE* inputFile, FILE* outputFile);
    void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors);
    
    int main(int argc, char* argv[])
    {
       FILE			*bmpInput, *bmpOutput;
       sImage		originalImage;
       sImage		edgeImage;
       unsigned int		X, Y;
       int			I, J;
       long			sumX, sumY;
       int			nColors, SUM;
       unsigned long	vectorSize;
       unsigned long	fileSize;
       int			GX[3][3];
       int			GY[3][3];
       unsigned char 	*pChar, someChar;
       unsigned int		row, col;
    
       someChar = '0'; pChar = &someChar;
    
       /* 3x3 GX Sobel mask. 
       GX[0][0] = -1; GX[0][1] = 0; GX[0][2] = 1;
       GX[1][0] = -2; GX[1][1] = 0; GX[1][2] = 2;
       GX[2][0] = -1; GX[2][1] = 0; GX[2][2] = 1;
    
       /* 3x3 GY Sobel mask.  
       GY[0][0] =  1; GY[0][1] =  2; GY[0][2] =  1;
       GY[1][0] =  0; GY[1][1] =  0; GY[1][2] =  0;
       GY[2][0] = -1; GY[2][1] = -2; GY[2][2] = -1;
    
       if(argc < 2) {
         printf("Usage: %s bmpInput.bmp\n", argv[0]);
         exit(0);
       };
       printf("Reading filename %s\n", argv[1]);
    
       /*-------DECLARE INPUT & OUTPUT FILES-------*/
       bmpInput = fopen(argv[1], "rb");
       bmpOutput = fopen("edgeSob.bmp", "wb");
    
       /*---SET POINTER TO BEGINNING OF FILE----*/
       fseek(bmpInput, 0L, SEEK_END);
    
       /*-------GET INPUT BMP DATA--------*/
       fileSize = getImageInfo(bmpInput, 2, 4);
       originalImage.cols = (int)getImageInfo(bmpInput, 18, 4);
       originalImage.rows = (int)getImageInfo(bmpInput, 22, 4);
       edgeImage.rows = originalImage.rows;
       edgeImage.cols = originalImage.cols;
    
       /*--------PRINT DATA TO SCREEN----------*/
       printf("Width: %d\n", originalImage.cols);
       printf("Height: %d\n", originalImage.rows);
       printf("File size: %lu\n", fileSize);
    
       nColors = (int)getImageInfo(bmpInput, 46, 4);
       printf("nColors: %d\n", nColors);
    
       /*------ALLOCATE MEMORY FOR FILES--------*/
       vectorSize = fileSize - (14+40+4*nColors);
       printf("vectorSize: %lu\n", vectorSize);
       edgeImage.data = farmalloc(vectorSize*sizeof(unsigned char));
       if(edgeImage.data == NULL) {
    	printf("Failed to malloc edgeImage.data\n");
    	exit(0);
       }
       printf("%lu bytes malloc'ed for edgeImage.data\n", vectorSize);
    
       originalImage.data = farmalloc(vectorSize*sizeof(unsigned char));
       if(originalImage.data == NULL) {
    	printf("Failed to malloc originalImage.data\n");
    	exit(0);
       }
       printf("%lu bytes malloc'ed for originalImage.datt\n", vectorSize);
    
       /*------COPY HEADER AND COLOR TABLE---------*/
       copyImageInfo(bmpInput, bmpOutput);
       copyColorTable(bmpInput, bmpOutput, nColors);
       fseek(bmpInput, (14+40+4*nColors), SEEK_SET);
       fseek(bmpOutput, (14+40+4*nColors), SEEK_SET);
    
       /* Read input.bmp and store it's raster data into originalImage.data */
       for(row=0; row<=originalImage.rows-1; row++) {
    	for(col=0; col<=originalImage.cols-1; col++) {
    	     fread(pChar, sizeof(char), 1, bmpInput);
    	     *(originalImage.data + row*originalImage.cols + col) = *pChar;
    	}
       }
    
       /*---------------------------------------------------
    		SOBEL ALGORITHM STARTS HERE
       ---------------------------------------------------*/
       for(Y=0; Y<=(originalImage.rows-1); Y++)  {
    	for(X=0; X<=(originalImage.cols-1); X++)  {
    	     sumX = 0;
    	     sumY = 0;
    
                 /* image boundaries */
    	     if(Y==0 || Y==originalImage.rows-1)
    		  SUM = 0;
    	     else if(X==0 || X==originalImage.cols-1)
    		  SUM = 0;
    
    	     /* Convolution starts here */
    	     else   {
    
    	       /*-------X GRADIENT APPROXIMATION------*/
    	       for(I=-1; I<=1; I++)  {
    		   for(J=-1; J<=1; J++)  {
    		      sumX = sumX + (int)( (*(originalImage.data + X + I + (Y + J)*originalImage.cols)) * GX[I+1][J+1]);
    		   }
    	       }
    	       if(sumX>255)  sumX=255;
    	       if(sumX<0)    sumX=0;
    
    	       /*-------Y GRADIENT APPROXIMATION-------*/
    	       for(I=-1; I<=1; I++)  {
    		   for(J=-1; J<=1; J++)  {
    		       sumY = sumY + (int)( (*(originalImage.data + X + I + (Y + J)*originalImage.cols)) * GY[I+1][J+1]);
    		   }
    	       }
    	       if(sumY>255)   sumY=255;
    	       if(sumY<0)     sumY=0;
    
    	       SUM = abs(sumX) + abs(sumY); /*---GRADIENT MAGNITUDE APPROXIMATION (Myler p.218)----*/
                 }
    
    	     *(edgeImage.data + X + Y*originalImage.cols) = 255 - (unsigned char)(SUM);  /* make edges black and background white */
    	     fwrite( (edgeImage.data + X + Y*originalImage.cols), sizeof(char), 1, bmpOutput);
    	}
       }
    
       printf("See edgeSob.bmp for results\n");
       fclose(bmpInput);
       fclose(bmpOutput);
       farfree(edgeImage.data);      /* Finished with edgeImage.data */
       farfree(originalImage.data);  /* Finished with originalImage.data */
       return 0;
    }
    
    /*----------GET IMAGE INFO SUBPROGRAM--------------*/
    long getImageInfo(FILE* inputFile, long offset, int numberOfChars)
    {
      unsigned char			*ptrC;
      long				value = 0L;
      unsigned char			dummy;
      int				i;
    
      dummy = '0';
      ptrC = &dummy;
    
      fseek(inputFile, offset, SEEK_SET);
    
      for(i=1; i<=numberOfChars; i++)
      {
        fread(ptrC, sizeof(char), 1, inputFile);
        /* calculate value based on adding bytes */
        value = (long)(value + (*ptrC)*(pow(256, (i-1))));
      }
      return(value);
    
    } /* end of getImageInfo */
    
    /*-------------COPIES HEADER AND INFO HEADER----------------*/
    void copyImageInfo(FILE* inputFile, FILE* outputFile)
    {
      unsigned char		*ptrC;
      unsigned char		dummy;
      int				i;
    
      dummy = '0';
      ptrC = &dummy;
    
      fseek(inputFile, 0L, SEEK_SET);
      fseek(outputFile, 0L, SEEK_SET);
    
      for(i=0; i<=50; i++)
      {
        fread(ptrC, sizeof(char), 1, inputFile);
        fwrite(ptrC, sizeof(char), 1, outputFile);
      }
    
    }
    
    /*----------------COPIES COLOR TABLE-----------------------------*/
    void copyColorTable(FILE* inputFile, FILE* outputFile, int nColors)
    {
      unsigned char		*ptrC;
      unsigned char		dummy;
      int				i;
    
      dummy = '0';
      ptrC = &dummy;
    
      fseek(inputFile, 54L, SEEK_SET);
      fseek(outputFile, 54L, SEEK_SET);
    
      for(i=0; i<=(4*nColors); i++)  /* there are (4*nColors) bytesin color table */
      {
        fread(ptrC, sizeof(char), 1, inputFile); 
        fwrite(ptrC, sizeof(char), 1, outputFile);
      }
    
    }

  2. #2
    Chief Code Coloniser!
    Join Date
    Apr 2005
    Posts
    121
    Why are you posting the same question multiple times?

  3. #3
    Registered User hk_mp5kpdw's Avatar
    Join Date
    Jan 2002
    Location
    Northern Virginia/Washington DC Metropolitan Area
    Posts
    3,817
    The answer is no, that header file is not a part of Microsoft Visual C++ (at least 6.0 version I have). BTW that code is C not C++. A C++ program would be using the new operator instead of calling farmalloc.
    "Owners of dogs will have noticed that, if you provide them with food and water and shelter and affection, they will think you are god. Whereas owners of cats are compelled to realize that, if you provide them with food and water and shelter and affection, they draw the conclusion that they are gods."
    -Christopher Hitchens

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. dllimport function not allowed
    By steve1_rm in forum C++ Programming
    Replies: 5
    Last Post: 03-11-2008, 03:33 AM
  2. We Got _DEBUG Errors
    By Tonto in forum Windows Programming
    Replies: 5
    Last Post: 12-22-2006, 05:45 PM
  3. <Gulp>
    By kryptkat in forum Windows Programming
    Replies: 7
    Last Post: 01-14-2006, 01:03 PM
  4. Problem with Visual C++ Object-Oriented Programming Book.
    By GameGenie in forum C++ Programming
    Replies: 9
    Last Post: 08-29-2005, 11:21 PM
  5. Question..
    By pode in forum Windows Programming
    Replies: 12
    Last Post: 12-19-2004, 07:05 PM