Exemple #1
0
/*
 * FUNCTION:
 *	ns_r_get_value(const char *key, const ns_printer_t *printer)
 * INPUT(S):
 *	const char *key
 *		- key for matching
 *	const ns_printer_t *printer
 *		- printer to glean this from
 * OUTPUT(S):
 *	char * (return value)
 *		- NULL, if not matched
 * DESCRIPTION:
 */
static void *
ns_r_get_value(const char *key, const ns_printer_t *printer, int level)
{
	ns_kvp_t *kvp, **attrs;

	if ((key == NULL) || (printer == NULL) ||
	    (printer->attributes == NULL))
		return (NULL);

	if (level++ == 16)
		return (NULL);

	/* find it right here */
	if ((kvp = list_locate((void **)printer->attributes,
			(COMP_T)ns_kvp_match_key, (void *)key)) != NULL) {
		void *value = string_to_value(key, kvp->value);

		/* fill in an empty printer for a bsdaddr */
		if (strcmp(key, NS_KEY_BSDADDR) == 0) {
			ns_bsd_addr_t *addr = value;

			if (addr->printer == NULL)
				addr->printer = strdup(printer->name);
		}
		return (value);
	}

	/* find it in a child */
	for (attrs = printer->attributes; attrs != NULL && *attrs != NULL;
	    attrs++) {
		void *value = NULL;

		if ((strcmp((*attrs)->key, NS_KEY_ALL) == 0) ||
		    (strcmp((*attrs)->key, NS_KEY_GROUP) == 0)) {
			char **printers;

			for (printers = string_to_value((*attrs)->key,
						(*attrs)->value);
			    printers != NULL && *printers != NULL; printers++) {
				ns_printer_t *printer =
					ns_printer_get_name(*printers, NULL);

				if ((value = ns_r_get_value(key, printer,
							    level)) != NULL)
					return (value);
				ns_printer_destroy(printer);
			}
		} else if (strcmp((*attrs)->key, NS_KEY_LIST) == 0) {
			ns_printer_t **printers;

			for (printers = string_to_value((*attrs)->key,
						(*attrs)->value);
			    printers != NULL && *printers != NULL; printers++) {
				if ((value = ns_r_get_value(key, *printers,
							    level)) != NULL)
					return (value);
			}
		} else if (strcmp((*attrs)->key, NS_KEY_USE) == 0) {
			char *string = NULL;
			ns_printer_t *printer =
				ns_printer_get_name((*attrs)->value, NULL);
			if ((value = ns_r_get_value(key, printer,
					level)) != NULL)
				string = value_to_string(string, value);
			if (string != NULL)
				value = string_to_value(key, string);
			ns_printer_destroy(printer);
		}

		if (value != NULL)
			return (value);
	}

	return (NULL);
}
Exemple #2
0
vector_t *
load_file(char *fname)
{
	int i, sel_id, lineno = 0, ln = 1, tot = 0, prcnt = 0;
	int xpad = 0, ypad = 0;
	FILE *file;
	char buf[65536];
	mapnode_t *nd, *cur_node;

	/* setup variables */
	file = fopen(fname, "r");
	if (!file)
		ERROR_EXIT();

	if (selected_node)
		sel_id = selected_node->id;
	else
		sel_id = 0;

	if (!nodelist)
		nodelist = new_mapnode_list((vector_t *)nodelist);

	/* Get the total number of bytes (for percentage loaded display) */
	while (fgets(buf, sizeof(buf), file))
		ln += strlen(buf);
	tot = ln;
	ln = 1;
	rewind(file);

	/* read lines until EOF, setting values as specified */
	while (fgets(buf, sizeof(buf), file))
	{
		lineno++;
		if (*buf == '[')
		{
			if (!isdigit(buf[1]))
			{
				allegro_message("parse error:%s:%d:\n%s", fname, lineno, buf);
				if (fclose(file) == EOF)
					allegro_message("error closing file: %s", strerror(errno));

				return (vector_t *)nodelist;
			}

			cur_node = lookup_node_by_id(atoi(&buf[1]));
			if (cur_node)
				continue;

			cur_node = mapnode_new();
			cur_node->id = atoi(&buf[1]);
			vector_push((vector_t *)nodelist, (void*)cur_node);
		}
		/* parse this line and assign a value, if recognized */
		string_to_value(buf, cur_node);

		/* Display the current completion percentage */
		ln += strlen(buf);
		prcnt = (int)(100 / (tot / (float)ln));
		textprintf_ex(screen, font, 2, 2, 255, 0, "Loading: %d%%", prcnt);
	}

	/* ensure min_id and max_id are updated/accurate */
	for (i = 0; i < vector_len((vector_t *)nodelist); i++)
	{
		pad_coords(vector_aref((vector_t *)nodelist, i), &xpad, &ypad);

		cur_node = vector_aref((vector_t *)nodelist, i);
		if (cur_node->id > max_id)
			max_id = cur_node->id;
		if (cur_node->id < min_id)
			min_id = cur_node->id;
	}

	/* if there was previously a highlighted node, highlight any node w/
	   the same ID value as the old one (if the new list has such an ID) */
	if (sel_id)
		selected_node = lookup_node_by_id(sel_id);
	if (fclose(file) == EOF)
		allegro_message("error closing file: %s", strerror(errno));

	if (reconstruct_node_coords)
	{
		reconstruct_coordinates((vector_t *)nodelist);
	}

	strncpy(last_file, fname, sizeof(last_file));
	return (vector_t *)nodelist;
}
Exemple #3
0
int main(void)
{
	u8 t;
	u8 len;	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延时初始化 
	uart_init(115200);	//串口初始化波特率为115200
	LED_Init();		  		//初始化与LED连接的硬件接口  
	
//	USART2_ConfigBaud(9600); // 串口初始化,波特率为9600
//	KEY_Init();
//	LED_Init();

	/* HSE 为8M, SYSCLK = 8/25*336   TIM3 时钟(APB2) = SYSCLK/4*2 约为 27M */
	/* 27M 分频系数位27, 计数的频率为1M,重装载值为200,PWM的频率为1M/200 = 5KHz*/
 	//TIM4_PWM_Init(200-1,84-1);	
	
	//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

	/* HSE 为8MLL_M为25时  SYSCLK = 8/25*336   TIM3 时钟 = SYSCLK/4*2 约为 27M */
	/* HSE 为8MLL_M为8时  SYSCLK = 8/8*336   TIM3 时钟 = SYSCLK/4*2 约为 84M */
 	//TIM3_Int_Init(5000-1,8400-1);	//定时器时钟84M(168/4*2),分频系数8400,所以84M/8400=10Khz 的计数频率,计数5000需要500ms     

  while(1)
	{
	/*	delay_ms(10);
		if(dir)led0pwmval++;
		else led0pwmval--;
 		if(led0pwmval>190)dir=0;
		if(led0pwmval==0)dir=1;
  */
	//	TIM_SetCompare1(TIM4,led0pwmval);	//修改比较值,修改占空比			
	
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				USART_SendData(USART2, USART_RX_BUF[t]);         //向串口2发送数据
				while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
			}	
//			USART_SendData(USART2, SPA_NUM+48);         //向串口2发送数据,数据的条数
//			while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
			
			
			string_to_value();
//			LED14_FLAG = FACTOR[0];			
//			send_str("\nLED14: ");
//			USART_SendData(USART2, LED14_FLAG);         //向串口2发送数据
//			while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
			
			if(FACTOR[1] - 2700 == 0)
			{
				turn_on_led5();
			}
			else
			{
				turn_off_led5();
			}
			
			SPA_NUM = 0;
			USART_RX_STA=0;
		}
	};	
}