/*********************************************************************** *_Title ADDLAB - Combine VICAR label and PDS label/edr data file * *_Descr ADDLAB combines the VICAR label and the PDS label/edr data files * that were created for CDROM into the original NIMS edr file format * of 1024 byte records. ADDLAB is used solely to create a file for * the VICAR/NIMS software systems which reqire a VICAR formatted * file. * * ADDLAB has two command-line arguments - the first parameter must * contain the name of the PDS/EDR labeled file. Specify the complete * pathname, including the directory specification. The program will * determine the name of the VICAR label file. The second parameter * is the output file. * * The commands to compile, link and run this program on a DEC VAX * and a SUN UNIX workstation are below. * * VAX: * cc addlab * link addlab * To run a C program with command-line arguments on a VAX the * program must be installed as a foreign command: * eg: addf=="$disk:[directory]addlab.exe" * To run: * eg: addf pdsfile outfile * * * SUN UNIX: * cc -o addlab.exe addlab.c will compile and link * the program. * addlab pdsfile outfile will run the program. * *_Hist Nov 18 1992 Tracie Stoewe, PDS Imaging Node, USGS, Flagstaff Az * *_End ************************************************************************/ #include #include #include #define IREC_LEN1 1024 #define IREC_LEN2 512 #define OREC_LEN 1024 #define VIC "VIC" #define vic "vic" int vicname(); main(argc, argv) int argc; char *argv[]; { static char vicfile[81]; /* Name of VICAR label file */ static char pdsfile[81]; /* Name of PDS file */ static char outfile[81]; /* Name of out file(VICAR label + PDS file) */ char ibuf[OREC_LEN]; int ierr; FILE *fpi1; FILE *fpi2; FILE *fpo; if (argc != 3) { printf("You must specify the PDS image filename in 1st argument\n"); printf("You must specify output filename in 2nd argument\n"); exit; } /************************************************************************** * The VICAR label file is constructed from the PDS filename ***************************************************************************/ strcpy(pdsfile,argv[1]); strcpy(outfile,argv[2]); ierr = vicname(vicfile,pdsfile); if (ierr != 0) exit; /*************************************************************************** * Open input files ****************************************************************************/ if ( (fpi1 = fopen(vicfile,"rb")) == NULL ) { printf(" *** ERROR *** Can't open VICAR label file %s\n",vicfile); exit; } if ( (fpi2 = fopen(pdsfile,"rb")) == NULL ) { printf(" *** ERROR *** Can't open PDS image file %s\n",pdsfile); exit; } /************************************************************************** * Open output file ( VICAR label + PDS edr file including PDS labels ***************************************************************************/ # ifdef vax fpo = fopen(outfile,"wb","rfm=fix","fop=cbt","mrs=1024"); # else fpo = fopen(outfile,"wb"); # endif if (fpo == NULL) { printf(" *** ERROR *** Can't open outpuf image file %s\n",outfile); exit; } /************************************************************************* * Read VICAR label and write to ouput **************************************************************************/ fread(ibuf, IREC_LEN1, 1, fpi1); fwrite(ibuf, OREC_LEN, 1, fpo); fclose(fpi1); /************************************************************************* * Read PDS labels and image and write to output- input has 512 byte records, * output has 1024 byte records /*************************************************************************/ while (!feof(fpi2)) { fread(ibuf,IREC_LEN2, 1, fpi2); fread(ibuf+IREC_LEN2,IREC_LEN2,1,fpi2); if (!feof(fpi2)) fwrite(ibuf, OREC_LEN, 1, fpo); } fclose(fpi2); fclose(fpo); } int vicname(vicfile, pdsfile) char *vicfile; char *pdsfile; /*************************************************************************** * vicname creates the VICAR label filename from the PDS edr filename * which is input /***************************************************************************/ { char *i; strcpy(vicfile, pdsfile); i = strstr(vicfile, "EDR"); if (i == NULL) i = strstr(vicfile, "edr"); if (i == NULL) goto err; if (*i == 'E') strncpy(i,VIC,3); if (*i == 'e') strncpy(i,vic,3); i = strrchr(vicfile,']'); if (i == NULL) i = strrchr(vicfile,'/'); if (i == NULL) i = strrchr(vicfile,'\\'); if (i == NULL) i = strrchr(vicfile,':'); if (i == NULL) goto err; if ( (toupper(*(++i))) != 'E') goto err; *i = (*i == 'E')?'V':'v'; return 0; err: printf("*** ERROR *** Can not build VICAR file name\n"); printf("from the PDS file name: %s\n",pdsfile); printf("You must include the full directory name"); return -1; }