unit DIBUS;

interface


USES CRT,  GRAPH, RATON;


PROCEDURE INSIGNIA(x,y:Integer;  nombre:String; long, alt:Integer);
PROCEDURE INSIGNIA_ON(x,y:Integer;  nombre:String; long, alt:Integer);
PROCEDURE MARCO_DESNIVEL( X1,Y1, X2,Y2, SOMBRA, BRILLO:INTEGER);
PROCEDURE ESPERAR;
PROCEDURE DIBUJO_CONTROL_BOTONERA;
PROCEDURE PONER_VENTANA(X1,Y1, X2,Y2:INTEGER;
								texto1,texto2,texto3,texto4:String);
PROCEDURE PONER_VENTANA_CREDITOS;
PROCEDURE PONER_FLECHITA(X,Y:INTEGER;derecha:Boolean);
PROCEDURE ANOTAR_EVENTO(numero:Integer;GRADOS1,GRADOS2,grados:Real;enx,Y,Y1a,Y1b, Y2a,Y2b:INTEGER; ETIQUETA:STRING);
PROCEDURE ANOTAR_TEXTO(numero:INTEGER;GRADOS,GRAD:REAL; enx,Y, COLOR:INTEGER; ETIQUETA:STRING);
PROCEDURE RELLENAR_EVENTO(GRADOS1,GRADOS2,grados:Real;enx,Y1,Y2,COLOR:INTEGER);

implementation

{-----------------------------------------------------------------------}
var
guardado_enx  :ARRAY[1..30] of integer;
bandera_evento:ARRAY[1..30] of Boolean;
bandera_texto :ARRAY[1..30] of Boolean;

fondo_ventana:Word;
Puntero_ventana:Pointer;
 fondo_flechita:Word;
 Puntero_flechita:Pointer;

i:Integer;

PROCEDURE INSIGNIA(x,y:Integer;  nombre:String; long, alt:Integer);
begin
SetLineStyle(0,0,0);
SetColor(0);
Line(x,y, x+long-4,y);
Line(x+long,y+4, x+long,y+alt-4);
Line(x+long-4,y+alt, x,y+alt);
Line(x-4,y+alt-4, x-4,y+4);
ARC(x,y+4, 90,180,4);
ARC(x+long-4,y+4, 0,90,4);
ARC(x+long-4,y+alt-4, 270,0,4);
ARC(x,y+alt-4, 180,270,4);

SetLineStyle(0,0,0);
SetColor(8);

Line(x-2,y+2,x-2,y+alt-2);
Line(x-1,y+3,x-1,y+alt-1);
Line(x-3,y+3,x-3,y+alt-3);
Line(x-2,y+alt-2,x+long-2,y+alt-2);

Line(x-1,y+alt-1,x+long-3,y+alt-1);

SetFillStyle(1,7);
Bar(x-1, y+2, x+long-3, y+alt-3);

SetColor(15);                     {..Brillos blancos..}
Line(x-1,y+1, x+long-4,y+1);
  if alt>25 then
  begin
  Line(x,y+2, x+long-3,y+2);
  PutPixel(x+long-3, y+3, 15);
  end;
Line(x+long-1,y+4, x+long-1,y+alt-4);
Line(x+long-2,y+2, x+long-2,y+alt-3);
PutPixel(x+long-4,y+2,  15);
PutPixel(x+long-3,y+3,  15);

PutPixel(x-1,y+alt-3,  8);
PutPixel(x-1,y+3,  8);

PutPixel(x-2,y+2,  7);

PutPixel(x+long-3,y+2,  15);
PutPixel(x+long-3,y+alt-3,  15);
PutPixel(x+long-2,y+alt-2,  15);

if alt>34 then   {.........Boton especial del logotipo......}
				  begin
				  SetTextStyle(1,0,4);
					SetColor(0);
					OutTextXY(x+5, y+1, 'SiMEEP');   {sombra}
					 SetColor(15);
					 OutTextXY(x+7, y-1, 'SiMEEP');  {luz}
				  SetColor(4);
				  OutTextXY(x+6, y, 'SiMEEP');      {logo}
				  SetTextStyle(2,0,4);
				{  SetColor(0);
				  OutTextXY(x+11, y+27, 'C r ‚ d i t o   s');}
				  end

  else
  begin
	 SetTextStyle(2,0,4);

	 SetColor(0);
	 if alt >=16 then OutTextXY(x+3, y+4, nombre) {botones salir o pausa}
	 else             OutTextXY(x+3, y+1, nombre);{botones normales de control}

  end;
