// Programma c_monoind_pe (ArcTools)


#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
//Risoluzione dello schermo: 160x100 ovvero 8/5.
int ips = 99;
int ics = 4;
int i = 0; // Interasse (2,3,4,5,6)
float l =0.0; // Luce (10,15,20,25,30,35,40,45,50)
int neve = 100; //Peso neve
float p, cartot, ainf, azin;
float jump = 15.0; //numero di linee
float stepx, stepy; //spazi fra linee
int incremento; //incremento cicli linee

//Assegnazioni iniziali
p = 0.0;
cartot = 0.0;
ainf = 0.0;
azin = 0.0;
ClrScr (); //Pulizia dello schermo grafico
clrscr(); //Pulizia dello schermo di testo

//Maschera di avvio
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, 5, 138, 95); //Linea sx
DrawLineFast (138, 5, 148, 5); //Linea sopra
DrawStr(140,8,"C",A_NORMAL);
//DrawStr(140,43,"*",A_NORMAL);
DrawStr(140,19,"M",A_NORMAL);
DrawStr(140,27,"O",A_NORMAL);
DrawStr(140,35,"N",A_NORMAL);
DrawStr(140,43,"O",A_NORMAL);
DrawStr(140,51,"I",A_NORMAL);
DrawStr(140,59,"N",A_NORMAL);
DrawStr(140,67,"D",A_NORMAL);


