*
 * Non potevamo lasciare il programma dantesco senza funzioni!
 */

#include <stdio.h>	/* Includiamo la libreria standard */

/* Forniamo una dichiarazione anticipata (prototipo) delle nostre funzioni */

void stampamenu(void);
void canto1(void);
void canto2(void);
void canto3(void);
void canto4(void);
void canto5(void);
void canto6(void);
void canto7(void);
void canto8(void);
void canto9(void);
void canto10(void);

/* Funzione principale e inizio del programma */

int main(void)		/* Funzione principale, eseguita per prima */
{			/* Inizio della funzione main() */

   int pippo;		/* Definiamo una variabile intera pippo */

    do			/* Usiamo il loop do-while */
    {
	stampamenu();		/* Una funzione che stampa il menu */
	scanf("%d",&pippo);	/* Prendiamo pippo da tastiera */
	switch(pippo)		/* e usiamolo per il confronto */
	{
	   case 1:
	      canto1();
	      break;
	   case 2:
	      canto2();
	      break;
	   case 3:
	      canto3();
	      break;
	   case 4:
	      canto4();
	      break;
	   case 5:
	      canto5();
	      break;
	   case 6:
	      canto6();
	      break;
	   case 7:
	      canto7();
	      break;
	   case 8:
	      canto8();
	      break;
	   case 9:
	      canto9();
	      break;
	   case 10:
	      canto10();
	      break;
	   case 0:
	      printf("\nUscita.\n");
	   default:
	     printf("\nSelezione sbagliata!\n");
	}      	            /* Fine del costrutto switch */
    }          	          /* Fine del blocco do-while che viene rieseguito */
    while(pippo!=0);	/* Se pippo e' diverso (!=) da zero, cicla */
    return(0);		/* la funzione main restituisce uno 0 intero */
} 		      /* Fine della funzione main() */

/* Queste funzioni non hanno parametri ne' in entrata, ne' in uscita. */

void stampamenu(void)
{
	printf("\n Scegli il canto dell'inferno che ti interessa:\n\n");
	printf(" 1)  Canto primo. \n");
	printf(" 2)  Canto secondo. \n");
	printf(" 3)  Canto terzo. \n");
	printf(" 4)  Canto quarto. \n");
	printf(" 5)  Canto quinto. \n");
	printf(" 6)  Canto sesto. \n");
	printf(" 7)  Canto settimo. \n");
	printf(" 8)  Canto ottavo. \n");
	printf(" 9)  Canto nono. \n");
	printf(" 10) Canto decimo. \n");
	printf(" 0)  Esci\n\n");
}

/* canto 1 */
void canto1(void)
{
      printf("\nNel mezzo del cammin di nostra vita\n");
      printf("Mi ritrovai per una selva oscura,\n");
      printf("Che la diritta via era smarrita.\n");
}
/* canto 2 */
void canto2(void)
{
	printf("\nLo giorno se n'andava, e l'aer bruno\n");
	printf("Toglieva gli animai, che sono in terra.\n");
}
/* canto 3 */
void canto3(void)
{
	printf("\nPer me si va nella citta' dolente,\n");
	printf("Per me si va nell'eterno dolore,\n");
	printf("Per me si va tra la perduta gente.\n");
}
/* canto 4 */
void canto4(void)
{
	printf("\nRuppemi l'alto sonno nella testa\n");
	printf("Un greve tuono, si ch'io mi riscossi,\n");
	printf("Come persona che per forza e' desta\n");
}
/* canto 5 */
void canto5(void)
{
	printf("\nCosi' discesi del cerchio primaio\n");
	printf("Giu' nel secondo, che men loco cinghia,\n");
	printf("E tanto piu' dolor, che pugne a guaio.\n");
}
/* canto 6 */
void canto6(void)
{
	printf("\nAl tornar della mente, che si chiuse\n");
	printf("Dinnanzi alla pieta' de' due cognati\n");
	printf("Che di tristizia tutto mi confuse,\n");
	printf("Nuovi tormenti e nuovi tormentati\n");
	printf("Mi veggo intorno, come c'io mi muova\n");
}
/* canto 7 */
void canto7(void)
{
	printf("\nPape Satan, pape Satan aleppe,\n");
	printf("Comincio' Pluto colla voce chioccia\n");
	printf("E quel Savio gentil, che tutto seppe\n");
	printf("Disse per confortarmi: Non ti noccia\n");
	printf("La tua paura, che', poter ch'egli abbia,\n");
	printf("Non ti torra' lo scender questa roccia.\n");
}
/* canto 8 */
void canto8(void)
{
	printf("\nIo dico seguitando, ch'assai prima\n");
	printf("Che noi fossimo al pie' dell'alta torre,\n");
	printf("Gli occhi nostri n'andar suso alla cima\n");
}
/* canto 9 */
void canto9(void)
{
	printf("\nQuel color che vilta' di fuor mi pinse\n");
	printf("Veggendo il Duca mio tornare in volta\n");
	printf("Piu' tosto dentro il suo nuovo ristrinse\n");
}
/* canto 10 */
void canto10(void)
{
	printf("\nOra sen va per uno stretto calle\n");
	printf("Tra il muro della terra e li martiri\n");
	printf("Lo mio Maestro, ed io dopo le spalle.\n");
}

/* Abbiamo dotato di funzioni il nostro programmino dantesco. Dato che
 * questo programma era gia' piuttosto lungo, si sono visti allcuni dei
 * vantaggi delle funzioni, tra cui quello di rendere piu' compatto e
 * chiaro il loop principale.
 */