/* // pcheck.c // created by F.Mizutani 960501 // modified 961019 */ /* unix header file */ #include #include #include #include #include #include #include #define PCODE 10004 /* program code */ #define PMAX 32 /* parameters */ #define FALSE 0 #define TRUE !FALSE typedef struct { float x[3]; float y[3]; float z[3]; float vx[3]; float vy[3]; float vz[3]; float vnx, vny, vnz; } PGD; typedef struct { long mn; float mw; float x; float y; float z; } MOL; int molct; MOL *mol; long pl[PMAX]; float pf[PMAX]; #ifdef DOS int sfg = FALSE; #else int sfg = TRUE; #endif void swapper(p, n) char *p; int n; { char d[4]; int i, j; for (j = 0; j < n; j++){ for (i = 0; i < 4; i++) d[3 -i] = p[i + 4 * j]; for (i = 0; i < 4; i++) p[i + 4 * j] = d[i]; } } void alloc() { if ((mol = (MOL *)malloc(molct * sizeof(MOL))) == NULL){ printf("ALLOC(): mol"); exit(1); } } void Usage() { printf("USAGE: pcheck pgv_file\n"); exit(1); } void main(argc, argv) int argc; char **argv; { int i; char filename[256]; FILE *fp; printf("\n"); printf("PCHECK Copyright(C) 1996 CCIMS\n\n"); strcpy(filename, ""); if (argc < 2) Usage(); strcpy(filename, argv[1]); if (strlen(filename) == 0) Usage(); if((fp = fopen(filename, "rb")) == NULL){ printf("ERROR: File [%s] is not found", filename); exit(1); } fread(pl, sizeof(long), PMAX, fp); if (sfg) swapper(pl, PMAX); if (pl[0] != PCODE){ printf("ERROR: Program code is different\n"); exit(1); } fread(pf, sizeof(float), PMAX, fp); if (sfg) swapper(pf, PMAX); if (pl[1] == 0) printf("File type is DENSITY\n"); if (pl[1] == 1) printf("File type is ORBITAL\n"); printf("Resorution X:%d Y:%d Z:%d\n", pl[2], pl[3], pl[4]); printf("Start axis X:%+f Y:%+f Z:%+f\n", pf[0], pf[1], pf[2]); printf("Step axis X:%+f Y:%+f Z:%+f\n", pf[3], pf[4], pf[5]); printf("X Minimum %+f Maximum %+f\n", pf[6], pf[7]); printf("Y Minimum %+f Maximum %+f\n", pf[8], pf[9]); printf("Z Minimum %+f Maximum %+f\n", pf[10], pf[11]); printf("DATA Minimum %+e Maximum %+e\n", pf[13], pf[12]); if (pl[5] == 0){ printf("ERROR: No polygon\n"); exit(1); } printf("Polygon total is %d\n", pl[5]); for (i = 0; i < pl[5]; i++){ printf(" Object No.%d isovalue = %+f polygon = %d\n", i+1, pf[20+i], pl[20+i]); } if (pl[1] == 1){ printf("Orbital count is %d\n", pl[6]); printf(" Orbital number is "); for (i = 0; i < pl[6]; i++) printf("[%d] ", pl[14 + i]); printf("\n"); } molct = pl[7]; alloc(); fread(mol, sizeof(MOL), molct, fp); if (sfg) swapper(mol, sizeof(MOL) / sizeof(long) * molct); printf("Moleculer count = %d\n", molct); for (i = 0; i < molct; i++) printf(" %d: %d X=%+e Y=%+e Z=%+e\n",i+1,mol[i].mn,mol[i].x,mol[i].y,mol[i].z); }