Nel common.h (o comunque in un file .h incluso nel common):

#ifdef INCLUDES_FOR_IDE
#include <stdlib.h>
#include <string.h>
#endif

char esito_azione_confignet[64] = "";    // stringa dell' esito dell' azione di config.net

U8 CODICE_SW[32] = "MW30632";            // codice del software
U8 Vers_SW[32] = "Vers 1.0";             // versione del software


// funzione che resetta la stringa dell' esito di config.net
void timer_resetta_esito_azione_confignet(void)
{
    snprintf(esito_azione_confignet, sizeof(esito_azione_confignet), "");
}

// funzione che genera un config.net statico
void genera_CONFIG_NET_statico(unsigned char ip_1, unsigned char ip_2, unsigned char ip_3, unsigned char ip_4)
{
    FILE* fd = fopen("C:\\CONFIG.NET", "w");    // apre il file nel percorso "C:\\CONFIG:NET" in modalità scrittura
    if (!fd)                                    // se fp == 0 --> la fopen non ha vavuto succsso
    {
        // stampa nell' esito il messaggio di errrore e dopo 30 sec lo resetta, esce dalla funzione
        snprintf(esito_azione_confignet, sizeof(esito_azione_confignet), "Errore creazione CONFIG.NET");
        exec_timer(timer_resetta_esito_azione_confignet, ONCE, 30 SEC);
        return;
    }
    // se la fopen ha avuto successo
    // stampa sul file le varie scritte e byte degli ip
    fprintf(fd, "// CONFIG.NET autogenerato\n");        
    fprintf(fd, "// dal software %s vers %s\n", CODICE_SW, Vers_SW);
    fprintf(fd, "// IP STATICO %u.%u.%u.%u\n", ip_1, ip_2, ip_3, ip_4);
    fprintf(fd, "@ETHERNET 1\n");
    fprintf(fd, "@WIFI 0\n");
    fprintf(fd, "@mac_family 00 25 33\n");
    fprintf(fd, "@mac_number 101 222 %u\n", ip_4);
    
    if (ip_4 > 200 && ip_4 < 210)
    {
        fprintf(fd, "@perif %u\n", ip_4 - 200);
        fprintf(fd, "@net_ip perif%u\n", ip_4 - 200);
    }
    else
    {
        // Se siamo fuori dal range 201-209 metto perif 5 come default
        // in questo modo se uno vuole avere il quarto byte dell'ip e perif
        // in sincrono sceglie un numero dentro quell'intervallo, altrimenti
        // se si vuole un ip generico si avra' la perif5
        fprintf(fd, "@perif 5\n");
        fprintf(fd, "@net_ip perif5\n");
    }
    fprintf(fd, "@ip %u %u %u %u\n", ip_1, ip_2, ip_3, ip_4);
    fprintf(fd, "@force_ip 0 0 0 %u\n", ip_4);
    fprintf(fd, "@vnc 5900 32001\n");
    fprintf(fd, "@ftp C:\\\n");
    fprintf(fd, "\n");

    fclose(fd);    // chiude il file fd

    // stampa nell' esito dell' azione di config.net il messaggio di successo elo resetta dopo 15 sec
    snprintf(esito_azione_confignet, sizeof(esito_azione_confignet), "CONFIG.NET statico creato!");
    exec_timer(timer_resetta_esito_azione_confignet, ONCE, 15 SEC);
}

// questa funzione genera un config.net dinamico
void genera_CONFIG_NET_dinamico(unsigned char ip_1, unsigned char ip_2, unsigned char ip_3, unsigned char ip_4)
{
    FILE* fd = fopen("C:\\CONFIG.NET", "w");    // apre il file del precorso "C:\\CONFIG:NET" in modalità scrittura
    if (!fd)                                    // se fd == 0 --> fopen non ha avuto scuccesso
        return;                                 // esce dalla funzione

    // stampa nel file le varie scritte e i byte degli ip
    fprintf(fd, "// CONFIG.NET autogenerato\n");
    fprintf(fd, "// dal software %s vers %s\n", CODICE_SW, Vers_SW);
    fprintf(fd, "// IP DINAMICO %u.%u.%u.%u\n", ip_1, ip_2, ip_3, ip_4);
    fprintf(fd, "@ETHERNET 1\n");
    fprintf(fd, "@WIFI 0\n");
    fprintf(fd, "@mac_family 00 25 33\n");
    fprintf(fd, "@mac_number 101 222 %u\n", ip_4);

    if (ip_4 > 200 && ip_4 < 210)
    {
        fprintf(fd, "@perif %u\n", ip_4 - 200);
        fprintf(fd, "@net_ip perif%u\n", ip_4 - 200);
    }
    else
    {
        // Se siamo fuori dal range 201-209 metto perif 5 come default
        // in questo modo se uno vuole avere il quarto byte dell'ip e perif
        // in sincrono sceglie un numero dentro quell'intervallo, altrimenti
        // se si vuole un ip generico si avra' la perif5
        fprintf(fd, "@perif 5\n");
        fprintf(fd, "@net_ip perif5\n");
    }
    fprintf(fd, "@vnc 5900 32001\n");
    fprintf(fd, "@ftp C:\\\n");
    fprintf(fd, "\n");

    fclose(fd);    // chiude il file fd

    // stampa sull' esito dell' azione di config.net il messaggio di successo e dopo 15 sec lo resetta
    snprintf(esito_azione_confignet, sizeof(esito_azione_confignet), "CONFIG.NET dinamico creato!");
    exec_timer(timer_resetta_esito_azione_confignet, ONCE, 15 SEC);
}