//---------------------------------------------------------------------------
// Operaciones previas y llamada a la función de descarga
//---------------------------------------------------------------------------
void __fastcall TMainForm::b_descargarClick(TObject *Sender)
{
    DWORD       bytes;
    AnsiString  url("http://" + cb_url->Text);
    AnsiString  destino(IncludeTrailingBackslash(m_opciones.m_destino));

    // buscar la extensión. La función ExtractFileExt también nos sirve para Urls, porque
    // lo único que hace el buscar el punto comenzando por el final.
    destino += "datos" + ExtractFileExt(cb_url->Text);

    Screen->Cursor = crHourGlass;

    e_localizacion->Text = "Descargando...";
    e_asociado->Text     = e_localizacion->Text;
    b_abrir->Enabled     = false;
    ts_archivo->Repaint();

    __try
    {
        lb_log->Items->Clear();
        lb_log->Repaint();

        bytes = Descargar(url.c_str(), destino.c_str(), &m_opciones, &DescargaCallback);
    }
    __finally
    {
        Screen->Cursor = crDefault;

        if ( DWORD(-1) == bytes )
        {
            e_localizacion->Text = "";
            e_asociado->Text     = "";

            lb_log->ItemIndex = MainForm->lb_log->Items->Add("Se ha producido un error descargando el recurso.");
        }
        else
        {
            char buff[256];

            FindExecutable(destino.c_str(), NULL, buff);
            e_localizacion->Text = destino;
            e_asociado->Text     = buff;
            b_abrir->Enabled     = true;
            m_vista->Lines->Clear();

            lb_log->ItemIndex = MainForm->lb_log->Items->Add("El recurso ha sido descargado en " +
                    destino + ". Tamaño total: " + IntToStr(bytes) + " bytes.");
        }
    }
}
int nuevareserva(Registro &NuevoReg, CListaTfnos &Trabajo, Registro &reg)
{ 	
									
	int distancia, coste, diasemana,    // Declaracion de variables locales
		coste_total, oferta, recargo;
	
	
	destino(NuevoReg, Trabajo);			// Llamada a funciones y asignacion de
										//valores de distintas variables
			
	distancia = NuevoReg.leedistancia();	//lee la distancia para luego
											//utilizarlo en el precio
	
	coste = precio(distancia, NuevoReg);
	
	cuando(NuevoReg);
			
	diasemana = NuevoReg.unafecha.leediasemana();
	
	recargo = aumento(diasemana, coste);
	
	oferta = descuento(coste, distancia, NuevoReg);
	
	coste_total = coste + oferta + recargo;

	if (NuevoReg.leevuelta()==true)
		coste_total = coste_total * 2;
	
	NuevoReg.precio=coste_total;
	
	
	guardareserva(NuevoReg, reg, Trabajo);			//guarda la reserva hecha a
													//petición del usuario
	


	return 0;
}