// Programma c_u_cpfr (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_j = 0; //indice J della matrice

int sce = 0; //scelta iniziale
int ans = 0;  //scelta iniziale
float jump = 15.0; //numero di linee
float stepx, stepy; //spazi fra linee
int incremento; //incremento cicli linee
float matricea[4][3]; //Tabella 1
float matriceb[2][3];//Tabella 2

ClrScr (); //Pulizia dello schermo grafico
clrscr(); //Pulizia dello schermo di testo

//Assegnazione Valori della Matrice A:

matricea [0][0] = 165000.0;
matricea [0][1] = 210000.0;
matricea [0][2] = 300000.0;

matricea [1][0] = 2800.0;
matricea [1][1] = 2400.0;
matricea [1][2] = 1300.0;

matricea [2][0] = 3050.0;
matricea [2][1] = 2900.0;
matricea [2][2] = 1450.0;

matricea [3][0] = 1.7;
matricea [3][1] = 1.2;
matricea [3][2] = 0.45;

matriceb [0][0] = 3500.0;
matriceb [0][1] = 3500.0;
matriceb [0][2] = 2250.0;

matriceb [1][0] = 230000.0;
matriceb [1][1] = 230000.0;
matriceb [1][2] = 70000.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, 91); //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,"C",A_NORMAL);
DrawStr(140,64,"P",A_NORMAL);
DrawStr(140,72,"F",A_NORMAL);
DrawStr(140,80,"R",A_NORMAL);
DrawLineFast (138, 91, 148, 91); //Linea sotto
DrawLineFast (148, 21, 148, 91); //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 ();

while (ans != 1 && ans != 2)
{
ClrScr ();
clrscr();
printf("CARATTERISTICHE MATERIALI\n");
printf("-------------------------\n");
printf("1) Lamine in plastica\n");
printf("   rinforzata con fibre\n");
printf("   carbonio\n\n");
printf("2) Tessuti in plastica\n");
printf("   rinforzata con fibre\n");
printf("   carbonio\n\n");
printf("Scelta: ");
scanf("%d", &ans);
// Controllo correttezza dell'input:
if (ans != 1 && ans != 2)
{
Errore();
ngetchx ();
}
}

switch(ans)
{
case 1:
ClrScr ();
clrscr();
sce = 0; 
while (sce != 1 && sce != 2 && sce != 3)
{
// Acquisizione dei dati necessari alla elaborazione.
printf("\n");
printf("Tipologia di lamina:\n\n");
printf("1) Sika CarboDur S\n");
printf("2) Sika CarboDur M\n");
printf("3) Sika CarboDur H\n");
printf("\n");
printf("Scelta: ");
scanf("%d", &sce);
// Controllo correttezza dell'input:
if (sce != 1 && sce != 2 && sce != 3)
{
Errore();
ngetchx ();
ClrScr ();
clrscr();

}
}

switch(sce)
{
case 1:
	ClrScr ();
	clrscr();
	printf("     Sika CarboDur S\n");
	printf("\n");
	printf("Modulo elastico:\n");
	printf("%f N/mm%c\n", matricea [0][0], 178);
	printf("Resistenza a trazione:\n");
	printf("%f N/mm%c\n", matricea [1][0], 178);
	printf("Valor medio resistenza a\n");
	printf("trazione a rottura:\n");
	printf("%f N/mm%c\n", matricea [2][0], 178);
	printf("Allungamento a rottura:\n");
	printf("> %f %c", matricea [3][0], 37);
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 2:
	ClrScr ();
	clrscr();
	printf("     Sika CarboDur M\n");
	printf("\n");
	printf("Modulo elastico:\n");
	printf("%f N/mm%c\n", matricea [0][1], 178);
	printf("Resistenza a trazione:\n");
	printf("%f N/mm%c\n", matricea [1][1], 178);
	printf("Valor medio resistenza a\n");
	printf("trazione a rottura:\n");
	printf("%f N/mm%c\n", matricea [2][1], 178);
	printf("Allungamento a rottura:\n");
	printf("> %f %c", matricea [3][1], 37);
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 3:
	ClrScr ();
	clrscr();
	printf("     Sika CarboDur H\n");
	printf("\n");
	printf("Modulo elastico:\n");
	printf("%f N/mm%c\n", matricea [0][2], 178);
	printf("Resistenza a trazione:\n");
	printf("%f N/mm%c\n", matricea [1][2], 178);
	printf("Valor medio resistenza a\n");
	printf("trazione a rottura:\n");
	printf("%f N/mm%c\n", matricea [2][2], 178);
	printf("Allungamento a rottura:\n");
	printf("> %f %c", matricea [3][2], 37);
	ngetchx ();
	ClrScr ();
	clrscr();
	break;
} // chiude switch sce
break;

case 2:
ClrScr ();
clrscr();
sce = 0; 
while (sce != 1 && sce != 2 && sce != 3)
{
// Acquisizione dei dati necessari alla elaborazione.
printf("\n");
printf("Tipologia di lamina:\n\n");
printf("1) Sika Wrap-230C\n");
printf("2) Sika Wrap-103C\n");
printf("3) Sika Wrap-100G\n");
printf("\n");
printf("Scelta: ");
scanf("%d", &sce);
// Controllo correttezza dell'input:
if (sce != 1 && sce != 2 && sce != 3)
{
Errore();
ngetchx ();
ClrScr ();
clrscr();
}
}

switch(sce)
{
case 1:
	ClrScr ();
	clrscr();
	printf("      Sika Wrap-230C      \n");
	printf("\n");
	printf("Resistenza a trazione\n");
	printf("delle fibre:\n");
	printf("%f N/mm%c\n\n", matriceb [0][0], 178);
	printf("Modulo elastico a\n");
	printf("trazione delle fibre:\n");
	printf("%f N/mm%c\n\n", matriceb [1][0], 178);
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 2:
	ClrScr ();
	clrscr();
	printf("      Sika Wrap-103C\n");
	printf("\n");
	printf("Resistenza a trazione\n");
	printf("delle fibre:\n");
	printf("%f N/mm%c\n\n", matriceb [0][1], 178);
	printf("Modulo elastico a\n");
	printf("trazione delle fibre:\n");
	printf("%f N/mm%c\n\n", matriceb [1][1], 178);
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 3:
	ClrScr ();
	clrscr();
	printf("      Sika Wrap-100G\n");
	printf("\n");
	printf("Resistenza a trazione\n");
	printf("delle fibre:\n");
	printf("%f N/mm%c\n\n", matriceb [0][2], 178);
	printf("Modulo elastico a\n");
	printf("trazione delle fibre:\n");
	printf("%f N/mm%c\n\n", matriceb [1][2], 178);
	ngetchx ();
	ClrScr ();
	clrscr();
	break;
} // chiude switch sce
break;

} // chiude switch ans
} //chiude programma