end;

{.........................................................................}


PROCEDURE INSIGNIA_ON(x,y:Integer;  nombre:String; long, alt:Integer);
begin
SetLineStyle(0,0,0);
SetColor(0);
Line(x,y, x+long-4,y);
Line(x+long,y+4, x+long,y+alt-4);
Line(x+long-4,y+alt, x,y+alt);
Line(x-4,y+alt-4, x-4,y+4);
ARC(x,y+4, 90,180,4);
ARC(x+long-4,y+4, 0,90,4);
ARC(x+long-4,y+alt-4, 270,0,4);
ARC(x,y+alt-4, 180,270,4);

SetColor(0);
Line(x-1,y+1,x+long-3,y+1);
Line(x+long-1,y+3,x+long-1,y+alt-2);
Line(x-3,y+3,x-3,y+alt-3);
Line(x-1,y+alt-1,x+long-3,y+alt-1);

SetLineStyle(0,0,0);
SetColor(8);
Line(x+long-3,y+3,x+long-3,y+alt-3);
Line(x+long-2,y+3,x+long-2,y+alt-2);

Line(x-2,y+2,x+long-2,y+2);
Line(x-3,y+3,x+long-1,y+3);
Line(x-3,y+4,x+long-1,y+4);

SetFillStyle(1,7);
Bar(x-2, y+3, x+long-3, y+alt-2);

PutPixel(x-2,y+alt-2,  8);
PutPixel(x-2,y+3,  8);

PutPixel(x+long-3,y+3,  8);
PutPixel(x+long-3,y+alt-2,  8);
PutPixel(x+long-3,y+alt-2,  8);


PutPixel(x+long-1,y+4,  0); PutPixel(x+long-2,y+2,  0);
PutPixel(x+long-1,y+3,  0);
SetTextStyle(2,0,4);

if alt>34 then   {.........Boton especial del logotipo......}
				  begin
				  SetTextStyle(1,0,4);
					SetColor(0);
					OutTextXY(x+3, y+3, 'SiMEEP');   {sombra}
					 SetColor(15);
					 OutTextXY(x+5, y+1, 'SiMEEP');  {luz}
				  SetColor(4);
				  OutTextXY(x+4, y+2, 'SiMEEP');
				  SetTextStyle(2,0,4);
{				  SetColor(0);
				  OutTextXY(x+7, y+29, 'C r ‚ d i t o   s');}
				  end

  else
  begin
	 SetTextStyle(2,0,4);
	 SetColor(0);
		if alt >=16 then  OutTextXY(x+1, y+6, nombre)
		else              OutTextXY(x+1, y+3, nombre)
  end;
SetColor(0);
end;

{.........................................................................}

{-----------------------------------------------------------------------}

PROCEDURE MARCO_DESNIVEL( X1,Y1, X2,Y2, SOMBRA, BRILLO:INTEGER);
begin
SetLineStyle(0,0,0);
SetColor(brillo);
Line(x2,y2, x1,y2);
Line(x1,y2, x1,y1);
SetLineStyle(0,0,0);
SetColor(sombra);
Line(x1,y1, x2,y1);
Line(x2,y1, x2,y2);
end;

{-----------------------------------------------------------------------}

PROCEDURE ESPERAR;    {..Espera hasta que se pulse cualquier tecla..}
  var  Ch:Char;
begin

 repeat until keyPressed;
Ch:=ReadKey;
if Ch = #0 then Ch:=ReadKey;

repeat until NOT keyPressed;
Ch:=ReadKey;
if Ch = #0 then Ch:=ReadKey;
end;

{-----------------------------------------------------------------------}

FUNCTION CONVERTIR(L:LongInt):String;
 var  seg:String;
begin
Str(L,seg);
Convertir:=seg;
end;

{-----------------------------------------------------------------------}

PROCEDURE DIBUJO_CONTROL_BOTONERA;
BEGIN
SetFillStyle(1,6);  {.fondo marron.}
Bar(1,1,640,480);

SetFillStyle(1,1);  {.fondo gris.}
Bar(493,11, 629,468);

