// Programma cp_stand_2 (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
int zona = 0;  //scelta (1,2,3) della zona climatica
int parte = 0;//scelta (1,2,3,4) della parte di edificio
int risp = 1; //SI
float jump = 15.0; //numero di linee
float stepx, stepy; //spazi fra linee
int incremento; //incremento cicli linee
float matricea[12]; //Matrice A (tabella valori)


int pix = 0;

ClrScr (); //Pulizia dello schermo grafico
clrscr(); //Pulizia dello schermo di testo

//Assegnazione Valori della Matrice A:

matricea [0] = 0.13;
matricea [1] = 0.17;
matricea [2] = 0.17;
matricea [3] = 1.33;
matricea [4] = 0.23;
matricea [5] = 0.38;
matricea [6] = 0.41;
matricea [7] = 1.68;
matricea [8] = 0.43;
matricea [9] = 0.48;
matricea [10] = 0.48;
matricea [11] = 2.71;



//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
// 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!
//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, 10, 138, 93); //Linea sx
DrawLineFast (138, 10, 148, 10); //Linea sopra
DrawStr(140,13,"C",A_NORMAL);
DrawStr(140,21,"P",A_NORMAL);

DrawStr(140,36,"S",A_NORMAL);
DrawStr(140,44,"T",A_NORMAL);
DrawStr(140,52,"A",A_NORMAL);
DrawStr(140,60,"N",A_NORMAL);
DrawStr(140,68,"D",A_NORMAL);
//DrawStr(140,67,"*",A_NORMAL);
DrawStr(140,84,"2",A_NORMAL);
DrawLineFast (138, 93, 148, 93); //Linea sotto
DrawLineFast (148, 10, 148, 93); //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();
 
//Descrizione Ambiente Operativo

//--- Cuore del Programma ---
//Su una riga ci stanno solo 26 caratteri!!!

