Olivia_v2017/Olivia/olv_tasks.cpp

154 lines
3.9 KiB
C++

#include "StdAfx.h"
#include "olv_tasks.h"
#include <winbase.h>
#include <shlwapi.h>
#include "olv_tasks_def.h"
#include "olv.h"
#include "sock_task.h"
#include "StrArray.h"
#include "dir_manager.h"
Colv_tasks::Colv_tasks(COlivia *ool)
{
olv = ool;
path_ang[0]=path_cconj[0]=file_iaso[0]=path_temp[0]=0;
}
Colv_tasks::~Colv_tasks(void)
{
}
//*************************************************************************************
/*
* Arranca una aplicación
*/
BOOL Colv_tasks::lanza_app(char *appName, char *comline)
{
// additional information
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL is_alive=FALSE;
// set the size of the structures
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// start the program up
CreateProcess( appName, // the path
comline, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
);
//check is alive
DWORD lpExitCode;
GetExitCodeProcess(pi.hProcess,&lpExitCode);
is_alive=(lpExitCode==STILL_ACTIVE);
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return is_alive;
}
//*************************************************************************************
/*
* Consigue el dir de una dll
*/
void Colv_tasks::get_dll_dir(char *dlldir)
{
char path[MAX_PATH];
HMODULE hm = NULL;
path[0]=0;
hm=GetModuleHandle(OLV_DLL_NAME);
if (GetModuleFileName(hm, path, sizeof(path)) == 0)
{
int ret = GetLastError();
fprintf(stderr, "GetModuleFileName failed, error = %d\n", ret);
}
strcpy_s(dlldir,MAX_PATH,path);
}
//*************************************************************************************
/*
* Inicializa la ruta de los dirs
*/
void Colv_tasks::inidirs( char *path_temp )
{
char st1[MAX_PATH];
strcpy_s(st1,MAX_PATH,path_temp);
if(path_temp[strlen(path_temp)-1]=='\\')
{
st1[strlen(st1)-1]=0;
}
sprintf_s(path_cconj,MAX_PATH,"%s\\%s\\",st1,TASKS_NOMB_COSTCONJ);
sprintf_s(path_costamb,MAX_PATH,"%s\\%s\\",st1,TASKS_NOMB_COSTAMB);
sprintf_s(path_ang,MAX_PATH,"%s\\%s\\",st1,TASKS_NOMB_COSTANG);
sprintf_s(file_iaso,MAX_PATH,"%s\\%s.%s",st1,TASKS_NOMB_IASO,TASKS_EXT_MAT);
strcpy_s(this->path_temp,MAX_PATH,st1);
Cdir_manager dm;
dm.crea_dir(st1);
dm.crea_dir(path_cconj);
dm.crea_dir(path_costamb);
dm.crea_dir(path_ang);
}
//*************************************************************************************
float minFloat(float a, float b)
{
return min(a,b);
}
//*************************************************************************************
BOOL Colv_tasks::lee_cost_amb(Matrix2d<float> &cost_amb)
{
class floatMinCom: public ComClasFunction<float>
{
public:
floatMinCom(){}
virtual float comp(float a, float b)
{
return min(a, b);
}
};
floatMinCom ccom;
StrArray files;
//pilla archivos-----------------------
if(!Cdir_manager::listar(path_costamb, &files))
return FALSE;
char *f;
for (int i = 0; i<files.size(); i++)
{
f=files.get(i);
if(strcmp(Cdir_manager::extension_archivo(f),TASKS_EXT_MAT))
continue;
if(!cost_amb.fileMix(f, &ccom))
return FALSE;
}
return TRUE;
}
//*************************************************************************************
BOOL Colv_tasks::guarda_cost_amb()
{
return TRUE;
}
//*************************************************************************************
//#ifdef OLV_UTILES32
Cproceso_cliente* Colv_tasks::crea_cliente( BOOL *pirate )
{
Csock_task *soc = new Csock_task(olv);
soc->pirate_soc = pirate;
soc->olv = olv;
return soc;
}
//#endif