#define VERSION 080130 #include #include #include #include #define qq puts("bla\n"); #define NR_END 1 #define FREE_ARG char* void nrerror(char[]); float *vector(long,long); int *dvector(int,int); void free_vector(float*,long,long); long random(void); int main(int argc,char *argv[]) { int i,j,k,*element; int numline=0,ntypes,*types; float dx,dy,dz,boxsize; float *x,*y,*z; char line[100],labeltype[100]; FILE *in; if(argc!=2) { fprintf(stderr,"\nYou need to supply ./cfg2xzy filename\n"); fprintf(stderr,"Converts .cfg files into xyz data (Angstroms).\n"); return 1; } if (!(in=fopen(argv[1],"r"))) { fprintf(stderr,"Unable to open file %s\n",argv[1]); return 1; } while (fgets(line,100,in)) { numline=numline+1; } fclose(in); in=fopen(argv[1],"r"); fprintf(stderr,"\nNumber of atom types: "); scanf("%d",&ntypes); types=dvector(0,ntypes); types[0]=0; for(i=1;i<=ntypes;i++){ fprintf(stderr,"Number of atoms of type %d: ",i); scanf("%d",&types[i]); } fprintf(stderr,"BoxSize: "); scanf("%f",&boxsize); element=dvector(1,numline); x=vector(1,numline); y=vector(1,numline); z=vector(1,numline); //---Reads data in from file----// k=1; for(i=1;i<=ntypes;i++){ for(j=1;j<=types[i];j++){ fgets(line,100,in); sscanf(line,"%f%f%f",&dx,&dy,&dz); x[k]=dx*(boxsize/1.); y[k]=dy*(boxsize/1.); z[k]=dz*(boxsize/1.); element[k]=i; k++; } } numline=k-1; k=1; element[0]=1; fprintf(stdout,"%d\n",numline); fprintf(stderr,"Label for atom type 1: "); scanf("%s",labeltype); for(i=1;i<=numline;i++){ fprintf(stdout,"%s\t%d\t%f\t%f\t%f\n",labeltype,i,x[i],y[i],z[i]); if(element[i]!=element[i-1]){ k++; fprintf(stderr,"Label for atom type %d: ",k); scanf("%s",labeltype); } } fclose(in); return 0; } void nrerror(char error_text[]) { fprintf(stderr,"Numerical Recipes run-time error...\n"); fprintf(stderr,"%s\n",error_text); fprintf(stderr,"...now exiting to system...\n"); exit(1); } int *dvector(int nl,int nh) { int *v; v=(int *)malloc((size_t)((nh-nl+ 1 +NR_END)*sizeof(int))); if (!v) nrerror("Allocation failure in dvector()"); return v-nl+NR_END; } float *vector(long nl,long nh) { float *v; v=(float *)malloc((size_t)((nh-nl+ 1 +NR_END)*sizeof(float))); if (!v) nrerror("Allocation failure in vector()"); return v-nl+NR_END; } void free_vector(float *v,long nl, long nh) { free((FREE_ARG)(v+nl-NR_END)); }