Beispiel #1
0
int check_ext_menu( char **tcl_lines )
{
  int eax;
  int idx = find_pos( "\"&Xtns\" all options 1", tcl_lines, ebp_32 );
  if ( idx == -1 )
  {
    idx = find_pos( "\"&Help\" all options", tcl_lines, 0 );
    if ( idx == -1 )
    {
      idx = find_pos( "}]", tcl_lines, 0 );
      if ( idx == -1 )
        print_error( -21, "could not parse 'menu.tcl'.\n" );
      insert_str( " \"&Xtns\" all options 1 {\n", idx, tcl_lines );
      idx++;
      insert_str( " }\n", idx, tcl_lines );
      return idx;
    }
    else
    {
      insert_str( " \"&Xtns\" all options 1 {\n", idx, tcl_lines );
      idx++;
      insert_str( " }\n", idx, tcl_lines );
    }
  }
}
Beispiel #2
0
void solve()
{
  fc = find_pos( 'F' );
  cc = find_pos( 'C' );

  simulation( fc, f_p, f_path );
  simulation( cc, c_p, c_path );

  fout << process() << std::endl;
}
int	syntax_error_character(char *str, char *base, char *ops)
{
  while (str[0])
    {
      if (find_pos(base, *str) == -1 && find_pos(ops, *str) == -1)
	return (1);
      str = str + 1;
    }
  return (0);
}
Beispiel #4
0
Datei: avl.c Projekt: shijith/toy
void deletes(int n)
{
				struct node *par = 0;
				temp = root;
				par = find_pos(n, root);
				if(temp -> data == n) {
								if( par -> left == temp){
												if(temp -> right == 0)
																par ->left = temp -> left;
												else if(temp -> left == 0)
																par ->left = temp -> right;
												else {
																del_min();
												}
								} else if(par -> right == temp) {
												if(temp -> right == 0)
																par ->right = temp -> left;
												else if(temp -> left == 0)
																par ->right = temp -> right;
												else {
																del_min();
												}
								}	else {
												printf("root changed\n");
												if(root -> right == 0)
																root = root -> left;
												else
																del_min();

								}
								
				} 
				bf(par);
				
}
Beispiel #5
0
bool SEIntList::remove_val(const int val)
{
        int pos = find_pos(val);
        if (pos >= 0) return remove_pos(pos);

        return false;
}
bool SEStringList::remove_val(const SEString& val)
{
    int pos = find_pos(val);
    if (pos >= 0) return remove_pos(pos);

    return false;
}
Beispiel #7
0
/**
	@fn void* pool_buddy_malloc(pool_buddy* p, pool_size size, pool_err* err)
	@brief Allocates size bytes in the memory

	@param[inout] p The buddy struct
	@param[in] size The number of bytes to allocate
	@param[out] err The error that happened

	@return The pointer to the allocated memory
*/
POOL_FUNC void* pool_buddy_malloc(pool_buddy* p, pool_size size, pool_err* err)
{
	pool_u max_level;
	pool_u pos;
	pool_u pos_level;
	pool_u8 depth = pool_log2(POOL_CEIL_DIV(POOL_BUDDY_MAX_SIZE, POOL_BUDDY_BLOCK_SIZE));
	POOL_SET_ERR(err, POOL_ERR_OK);
	POOL_SET_ERR_IF(p == NULL, err, POOL_ERR_INVALID_POOL, NULL);
	POOL_SET_ERR_IF(size == 0, err, POOL_ERR_INVALID_SIZE, NULL);
	POOL_SET_ERR_IF(size > POOL_BUDDY_MAX_SIZE, err, POOL_ERR_OUT_OF_MEM, NULL);

	if (size < POOL_BUDDY_BLOCK_SIZE)
		size = POOL_BUDDY_BLOCK_SIZE;

	max_level = pool_log2(POOL_BUDDY_MAX_SIZE / size);
	pos = find_pos(p->tree, max_level, 1, depth);
	POOL_SET_ERR_IF(pos == 0, err, POOL_ERR_OUT_OF_MEM, NULL);

	POOL_UST_BIT(p->tree, pos);

	pos_level = pool_log2(pos);

	for (; pos_level < depth; pos_level++)
		pos *= 2;

	p->allocated += pool_pow2(depth - max_level);

	return (void*)((pos - POOL_BUDDY_BLOCK_N)*POOL_BUDDY_BLOCK_SIZE + (char*)p->mem);
}
Beispiel #8
0
Datei: var.c Projekt: aharri/base
static bool
parse_base_variable_name(const char **pstr, struct Name *name, SymTable *ctxt)
{
	const char *str = *pstr;
	const char *tstr;
	bool has_modifier = false;

	switch(str[1]) {
	case '(':
	case '{':
		/* Find eventual modifiers in the variable */
		tstr = VarName_Get(str+2, name, ctxt, false, find_pos(str[1]));
		if (*tstr == ':')
			has_modifier = true;
		else if (*tstr != '\0') {
			tstr++;
		}
		break;
	default:
		name->s = str+1;
		name->e = str+2;
		name->tofree = false;
		tstr = str + 2;
		break;
	}
	*pstr = tstr;
	return has_modifier;
}
Beispiel #9
0
void delete_ext_html(char *ext, char *gisbase, char **html)
{
    int pos1, pos2, pos3;
    int start, end;
    char item[MAXSTR];
    int found;
    int i;

    pos1 = find_pos("<b>Drivers sections:</b>", html, 0);	/* first go to section on "Drivers" */
    if (pos1 < 0) {
	/* we have a new version of the HTML docs that does not have a "Drivers" section anymore */
	/* let's check for the special GEM comment */
	pos1 =
	    find_pos
	    ("<!-- GEM Extensions StartHTML. Do not delete or change this comment! -->",
	     html, 0);
	if (pos1 < 0) {
	    /* sorry, I can't handle these HTML docs */
	    print_warning
		("Unknown format of index.html. Unable to de-register HTML man pages.\n");
	    return;
	}
    }

    pos2 = find_pos("<hr>", html, pos1);	/* the horizontal ruler marks the end of the HTML text */
    if (find_pos("<h3>Installed extensions:</h3>", html, pos1) == -1) {
	/* Extensions section does not exist: bail out! */
	print_warning("no extensions section found in index.html.\n");
	return;
    }

    start = find_pos("<h3>Installed extensions:</h3>", html, pos1);
    end = find_pos("</ul>", html, start);
    /* check if the entry exists and if so delete */
    found = 0;
    sprintf(item, "\">%s", ext);
    pos3 = find_pos(item, html, start);
    if (pos3 == -1) {
	/* does not exist: */
	print_warning("extension '%s' not listed in index.html.\n", ext);
	return;
    }

    /* delete item, if it was found in the extensions section */
    if (pos3 < end) {
	delete_str(pos3, html);
    }
    end--;			/* end of extensions section is no one up! */

    /* if no more entries left in the extensions list: delete the entire section */
    pos3 = find_pos("<ul>", html, start);
    if ((pos3 != -1) && (end > pos3) && (end - pos3 < 2)) {
	for (i = 0; i < 4; i++) {
	    delete_str(pos3 - 1, html);
	}
    }
}
bool SERefList::remove_val(const SEReference & val)
{
    int pos = find_pos(val);
    if (pos >= 0)
        return remove_pos(pos);

    return false;
}
Beispiel #11
0
int	analyse(char *str, char *ops, char *base, int *level_paren)
{
  if (str[1] == ops[0])
    {
      if (find_pos(base, *str) != -1)
	return (1);
      (*level_paren)++;
    }
  if (str[1] == ops[1])
    {
      if (str[2])
	if (find_pos(base, str[2]) != -1)
	  return (1);
      (*level_paren)--;
    }
  if (*level_paren < 0)
    return (1);
  return (0);
}
Beispiel #12
0
void node::add(key_t key, unique_ptr<node>& other) {
  check_invariants();
  assert(size < range_max);
  assert(other.get() != nullptr);

  const auto pos = find_pos(key);
  place_key(key, pos);
  children[pos + 1] = move(other);
  children[pos + 1]->parent = this;

  check_invariants();
}
Beispiel #13
0
void 
quick_sort(int *arr, int low, int high)
{
	int pos;
	
	if (low < high)
	{
		pos = find_pos(arr, low,  high);
		quick_sort(arr, low, pos - 1);
		quick_sort(arr, pos + 1, high);
	}
}
Beispiel #14
0
void node::insert(key_t key) {
  check_invariants();


  if(!is_leaf()) {
    auto key_pos = find_pos(key);
    if(!children[key_pos])
      children[key_pos] = unique_ptr<node>(new node(this));
    else if(children[key_pos]->size == range_max) {
      split(children[key_pos].get());
      key_pos = find_pos(key);
    }
    children[key_pos]->insert(key);

    check_invariants();
    return;
  }

  place_key(key, find_pos(key));

  check_invariants();
}
Beispiel #15
0
void		my_abs(char **str, int sens, char *ops)
{
  char		*result;
  t_limits	limite;
  int		signe;
  
  result = *str;
  signe = 1;
  limite.left = limite.right = 0;
  while (result[limite.right] &&
	 (find_pos(ops, result[limite.right]) == 2 ||
	  find_pos(ops, result[limite.right]) == 3))
    {
      if (find_pos(ops, result[limite.right]) == 3)
	signe *= -1;
      limite.right = limite.right + 1;
    }
  result = my_remove(result, limite.right, my_strlen(result), ops);
  if ((signe == -1 && sens == 0) || sens < 0)
      add_sign(&result, ops[3]);
  *str = result;
}
Beispiel #16
0
int book_move(board_t * board) {

   int best_move;
   int best_score;
   int pos;
   entry_t entry[1];
   int move;
   int score;
   list_t list[1];
   int i;

   ASSERT(board!=NULL);

   if (BookFile != NULL && BookSize != 0) {

      // draw a move according to a fixed probability distribution

      best_move = MoveNone;
      best_score = 0;

      for (pos = find_pos(board->key); pos < BookSize; pos++) {

         read_entry(entry,pos);
         if (entry->key != board->key) break;

         move = entry->move;
         score = entry->count;

         // pick this move?

         ASSERT(score>0);

         best_score += score;
         if (my_random(best_score) < score) best_move = move;
      }

      if (best_move != MoveNone) {

         // convert PolyGlot move into Fruit move; TODO: handle promotes

         gen_legal_moves(list,board);

         for (i = 0; i < list->size; i++) {
            move = list->move[i];
            if ((move & 07777) == best_move) return move;
         }
      }
   }

   return MoveNone;
}
Beispiel #17
0
Datei: avl.c Projekt: shijith/toy
void del_min()
{
				struct node *del = temp, *par;
				temp = temp -> right;
				par = find_pos(0, del);

				del -> data = temp -> data;
				if(par -> right == temp)
					par -> right = 0;
				else
					par -> left = 0;
				free(temp);

}
Beispiel #18
0
int		gravity_monster(t_struct *st)
{
  t_pos         pos;
  int           i;
  int           size;

  size = count_char(st->file, 'm');
  i = 0;
  while (i < size)
    {
      pos = find_pos(st->tmap, i);
      if (pos.y != -42)
	check_m(st, pos);
      i++;
    }
  return (0);
}
Beispiel #19
0
Datei: avl.c Projekt: shijith/toy
void inserts(int n)
{
				struct node *p, *par;
				temp = root;
				par = find_pos(n, root);
				p = (struct node *)malloc(sizeof(struct node));
				p -> data = n;
				p -> left = 0;
				p -> right = 0;
				p -> right = 0;
				p -> parent = temp;
				if ( temp -> data > n)
								temp -> left = p;
				if (temp -> data < n)
								temp -> right = p;
				bf(temp);
}
Beispiel #20
0
Datei: avl.c Projekt: shijith/toy
struct node *find_pos(int n, struct node *parent)
{
				if(temp) {
					if(temp -> data > n){
									if(temp -> left) {
													parent = temp;
													temp = temp -> left;
									}	else
													return parent;
					}	else if(temp -> data < n) {
									if(temp -> right) {
													parent = temp;
													temp = temp -> right;
									}
									else
													return parent;
					} else
									return parent;
					find_pos(n, parent);
				} else
									return parent;

}
Beispiel #21
0
 iterator insert( const data_type& t ) {
     size_type x = find_pos( t.first );
     return at_insert( x, t );
 }