Marco_desnivel(489,6, 632,473,  14,0);  {Bloque soporte para las teclas}
Marco_desnivel(492,9, 629,470, 0,11);  {Bloque soporte para las teclas}
END;
{-----------------------------------------------------------------------}

PROCEDURE PONER_VENTANA(X1,Y1, X2,Y2:INTEGER;
								texto1,texto2,texto3,texto4:String);
var	x,y:word;
		der,izq,cnt:boolean;

BEGIN
PUNTERO_OFF;

  Fondo_ventana:=ImageSize(x1,y1,x2,y2);
  GetMem(Puntero_ventana, Fondo_ventana);
  GetImage(x1,y1, x2,y2, Puntero_ventana^);

SetFillStyle(1,0);
Bar(X1,Y1+10,X2-10,Y2);
SetFillStyle(1,7);
Bar(X1+10,Y1,X2,Y2-10);
Marco_desnivel(X1+10,Y1, X2,Y2-10,  15,0);
SetFillStyle(1,15);
Bar(X1+10+10,Y1+10,X2-10,Y2-10-10);
Marco_desnivel(X1+4+10,Y1+4, X2-4,Y2-4-10,  0,15);

SetColor(0);
OutTextXY(x1+25,y1+15, texto1);
OutTextXY(x1+25,y1+25, texto2);
OutTextXY(x1+25,y1+35, texto3);
OutTextXY(x1+25,y1+45, texto4);
SetColor(0);
PUNTERO_ON;


	{esperar boton derecho o tecla}
	repeat
		LEER_RATON(x,y,izq,cnt,der)
	until der or  keypressed;

	repeat
		LEER_RATON(x,y,izq,cnt,der)
	until not der ;
 PUNTERO_OFF;
 PutImage(x1,y1,Puntero_ventana^,NormalPut);
 FreeMem(Puntero_ventana, Fondo_ventana);
 PUNTERO_ON;
END;
{-----------------------------------------------------------------------}
PROCEDURE PONER_VENTANA_CREDITOS;
const 	X1=49;
			Y1=80;
			X2=449;
			Y2=400;

var	x,y:word;
		der,izq,cnt:boolean;

BEGIN
  Fondo_ventana:=ImageSize(x1,y1,x2,y2);
  GetMem(Puntero_ventana, Fondo_ventana);
  GetImage(x1,y1, x2,y2, Puntero_ventana^);

SetFillStyle(1,0);
Bar(X1,Y1+10,X2-10,Y2);
SetFillStyle(1,7);
Bar(X1+10,Y1,X2,Y2-10);
Marco_desnivel(X1+10,Y1, X2,Y2-10,  15,0);
SetFillStyle(1,15);
Bar(X1+10+10,Y1+10,X2-10,Y2-10-10);
Marco_desnivel(X1+4+10,Y1+4, X2-4,Y2-4-10,  0,15);

SetTextStyle(1,0,4);
SetColor(4);
OutTextXY(x1+149,y1+30,'SiMEEP');
SetLineStyle(0,0,2);
Line(x1+149,y1+65,x1+149+105,y1+65);
Line(x1+149,y1+66,x1+149+105,y1+66);

SetTextStyle(0,0,0);
SetColor(1) ;
CirCle(x1+153,y1+79,6)  ;
OutTextXY(x1+142,y1+75,' c Rub‚n Chaer');
SetTextStyle(2,0,4);
OutTextXY(x1+35,y1+90,'Simulador de M quinas El‚ctricas y Electr¢nica de Potencia');


SetTextStyle(0,0,0);
SetColor(0);
OutTextXY(x1+70,y1+145,'          Contribuyeron:');
SetColor(1);
OutTextXY(x1+70,y1+165,' Alberto Rodriguez Ollacarizqueta');
OutTextXY(x1+70,y1+180,'    Jos‚ Javier Romero Galeano');
SetColor(0);
OutTextXY(x1+70,y1+245,' Instituto de Ingenier¡a El‚ctrica');
OutTextXY(x1+70,y1+260,'    Universidad de la Rep£blica');
OutTextXY(x1+70,y1+275,'          Uruguay , 1998');
SetTextStyle(2,0,4);

	{esperar boton derecho o izquierdo o tecla}
	repeat
		LEER_RATON(x,y,izq,cnt,der)
	until der or izq or keypressed;

	repeat
		LEER_RATON(x,y,izq,cnt,der)
	until not der and not izq;


 PutImage(x1,y1,Puntero_ventana^,NormalPut);
 FreeMem(Puntero_ventana, Fondo_ventana);
