/* PDB to grf converter. Author: Dr. Luca Ermanni 29.7.2005 Copyright: Luca Ermanni, 2005 */ #include #include main(an,av) int an; char *av[]; { int K = 0; FILE *fd; int vb, ho, vo, hdst, vdst, mf; int u1, u2, u3, hr, vr; int i[100], n =0, l = 0, m = 0, c = 1; char s[100][3]; float x[100], y[100], z[100]; int xtr[100], ytr[100]; int G[100][100]; int p, q; int a[10]; for (p=0; p<100; p++) for (q=0; q<100; q++) G[p][q] = 0; setParam(&vb, &ho, &vo, &hdst, &vdst, &mf); if (vb == -1) vb = 50; if (ho == -1) ho = 100; if (vo == -1) vo = 100; if (hdst == -1) hdst = 200; if (vdst == -1) vdst = 200; if (mf == -1) mf = 30; while (++K < an) { u1 = (int) sqrt((double) K); u2 = (int) (K - u1*u1)/(u1+1); u3 = (K - u1*u1)%(u1+1); if (u2 == 0 && u3 == 0) { hr = u1-1; vr = u1-1; } else if (u2 == 0) { hr = u1; vr = u3-1; } else if (u2 == 1) { hr = u3; vr = u1; } if ((fd = fopen(av[K],"r")) == NULL) { perror(av[K]); continue; } while (c != EOF) { n = 0; if ((n = fscanf(fd, "ATOM%7d%*c%2c%*16c", &(i[l]), s[l])) == 2) ; else if ((n = fscanf(fd, "HETATM%5d%*c%2c%*16c", &(i[l]), s[l])) == 2) ; if (n == 2) { if (s[l][1] == 'H') s[l][0] = ' '; s[l][2] = '\0'; n = 0; while ((c=getc(fd)) == ' ') ++n; ungetc(c,fd); if (n == 0) fscanf(fd, "%8f", &(x[l])); else if (n == 1) fscanf(fd, "%7f", &(x[l])); else if (n == 2) fscanf(fd, "%6f", &(x[l])); else if (n == 3) fscanf(fd, "%5f", &(x[l])); n = 0; while ((c=getc(fd)) == ' ') ++n; ungetc(c,fd); if (n == 0) fscanf(fd, "%8f", &(y[l])); else if (n == 1) fscanf(fd, "%7f", &(y[l])); else if (n == 2) fscanf(fd, "%6f", &(y[l])); else if (n == 3) fscanf(fd, "%5f", &(y[l])); fscanf(fd, "%8f", &(z[l])); xtr[l] = (int) (ho + hr*hdst + mf*x[l]); ytr[l] = (int) (vb + vo + vr*vdst + mf*y[l]); ++l; while ((c = getc(fd)) != '\n' && c != EOF) ; continue; } while ((c = fscanf(fd, "CONECT%d%d%d%d%d%d%d%d%d%d", &(a[0]), &(a[1]), &(a[2]), &(a[3]), &(a[4]), &(a[5]), &(a[6]), &(a[7]), &(a[8]), &(a[9]))) > 1) for (p=1; p