#include <stdio.h>
#include <stdlib.h>
#define MAX 100


struct Caratteristiche{
    char carattere;
    int pos[2];
    int numero_asterischi;
}; typedef struct Caratteristiche caratteristiche;


void leggi_matrice(char mat[MAX][MAX], int *rig, int *col);
void stampa_matrice(char mat[MAX][MAX], int rig, int col);
void definisci_struct(char mat[MAX][MAX], int rig, int col, caratteristiche vet[MAX*MAX]);
void creaMatrice(caratteristiche vet[MAX*MAX],int rig, int col, int newMatrix[MAX][MAX]);

int main()
{
    char matrice[MAX][MAX];
    int rig = 0;
    int col= 0;
    int newMat[MAX][MAX];
    leggi_matrice(matrice,&rig, &col);
    stampa_matrice(matrice, rig, col);
    caratteristiche vettore[MAX*MAX];
    definisci_struct(matrice,rig, col, vettore);
    creaMatrice(vettore,rig,col,newMat);
    printf("\n");

    for(int i=0;i<rig;i++){
    for(int j=0;j<col;j++)
        printf("%d", newMat[i][j]);
    printf("\n");

    }
}


void leggi_matrice(char mat[MAX][MAX], int *rig, int *col){
    FILE *fp;
    fp = fopen("input.txt","r");
    if(fp!=NULL){
        fscanf(fp,"%d",rig);
        fscanf(fp,"%d",col);
        fgetc(fp);
        for(int i=0;i<*rig;i++)
        {
            for(int j=0; j<*col; j++)
            {

                fscanf(fp,"%c",&mat[i][j]);
            }
            fgetc(fp);
        }
            fclose(fp);

    }
    else{
        printf("errore, file non esiste");
    }
}


void stampa_matrice(char mat[MAX][MAX], int rig, int col){

for(int i=0;i<rig;i++){
    for(int j=0;j<col;j++)
        printf("%c", mat[i][j]);
    printf("\n");


}


}




void definisci_struct(char mat[MAX][MAX], int rig, int col, caratteristiche vet[MAX*MAX]){
    int contaAsterischi = 0;
    for(int i=0; i<rig;i++){
        for(int j=0; j<col; j++)
        {
            vet[i*col+j].carattere = mat[i][j];
            vet[i*col+j].pos[0] = i;
            vet[i*col+j].pos[1] = j;

            if(i!=0 && j!= 0)
            {
                if(mat[i-1][j-1] == '*')
                {
                    contaAsterischi++;
                }
            }

            if(i!=0)
            {
                if(mat[i-1][j] == '*')
                {
                    contaAsterischi++;
                }

            }
            if(i!=0 && j!=col-1)
            {

                if(mat[i-1][j+1] == '*')
                {
                    contaAsterischi++;
                }
            }
            if(j!=0)
            {

                if(mat[i][j-1]=='*')
                {
                    contaAsterischi++;
                }
            }
            if(j!=col-1)
            {

                if(mat[i][j+1] == '*')
                {
                    contaAsterischi++;
                }
            }
            if(i!=rig-1 && j!=0)
            {

                if(mat[i+1][j-1] == '*'){
                    contaAsterischi++;
                }
            }
            if(i!=rig-1)
            {
                if(mat[i+1][j] == '*')
                {

                    contaAsterischi++;
                }
            }
            if(i!=rig-1 && j!= col-1)
            {

                if(mat[i+1][j+1] == '*')
                {
                    contaAsterischi++;
                }
            }
            vet[i*col+j].numero_asterischi = contaAsterischi;
            contaAsterischi = 0;

        }

    }


}

void creaMatrice(caratteristiche vet[MAX*MAX],int rig, int col, int newMatrix[MAX][MAX]){

    for(int i=0; i<rig; i++){

        for(int j=0; j<col; j++){

            if(vet[i*col+j].carattere == '*'){
                newMatrix[i][j] = 0;
            }
            else if(vet[i*col+j].carattere == '-')
            {
                newMatrix[i][j] = vet[i*col+j].numero_asterischi;
            }
            else{
                printf("ERRORE");
            }

        }
    }

}