/* * 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); }
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; }
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 为8MLL_M为25时 SYSCLK = 8/25*336 TIM3 时钟 = SYSCLK/4*2 约为 27M */ /* HSE 为8MLL_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; } }; }