// Programma c_u_acc (ArcTools)
// Latella Maria Veronica - Luglio 2005

#define USE_TI89              // Compilo per TI-89

#define OPTIMIZE_ROM_CALLS    // Uso chiamate-ROM Ottimizzate

#define MIN_AMS 100           // Compilo per AMS 1.00 o maggiore.

#define SAVE_SCREEN           // Salva/Ripristina stato LCD.

#include <tigcclib.h>         // Includo tutti gli Header-Files

// Tracciare una linea da (x1,y1) a (x2,y2).
// Occhio che lo (0,0) è nell'angolo in alto a sinistra.
// Asse X va a destra, Asse Y va in giù.
// Risoluzione dello schermo: 160x100 ovvero 8/5.
void DrawLineFast(short x1, short y1, short x2, short y2)
{
  short x = x1, y = y1;
  short dx = abs (x2 - x1), dy = abs (y2 - y1);
  short ystep = (y1 < y2) ? 1 : -1, pystep = 30 * ystep;
  short mov = dx ? 0 : -1;
  unsigned char *ptr = (char*)LCD_MEM + 30 * y + (x >> 3);
  short mask = 1 << (~x & 7);
  if (x1 < x2)
    while (x != x2 || y != y2)
      {
        *ptr |= mask;
        if (mov < 0) y += ystep, ptr += pystep, mov += dx;
        else
          {
            mov -= dy;
            if (++x & 7) mask >>= 1;
            else ptr++, mask = 0x80;
          }
      }
  else
    while (x != x2 || y != y2)
      {
        *ptr |= mask;
        if (mov < 0) y += ystep, ptr += pystep, mov += dx;
        else
          {
            mov -= dy;
            if (x-- & 7) mask <<= 1;
            else ptr--, mask = 1;
          }
      }
}

void Errore()
{
ClrScr ();
clrscr();
DrawLineFast (38, 38, 122, 38); //Linea sopra
DrawLineFast (38, 60, 123, 60); //Linea sotto
DrawStr(53,42,"Errore!!!",A_NORMAL);
DrawStr(41,50,"Scelta Errata",A_NORMAL); //8 punti sotto...
DrawLineFast (38, 38, 38, 60); //Linea sx
DrawLineFast (122, 38, 122, 60); //Linea dx
}


