// Programma cp_cons_1 (ArcTools)
// Latella Maria Veronica - Giugno 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 edificio = 0; //scelta (1,2,3,4) dell'edificio
int ripartizione = 0; //scelta (1,2,3,4,5,6) della ripartizione 
float jump = 15.0; //numero di linee
float stepx, stepy; //spazi fra linee
int incremento; //incremento cicli linee
float matricea[4][2]; //Matrice A
float matriceb[4][2]; //Matrice B
float matricec[4][2]; //Matrice C
float matriced[6][6]; //Matrice D
int pix = 0;

ClrScr (); //Pulizia dello schermo grafico
clrscr(); //Pulizia dello schermo di testo

//Assegnazione Valori della Matrice A:

matricea [0][0] = 106.0;
matricea [0][1] = 68.0;
matricea [1][0] = 20.0;
matricea [1][1] = 12.0;
matricea [2][0] = 31.0;
matricea [2][1] = 20.0;
matricea [3][0] = 157.0;
matricea [3][1] = 100.0;

//Assegnazione Valori della Matrice B:

matriceb [0][0] = 69.5;
matriceb [0][1] = 69.0;
matriceb [1][0] = 11.0;
matriceb [1][1] = 12.0;
matriceb [2][0] = 16.0;
matriceb [2][1] = 19.0;
matriceb [3][0] = 86.5;
matriceb [3][1] = 100.0;

//Assegnazione Valori della Matrice C:

matricec [0][0] = 15.0;
matricec [0][1] = 36.0;
matricec [1][0] = 11.0;
matricec [1][1] = 26.0;
matricec [2][0] = 16.0;
matricec [2][1] = 38.0;
matricec [3][0] = 42.0;
matricec [3][1] = 100.0;

//Assegnazione Valori della Matrice D:

matriced [0][0] = 0.79;
matriced [0][1] = 5.51;
matriced [0][2] = 0.90;
matriced [0][3] = 21.61;
matriced [0][4] = 28.83;
matriced [0][5] = 18.50;
matriced [1][0] = 72.94;
matriced [1][1] = 11.58;
matriced [1][2] = 5.48;
matriced [1][3] = 0.0;
matriced [1][4] = 90.0;
matriced [1][5] = 57.75;
matriced [2][0] = 26.04;
matriced [2][1] = 2.16;
matriced [2][2] = 2.47;
matriced [2][3] = 0.0;
matriced [2][4] = 30.67;
matriced [2][5] = 19.68;
matriced [3][0] = 6.30;
matriced [3][1] = 0.04;
matriced [3][2] = 0.01;
matriced [3][3] = 0.0;
matriced [3][4] = 6.35;
matriced [3][5] = 4.07;
matriced [4][0] = 106.07;
matriced [4][1] = 19.97;
matriced [4][2] = 9.18;
matriced [4][3] = 21.61;
matriced [4][4] = 155.84;
matriced [4][5] = 100.0;
matriced [5][0] = 68.08;
matriced [5][1] = 12.38;
matriced [5][2] = 5.69;
matriced [5][3] = 13.87;
matriced [5][4] = 100.0;
matriced [5][5] = 0.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
// 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, 18, 138, 93); //Linea sx
DrawLineFast (138, 18, 148, 18); //Linea sopra
DrawStr(140,21,"C",A_NORMAL);
DrawStr(140,29,"P",A_NORMAL);

