blob: 32cc011b1e66c8e487c84ec29a87f50e0ed40fb2 [file] [log] [blame]
/*************************************************************************/
/* */
/* Copyright (c) 1994 Stanford University */
/* */
/* All rights reserved. */
/* */
/* Permission is given to use, copy, and modify this software for any */
/* non-commercial purpose as long as this copyright notice is not */
/* removed. All other uses, including redistribution in whole or in */
/* part, are forbidden without prior written permission. */
/* */
/* This software is provided with absolutely no warranty and no */
/* support. */
/* */
/*************************************************************************/
/******************************************************************************
* *
* map.c: Loads 3D density map. *
* *
******************************************************************************/
#include <string.h>
#include "incl.h"
/* The following declarations show the layout of the .den file. */
/* If changed, the version number must be incremented and code */
/* written to handle loading of both old and current versions. */
/* Version for new .den files: */
#define MAP_CUR_VERSION 1 /* Initial release */
short map_version; /* Version of this .den file */
short orig_min[NM], /* Dimensions of original data file */
orig_max[NM], /* (CT: from <file>.header file */
orig_len[NM]; /* ED: from <file>.mi file) */
short extr_min[NM], /* Portion of file extracted for this map */
extr_max[NM], /* (mins and maxes will be subset of */
extr_len[NM]; /* orig and lengths will be <= orig) */
short map_min[NM], /* Dimensions of this map */
map_max[NM], /* (mins will be 0 in this program and */
map_len[NM]; /* lens may be != extr if warps > 0) */
short map_warps; /* Number of warps since extraction */
/* (0 = none) */
int map_length; /* Total number of densities in map */
/* (= product of lens) */
DENSITY *map_address; /* Pointer to map */
/* End of layout of .den file. */
EXTERN_ENV
void Load_Map(filename)
char filename[];
{
char local_filename[FILENAME_STRING_SIZE];
int fd;
strcpy(local_filename,filename);
strcat(local_filename,".den");
fd = Open_File(local_filename);
Read_Shorts(fd,(unsigned char *)&map_version, (long)sizeof(map_version));
if (map_version != MAP_CUR_VERSION)
Error(" Can't load version %d file\n",map_version);
Read_Shorts(fd,(unsigned char *)orig_min,(long)sizeof(orig_min));
Read_Shorts(fd,(unsigned char *)orig_max,(long)sizeof(orig_max));
Read_Shorts(fd,(unsigned char *)orig_len,(long)sizeof(orig_len));
Read_Shorts(fd,(unsigned char *)extr_min,(long)sizeof(extr_min));
Read_Shorts(fd,(unsigned char *)extr_max,(long)sizeof(extr_max));
Read_Shorts(fd,(unsigned char *)extr_len,(long)sizeof(extr_len));
Read_Shorts(fd,(unsigned char *)map_min,(long)sizeof(map_min));
Read_Shorts(fd,(unsigned char *)map_max,(long)sizeof(map_max));
Read_Shorts(fd,(unsigned char *)map_len,(long)sizeof(map_len));
Read_Shorts(fd,(unsigned char *)&map_warps,(long)sizeof(map_warps));
Read_Longs(fd,(unsigned char *)&map_length,(long)sizeof(map_length));
Allocate_Map(&map_address,map_length);
printf(" Loading map from .den file...\n");
Read_Bytes(fd,(unsigned char *)map_address,(long)(map_length*sizeof(DENSITY)));
Close_File(fd);
}
void Allocate_Map(address, length)
DENSITY **address;
long length;
{
long i;
printf(" Allocating density map of %ld bytes...\n",
length*sizeof(DENSITY));
*address = (DENSITY *)NU_MALLOC(length*sizeof(DENSITY),0);
if (*address == NULL)
Error(" No space available for map.\n");
else
for (i=0; i<length; i++) *(*address+i) = 0;
}
void Deallocate_Map(address)
DENSITY **address;
{
printf(" Deallocating density map...\n");
/* G_FREE(*address); */
*address = NULL;
}