<commit_before>#include <stdint.h>
#include <stdio.h>

#define BIT(n)          (1 << n)
#define NTH_BIT(x, n)   ((BIT(n) & x) >> n)

#define NUM_MACCHINE    (/*NUM_MACCHINE*/)
#define NUM_TRANSIZIONI (/*NUM_TRANSIZIONI*/)
#define NUM_INGRESSI    (/*NUM_INGRESSI*/)

#define BUS_ENABLED /*BUS_ENABLED*/ // Esistono variabili sul bus?
#define DEBOUNCE_ENABLED /*DEBOUNCE_ENABLED*/ // Esiste almeno un dispositivo per cui il debounce è abilitato?
#define HOOKS_ENABLED /*HOOKS_ENABLED*/ // Sono abilitati gli snippet eseguiti su una transizione?

#if NUM_MACCHINE == 1
	#define MULTIPLE_FSMS 0
#else
	#define MULTIPLE_FSMS 1
#endif

typedef uint32_t io_t;
typedef int      stato_t;

io_t    raw_inputs, inputs, outputs;
#if BUS_ENABLED
	io_t bus, new_bus;
#endif

#define STATI /*STATI_INIZIALI*/

#if MULTIPLE_FSMS
	// Lo stato di ciascuna macchina
	stato_t stato[] = {STATI};

	// L'ID di macchina per cui e' valida una transizione
	const uint8_t fsm_id[] = {/*FSM_ID*/};
#else
	stato_t stato = STATI;
#endif
// Gli stati di partenza
const stato_t partenza[] = {/*PARTENZA*/};
// Gli stati di arrivo
const stato_t arrivo[] = {/*ARRIVO*/};

// Gli ingressi fisici considerati per una transizione
const io_t port_in_bitmask[] = {/*PORT_IN_BITMASK*/};
// I valori attesi degli ingressi fisici perche' si faccia la transizione
const io_t port_in_valori[] = {/*PORT_IN_VALORI*/};
// Le uscite fisiche modificate da una transizione
const io_t port_out_bitmask[] = {/*PORT_OUT_BITMASK*/};
// I valori scritti su una porta fisica da una transizione
const io_t port_out_valori[] = {/*PORT_OUT_VALORI*/};

#if BUS_ENABLED
	// Gli ingressi di bus considerati per una transizione
	const io_t bus_in_bitmask[] =  {/*BUS_IN_BITMASK*/};
	// I valori attesi degli ingressi di bus perche' si faccia la transizione
	const io_t bus_in_valori[] = {/*BUS_IN_VALORI*/};
	// Le uscite di bus modificate da una transizione
	const io_t bus_out_bitmask[] = {/*BUS_OUT_BITMASK*/};
	// I valori scritti su una porta virtuale da una transizione
	const io_t bus_out_valori[] = {/*BUS_OUT_VALORI*/};
#endif

#if DEBOUNCE_ENABLED
	const uint8_t debounced[] = {/*INGRESSI_DEBOUNCED*/};
	uint8_t input_counts[] = {/*INPUT_COUNTS*/};
#endif

#if HOOKS_ENABLED
	#define HOOKS /*HOOKS*/
	#include "hooks.c"

	#if BUS_ENABLED
		void nop(const io_t inputs, io_t outputs, const io_t bus, io_t new_bus) {
			return;
		}

		void (*hooks[])(const io_t inputs, io_t outputs, const io_t bus, io_t new_bus) = {HOOKS};
	#else
		void nop(const io_t inputs, io_t outputs) {
			return;
		}

		void (*hooks[])(const io_t inputs, io_t outputs) = {HOOKS};
	#endif
#endif

