##// END OF EJS Templates
Review updata app
Review updata app

File last commit:

r0:b84e1135c2c4
r8:9c1b6919a8a9
Show More
testMadrecMemIO.c
224 lines | 7.2 KiB | text/x-c | CLexer
/* $Id: testMadrecMemIO.c 3304 2011-01-17 15:25:59Z brideout $ */
/*
modification history
--------------------
01a,28Jan02 Original
*/
/*
* Usage: testMadrecMemIO inputFile
*
* This program tests the madrec interface to unblocked binary file
* memory images (file type 25).
*
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <madrec.h>
#include <cedar.h>
int
main (argc, argv)
int argc;
char *argv[];
{
Madrec *madrecrp, /* Input file - any type */
*madrecwp, /* Output File - type 0-4 */
*madrecmp; /* unblocked memory image */
char *infile, *outfile;
int iotype, i, stat, recno, yr, mo, dy, hr, mn, sc, cs;
static char *err2="Usage: testMadrecMemIO inputFile outputFile outputFileFormat";
static char *err3="Error: Output file format must be in range 0-4";
/* Get the input parameters */
if (argc == 4) {
infile = argv[1];
outfile = argv[2];
iotype = atoi(argv[3]);
if (iotype < 0 || iotype > 4) {
fprintf(stderr, "%s\n", err3);
return(1);
} else {
iotype = 20 + iotype;
}
} else {
fprintf(stderr, "%s\n", err2);
return(1);
}
/* Create a madrec object for the input file */
if ((madrecrp = madrecCreate()) == (Madrec *) NULL) {
fprintf(stderr, "create madrecr: %s\n", madrecGetError(madrecrp));
return(1);
}
/* Connect the input madrec object to a madrigal file */
/* Chose opcode 1 to autodetect the file type */
if (madrecOpen(madrecrp, 1, infile) != 0) {
fprintf(stderr, "open madrecr: %s\n", madrecGetError(madrecrp));
return(1);
}
/* Create a madrec object for the output file */
if ((madrecwp = madrecCreate()) == (Madrec *) NULL) {
fprintf(stderr, "create madrecw: %s\n", madrecGetError(madrecwp));
return(1);
}
/* Connect the output madrec object to a madrigal file */
if (madrecOpen(madrecwp, iotype, outfile) != 0) {
fprintf(stderr, "open madrecw: %s\n", madrecGetError(madrecwp));
return(1);
}
/* Create a madrec object for the memory image */
if ((madrecmp = madrecCreate()) == (Madrec *) NULL) {
fprintf(stderr, "create madrecm: %s\n", madrecGetError(madrecmp));
return(1);
}
/* Connect the memory madrec object to an unblocked memory image */
if (madrecOpen(madrecmp, 25, " ") != 0) {
fprintf(stderr, "open madrecm: %s\n", madrecGetError(madrecwp));
return(1);
}
/* Read the entire input file and rewind */
i = 0;
while ((stat=madrecGetNextRec(madrecrp)) == 0) {
/*
printf("i,start key,end key, pos = %d %d %d %d %d\n", i,
cedarGetStartIndex(madrecrp->recordp),
cedarGetEndIndex(madrecrp->recordp),
ftell(madrecrp->fp), madrecrp->pos);
*/
/* cedarPrintProlog(madrecrp->recordp); */
i++;
}
printf("%d records read from %s\n", i, madrecrp->filnam);
madrecRewind(madrecrp);
printf("%s rewound\n", madrecrp->filnam);
/* Copy the input file to memory */
printf("Copy the input file to memory\n");
madrecRewind(madrecrp);
i = 0;
while ((stat=madrecGetNextRec(madrecrp)) == 0) {
cedarGetStartTime(madrecrp->recordp, &yr, &mo, &dy, &hr, &mn, &sc, &cs);
printf("%d %f %f %d %d %d %d %d %d %d\n", i,
cedarGetStartIndex(madrecrp->recordp),
cedarGetEndIndex(madrecrp->recordp),
yr, mo, dy, hr, mn, sc, cs);
if (madrecCopy(madrecrp, madrecmp) != 0) {
fprintf(stderr, "copy madrecr: %s\n", madrecGetError(madrecrp));
fprintf(stderr, "copy madrecm: %s\n", madrecGetError(madrecmp));
return(1);
}
if ( madrecPutNextRec(madrecmp) != 0) {
fprintf(stderr, "putNextRec madrecm: %s\n", madrecGetError(madrecmp));
return(1);
}
i++;
}
if (stat != 0 && stat != -1) {
printf("madrecGetNextRec error %d\n", stat);
return(1);
}
printf("%d records copied from %s to %s\n", i, infile, "memory");
/* Print memory image record information */
printf("Read the memory image\n");
madrecRewind(madrecmp);
while ((stat=madrecGetNextRec(madrecmp)) == 0) {
cedarGetStartTime(madrecmp->recordp, &yr, &mo, &dy, &hr, &mn, &sc, &cs);
printf("%i %f %f %d %d %d %d %d %d %d\n", i,
cedarGetStartIndex(madrecmp->recordp),
cedarGetEndIndex(madrecmp->recordp),
yr, mo, dy, hr, mn, sc, cs);
}
/* Generate and print input file key table */
madrecGenKeys(madrecmp);
printf("Memory file key table\n");
madrecPrintKeys(madrecmp);
/* specify a record number */
recno = 8;
/* Get the specified record */
madrecGetRecByRecno(madrecmp, recno);
printf("getRecordByRecno: %s\n", madrecGetError(madrecmp));
/* Print the record */
cedarGetStartTime(madrecmp->recordp, &yr, &mo, &dy, &hr, &mn, &sc, &cs);
printf("%d %f %f %d %d %d %d %d %d %d\n", i,
cedarGetStartIndex(madrecmp->recordp),
cedarGetEndIndex(madrecmp->recordp),
yr, mo, dy, hr, mn, sc, cs);
/* Print memory image record information */
printf("Read the memory image\n");
madrecRewind(madrecmp);
while ((stat=madrecGetNextRec(madrecmp)) == 0) {
printf("i,start key,end key, pos = %d %f %f %d\n", i,
cedarGetStartIndex(madrecmp->recordp),
cedarGetEndIndex(madrecmp->recordp),
madrecmp->pos);
}
/* Copy the memory image to the output file */
printf("Copy the memory image to the output file\n");
madrecRewind(madrecmp);
i = 0;
while ((stat=madrecGetNextRec(madrecmp)) == 0) {
printf("i,start key,end key, pos = %d %f %f %d\n", i,
cedarGetStartIndex(madrecmp->recordp),
cedarGetEndIndex(madrecmp->recordp),
madrecrp->pos);
if (madrecCopy(madrecmp, madrecwp) != 0) {
fprintf(stderr, "copy madrecm: %s\n", madrecGetError(madrecmp));
fprintf(stderr, "copy madrecw: %s\n", madrecGetError(madrecwp));
return(1);
}
printf("i,start key,end key, pos = %d %f %f %d\n", i,
cedarGetStartIndex(madrecwp->recordp),
cedarGetEndIndex(madrecwp->recordp),
madrecwp->pos);
if (madrecPutNextRec(madrecwp) != 0) {
fprintf(stderr, "putNextRec madrecw: %s\n", madrecGetError(madrecwp));
return(1);
}
i++;
}
if (stat != 0 && stat != -1) {
printf("madrecGetNextRec error %d\n", stat);
return(1);
}
printf("%d records copied from %s to %s\n", i, "memory", outfile);
/* Close and delete madrec objects */
if (madrecClose(madrecrp) != 0) {
fprintf(stderr, "close madrecr: %s\n", madrecGetError(madrecrp));
return(1);
}
madrecDestroy(madrecrp);
if (madrecClose(madrecwp) != 0) {
fprintf(stderr, "close madrecw: %s\n", madrecGetError(madrecwp));
return(1);
}
madrecDestroy(madrecwp);
if (madrecClose(madrecmp) != 0) {
fprintf(stderr, "close madrecm: %s\n", madrecGetError(madrecmp));
return(1);
}
madrecDestroy(madrecmp);
return(0);
}