#include <stdio.h>
#include <stdlib.h>

#define ASCII0 48

void inittab(int grille[9][9])
{
     int i,j;
     for(i=0;i<9;i++)
     {
         for(j=0;j<9;j++)
         {
            grille[i][j]=0; 
         }
     }

}

void showgrille(int grille[9][9])
{
    int l,c;
    printf("    0 1 2   3 4 5   6 7 8  ");
    for(l=0;l<9;l++)
    {         
         if(l%3==0) 
           printf("\n  -------------------------\n");
         else
           printf("\n");
           
         printf("%d ",l);  
         for(c=0;c<9;c++)
         {
              if(c%3==0) 
                printf("| ");
              printf("%d ",grille[c][l]);
              if(c==8) 
                printf("|");

         }
    }
    printf("\n  -------------------------\n");
}

int verifentry(char data[11])
{
    int count=0;
    while(count<=10 && data[count+1]>=ASCII0 && data[count+1]<(ASCII0+10))
    {
            count++;
    }
    printf("strlen=%d\n",count);
    return count;
}

void getgrille(int grille[9][9])
{
     char data[12];
     int i,taille;
     showgrille(grille);
     
     while(1)
     {
        fgets(data,12,stdin);
        taille=verifentry(data);
        switch(data[0])
        {
        case 'c':
            if(taille>0)
            {
                for(i=1;i<taille;i++)
                {
                    grille[(data[1]-ASCII0)][i-1]=(data[i+1]-ASCII0);
                }            
                showgrille(grille);
                fflush(stdin);
            } 
            else
                goto help;
            break;    
        case 'l':
            if(taille>0)
            {
                for(i=1;i<taille;i++)
                {
                    grille[i-1][(data[1]-ASCII0)]=(data[i+1]-ASCII0);
                }
                showgrille(grille);
                fflush(stdin);
            }           
            else
                goto help;
            break;     
        case 's':
            if(strcmp("solve\n",data)==0) 
            {
                printf("okey c'est parti...\n");
                showgrille(grille);
                fflush(stdin);
                return;
            } 
            else 
                goto help; 
        default:
            help:printf("format: c ou l + numero de ligne ou colonne + ligne\nexemple: c2001002003 remplira la colonne 2 avec 001002003\n\nsolve lance la resolution\n");break;
        }
    }
}
          
 
int main(int argc, char *argv[])
{
  int grille[9][9];
  inittab(grille);
  getgrille(grille);
  if(solve(grille))
    printf("et voila !\n");
  else
    printf("je crois qu'il y a un probleme, verifie la grille\n");
    
  showgrille(grille); 
     
  system("PAUSE");	
  return 0;
}
          