Beispiel #22
0
void Ship2::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO:  在此处添加消息处理程序代码
	// 不为绘图消息调用 CPropertyPage::OnPaint()


	//获取经纬度用到的变量
	int i, j, k, TF;
	const char *find_pos(const char *min_pos, const char *begin, char **ret_string);
	double transLgt(char *lgt);
	double transLat(char *lat);
	void calWidth(double *latitude, double *longitude, double * width);
	double latitude[9999] = { 0 }, longitude[9999] = { 0 }, width[9999] = { -9999 };
	char *buffer = (char *)malloc(MAX_BUFFER);

	//获取船信息用到的变量
	char *buffer2 = (char *)malloc(MAX_BUFFER);
	char *buffer3 = (char *)malloc(MAX_BUFFER);
	char shipname[100], type[100], load_status[10], loa[20], breadth[20], draft[20], disp[20];
	int bound[1000];

	FILE *input;

	//将CString转换成const char *
	LPCTSTR p = pathname2.GetBuffer();
	DWORD dwMinSize;
	dwMinSize = WideCharToMultiByte(CP_ACP, NULL, p, -1, NULL, 0, NULL, FALSE);
	char *pathname_c = new char[dwMinSize];;
	WideCharToMultiByte(CP_OEMCP, NULL, p, -1, pathname_c, dwMinSize, NULL, FALSE);

	fopen_s(&input, pathname_c, "r");

	int flag = 0;
	int jj, iii;
	//获取船的信息
	for (j = 0;;)
	{
		if (flag == 2)
			break;
		fgets(buffer2, MAX_BUFFER, input);
		if (feof(input)) break;
		//先匹配到OS,获取船名等信息
		if (buffer2[0] == 'O' && buffer2[1] == 'S')
		{
			flag++;
			// printf("%s", buffer);
			fgets(buffer3, MAX_BUFFER, input);
			// printf("%s", buffer2);
			for (int ii = 4, num = 0; num < 3; ii++)
			{
				if (buffer2[ii] != ':')
					continue;
				else
				{
					num++;
					int jj, iii;
					for (jj = ii + 2; buffer2[jj]; jj++)
					{
						if (buffer2[jj] == ',')
							break;
						// else
						// 	continue;
					}
					switch (num)
					{
					case 1:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  shipname[iii] = buffer2[ii + 2 + iii];
							  }
							  shipname[iii] = '\0';
							  break;
					}
					case 2:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  type[iii] = buffer2[ii + 2 + iii];
							  }
							  type[iii] = '\0';
							  break;
					}
					case 3:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  load_status[iii] = buffer2[ii + 2 + iii];
							  }
							  load_status[iii - 1] = '\0';
							  break;
					}

					}
				}
			}

			for (int ii = 0, num = 3; num < 7; ii++)
			{
				if (buffer3[ii] != ':')
					continue;
				else
				{
					num++;
					int jj, iii;
					for (jj = ii + 2; buffer3[jj]; jj++)
					{
						if (buffer3[jj] == ',')
							break;
						// else
						// 	continue;
					}
					switch (num)
					{
					case 4:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  loa[iii] = buffer3[ii + 2 + iii];
							  }
							  loa[iii] = '\0';
							  break;
					}
					case 5:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  breadth[iii] = buffer3[ii + 2 + iii];
							  }
							  breadth[iii] = '\0';
							  break;
					}
					case 6:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  draft[iii] = buffer3[ii + 2 + iii];
							  }
							  draft[iii] = '\0';
							  break;
					}
					case 7:
					{
							  for (iii = 0; iii < jj - ii - 2; iii++)
							  {
								  disp[iii] = buffer3[ii + 2 + iii];
							  }
							  disp[iii - 1] = '\0';
							  break;
					}

					}
				}
			}
		}
		else
			continue;

	}

	_bstr_t bstrShipname(shipname);
	shipName2.SetWindowTextW((LPTSTR)bstrShipname);

	_bstr_t bstrType(type);
	type2.SetWindowTextW((LPTSTR)bstrType);

	_bstr_t bstrLoadstatus(load_status);
	loadStatus2.SetWindowTextW((LPTSTR)bstrLoadstatus);

	_bstr_t bstrLoa(loa);
	LOA2.SetWindowTextW((LPTSTR)bstrLoa);

	_bstr_t bstrBreadth(breadth);
	breadth2.SetWindowTextW((LPTSTR)bstrBreadth);

	_bstr_t bstrDraft(draft);
	draft2.SetWindowTextW((LPTSTR)bstrDraft);

	_bstr_t bstrDisp_v(disp);
	DISP_V2.SetWindowTextW((LPTSTR)bstrDisp_v);



	//获取经纬度
	int count_l = 0;
	for (j = 0;;)
	{
		if (count_l == 1)
			break;
		for (i = 0; i < 9999; i++)
		{
			latitude[i] = 0;
			longitude[i] = 0;
			width[i] = -9999;
		}
		int test = 0;
		fgets(buffer, MAX_BUFFER, input);
		if (feof(input)) break;
		//先匹配到一行行头为‘-’,找到新的一块儿数据,j为块号
		if (buffer[0] != '-')
			continue;
		else
		{
			j++;
			count_l++;
			// printf("【%d】\n", j);
		}

		for (i = 0, k = 0, TF = 0;; i++)
		{

			fgets(buffer, MAX_BUFFER, input);
			if (feof(input)) break;

			char *lat, *lgt;
			const char *tmp = buffer;
			tmp = find_pos(buffer, tmp, &lat);
			tmp = find_pos(buffer, tmp, &lgt);
			if ((lat == NULL || lgt == NULL) && TF) break;
			else if (lat == NULL || lgt == NULL) continue;
			else TF = 1;

			latitude[k] = transLat(lat);
			longitude[k] = transLgt(lgt);
			printf("%lf %lf\n", latitude[k], longitude[k]);
			k++;

			free(lat);
			free(lgt);
		}

		int final, count_dc = 0;
		CWnd *pwnd = GetDlgItem(IDC_IMAGE2);
		CRect rect;
		pwnd->GetWindowRect(&rect);
		int width_rec = rect.Width();
		int height_rec = rect.Height();
		double max_lat = 0.0, min_lat = latitude[0];
		double max_lon = 0.0, min_lon = longitude[0];
		double new_longitude[MAX_BUFFER], new_latitude[MAX_BUFFER];

		//初始化新声明的坐标数组
		for (i = 0; i < MAX_BUFFER; i++)
		{
			new_latitude[i] = 0.0;
			new_longitude[i] = 0.0;
		}
		//求最大,最小的经度和纬度
		for (i = 0;; i++)
		{
			if (latitude[i] == 0 && longitude[i] == 0)
				break;
			if (latitude[i] > max_lat)
				max_lat = latitude[i];
			if (latitude[i] < min_lat)
				min_lat = latitude[i];
			if (longitude[i]>max_lon)
				max_lon = longitude[i];
			if (longitude[i] < min_lon)
				min_lon = longitude[i];
		}

		//将坐标等比例转换为控件坐标
		for (i = 0;; i++)
		{
			if (latitude[i] == 0 && longitude[i] == 0)
				break;
			if (max_lon != min_lon)
				new_longitude[i] = height_rec*((longitude[i] - min_lon) / (max_lon - min_lon));
			else
				new_longitude[i] = longitude[i];

			if (max_lat != min_lat)
				new_latitude[i] = width_rec*((latitude[i] - min_lat) / (max_lat - min_lat));
			else
				new_latitude[i] = latitude[i];
		}




		CClientDC *dc[MAX_BUFFER];
		for (i = 1;; i++)
		{
			if (new_latitude[i] == 0 && new_longitude[i] == 0)
				break;
			//若有不同坐标,则画线
			if (new_latitude[i] != new_latitude[i - 1] || new_longitude[i] != new_longitude[i - 1])
			{
				dc[count_dc] = new CClientDC(pwnd);


				(*dc[count_dc]).MoveTo((int)new_latitude[i - 1], (int)new_longitude[i - 1]);
				(*dc[count_dc]).LineTo((int)new_latitude[i], (int)new_longitude[i]);
				count_dc++;
			}
		}


		calWidth(latitude, longitude, width);
		for (i = 0; width[i] != -9999 && i < 9999; i++)
		{
			printf("【width %d】%lf\n", i, width[i]);
		}




	}
}
Beispiel #23
0
void new_ext_html(char *ext, char *gisbase, char **html, int major, int minor,
		  int revision)
{
    int pos1, pos2, pos3;
    int start, end;
    int insert_here;
    char *first_char;
    char *last_char;
    char item[MAXSTR];
    int len;

    pos1 = find_pos("<b>Drivers sections:</b>", html, 0);	/* first go to section on "Drivers" */
    if (pos1 < 0) {
	/* we have a new version of the HTML docs that does not have a "Drivers" section anymore */
	/* let's check for the special GEM comment */
	pos1 =
	    find_pos
	    ("<!-- GEM Extensions StartHTML. Do not delete or change this comment! -->",
	     html, 0);
	if (pos1 < 0) {
	    /* sorry, I can't handle these HTML docs */
	    print_warning
		("Unknown format of index.html. Unable to register HTML man pages.\n");
	    return;
	}
    }
    pos2 = find_pos("<hr>", html, pos1);	/* the horizontal ruler marks the end of the HTML text */
    if (find_pos("<h3>Installed extensions:</h3>", html, pos1) == -1) {
	/* Extensions section does not yet exist: create it now */
	insert_str("<h3>Installed extensions:</h3>\n", pos2, html);
	insert_str("<ul>\n", pos2 + 1, html);
	insert_str("</ul>\n", pos2 + 2, html);
	insert_str("<p>\n", pos2 + 3, html);
    }

    start = find_pos("<h3>Installed extensions:</h3>", html, pos1);
    end = find_pos("</ul>", html, start);
    insert_here = start + 2;
    /* check if this entry already exists and if so: bail out or overwrite, if force mode */
    sprintf(item, "\">%s", ext);
    pos3 = find_pos(item, html, insert_here);
    if (pos3 != -1) {
	/* exists:  */
	print_warning("list item '%s' exists in index.html.\n", ext);
	if ((FORCE) && (UPGRADE)) {
	    sprintf(item,
		    "<li><a href=\"../extensions/%s/index.html\">%s (%i.%i.%i)</a>\n",
		    ext, ext, major, minor, revision);
	    strcpy(html[pos3], item);
	}
	return;
    }

    /* now go through all links in the Extensions section and insert this one in the right
       alphabetical position */
    pos3 = find_pos("<li><a href=", html, start);
    while ((pos3 != -1) && (pos3 < end)) {
	/* extract name of extension at this position */
	first_char = strrchr(html[pos3], '"');
	last_char = strrchr(html[pos3], '<');
	len = (last_char - first_char) / sizeof(char);
	strncpy(item, first_char + 2 * sizeof(char), len);
	item[len - 1] = '\0';	/* get rid of '<' */
	if (strcmp(ext, item) < 0) {
	    insert_here = pos3;
	    break;		/* found our position: let's quit this! */
	}
	/* look for next item */
	start++;
	pos3 = find_pos("<li><a href=", html, start);
    }

    /* now insert new entry for this extension */
    sprintf(item,
	    "<li><a href=\"../extensions/%s/index.html\">%s (%i.%i.%i)</a>\n",
	    ext, ext, major, minor, revision);
    insert_str(item, insert_here, html);

}
Beispiel #24
0
Datei: var.c Projekt: aharri/base
void
Var_SubstVar(Buffer buf,	/* To store result */
    const char *str,		/* The string in which to substitute */
    struct LoopVar *l,		/* Handle */
    const char *val)		/* Its value */
{
	const char *var = l->me->name;

	var_set_value(l->me, val);

	for (;;) {
		const char *start;
		/* Copy uninteresting stuff */
		for (start = str; *str != '\0' && *str != '$'; str++)
			;
		Buf_Addi(buf, start, str);

		start = str;
		if (*str++ == '\0')
			break;
		str++;
		/* and escaped dollars */
		if (start[1] == '$') {
			Buf_Addi(buf, start, start+2);
			continue;
		}
		/* Simple variable, if it's not us, copy.  */
		if (start[1] != '(' && start[1] != '{') {
			if (start[1] != *var || var[1] != '\0') {
				Buf_AddChars(buf, 2, start);
				continue;
		    }
		} else {
			const char *p;
			char paren = start[1];


			/* Find the end of the variable specification.  */
			p = find_pos(paren)(str);
			/* A variable inside the variable. We don't know how to
			 * expand the external variable at this point, so we
			 * try  again with the nested variable.	*/
			if (*p == '$') {
				Buf_Addi(buf, start, p);
				str = p;
				continue;
			}

			if (strncmp(var, str, p - str) != 0 ||
				var[p - str] != '\0') {
				/* Not the variable we want to expand.	*/
				Buf_Addi(buf, start, p);
				str = p;
				continue;
			}
			if (*p == ':') {
				bool doFree;	/* should val be freed ? */
				char *newval;
				struct Name name;

				doFree = false;
				name.s = var;
				name.e = var + (p-str);

				/* val won't be freed since !doFree, but
				 * VarModifiers_Apply doesn't know that,
				 * hence the cast. */
				newval = VarModifiers_Apply((char *)val,
				    &name, NULL, false, &doFree, &p, paren);
				Buf_AddString(buf, newval);
				if (doFree)
					free(newval);
				str = p;
				continue;
			} else
				str = p+1;
		}
		Buf_AddString(buf, val);
	}
}
Beispiel #25
0
void main()
{
    SeqList mylist;
    InitSeqList(&mylist);
    ElemType Item;
    int pos;
    int select = 1;
    while(select)
    {
        printf("**********************************************\n");
        printf("**  [1] push_back       [2] push_front      **\n");
        printf("**  [3] pop_back        [4] pop_front       **\n");
        printf("**  [5] insert_pos      [6] show_list       **\n");
        printf("**  [7] del_pos         [8] del_val         **\n");
        printf("**  [9] find_pos        [10]find_Elem       **\n");
        printf("**  [11]sort            [12]resver          **\n");
        printf("**  [13]clear           [14]merge           **\n");
        printf("**  [15]destroy         [0]quit_system      **\n");
        printf("**********************************************\n");


        printf("请选择:>");
        scanf("%d",&select);
        if(select == 0)
        {
            break;
        }
        switch(select)
        {
            case 1:
            {
                printf("请输入要插入的数据(-1结束):>");
                while(scanf("%d",&Item),Item!=-1) //此处为逗号表达式,真假值由最后一个表达式决定,
                //所以此处在扫描到Item不是-1时就会自动执行一下下面的函数,
                //所以每输入一次非-1的数就头插一次。
                {
                    push_back(&mylist,Item);
                }
                break;
            }
            case 2:
            {
                printf("请输入要插入的数据(-1结束):>");
                while(scanf("%d",&Item),Item!=-1) //此处为逗号表达式,真假值由最后一个表达式决定,
                //所以此处在扫描到Item不是-1时就会自动执行一下下面的函数,
                //所以每输入一次非-1的数就头插一次。
                {
                    push_front(&mylist,Item);
                }
                break;
            }
            case 3:
            {
                pop_back(&mylist);
                break;
            }
            case 4:
            {
                pop_front(&mylist);
                break;
            }
            case 5:
            {
                ElemType e;
                printf("请输入要插入的位置,当前有元素%d:",mylist.size);
                scanf("%d",&pos);
                printf("请输入要插入的元素值:");
                scanf("%d",&e);
                insert_pos(&mylist,pos,e);
                break;
            }
            case 6:
            {
                show_list(&mylist);
                break;
            }
            case 7:
            {
                printf("请输入要删除的位置,当前有元素%d:",mylist.size);
                scanf("%d",&pos);
                del_pos(&mylist,pos);
                break;
            }
            case 8:
            {
                printf("请输入要删除的元素:");
                scanf("%d",&Item);
                printf("start and Item=%d\n",Item);
                del_val(&mylist,Item);
                break;
            }
            case 9:
            {
                printf("请输入要查找线性表元素的位置:");
                scanf("%d",&pos);
                find_pos(&mylist,pos,&Item);
                printf("线性表的第%d个元素为:%d\n",pos,Item);
                break;
            }
            case 10:
            {
                printf("请输入要查找的元素:");
                scanf("%d",&Item);
                find_Elem(&mylist,Item,&pos);
                printf("元素%d所在位置为:%d\n",Item,pos);
                break;
            }
            case 11:
            {
                sort(&mylist);
                break;
            }
            case 12:
            {
                printf("resver start.\n");
                resver(&mylist);
                printf("resver end!\n");
                break;
            }
            case 13:
            {
                clear(&mylist);
                break;
            }
            case 14:
            {
                printf("目前无法测试,因为只有一个线性表,无法做合并操作。\n");
                //merge(SeqList *list1,SeqList *list2,SeqList *list_merge);
                break;
            }
            case 15:
            {
                destroy(&mylist);
                break;
            }
            default:
            {
                printf("输入的选择不存在,请重新输入。\n");
                select=1;
                break;
            }
        }
    }
}
bool SEStringList::contains(const SEString& val)
{
    return (find_pos(val) >= 0);
}
bool SERefList::contains(const SEReference & val)
{
    return (find_pos(val) >= 0);
}
Beispiel #28
0
bool SEIntList::contains(const int val)
{
        return (find_pos(val) >= 0);
}
Beispiel #29
0
int deregister_entries_gisman( char *pkg_short_name, char *gisbase )
{
  int eax;
  char file[2048];
  char str[2048];
  char tmp[2048];
  char **line;
  int n_lines, i;
  int n_lines_org, n_lines_new;
  FILE *f_in, *f_out;
  int pos;
  int start, end;
  int start_sub, end_sub;
  char *lq, *rq;
  int num_removed;
  sprintf( file, "%s/etc/dm/menu.tcl", gisbase );
  f_in = (FILE*)fopen( file, "r" );
  if ( f_in == 0 )
  {
    if ( *(int*)(__errno_location( )) == 2 )
    {
      return num_removed;
    }
    else
    {
      fclose( f_in );
      print_error( -22, "checking for file '%s': %s\n", file[0], strerror( *(int*)(__errno_location( )) ) );
    }
  }
  memcpy( TMP_GISMAN, "/tmp/grass.extensions.db.XXXXXX", 32 );
  mkstemp( TMP_GISMAN );
  f_out = (FILE*)fopen( TMP_GISMAN, "w+" );
  if ( f_out == 0 )
  {
    print_error( -21, "could not create temp file '%s': %s\n \t\t\tMake sure that directory /tmp exists on your system and you have write permission.\n", TMP_GISMAN[0], strerror( *(int*)(__errno_location( )) ) );
  }
  atexit( &exit_db );
  if ( VERBOSE )
    sprintf( str, "cp -vf %s/etc/dm/menu.tcl %s/etc/dm/menu.tcl.gem.bak ; \t\t\t\t\t\tcp -vf %s %s/etc/dm/menu.tcl ; chmod -v a+r %s/etc/dm/menu.tcl ;", gisbase, gisbase, TMP_GISMAN, gisbase, gisbase );
  else
    sprintf( str, "cp -f %s/etc/dm/menu.tcl %s/etc/dm/menu.tcl.gem.bak &&gt; %s ; \t\t\t\t\t\tcp -f %s %s/etc/dm/menu.tcl &&gt; %s ; chmod a+r %s/etc/dm/menu.tcl &&gt; %s ;", gisbase, gisbase, TMP_NULL, TMP_GISMAN, gisbase, TMP_NULL, gisbase, TMP_NULL );
  strcpy( GISMAN_CMD, str );
  n_lines = 0;
  for ( ; fgets( str, 2048, f_in ); n_lines++ )
  {
    // n_lines++;
  }
  if ( n_lines == 0 )
  {
  }
  else
  {
    rewind( f_in );
    n_lines_org = n_lines;
    line = calloc( n_lines + 1, sizeof( char* ) );
    i = 0;
    for ( ; i < n_lines + 1; i++ )
    {
      line[ i ] = 0;
      // i++;
    }
    i = 0;
    for ( ; fgets( str, 2048, f_in ); i++ )
    {
      line[ i ] = malloc( ( strlen( str ) + 1 ) * sizeof( char ) );
      strcpy( line[ i ], str );
      // i++;
    }
    sprintf( str, "#(DO_NOT_REMOVE_THIS_COMMENT) &lt;%s&gt; {cascad", pkg_short_name );
    pos = find_pos( str, line, 0 );
    if ( pos == -1 )
    {
      print_warning( "could not find uninstall information in 'menu.tcl'.\n" );
    }
    else
    {
      lq = strchr( line[ pos ], '"' );
      lq++;
      rq = strchr( lq, '"' );
      strcpy( tmp, lq );
      tmp[ rq - lq ] = 0;
      start = find_pos( "\"&Xtns\" all options 1", line, 0 );
      end = find_pos( "\" all options", line, start + 1 ) + -1;
      if ( end == -1 )
      {
        end = find_pos( "}]", line, 0 );
      }
      if ( start == -1 )
      {
        print_warning( "menu 'Xtns' does not exist.\n" );
      }
      else
      {
        sprintf( str, "{cascad \"%s\"", tmp );
        start_sub = find_pos( str, line, start );
        if ( start_sub == -1 || end < start_sub )
        {
          print_warning( "could not find submenu entry '%s' in 'menu.tcl'.\n", tmp[0] );
        }
        else
        {
          end_sub = find_pos( " \t\t\t}}", line, start_sub );
          if ( end_sub == -1 || end < end_sub )
          {
            print_warning( "could not find end of submenu entry '%s' in 'menu.tcl'.\n", tmp[0] );
          }
          else
          {
            num_removed = 0;
            i = 0;
            for ( ; i < ( end_sub - start_sub ) + 1; i++ )
            {
              delete_str( start_sub, line );
              num_removed++;
              // i++;
            }
            sprintf( str, "#(DO_NOT_REMOVE_THIS_COMMENT) &lt;%s&gt; {cascad", pkg_short_name );
            pos = find_pos( str, line, 0 );
            delete_str( pos, line );
            num_removed++;
            start = find_pos( "\"&Xtns\" all options 1", line, 0 );
            end = find_pos( "\" all options", line, start + 1 ) + -1;
            if ( end - start <= 2 )
            {
              i = 0;
              for ( ; i < ( end - start ) + 1; i++ )
              {
                delete_str( start, line );
                num_removed++;
                // i++;
              }
            }
            i = 0;
            for ( ; line[ i ]; i++ )
            {
              fprintf( f_out, line[ i ] );
              // i++;
            }
            fflush( f_out );
            rewind( f_out );
            n_lines_new = 0;
            for ( ; fgets( str, 2048, f_out ); n_lines_new++ )
            {
              // n_lines_new++;
            }
            if ( n_lines_new == 0 )
            {
              print_warning( "file truncation detected. Retaining orginal file 'menu.tcl'.\n" );
              memcpy( GISMAN_CMD, "", 1 );
            }
            fclose( f_in );
            fclose( f_out );
            i = 0;
            for ( ; i < n_lines + 1; i++ )
            {
              free( line[ i ] );
              // i++;
            }
            free( line );
          }
        }
      }
    }
  }
}
Beispiel #30
0
int new_submenu( char *pkg_short_name, char *menu, char **tcl_lines )
{
  int eax;
  char tmp[2048];
  char tmp2[2048];
  char searchstr[2048];
  int idx = find_pos( "\"&Xtns\" all options", tcl_lines, 0 ), idx2;
  int insert_here;
  int last = find_pos( "\" all options", tcl_lines, idx + 1 ) + -1;
  char *first_quote;
  char *second_quote;
  int len;
  int terminator;
  if ( last == -1 )
  {
    last = find_pos( "}]", tcl_lines, 0 );
  }
  if ( is_submenu( menu ) == 0 )
  {
    print_warning( "first line not a submenu specifier in 'entries-gisman'.\n" );
  }
  else
  {
    len = strrchr( menu, ']' ) - strchr( menu, '[' );
    strncpy( tmp, strchr( menu, '[' ) + 1, len );
    tmp[ len + -1 ] = 0;
    sprintf( searchstr, "{cascad \"%s\"", tmp );
    idx2 = find_pos( searchstr, tcl_lines, idx );
    if ( idx2 != -1 && idx2 < last )
    {
      print_warning( "submenu '%s' exists in GIS Manager's Xtns menu.\n", tmp[0] );
    }
    else
    {
      insert_here = idx + 1;
      idx2 = find_pos( "{cascad ", tcl_lines, idx );
      for ( ; idx2 != -1 && idx2 < last;  )
      {
        first_quote = strchr( tcl_lines[ idx2 ], '"' );
        second_quote = strchr( &first_quote[1], '"' );
        len = second_quote - first_quote;
        strncpy( tmp2, &first_quote[1], len );
        tmp2[ len + -1 ] = 0;
        if ( strcmp( tmp, tmp2 ) < 0 )
        {
          insert_here = idx2;
          break;
        }
        else
        {
          idx++;
          idx2 = find_pos( "{cascad ", tcl_lines, idx );
        }
      }
      sprintf( tmp, " \t\t\t%s {} \"\" 1 {\n", searchstr );
      insert_str( tmp, insert_here, tcl_lines );
      insert_str( " \t\t\t}}\n", insert_here + 1, tcl_lines );
      terminator = find_pos( "}]", tcl_lines, 0 );
      sprintf( tmp, "#(DO_NOT_REMOVE_THIS_COMMENT) &lt;%s&gt; %s {} \"\" 1 {\n", pkg_short_name, searchstr );
      insert_str( tmp, terminator + 1, tcl_lines );
    }
  }
  return insert_here + 1;
}