while (risp ==1)
{
zona = 0;
while (zona != 0x1 && zona != 0x2 && zona != 0x3)
{
ClrScr ();
clrscr();
printf("FUTURI STANDARD NAZIONALI\n");
printf("       D'ISOLAMENTO       \n");
printf("\n");
// Acquisizione dei dati necessari alla elaborazione.
printf("Scelta zona climatica:\n");
printf("1)Fredda(Finlandia,Svezia)\n");
printf("2)Moderata(Austria,Belgio,\n");
printf("  Francia,Irlanda,Olanda)\n");
printf("3)Calda(Grecia,Italia,\n");
printf("  Portogallo,Spagna)\n");
printf("\n");
printf("Scelta: ");
scanf("%d", &zona);
// Controllo correttezza dell'input:
		if (zona != 1 && zona != 2 && zona != 3)
		{
		Errore();
		ngetchx ();
		}
}

switch(zona)
{
case 1:
	ClrScr ();
	clrscr();
	parte = 0;
						while (parte != 0x1 && parte != 0x2 && parte != 0x3 && parte != 0x4)
						{
						ClrScr ();
						clrscr();
						// Acquisizione dei dati necessari alla elaborazione.
						printf("\n");
						printf("       ZONA FREDDA\n");
						printf("       -----------\n");
						printf("Trasmittanza U(W/m%cK) per:\n",178);
						printf("1)Copertura\n");
						printf("2)Facciata\n");
						printf("3)Solaio rialzato\n");
					  printf("4)Finestre\n");
						printf("\n");
						printf("Scelta: ");
						scanf("%d", &parte);
						// Controllo correttezza dell'input:
						if (parte != 0x1 && parte != 0x2 && parte != 0x3 && parte != 0x4)
							{
							Errore();
							ngetchx ();
							}
						}
						switch(parte)
						{
						case 1:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA FREDDA\n");
						printf("       -----------\n");
						printf ("Valore di U per copertura:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[0],178);							
						break;
						case 2:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA FREDDA\n");
						printf("       -----------\n");
						printf ("Valore di U per facciata:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[1],178);
						break;
						case 3:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA FREDDA\n");
						printf("       -----------\n");
						printf ("Valore di U per solaio\n");
						printf ("rialzato: %f W/m%cK \n", matricea[2],178);
						break;
						case 4:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA FREDDA\n");
						printf("       -----------\n");
						printf ("Valore di U per finestre:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[3],178);
						}
				
break;

case 2:
ClrScr ();
	clrscr();
	parte = 0;
						while (parte != 0x1 && parte != 0x2 && parte != 0x3 && parte != 0x4)
						{
						ClrScr ();
						clrscr();
						// Acquisizione dei dati necessari alla elaborazione.
						printf("\n");
						printf("       ZONA MODERATA\n");
						printf("       -------------\n");
						printf("Trasmittanza U(W/m%cK) per:\n",178);
						printf("1)Copertura\n");
						printf("2)Facciata\n");
						printf("3)Solaio rialzato\n");
					  printf("4)Finestre\n");
						printf("\n");
						printf("Scelta: ");
						scanf("%d", &parte);
						// Controllo correttezza dell'input:
						if (parte != 0x1 && parte != 0x2 && parte != 0x3 && parte != 0x4)
							{
							Errore();
							ngetchx ();
							}
						}
						switch(parte)
						{
						case 1:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA MODERATA\n");
						printf("       -------------\n");
						printf ("Valore di U per copertura:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[4],178);
						break;
						case 2:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA MODERATA\n");
						printf("       -------------\n");
						printf ("Valore di U per facciata:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[5],178);
						break;
						case 3:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA MODERATA\n");
						printf("       -------------\n");
						printf ("Valore di U per solaio\n");
						printf ("rialzato: %f W/m%cK \n", matricea[6],178);
						break;
						case 4:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("       ZONA MODERATA\n");
						printf("       -------------\n");
						printf ("Valore di U per finestre:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[7],178);
						break;
						}
break;

case 3:
ClrScr ();
	clrscr();
	parte = 0;
						while (parte != 0x1 && parte != 0x2 && parte != 0x3 && parte != 0x4)
						{
						ClrScr ();
						clrscr();
						// Acquisizione dei dati necessari alla elaborazione.
						printf("\n");
						printf("        ZONA CALDA\n");
						printf("        ----------\n");
						printf("Trasmittanza U(W/m%cK) per:\n",178);
						printf("1)Copertura\n");
						printf("2)Facciata\n");
						printf("3)Solaio rialzato\n");
					  printf("4)Finestre\n");
						printf("\n");
						printf("Scelta: ");
						scanf("%d", &parte);
						// Controllo correttezza dell'input:
						if (parte != 0x1 && parte != 0x2 && parte != 0x3 && parte != 0x4)
							{
							Errore();
							ngetchx ();
							}
						}
						switch(parte)
						{
						case 1:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("        ZONA CALDA\n");
						printf("        ----------\n");
						printf ("Valore di U per copertura:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[8],178);
						break;
						case 2:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("        ZONA CALDA\n");
						printf("        ----------\n");
						printf ("Valore di U per facciata:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[9],178);
						break;
						case 3:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("        ZONA CALDA\n");
						printf("        ----------\n");
						printf ("Valore di U per solaio\n");
						printf ("rialzato: %f W/m%cK \n", matricea[10],178);
						break;
						case 4:
						ClrScr ();
						clrscr();
						printf("\n");
						printf("        ZONA CALDA\n");
						printf("        ----------\n");
						printf ("Valore di U per finestre:\n");
						printf("\n");
						printf ("%f W/m%cK \n", matricea[11],178);
						break;
						}
break;
}// Chiude lo switch della scelta della zona
printf("\n");
printf ("Vuoi ripetere?(SI=1,NO=0)\n");
scanf("%d", &risp);
}// Chiude il while della risposta
}// Chiude il programma