// Main Function
void _main(void)
{
//Variabili di sistema e assegnazioni
//Risoluzione dello schermo: 160x100 ovvero 8/5.
int ips = 0; //Ordinata (ipsilon) per tracciare la rete iniziale.
int ics = 0; //Ascissa (ics) per tracciare la rete iniziale.
int ind_i = 0; //indice I della matrice 1
int ind_j = 0; //indice J della matrice 2
// int ind_j = 0; //indice J della matrice
int acc = 0; //scelta (1,2,3) tra acciaio Fe360, Fe430, Fe510
int acca = 0; //scelta (1,2) di acciaio (barre tonde lisce) per cls
int accb = 0; //scelta (1,2,3,4) di acciaio (barre ad aderenza migliorata) per cls
int sfo = 0; //scelta (1,2,3,4) dello sforzo
int valore = 0;
int barre = 0;//scelta barre (tonde lisce, ad aderenza migliorata)
int sce = 0; //scelta iniziale
int risp = 1; //SI
int ans = 1;//SI
float jump = 15.0; //numero di linee
float stepx, stepy; //spazi fra linee
int incremento; //incremento cicli linee
float matricea[3][9]; //Tabella 1
float matriceb[6][1];//Tabella 2
int pix = 0;

ClrScr (); //Pulizia dello schermo grafico
clrscr(); //Pulizia dello schermo di testo

//Assegnazione Valori della Matrice A:

matricea [0][0] = 360.0;
matricea [0][1] = 235.0;
matricea [0][2] = 28.0;
matricea [0][3] = 26.0;
matricea [0][4] = 24.0;
matricea [0][5] = 160.0;
matricea [0][6] = 92.0;
matricea [0][7] = 180.0;
matricea [0][8] = 104.0;


matricea [1][0] = 430.0;
matricea [1][1] = 275.0;
matricea [1][2] = 24.0;
matricea [1][3] = 23.0;
matricea [1][4] = 21.0;
matricea [1][5] = 190.0;
matricea [1][6] = 110.0;
matricea [1][7] = 214;
matricea [1][8] = 123.0;

matricea [2][0] = 510.0;
matricea [2][1] = 355.0;
matricea [2][2] = 22.0;
matricea [2][3] = 21.0;
matricea [2][4] = 20.0;
matricea [2][5] = 240;
matricea [2][6] = 139;
matricea [2][7] = 270;
matricea [2][8] = 156;

matriceb [0][0] = 115.0;
matriceb [1][0] = 155.0;
matriceb [2][0] = 185.0;
matriceb [3][0] = 215.0;
matriceb [4][0] = 215.0;
matriceb [5][0] = 255.0;


//Maschera di Avvio
//Traccia una rete nell'angolo in alto a sinistra
//e la scritta "Arc Tools" nel centro dello schermo.
stepx = 160 / jump;
stepy = 100 / jump;
incremento = 0;
while (incremento != (jump + 1))
 {
 ics = stepx * incremento;
 ips = 100 - (stepy * incremento);
 DrawLineFast (ics, 0, 0, ips);
 incremento ++; 
 }
//Inserisco scritta Programma
//Inserisco scritta Programma
// nella zona con 125<x<160 0<y<100 o 30<y<95.
// c_ca_NN alta 7*8=56 pixels -> parte da y=22 con incrementi di 8.
// c_ca_NN alta 7*8=56 pixels -> parte da y=35 con incrementi di 8
// Larghezza 6 -> x=135 costante!
DrawLineFast (138, 21, 138, 83); //Linea sx
DrawLineFast (138, 21, 148, 21); //Linea sopra
DrawStr(140,24,"C",A_NORMAL);
//DrawStr(140,43,"*",A_NORMAL);
DrawStr(140,40,"U",A_NORMAL);
//DrawStr(140,67,"*",A_NORMAL);
DrawStr(140,56,"A",A_NORMAL);
DrawStr(140,64,"C",A_NORMAL);
DrawStr(140,72,"C",A_NORMAL);
DrawLineFast (138, 83, 148, 83); //Linea sotto
DrawLineFast (148, 21, 148, 83); //Linea dx

//Inserisco scritta Autore
DrawStr(53,40,"Cartesio",A_NORMAL);
DrawStr(35,60,"Ing&Arch TI-89",A_NORMAL);
  
//Attendo pressione di un tasto per riprendere l'esecuzione  
ngetchx ();
ClrScr ();
clrscr();
 
//--- Cuore del Programma ---
//Su una riga ci stanno solo 26 caratteri!!!
while (sce != 1 && sce != 2)
{
ClrScr ();
clrscr();
printf("CARATTERISTICHE ACCIAI\n");
printf("----------------------\n");
printf("\n");
// Acquisizione dei dati necessari alla elaborazione.
printf("Tipologia di acciaio:\n");
printf("1) Per le costruzioni\n");
printf("2) Per cls armato\n");
printf("\n");
printf("Scelta: ");
scanf("%d", &sce);
// Controllo correttezza dell'input:
if (sce != 1 && sce != 2)
{
Errore();
ngetchx ();
}
}

switch(sce)
{
case 1:
  while (risp != 0)
  {
  	acc = 0;
	while (acc != 1 && acc != 2 && acc != 3)
	{
	ClrScr ();
	clrscr();
	printf("\n");
	printf("Scegliere tra:\n");
	printf("\n");
	printf("1)Acciaio Fe 360\n");
	printf("2)Acciaio Fe 430\n");
	printf("3)Acciaio Fe 510\n");
	printf("\n");
	printf("Scelta: ");
	scanf("%d", &acc);
	if (acc != 1 && acc != 2 && acc != 3)
	{
	Errore();
	ngetchx ();
	}
	}
	
	ClrScr ();
	clrscr();
	ind_i = acc - 1;
	if (acc != 2 && acc != 3)
	{
	printf ("      ACCIAIO Fe 360      \n");
	}
	if (acc != 1 && acc != 3)
	{
	printf ("      ACCIAIO Fe 430      \n");
	}
	if (acc != 1 && acc != 2)
	{
	printf ("      ACCIAIO Fe 510      \n");
	}
	printf("\n");
	printf ("Tensione (N/mm%c) di:\n",178);
	printf ("-)rottura a trazione: ");
	printf ("%c%f",158, matricea[ind_i][0]);
	printf ("-)snervamento: ");
	printf ("%c%f \n",158, matricea[ind_i][1]);
	printf ("Allungamento a rottura su:\n");
	printf (" -)barre,profilati: ");
	printf ("%c %f%c\n",158, matricea[ind_i][2],37);
	printf (" -)lamiere: ");
	printf ("%c %f%c\n",158, matricea[ind_i][3],37);
	printf (" -)profilati cavi: ");
	printf ("%c %f%c\n",158, matricea[ind_i][4],37);
	printf("\n");
	printf ("ENTER per continuare...");
	ngetchx ();
	ClrScr ();
	clrscr();
		printf ("Tensioni ammissibili:\n");
		printf("\n");
		printf ("-)Condizione di carico I:\n");
		printf ("  %c = %f N/mm%c\n", 143,matricea[ind_i][5],178);
		printf ("  %c = %f N/mm%c\n", 144,matricea[ind_i][6],178);
		printf ("-)Condizione di carico II:\n");
		printf ("  %c = %f N/mm%c\n", 143,matricea[ind_i][7],178);
		printf ("  %c = %f N/mm%c\n", 144,matricea[ind_i][8],178);
	risp = 2; //Inizio controllo risposta
	while (risp != 0 && risp !=1)
  {
	printf ("\nAltro acciaio?(SI=1,NO=0)\n");
	scanf("%d", &risp);
	if (risp != 0 && risp != 1)
  {
   Errore();
   ngetchx ();
   ClrScr ();
	 clrscr();
  }
	} //Fine controllo risposta   
	}
	break;

case 2:
  while (ans != 0)
  {
  	barre = 0;
  	acca = 0;
  	accb = 0;
  while (barre != 1 && barre != 2)
	{
	ClrScr ();
	clrscr();
	printf("\n");
	printf("     TIPO DI ARMATURA\n");
	printf("     ----------------\n");
	printf("\n");
	printf("Scegliere tra barre:\n");
	printf("1)Tonde lisce\n");
	printf("2)Ad aderenza migliorata\n");
	printf("\n");
	printf("Scelta: ");
	scanf("%d", &barre);
	if (barre != 1 && barre != 2)
	{
	Errore();
	ngetchx ();
	} // chiude if
	} //chiude while
	
    switch(barre)
     {
     case 1:
     	while (acca != 1 && acca != 2)
	    {
	    ClrScr ();
	    clrscr();
	    printf("\n");
	    printf("Scegliere tra:\n");
	    printf("\n");
	    printf("1)Acciaio FeB 22 K\n");
	    printf("2)Acciaio FeB 32 K\n");
	    printf("\n");
	    printf("Scelta: ");
	    scanf("%d", &acca);
	    if (acca != 1 && acca != 2)
	     {
	        Errore();
	        ngetchx ();
      }
  	}	
	
	   ClrScr ();
	   clrscr();
	   ind_j = acca - 1;
switch (acca)
	    {
	    case 1:
	    printf("\n");
     	printf ("     ACCIAIO FeB 22 K\n");
	    printf("\n");
	    printf ("Tensione: ");
	    printf ("%f N/mm%c\n", matriceb[ind_j][0],178);
	    printf("\n");
	    ans = 2; //Inizio controllo risposta
			while (ans != 0 && ans !=1)
  		{
			printf ("Altro acciaio?(SI=1,NO=0)\n");
			scanf("%d", &ans);
			if (ans != 0 && ans != 1)
  		{
   		Errore();
   		ngetchx ();
   		ClrScr ();
	 		clrscr();
  		}
    	} //Fine controllo risposta   
	   	break;
	    case 2:
	    printf("\n");	
	    printf ("     ACCIAIO FeB 32 K\n");
	    printf("\n");
	    printf ("Tensione: ");
	    printf ("%f N/mm%c\n", matriceb[ind_j][0],178);
	    printf("\n");
	    ans = 2; //Inizio controllo risposta
			while (ans != 0 && ans !=1)
  		{
			printf ("Altro acciaio?(SI=1,NO=0)\n");
			scanf("%d", &ans);
			if (ans != 0 && ans != 1)
  		{
   		Errore();
   		ngetchx ();
   		ClrScr ();
	 		clrscr();
  		}
    	} //Fine controllo risposta   
	    break;
	  	}
break;

case 2:	
	while (accb != 1 && accb != 2 && accb != 3 && accb != 4)
	    {
	    ClrScr ();
	    clrscr();
	    printf("\n");
	    printf("Scegliere tra:\n");
	    printf("\n");
	    printf("1)Acciaio FeB 38 K n.c.\n");
	    printf("2)Acciaio FeB 38 K\n");
	    printf("3)Acciaio FeB 44 K n.c.\n");
	    printf("4)Acciaio FeB 44 K\n");
	    printf("\n");
	    printf("Scelta: ");
	    scanf("%d", &accb);
	    if (accb != 1 && accb != 2 && accb != 3 && accb != 4)
	     {
	        Errore();
	        ngetchx ();
      }
  	}	
  	
	clrscr();
	ClrScr ();
	   clrscr();
	   ind_j = accb + 1;
	   switch (accb)
	    {
	    case 1:
	    printf("\n");
     	printf ("  ACCIAIO FeB 38 K n.c.\n");
	    printf("\n");
	    printf ("Tensione: ");
	    printf ("%f N/mm%c\n", matriceb[ind_j][0],178);
	    printf("\n");
	    ans = 2; //Inizio controllo risposta
			while (ans != 0 && ans !=1)
  		{
			printf ("Altro acciaio?(SI=1,NO=0)\n");
			scanf("%d", &ans);
			if (ans != 0 && ans != 1)
  		{
   		Errore();
   		ngetchx ();
   		ClrScr ();
	 		clrscr();
  		}
    	} //Fine controllo risposta   
	   	break;
	    case 2:
	    printf("\n");	
	    printf ("     ACCIAIO FeB 38 K\n");
	    printf("\n");
	    printf ("Tensione: ");
	    printf ("%f N/mm%c\n", matriceb[ind_j][0],178);
	    printf("\n");
	    ans = 2; //Inizio controllo risposta
			while (ans != 0 && ans !=1)
  		{
			printf ("Altro acciaio?(SI=1,NO=0)\n");
			scanf("%d", &ans);
			if (ans != 0 && ans != 1)
  		{
   		Errore();
   		ngetchx ();
   		ClrScr ();
	 		clrscr();
  		}
    	} //Fine controllo risposta   
	    break;
	    case 3:
	    printf("\n");
     	printf ("  ACCIAIO FeB 44 K n.c.\n");
	    printf("\n");
	    printf ("Tensione: ");
	    printf ("%f N/mm%c\n", matriceb[ind_j][0],178);
	    printf("\n");
	    ans = 2; //Inizio controllo risposta
			while (ans != 0 && ans !=1)
  		{
			printf ("Altro acciaio?(SI=1,NO=0)\n");
			scanf("%d", &ans);
			if (ans != 0 && ans != 1)
  		{
   		Errore();
   		ngetchx ();
   		ClrScr ();
	 		clrscr();
  		}
    	} //Fine controllo risposta   
	   	break;
	    case 4:
	    printf("\n");	
	    printf ("     ACCIAIO FeB 44 K\n");
	    printf("\n");
	    printf ("Tensione: ");
	    printf ("%f N/mm%c\n", matriceb[ind_j][0],178);
	    printf("\n");
	    ans = 2; //Inizio controllo risposta
			while (ans != 0 && ans !=1)
  		{
			printf ("Altro acciaio?(SI=1,NO=0)\n");
			scanf("%d", &ans);
			if (ans != 0 && ans != 1)
  		{
   		Errore();
   		ngetchx ();
   		ClrScr ();
	 		clrscr();
  		}
    	} //Fine controllo risposta   
	    break;
	  	} //chiude switch accb
break;
} // chiude switch acca
}//chiude while
break;
} // chiude switch scelta
} //chiude programma
