# include # include # define LINLEN 180 /*incase of badly built input files*/ # define NATMS 7 /* total no of atoms including ghosts*/ # define ARCSIZE 2000 /* size of arc entry in chars */ # define TRUE 1 # define FALSE 0 /* crude hardwired teardown of gaussian 92 output files lokks for key words Distance Z-Mat and GINC */ char CurentLine[LINLEN],*ptr; char ArcEnt[ARCSIZE]; FILE *File1,*File2; int i,j,k,AtsFnd,AType[NATMS]; float val1,val2,val3,val4,val5,ADst[NATMS][NATMS]; /* encapsulate all your variables and never drive over 60. right. */ int find_Dists(void) { for(;;) { int i,j; if(fgets(CurentLine,LINLEN,File1)==NULL) return(1); ptr=strstr(CurentLine,"GINC"); if ((ptr)!=NULL) { for(i=0;i<10;i++) fprintf(File2," ,"); return(-1); } if(AtsFnd>0) /* we've got the distances and its time to go*/ return(0); ptr=strstr(CurentLine,"Distance"); if ((ptr)!=NULL) { /* WEVE GOT THE DISTANCE MATRIX SECTION*/ for(i=0;i0) /* we are finnished lets seeit*/ { for(i=0;i<5;i++) { for(k=0;k1920) /* so we dont blow aray bnds next iteration*/ return(0); ptr = strstr(CurentLine,"Job"); if(ptr!=NULL) /* out of ginc */ return(0); } while(fgets(CurentLine,LINLEN,File1)!=NULL); } ptr = strstr(CurentLine,"Job"); if(ptr!=NULL) /* no ging found ! */ return(1); } } int Find_And_Print(Text,Ofst,Len) char *Text; int Ofst,Len; { int count; char *Got_It,*FndText = " "; if((Got_It = strstr(ArcEnt,Text))!=NULL) FndText=Got_It; for(count=Ofst;count<(Len+Ofst);count++) if(*(FndText + count)!=NULL) { if(*(FndText + count)==',') fputc(' ',File2); else fputc(*(FndText + count),File2); } fputc(',',File2); return(0); } int SplitGinc(Text) char *Text; { int count,Ofst = 0,Len = 60; char *Got_It,*FndText = " "; if((Got_It = strstr(ArcEnt,Text))!=NULL) FndText=Got_It; for(count=Ofst;count<(Len+Ofst);count++) if(*(FndText + count)!=NULL) { if(*(FndText + count)==',') *(FndText + count)='^'; if(*(FndText + count)==' ') fputc(',',File2); else fputc(*(FndText + count),File2); } fputc(',',File2); return(0); } void Get_Results(void) { char *Got_It; int count,leftshift,startlen; count=strlen(ArcEnt); startlen=count; for(;count>0;count--) if(ArcEnt[count] == '\n' ) for(leftshift=count;leftshift0;count--) if(ArcEnt[count] == '\\' ) ArcEnt[count]= ' '; Find_And_Print("GINC",1,55); Find_And_Print("HF=-",3,12); Find_And_Print("MP2=-",4,12); Find_And_Print("MP2-0=",6,12); Find_And_Print( "MP3=-",4,12); Find_And_Print( "MP4D=-",5,12); Find_And_Print( "MP4DQ=-",6,12); Find_And_Print( "PUHF=-",5,12); Find_And_Print( "PMP2-0=-",7,12); Find_And_Print( "PMP3-0=-",7,12); Find_And_Print( "MP4SDQ=-",7,10); Find_And_Print( "QCISD=-",7,10); Find_And_Print( "QCISD(T)=-",9,12); Find_And_Print( "S2=",3,5); Find_And_Print( "S2-1=",5,5); Find_And_Print( "RMSD=",5,9); Find_And_Print( "RMSF=",5,9); Find_And_Print( "Dipole=",7,5); Find_And_Print( "DipoleD",12,5); Find_And_Print( "Polar",7,5); Find_And_Print( "NIMAG",0,7); Find_And_Print( "OPT=(",0,12); SplitGinc("GINC"); Find_And_Print( "Frequencies",11,72); fputc('\n',File2); } int Fnd_Fle_Strt(void) { char *Page1 = "Page 1"; int count; for(;;) { if(fgets(CurentLine,LINLEN,File1)==NULL) return(1); if(strstr(CurentLine,Page1)!=NULL) { for(count=0;count<11;count++) fputc(*(CurentLine + count + 19),File2); fputc(',',File2); return(0); /* found a new out file*/ } } } int Print_Header(void) { fprintf(File2," ,P-O,P-H,O-H,P-Li,O-Li,H-Li,,,,,,GINC,HF=-,MP2=-,MP2-0=,MP3=-,MP4D=-,MP4DQ=-,PUHF=-,PMP2-0=-,PMP3-0=-,MP4SDQ=-,QCISD=-,QCISD(T)=-,S2=,S2-1=,RMSD=,RMSF=,Dipole=,DipoleD,Polar,NIMAG"); fputc('\n',File2); return(0); } int main(int argc,char **argv) { /*1*/ int ret_code; if(argc<2) return(1); if ((File1=fopen(argv[1],"rt"))==NULL) return(1); if ((File2=fopen(argv[2],"wt"))==NULL) return(1); Print_Header(); while((Fnd_Fle_Strt()) != 1) { AtsFnd=-1; find_Dists(); ret_code = find_and_SaveGINC(); if(ret_code==0) Get_Results(); } fclose(File1); fclose(File2); return(0); } /* end prog*/ /*1*/