Example #1
0
char *locate(const char *name, int type)
{
	char fname[256], *newpath, *newname, *fspec, *title;
	boolean result = FALSE;
	int ex_flags;

	if (type == L_FOLDER)
	{
		if ((fspec = fn_make_path(name, "*")) == NULL)		/* HR 271102 */
			return NULL;
		fname[0] = 0;
		ex_flags = EX_DIR;
	}
	else
	{
		if (   (fspec = fn_make_newname(
		                        name, 
		                        (  (type == L_LOADCFG) || (type == L_SAVECFG) )
		                          ? CFG_EXT
		                          : "*"					/* HR 271102 */
		                               )
		       ) == NULL
		   )
			return NULL;
		strcpy(fname, fn_get_name(name));
		ex_flags = EX_FILE;
	}

	rsrc_gaddr(R_STRING, FSTLFILE + type, &title);

	do
	{
		newpath = xfileselector(fspec, fname, title);

		free(fspec);

		if (newpath == NULL)
			return NULL;

		if (type == L_FOLDER)
		{
			if (((newname = fn_get_path(newpath)) != NULL) && (isroot(newname) == TRUE))
			{
				alert_printf(1, MNOROOT);
				free(newname);
			}
			else
				result = TRUE;
		}
		else
		{
			if ((type == L_PROGRAM) && (prg_isprogram(fname) == FALSE))
				alert_printf(1, MFNPRG, fname);
			else
			{
				if (((newname = fn_make_newname(newpath, fname)) != NULL) && (type != L_SAVECFG))
				{
					result = x_exist(newname, ex_flags);
					if (result == FALSE)
					{
						alert_printf(1, MFNEXIST, fname);
						free(newname);
					}
				}
				else
					result = TRUE;
			}
		}
		fspec = newpath;
	}
	while (result == FALSE);

	free(newpath);

	return newname;
}
Example #2
0
boolean item_print(WINDOW *wd, int n, int *list)
{
	int i = 0, button, result = 0;
	boolean noerror = TRUE;

	/* DjV 031 070203 ---vvv--- */
	/* XDINFO info; */
	long nfiles=0, nfolders=0, nbytes=0, error;
	const char *name;
	/* DjV 031 070203 ---^^^--- */

	if (check_print(wd, n, list) == FALSE)
		return FALSE;

	/* DjV 031 080203 ---vvv--- */

	/* rsc_ltoftext(print, NITEMS, n); */

	/* xd_open(print, &info); */
	if ( count_items(wd, n, list, &nfolders, &nfiles, &nbytes) )	/* HR 151102: always display. */
	{	/* DjV 031 140203 */

		cv_fntoform ( copyinfo + CPFOLDER, fn_get_name(dir_path(wd)) );	  	/* DjV 031 140203 */
		cv_fntoform ( copyinfo + CPFILE, itm_name(wd, list[0]) ); 			/* DjV 031 140203 */

		button = open_cfdialog( CF_PRINT, 0L, (long)n, nbytes, CMD_PRINT ); /* DJV 031 070203 */
	} /* DjV 031 140203 */
	else
		button = 0;

	/* if (button == PRINTOK) */ 
	if ( button == COPYOK ) 
	/* DjV 031 080203 ---^^^--- */
	{
		if ((i < n) && (result != XFATAL) && (result != XABORT))
		{
			/* DjV 031 080203 ---vvv--- */
			name = itm_name(wd, list[i]);
			upd_name( dir_path(wd), CPFOLDER );	
			upd_name ( name, CPFILE ); 
			/* DjV 031 080203 ---^^^--- */

			result = print_file(wd, list[i]);

			if (result == XFATAL)
				noerror = FALSE;

			/* DJV 031 070203 150203 ---vvv--- */
			/* 
			rsc_ltoftext(print, NITEMS, n - i - 1);
			xd_draw(&info, NITEMS, 1);
			*/
			if ((error = itm_attrib(wd, list[i], 0, &pattr)) == 0)
			{
				nbytes -= pattr.size;
				upd_copyinfo ( 0L, n - i - 1, nbytes ); 
			}
			else
				result = copy_error(error, name, 0); /* 0= any op but move or delete is "copy" */
			/* DjV 031 070203 150203 ---^^^--- */

			i++;
		}
	}
	else
		noerror = FALSE;

	/* DjV 031 070203 ---vvv--- */
	/*
	xd_change(&info, button, NORMAL, 0);
	xd_close(&info);
	*/
	if ( button != 0 )
		close_cfdialog( button );
	/* DjV 031 070203 ---^^^--- */

	return noerror;
}
Example #3
0
	/* Service */
	bool CService::load_module(const int64_t id, const char* path){
		if(!Super::load_module(id, path)) return false;
		if(!path) return false;
		m_id =id;

		// load dll
		m_dl =::dlopen(path, RTLD_NOW | RTLD_GLOBAL);
		if(m_dl == 0){
			const char* err =::dlerror();
			ERROR("fail to call dlopen <%s>, %s", path, err ? err : "no error");
			return false;
		}

		// object pool manager
		OPH();

		// set path
		String* p =String::NewString(path);
		ASSIGN_POINTER(m_path, p);

		// get name
		{
			const char* (*fn_get_name)() =(const char* (*)())::dlsym(m_dl, "get_name");
			if(!fn_get_name){
				const char* err =::dlerror();
				ERROR("fail to call dlsym <%s, get_name>, %s", path, err ? err : "no error");
				unload_module();
				return false;
			}
			const char* name =fn_get_name();
			if(!name) name ="unnamed";
			CLEAN_POINTER(m_name);
			m_name =String::NewString(name);
			m_name->retain();
		}

		// get desc
		{
			const char* (*fn_get_desc)() =(const char* (*)())::dlsym(m_dl, "get_desc");
			if(!fn_get_desc){
				const char* err =::dlerror();
				ERROR("fail to call dlsym <%s, get_desc>, %s", path, err ? err : "no error");
				unload_module();
				return false;
			}
			const char* desc =fn_get_desc();
			if(!desc) desc ="";
			CLEAN_POINTER(m_desc);
			m_desc =String::NewString(desc);
			m_desc->retain();
		}

		// get on_load
		{
			m_on_load =(PFN_ON_LOAD)::dlsym(m_dl, "on_load");
			if(!m_on_load){
				const char* err =::dlerror();
				ERROR("fail to call dlsym <%s, on_load>, %s", path, err ? err : "no error");
				unload_module();
				return false;
			}
		}

		// get on_update
		{
			m_on_update =(PFN_ON_UPDATE)::dlsym(m_dl, "on_update");
			if(!m_on_update){
				const char* err =::dlerror();
				ERROR("fail to call dlsym <%s, on_update>, %s", path, err ? err : "no error");
				unload_module();
				return false;
			}
		}

		// get on_start_command
		{
			m_on_start_command =(PFN_ON_START_COMMAND)::dlsym(m_dl, "on_start_command");
			if(!m_on_start_command){
				const char* err =::dlerror();
				ERROR("fail to call dlsym <%s, on_start_command>, %s", path, err ? err : "no error");
				unload_module();
				return false;
			}
		}

		// get on_unload
		{
			m_on_unload =(PFN_ON_UNLOAD)::dlsym(m_dl, "on_unload");
			if(!m_on_unload){
				const char* err =::dlerror();
				ERROR("fail to call dlsym <%s, on_unload>, %s", path, err ? err : "no error");
				unload_module();
				return false;
			}
		}

		return true;
	}