END;
{-----------------------------------------------------------------------}

PROCEDURE PONER_FLECHITA(X,Y:INTEGER;derecha:Boolean);
var ch:Char;
BEGIN
{  Fondo_flechita:=ImageSize(x-10,y-10,x+30,y+10);
  GetMem(Puntero_flechita, Fondo_flechita);
  GetImage(x-10,y-40, x+30,y+40, Puntero_flechita^);
 }

 SetLineStyle(0,0,3);
 SetColor(15);
 Delay(300);
	if derecha=false then
	begin
	Line(x,y,x,y+30);
	Line(x,y,x-5,y+10);
	Line(x,y,x+5,y+10);
	end else
	begin
	Line(x,y,x+30,y);
	Line(x+30,y,x+25,y-5);
	Line(x+30,y,x+25,y+5);
	end;
SetLineStyle(0,0,0);
END;

{----------------------------------------------------------------------}

PROCEDURE QUITAR_FLECHITA(X,Y:INTEGER);
BEGIN
 PutImage(x-10,y-40,Puntero_flechita^,NormalPut);
 SetLineStyle(0,0,0);
 FreeMem(Puntero_flechita, Fondo_flechita);
END;

{----------------------------------------------------------------------}

PROCEDURE ANOTAR_EVENTO(numero:Integer;GRADOS1,GRADOS2,grados:Real; enx,Y,Y1a,Y1b,Y2a, Y2b:INTEGER; ETIQUETA:STRING);
BEGIN
SetColor(15);

if (grados>=GRADOS1) AND (grados<GRADOS2) AND (bandera_evento[numero]=TRUE)
							then
							begin
							guardado_enX[numero]:=enx;{guardo el primer punto}
							bandera_evento[numero]:=FALSE;
							end;

if (grados>=GRADOS2) AND (bandera_evento[numero]=False)
							then                         {....final...}
							begin
							SetLineStyle(0,0,0); {pinto la linea del primer punto}
							Line(guardado_enX[numero]-1,Y1a,guardado_enx[numero]-1,Y1b);

							{linea horizontal}
							Line(guardado_enX[numero]-1,y,enX-1,y);

							{pinto linea del segundo punto}
							Line(enX-1,y2a,enX-1,y2b);
							{flecha1}
							Line(enx-1-1,y,enX-3-1,y-2);
							Line(enX-1-1,y,enX-3-1,y+2);
							{flecha2}
							Line(guardado_enx[numero]+1,y,guardado_enx[numero]+3,y-2);
							Line(guardado_enx[numero]+1,y,guardado_enx[numero]+3,y+2);
							if enX-guardado_enx[numero]>=25 then OutTextXY(guardado_enX[numero]+5,y-13,etiqueta)
								else OutTextXY(guardado_enX[numero]-10,y-13,etiqueta);
							bandera_evento[numero]:=TRUE;
							End;

END;

{----------------------------------------------------------------------}

PROCEDURE RELLENAR_EVENTO(GRADOS1,GRADOS2,grados:Real; enx,Y1,Y2,COLOR:INTEGER);
BEGIN
if (grados>=grados1)  AND   {.intervalo a rellenar.}
	(grados<=grados2)
												then
												begin
												SetColor(Color);
												Line(enX,Y1,enX,Y2);
												end;
END;

{----------------------------------------------------------------------}

PROCEDURE ANOTAR_TEXTO(numero:INTEGER;GRADOS,GRAD:REAL; enx,Y, COLOR:INTEGER; ETIQUETA:STRING);
BEGIN
SetColor(15);

if (grad>=GRADOS) AND (bandera_texto[numero]=TRUE)
							then
							begin
							delay(1);
							SetTextStyle(2,0,4);
							SetColor(color);
							OutTextXY(enX,y,etiqueta);
							bandera_texto[numero]:=FALSE;
							end;

if grad<5 then bandera_texto[numero]:=TRUE;
end;

{----------------------------------------------------------------------}


BEGIN
for i:=1 to 30 do
					begin
					bandera_evento[i]:=TRUE;
					bandera_texto[i]:=TRUE;
					end;
END.