DrawStr(140,44,"C",A_NORMAL);
DrawStr(140,52,"O",A_NORMAL);
DrawStr(140,60,"N",A_NORMAL);
DrawStr(140,68,"S",A_NORMAL);
//DrawStr(140,67,"*",A_NORMAL);
DrawStr(140,84,"1",A_NORMAL);
DrawLineFast (138, 93, 148, 93); //Linea sotto
DrawLineFast (148, 18, 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 (edificio != 0x1 && edificio != 0x2 && edificio != 0x3 && edificio != 0x4)
{
ClrScr ();
clrscr();
printf("    CONSUMI ENERGETICI    \n");
// Acquisizione dei dati necessari alla elaborazione.
printf("Scelta edificio:\n");
printf("1)Convenzionale italiano\n");
printf("2)Basso consumo energetico\n");
printf("3)Passivo\n");
printf("\n");
printf("Oppure:\n");
printf("4)Consumi energetici per\n");
printf("  abitazione italiana\n");
printf("\n");
printf("Scelta: ");
scanf("%d", &edificio);
// Controllo correttezza dell'input:
if (edificio != 1 && edificio != 2 && edificio != 3 && edificio != 4)
{
Errore();
ngetchx ();
}
}

switch(edificio)
{
case 1:
	ClrScr ();
	clrscr();
	printf("Consumo energetico per:\n");
	printf("----------------------\n");
	printf ("-)Riscaldamento:\n");
	printf ("  %f kWh/m%ca ", matricea[0][0],178);
	printf (" (%f%c)\n",matricea[0][1],37);
	printf ("-)Produzione acqua calda:\n");
	printf ("  %f kWh/m%ca ", matricea[1][0],178);
	printf (" (%f%c)\n",matricea[1][1],37);
	printf ("-)Illuminazione e cucina:\n");
	printf ("  %f kWh/m%ca ", matricea[2][0],178);
	printf (" (%f%c)\n",matricea[2][1],37);
	printf("\n");
	printf ("Complessivo: ");
	printf ("%f kWh/m%ca", matricea[3][0],178);
        // Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 2:
ClrScr ();
	clrscr();
	printf("Consumo energetico per:\n");
	printf("----------------------\n");
	printf ("-)Riscaldamento:\n");
	printf ("  %f kWh/m%ca ", matriceb[0][0],178);
	printf (" (%f%c)\n",matriceb[0][1],37);
	printf ("-)Produzione acqua calda:\n");
	printf ("  %f kWh/m%ca ", matriceb[1][0],178);
	printf (" (%f%c)\n",matriceb[1][1],37);
	printf ("-)Illuminazione e cucina:\n");
	printf ("  %f kWh/m%ca ", matriceb[2][0],178);
	printf (" (%f%c)\n",matriceb[2][1],37);
	printf("\n");
	printf ("Complessivo: ");
	printf ("%f kWh/m%ca", matriceb[3][0],178);
        // Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;

case 3:
ClrScr ();
	clrscr();
	printf("Consumo energetico per:\n");
	printf("----------------------\n");
	printf ("-)Riscaldamento:\n");
	printf ("  %f kWh/m%ca ", matricec[0][0],178);
	printf (" (%f%c)\n",matricec[0][1],37);
	printf ("-)Produzione acqua calda:\n");
	printf ("  %f kWh/m%ca ", matricec[1][0],178);
	printf (" (%f%c)\n",matricec[1][1],37);
	printf ("-)Illuminazione e cucina:\n");
	printf ("  %f kWh/m%ca ", matricec[2][0],178);
	printf (" (%f%c)\n",matricec[2][1],37);
	printf("\n");
	printf ("Complessivo: ");
	printf ("%f kWh/m%ca", matricec[3][0],178);
        // Pressione di un tasto per uscire...
	ngetchx ();
	ClrScr ();
	clrscr();
	break;
	
case 4:
while (ripartizione != 1 && ripartizione != 2 && ripartizione != 3 && ripartizione != 4 && ripartizione != 5 && ripartizione != 6)
{
ClrScr ();
	clrscr();
	printf("Ripartizione consumi\n");
	printf("--------------------\n");
	printf ("Scelta consumo:\n");
	printf ("1)Energia elettrica\n");
	printf ("2)Gas naturale\n");
	printf ("3)Prodotti petroliferi\n");
	printf ("4)Combustibili fossili\n");
	printf ("5)Totale\n");
	printf ("6)Percentuale\n");
	printf("\n");
	printf ("Scelta: ");
	scanf("%d", &ripartizione);
// Controllo correttezza dell'input:
  if (ripartizione != 1 && ripartizione != 2 && ripartizione != 3 && ripartizione != 4 && ripartizione != 5 && ripartizione != 6)
  {
    Errore();
    ngetchx ();
  }
    }
	ClrScr ();
	clrscr();
	ind_i = ripartizione - 1;
	printf ("CONSUMI (kWh/m%ca)\n",178);
	printf("\n");
	printf ("-)Riscaldamento: ");
	printf ("%f\n", matriced[ind_i][0]);
	printf ("-)Acqua calda: ");
	printf ("%f\n", matriced[ind_i][1]);
	printf ("-)Cucina: ");
	printf ("%f\n", matriced[ind_i][2]);
	printf ("-)Usi elettrici: ");
	printf ("%f\n", matriced[ind_i][3]);
	printf("\n");
	printf ("-)Totale: ");
	printf ("%f\n", matriced[ind_i][4]);
	if ( ind_i==5 )
	{
    printf ("\n");
  } 
  else
  {
  printf ("-)Percentuale: ");
	printf ("%f%c \n", matriced[ind_i][5],37);
	} 
	ngetchx ();
	ClrScr ();
	clrscr();
	break;
}
}