//DrawStr(140,67,"*",A_NORMAL);
DrawStr(140,78,"P",A_NORMAL);
DrawStr(140,86,"E",A_NORMAL);
DrawLineFast (138, 95, 148, 95); //Linea sotto
DrawLineFast (148, 5, 148, 95); //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 ();

  
//--- Prima Parte ---
//Su una riga ci stanno solo 26 caratteri!!!
//DrawStr(0,0,"  CALCOLO PESO STRUTTURA",A_NORMAL);
while (i != 2 && i != 3 && i != 4 && i != 5 && i != 6)
{
ClrScr ();
clrscr();
// Input dati desiderati:
printf("     INTERSASSE E LUCE\n");
printf("     -----------------\n");
printf("Scegliere l'interasse i(m)\n");
printf("fra i seguenti valori: \n");
printf("2, 3, 4, 5, 6\n");
printf("Scelta: ");
scanf("%d", &i);
printf("\n");
	// Controllo correttezza dell'input:
			if (i != 2 && i != 3 && i != 4 && i != 5 && i != 6)
					{
					Errore();
					ngetchx ();
					}
}
switch(i)
{
case 2:

while (l < 10 || l > 50)
{
// Input dati desiderati:
printf("\n");
printf("Immettere la luce l(m):\n");
printf("(scegliere 10=<l<=50)\n");
printf("Luce= ");
scanf("%f", &l);
printf("\n");
	// Controllo correttezza dell'input:
			if (l < 10 || l > 50)
					{
					Errore();
					ngetchx ();
					ClrScr ();
					}
}

	ClrScr ();
	clrscr();
  p = 1.1 * l + 12.5;
  cartot = p + neve;
  ainf = (l/2);
  azin = cartot * ainf;
  printf("PESO COPERTURA\n");
  printf("Peso unitario copertura:\n");
  printf("P = %f daN/m%c\n",p,178);
  printf("Peso unitario totale:\n");
  printf("Ptot = %f daN/m%c\n",cartot,178);
  printf("\n");
  printf("Area infl. pil. interno:\n");
  printf("A = %f m%c\n",ainf,178);
  printf("Azione N su pilastro:\n");
  printf("N = %f daN\n",azin);
// Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 3:

while (l < 10 || l > 50)
{
// Input dati desiderati:
printf("\n");
printf("Immettere la luce l(m):\n");
printf("(scegliere 10=<l<=50)\n");
printf("Luce= ");
scanf("%f", &l);
printf("\n");
	// Controllo correttezza dell'input:
			if (l < 10 || l > 50)
					{
					Errore();
					ngetchx ();
					ClrScr ();
					}
}

	ClrScr ();
	clrscr();
  p = 1.1 * l + 13.5;
  cartot = p + neve;
  ainf = (3*l/4);
  azin = cartot * ainf;
  printf("PESO COPERTURA\n");
  printf("Peso unitario copertura:\n");
  printf("P = %f daN/m%c\n",p,178);
  printf("Peso unitario totale:\n");
  printf("Ptot = %f daN/m%c\n",cartot,178);
  printf("\n");
  printf("Area infl. pil. interno:\n");
  printf("A = %f m%c\n",ainf,178);
  printf("Azione N su pilastro:\n");
  printf("N = %f daN\n",azin);
// Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;
	
case 4:

while (l < 10 || l > 50)
{
// Input dati desiderati:
printf("\n");
printf("Immettere la luce l(m):\n");
printf("(scegliere 10=<l<=50)\n");
printf("Luce= ");
scanf("%f", &l);
printf("\n");
	// Controllo correttezza dell'input:
			if (l < 10 || l > 50)
					{
					Errore();
					ngetchx ();
					ClrScr ();
					}
}

	ClrScr ();
	clrscr();
  p = 1.1*l +14.5;
  cartot = p + neve;
  ainf = l;
  azin = cartot * ainf;
  printf("PESO COPERTURA\n");
  printf("Peso unitario copertura:\n");
  printf("P = %f daN/m%c\n",p,178);
  printf("Peso unitario totale:\n");
  printf("Ptot = %f daN/m%c\n",cartot,178);
  printf("\n");
  printf("Area infl. pil. interno:\n");
  printf("A = %f m%c\n",ainf,178);
  printf("Azione N su pilastro:\n");
  printf("N = %f daN\n",azin);
// Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 5:

while (l < 10 || l > 50)
{
// Input dati desiderati:
printf("\n");
printf("Immettere la luce l(m):\n");
printf("(scegliere 10=<l<=50)\n");
printf("Luce= ");
scanf("%f", &l);
printf("\n");
	// Controllo correttezza dell'input:
			if (l < 10 || l > 50)
					{
					Errore();
					ngetchx ();
					ClrScr ();
					}
}

	ClrScr ();
	clrscr();
  p = 1.1*l +16;
  cartot = p + neve;
  ainf = (5*l)/4;
  azin = cartot * ainf;
  printf("PESO COPERTURA\n");
  printf("Peso unitario copertura:\n");
  printf("P = %f daN/m%c\n",p,178);
  printf("Peso unitario totale:\n");
  printf("Ptot = %f daN/m%c\n",cartot,178);
  printf("\n");
  printf("Area infl. pil. interno:\n");
  printf("A = %f m%c\n",ainf,178);
  printf("Azione N su pilastro:\n");
  printf("N = %f daN\n",azin);
// Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 6:

while (l < 10 || l > 50)
{
// Input dati desiderati:
printf("\n");
printf("Immettere la luce l(m):\n");
printf("(scegliere 10=<l<=50)\n");
printf("Luce= ");
scanf("%f", &l);
printf("\n");
	// Controllo correttezza dell'input:
			if (l < 10 || l > 50)
					{
					Errore();
					ngetchx ();
					ClrScr ();
					}
}

	ClrScr ();
	clrscr();
  p = 1.1*l +17;
  cartot = p + neve;
  ainf = (3*l/2);
  azin = cartot * ainf;
  printf("PESO COPERTURA\n");
  printf("Peso unitario copertura:\n");
  printf("P = %f daN/m%c\n",p,178);
  printf("Peso unitario totale:\n");
  printf("Ptot = %f daN/m%c\n",cartot,178);
  printf("\n");
  printf("Area infl. pil. interno:\n");
  printf("A = %f m%c\n",ainf,178);
  printf("Azione N su pilastro:\n");
  printf("N = %f daN\n",azin);
// Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;
}

}