int main() {
	int i, counter = 0;

	raw_inputs = inputs = /*INPUT_INIZIALI*/;

	#if BUS_ENABLED
		printf("Bus abilitato.\n");
	#else
		printf("Bus disabilitato.\n");
	#endif

	#if DEBOUNCE_ENABLED
		printf("Debounce abilitato.\n");
	#else
		printf("Debounce disabilitato.\n");
	#endif

	#if MULTIPLE_FSMS
		printf("Modalita' FSM multiple.\n");
	#else
		printf("Modalita' FSM singola.\n");
	#endif

	#if HOOKS_ENABLED
		printf("Hook abilitati.\n");
	#else
		printf("Hook disabilitati.\n");
	#endif

// Il loop inizia da qua
<commit_msg>Ora le opzioni vengono stampate al compile time, non al run time<commit_after>#include <stdint.h>
#include <stdio.h>

#define BIT(n)          (1 << n)
#define NTH_BIT(x, n)   ((BIT(n) & x) >> n)

#define NUM_MACCHINE    (/*NUM_MACCHINE*/)
#define NUM_TRANSIZIONI (/*NUM_TRANSIZIONI*/)
#define NUM_INGRESSI    (/*NUM_INGRESSI*/)

#define BUS_ENABLED /*BUS_ENABLED*/ // Esistono variabili sul bus?
#define DEBOUNCE_ENABLED /*DEBOUNCE_ENABLED*/ // Esiste almeno un dispositivo per cui il debounce è abilitato?
#define HOOKS_ENABLED /*HOOKS_ENABLED*/ // Sono abilitati gli snippet eseguiti su una transizione?

#if NUM_MACCHINE == 1
	#define MULTIPLE_FSMS 0
#else
	#define MULTIPLE_FSMS 1
#endif

typedef uint32_t io_t;
typedef int      stato_t;

io_t    raw_inputs, inputs, outputs;
#if BUS_ENABLED
	io_t bus, new_bus;
#endif

#define STATI /*STATI_INIZIALI*/

#if MULTIPLE_FSMS
	// Lo stato di ciascuna macchina
	stato_t stato[] = {STATI};

	// L'ID di macchina per cui e' valida una transizione
	const uint8_t fsm_id[] = {/*FSM_ID*/};
#else
	stato_t stato = STATI;
#endif
// Gli stati di partenza
const stato_t partenza[] = {/*PARTENZA*/};
// Gli stati di arrivo
const stato_t arrivo[] = {/*ARRIVO*/};

// Gli ingressi fisici considerati per una transizione
const io_t port_in_bitmask[] = {/*PORT_IN_BITMASK*/};
// I valori attesi degli ingressi fisici perche' si faccia la transizione
const io_t port_in_valori[] = {/*PORT_IN_VALORI*/};
// Le uscite fisiche modificate da una transizione
const io_t port_out_bitmask[] = {/*PORT_OUT_BITMASK*/};
// I valori scritti su una porta fisica da una transizione
const io_t port_out_valori[] = {/*PORT_OUT_VALORI*/};

#if BUS_ENABLED
	// Gli ingressi di bus considerati per una transizione
	const io_t bus_in_bitmask[] =  {/*BUS_IN_BITMASK*/};
	// I valori attesi degli ingressi di bus perche' si faccia la transizione
	const io_t bus_in_valori[] = {/*BUS_IN_VALORI*/};
	// Le uscite di bus modificate da una transizione
	const io_t bus_out_bitmask[] = {/*BUS_OUT_BITMASK*/};
	// I valori scritti su una porta virtuale da una transizione
	const io_t bus_out_valori[] = {/*BUS_OUT_VALORI*/};
#endif

#if DEBOUNCE_ENABLED
	const uint8_t debounced[] = {/*INGRESSI_DEBOUNCED*/};
	uint8_t input_counts[] = {/*INPUT_COUNTS*/};
#endif

#if HOOKS_ENABLED
	#define HOOKS /*HOOKS*/
	#include "hooks.c"

	#if BUS_ENABLED
		void nop(const io_t inputs, io_t outputs, const io_t bus, io_t new_bus) {
			return;
		}

		void (*hooks[])(const io_t inputs, io_t outputs, const io_t bus, io_t new_bus) = {HOOKS};
	#else
		void nop(const io_t inputs, io_t outputs) {
			return;
		}

		void (*hooks[])(const io_t inputs, io_t outputs) = {HOOKS};
	#endif
#endif

int main() {
	int i, counter = 0;

	raw_inputs = inputs = /*INPUT_INIZIALI*/;

	#if BUS_ENABLED
		#pragma message "Bus abilitato."
	#else
		#pragma message "Bus disabilitato."
	#endif

	#if DEBOUNCE_ENABLED
		#pragma message "Debounce abilitato."
	#else
		#pragma message "Debounce disabilitato."
	#endif

	#if MULTIPLE_FSMS
		#pragma message "Modalita' FSM multiple."
	#else
		#pragma message "Modalita' FSM singola."
	#endif

	#if HOOKS_ENABLED
		#pragma message "Hook abilitati."
	#else
		#pragma message "Hook disabilitati."
	#endif

// Il loop inizia da qua

{'fraction_non_alphanumeric': 0.12427700484602157, 'fraction_numerical': 0.003126465530717524, 'mean_word_length': 4.210097719869707, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2034251', 'n_tokens_mistral': 2626, 'n_tokens_neox': 2578, 'n_words': 715}