/* testFileToGData.c */

#include <stdio.h>
int FDataToGData(char*);
int GDataToABW(int*,int*,int*,char*);

#define NN 1000

void main(void)
{
 int K,N,
     A[NN],B[NN],W[NN];
 char
     GData[NN];

 K = FDataToGData(GData);
 if (!K) goto FIN;

 N = GDataToABW(A,B,W,GData);
 printf("%d weighted links\n",N);

 for (K=0; K<N; K++) printf("%3d,",A[K]); puts("");
 for (K=0; K<N; K++) printf("%3d,",B[K]); puts("");
 for (K=0; K<N; K++) printf("%3d,",W[K]); puts("");


FIN:
 getchar();
}
  /****************************************/
/* simple copy Graph Data in file TITLF to char file to which P points */

int FDataToGData(char *P)
{
 FILE *F; char CH,TITLF[]="GraphData.txt";   int CNT=0;

 if((F=fopen(TITLF,"r"))==NULL)
  {printf("Cannot open file %s\n",TITLF); return 0;}

 CH=(char)fgetc(F);  while (CH!='[') CH=(char)fgetc(F);
 while (CH!=']') {*P = CH; P++; CH=(char)fgetc(F); CNT++;}
 *P=CH;

 return CNT;
}
 
  /****************************************/

int GDataToABW(int *P, int *Q, int *R, char *GData)
{
 int I,J,K,TCNT=0,CNT;

 I=0;
NEWCLUSTER:
 while (GData[I]==' ') I++;            /* pass over any blanks */
 if (GData[I]==']') {*P=0; *Q=0; *R=0; return TCNT;} /* found ] = end of data */

 while (GData[I]!='-')I++;            /* start with negative integer */
  I++; K=0;
  while (GData[I]!=',') {K = 10*K + GData[I]-48; I++;}
  *P=J=K; CNT=0;                        /* WG[I] = , */
LP:
  I++;
  if (GData[I] == '#') goto WEIGHTS;
  K=0; while (GData[I]!=',') {K = 10*K + GData[I]-48; I++;}
  *Q=K; *P=J; CNT++; TCNT++;     TCNT=TCNT;  /* needed to use TCNT */
  P++; Q++;
  goto LP;

WEIGHTS:
  while (CNT>0)
   {
    I++; if (GData[I]==',') I++;
    K=0; while ((GData[I]>='0')&&(GData[I]<='9')) {K = 10*K + GData[I]-48; I++;}
    *R=K; R++;
    CNT--;
   }

 goto NEWCLUSTER;

}

