ERRCODE Config::load( std::string filename, bool createnew ) { std::ifstream configfile; std::string lineinput, category( "Global" ), item, value; ERRCODE ret = OZ_OK; if( isloaded()) clear(); configfile.open( filename.c_str()); if( !configfile.is_open()) { if( FileExists( filename ) || !createnew ) { returncode( OZ_INI_FAILED_TO_OPEN ); } else { return( create( filename )); } } m_isloaded = true; while( configfile.good()) { std::getline( configfile, lineinput ); trim( lineinput ); if( matchcategory( lineinput, category )) { } else if( matchline( lineinput, item, value )) { if(( ret = set( category + ":" + item, value )) != 0 ) { configfile.close(); m_isloaded = false; returncode( ret ); } } } configfile.close(); m_configfilename = filename; returncode( OZ_OK ); }
//--------------------------------------------------------------------------- // character received will be stored in linebuffer, which will be // processed when a line-feed (0x0a) is encountered. void p1_char(uint8_t c) { if(c == 0x0d) return; p1data.line[p1data.len] = c; if(p1data.line[p1data.len] == 0x0a || p1data.len == sizeof(p1data.line) - 1) { // discard newline, close string, parse line and clear it. if(p1data.len > 0) p1data.line[p1data.len] = 0; p1data.linecount++; matchline(); p1data.len = 0; } else { ++p1data.len; } }
void Get_Edge(void) { int16 i,j; //循环变量 // float average; //平均值 // float variance; //方差 uint8 nomal_track_flag = 1; //正常赛道 uint8 l_complete_lost_flag = 0 ; //左线完全丢线标志 uint8 r_complete_lost_flag = 0; //右线完全丢失标志 // uint8 passing_section_straight_flag = 1; //超出区前为直道 // uint8 l_start_lost_cross_flag = 0; //起始丢线的十字 // uint8 r_start_lost_cross_flag = 0 ; // uint8 left_status = 0; // 左线状态 上黑下白为1 上白下黑为2 uint8 right_status = 0; // 右线状态 上黑下白为1 上白下黑为2 int8 left_jump_point = 0; int8 right_jump_point = 0; int8 l_jump_point[5] = {0}; int8 r_jump_point[5] = {0}; int8 left_jump_point1=0,right_jump_point1=0; int8 left_jump_point2=0,right_jump_point2=0; int8 Fjump_end; //跳变点滤波终止行 int8 l_jump_count = 0; int8 r_jump_count = 0; int8 min_jump_count; int8 l_cross_turn_point = 0; //左斜十字拐点位置 int8 r_cross_turn_point = 0; //右斜十字拐点位置 // uint8 l_diagonally_cross_flag = 0 ; //左斜入十字 // uint8 r_diagonally_cross_flag = 0 ; //右斜入十字 uint8 l_diagonally_flag =1 ; //左斜入十字前为直道 uint8 r_diagonally_flag =1; //右斜入十字前为直道 float l_First_derivative[118] = {0}; //左线一阶导 float r_First_derivative[118] = {0}; //右线一阶导 float l_average[116] = {0}; //左线平均值 float r_average[116] = {0}; //右线平均值 float l_variance[116] = {0}; //左线方差 float r_variance[116] = {0}; //右线方差 int16 leftline_start = L_LINE_START ; //左边线寻线起点 int16 rightline_start = R_LINE_START ; //右边线寻线起点 // int16 left_restart = 0; //左线重新寻线起点 // int16 right_restart = 0; //右线重新寻线起点 // int8 row_restart = 0 ; int8 l_jump_derivative ; int8 r_jump_derivative ; float range_derivative; int8 row ; //寻线行变量 //寻线 for(row = 0 ; row <120 ; row ++) { Lline[row] = L_LINE_INITIAL_VALUE ; Rline[row] = R_LINE_INITIAL_VALUE ; Mline[row] = M_LINE_INITIAL_VALUE ; } //寻线 for(row = 119 ; row >=0 ;row --) { //寻左线 if( l_complete_lost_flag == 0) { for( i = leftline_start ; i>0 ; i--) { if(leftline_start > 162) //左边线已寻到最右边 break ; if((img_handle[row][i+2]+img_handle[row][i+1]) == 510 && (img_handle[row][i] + img_handle[row][i-1]) == 0) { Lline[row] = i ; if(row<118) { if(ABS(Lline[row+2] - Lline[row+1]) < 20) { leftline_start = i + ABS(Lline[row+2] - Lline[row+1])+5 ; } else { leftline_start = L_LINE_START; } } else leftline_start = i + 5; break; } } if(i == 0) { if(row < 118) { if( (Rline[row+2]-Rline[row+1]) >4&& (Rline[row+1] < 60)) { l_complete_lost_flag = 1; } else { leftline_start =(int16)((Rline[row+1] + Lline[row+1])/2.0); } } } } // 寻右线 if(r_complete_lost_flag == 0) { for( j = rightline_start;j<159;j++) { if(rightline_start <-3) break; if((img_handle[row][j-2] + img_handle[row][j-1]) == 510 && (img_handle[row][j] + img_handle[row][j+1]) == 0) { Rline[row] = j; if(row<118) { if((ABS(Rline[row+2] - Rline[row+1]) < 20)) { rightline_start = j - ABS(Rline[row+2] - Rline[row+1])-5; } else { rightline_start = R_LINE_START; } } else rightline_start = j -5; break; } } if(j == 159) { if(row < 118) { if((Lline[row+1]-Lline[row+2])> 4 && (Lline[row+1] >100) ) { r_complete_lost_flag = 1; } else { rightline_start = (int16)((Rline[row+1] + Lline[row+1])/2.0); } } } } } ImgFilter(Lline); ImgFilter(Rline); //求导 for(row = 117;row>=0;row--) { l_First_derivative[row] = (Lline[row+2] - Lline[row])/2.0; r_First_derivative[row] = (Rline[row+2] - Rline[row])/2.0; } //跳变点判断 for(row = 115; row>=0;row--) { l_average[row] = calculation_average(l_First_derivative[row+2],l_First_derivative[row+1],l_First_derivative[row]); //计算平均值 l_variance[row] = calculation_variance(l_First_derivative[row+2],l_First_derivative[row+1],l_First_derivative[row],l_average[row]); //计算方差 if(l_variance[row] > VARIANCE_THRESHOLD) { if(left_jump_point == 0 ) { left_jump_point = row+2; } if(l_variance[row+1] < VARIANCE_THRESHOLD && l_jump_count < 5) { l_jump_point[l_jump_count] = row + 2; // mexPrintf("l_jump_point[%d] = %d\n",l_jump_count,l_jump_point[l_jump_count]); l_jump_count ++ ; } // mexPrintf("l_jump_point = %d\n",left_jump_point); } r_average[row] = calculation_average(r_First_derivative[row+2],r_First_derivative[row+1],r_First_derivative[row]); //计算平均值 r_variance[row] = calculation_variance(r_First_derivative[row+2],r_First_derivative[row+1],r_First_derivative[row],r_average[row]); //计算方差 if(r_variance[row] > VARIANCE_THRESHOLD) { if(right_jump_point ==0) { right_jump_point = row+2; } if(r_variance[row+1] < VARIANCE_THRESHOLD && r_jump_count < 5) { r_jump_point[r_jump_count] = row + 2; // mexPrintf("r_jump_point[%d] = %d\n",r_jump_count,r_jump_point[r_jump_count]); r_jump_count ++ ; } // mexPrintf("r_jump_point = %d\n",right_jump_point); } } if(nomal_track_flag == 1) { //左斜入十字 if(right_jump_point && (right_jump_point > left_jump_point)) //左斜入十字 右跳变存在且大于左跳变 { for(row = 115;row > right_jump_point ; row --) { if(((l_First_derivative[row+2]*l_First_derivative[row-2])<0)) { if(l_cross_turn_point == 0) { l_cross_turn_point = row; break; //找到拐点跳出循环 } } } if(l_cross_turn_point != 0) //找到拐点 { // mexPrintf("l_cross_turn_point%d\n",l_cross_turn_point); if(l_diagonally_flag == 1) { for(row = l_cross_turn_point ; row >=right_jump_point;row--) { if(Rline[row] != 159) //左拐点到右跳变 右边丢线 { l_diagonally_flag = 0 ; } } } if(Rline[119] == 159 && Rline[118] ==159 && Rline[117] ==159 && l_diagonally_flag) { for(row = 116 ; row > right_jump_point ; row--) { if(Rline[row] != 159) { l_diagonally_flag = 0 ; break; } } } else { for(row = 117 ; row >= l_cross_turn_point ;row --) //拐点之前 左右斜率乘积 { if((l_First_derivative[row] * r_First_derivative [row] )>1.0) { l_diagonally_flag = 0 ; } } } if(l_diagonally_flag == 1) { for(row = l_cross_turn_point ; row >=0; row--) { Lline[row] = 0; } for(row = right_jump_point - 1 ; row >0 ;row --) { leftline_start = Rline[right_jump_point - 3]; for(i = 157;i > leftline_start;i --) //从左跳变找右线 { if((img_handle[row][i+2]+img_handle[row][i+1]) == 510 && (img_handle[row][i] + img_handle[row][i-1]) == 0) { Lline[row] = i ; break; } } } if(Lline[right_jump_point-2] != 0) { for(row = right_jump_point + 1; row > 0; row --) { Rline[row] = 159; } ImgFilter_range(right_jump_point - 1,0,Lline); matchline(l_cross_turn_point+3,right_jump_point-3,Lline); nomal_track_flag =0 ; } } } } //右斜入十字 if(left_jump_point && (left_jump_point > right_jump_point)) //右斜入十字 左跳变存在且大于右跳变 { for(row = 115;row > left_jump_point ; row --) { if((r_First_derivative[row+2]*r_First_derivative[row-2])<0) { if(r_cross_turn_point ==0) { r_cross_turn_point = row; break; //找到拐点跳出循环 } } } if(r_cross_turn_point != 0) //找到拐点 { if(r_diagonally_flag == 1) { for(row = r_cross_turn_point ; row >=left_jump_point;row --) { if(Lline[row] != 0) //右拐点到左跳变 左边丢线 { r_diagonally_flag = 0 ; } } } if(Lline[119] == 0 && Lline[118] ==0 && Lline[117] == 0 && r_diagonally_flag) { for(row = 116 ; row > left_jump_point ; row--) { if(Lline[row] != 0) { r_diagonally_flag = 0 ; break; } } } else { for(row = 117 ; row >= r_cross_turn_point ;row --) //拐点之前 左右斜率乘积 { if((l_First_derivative[row] * r_First_derivative [row] )>1.0) { r_diagonally_flag = 0 ; } } } if(r_diagonally_flag == 1) { for(row = r_cross_turn_point ; row >=0; row--) { Rline[row] = 159; } for(row = left_jump_point - 1 ; row >0 ;row --) { rightline_start = Lline[left_jump_point - 3]; for(j = 2;j < rightline_start;j ++) //从左跳变找右线 { if((img_handle[row][j-2] + img_handle[row][j-1]) == 510 && (img_handle[row][j] + img_handle[row][j+1]) == 0) { Rline[row] = j ; break; } } } if(Rline[left_jump_point - 2] != 159) { for(row = left_jump_point +1 ; row>0 ;row --) { Lline[row] = 0; } ImgFilter_range(left_jump_point - 1,0,Rline); matchline(r_cross_turn_point+3 ,left_jump_point - 3,Rline); //两点连线 nomal_track_flag = 0 ; } } } } } if(left_jump_point && right_jump_point && ABS(left_jump_point - right_jump_point)<16 && nomal_track_flag==1) //正入十字 { if(l_jump_count >= r_jump_count) min_jump_count = r_jump_count; else min_jump_count = l_jump_count; if(left_jump_point<115 && left_jump_point > 20) { for(row = left_jump_point+2 ;row > left_jump_point-3;row--) { if(Lline[row+3] == 0&& Lline[row+2] ==0 && Lline[row+1] ==0 &&Lline[row-1]!=0 && Lline[row-2]!=0 && Lline[row-3] !=0 ) { left_status = 1; break; } else if(Lline[row+3] != 0&& Lline[row+2] !=0 && Lline[row+1] !=0 &&Lline[row-1]==0 && Lline[row-2]==0 && Lline[row-3] ==0) { left_status = 2; break; } } } if(right_jump_point <115 && right_jump_point > 20) { for(row = right_jump_point+2 ; row > right_jump_point-3;row--) { if(Rline[row+3]==159 && Rline[row+2]==159 && Rline[row+1]==159 && Rline[row-1]!=159 && Rline[row-2]!=159 && Rline[row-3]!=159) { right_status = 1; break; } else if(Rline[row+3]!=159 && Rline[row+2]!=159 && Rline[row+1]!=159 && Rline[row-1]==159 && Rline[row-2]==159 && Rline[row-3]==159) { right_status = 2; break; } } } if(l_jump_count==1 && r_jump_count ==1) //左右都只有一个跳变点 { if( left_status == right_status) { nomal_track_flag = 0; if( left_status == 1 ) { if(left_jump_point >= right_jump_point) { range_derivative = ComSlope_Range(left_jump_point,0,l_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = 0; } else { range_derivative = ComSlope_Range(right_jump_point,0,r_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = 0; } } else if(left_status == 2) { if(left_jump_point >= right_jump_point) { range_derivative = ComSlope_Range(117,right_jump_point,r_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = 0; } else { range_derivative = ComSlope_Range(117,left_jump_point,l_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = 0; } } } if(left_jump_point > right_jump_point)//跳变点间滤波 { for(row=left_jump_point;row<right_jump_point;row--) { Lline[row] = 0; Rline[row] = 159; } } else if(left_jump_point < right_jump_point) { for(row=right_jump_point;row<left_jump_point;row--) { Lline[row] = 0; Rline[row] = 159; } } } else if(min_jump_count == 1 || min_jump_count == 2) { if(left_status == right_status) { nomal_track_flag = 0; if(left_status == 1) { if(l_jump_point[1] >= r_jump_point[1]) { range_derivative = ComSlope_Range(r_jump_point[0],r_jump_point[1],r_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = r_jump_point[1]; } else { range_derivative = ComSlope_Range(l_jump_point[0],l_jump_point[1],l_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = l_jump_point[1]; } if(left_jump_point > right_jump_point)//跳变点间滤波 { for(row=left_jump_point;row<right_jump_point;row--) { Lline[row] = 0; Rline[row] = 159; } } else if(left_jump_point < right_jump_point) { for(row=right_jump_point;row>left_jump_point;row--) { Lline[row] = 0; Rline[row] = 159; } } } else if(left_status == 2) { if(left_jump_point >= right_jump_point) { range_derivative = ComSlope_Range(r_jump_point[0],r_jump_point[1],r_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = 0; } else { range_derivative = ComSlope_Range(l_jump_point[0],l_jump_point[1],l_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = 0; } if(left_jump_point > right_jump_point)//跳变点间滤波 { Fjump_end = MIN(l_jump_point[1],r_jump_point[1]); for(row=left_jump_point;row> Fjump_end;row--) { Lline[row] = 0; Rline[row] = 159; } } else if(right_jump_point > left_jump_point) { Fjump_end = MIN(l_jump_point[1],r_jump_point[1]); for(row=right_jump_point;row>Fjump_end;row--) { Lline[row] = 0; Rline[row] = 159; } } } if(left_status == 1)//前丢线后弯道 { //十字后端补线 left_jump_point1 = l_jump_point[1]; right_jump_point1 = r_jump_point[1]; if(left_jump_point1) { for(row = left_jump_point1;row>=0;row--) { Lline[row] = 0; } } if(right_jump_point1) { for(row = right_jump_point1; row >= 0 ;row--) { Rline[row] = 159; } } if(left_jump_point1 && Lline[left_jump_point1+1] != 0 && Lline[left_jump_point1+2] !=0) { l_jump_derivative = Lline[left_jump_point1+1] - Lline[left_jump_point1+2]; for(row = left_jump_point1;row>=0;row--) { Lline[row] = Lline[row+1] + l_jump_derivative; } } if(right_jump_point1 && Rline[right_jump_point1+1] !=159 && Rline[right_jump_point1+2] !=159) { r_jump_derivative = Rline[right_jump_point1+1] - Rline[right_jump_point1+2]; for(row = right_jump_point1;row>=0;row--) { Rline[row] = Rline[row+1] + r_jump_derivative; } }//后端补线 } } } else if(min_jump_count > 2) { if(left_status == 2 && right_status == 2) { nomal_track_flag = 0; if(min_jump_count == 3) { if(l_jump_point[2] >= r_jump_point[2]) { range_derivative = ComSlope_Range(l_jump_point[1],l_jump_point[2],l_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = r_jump_point[2]; } else { range_derivative = ComSlope_Range(r_jump_point[1],r_jump_point[2],r_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); Prospect_See = l_jump_point[2]; } //十字后端补线 left_jump_point2 = l_jump_point[2]; right_jump_point2 = r_jump_point[2]; if(left_jump_point2) { for(row = left_jump_point2;row>=0;row--) { Lline[row] = 0; } } if(right_jump_point2) { for(row = right_jump_point2; row >= 0 ;row--) { Rline[row] = 159; } } if(left_jump_point2 && Lline[left_jump_point2+1] != 0 && Lline[left_jump_point2+2] !=0) { l_jump_derivative = Lline[left_jump_point2+1] - Lline[left_jump_point2+2]; for(row = left_jump_point2;row>=0;row--) { Lline[row] = Lline[row+1] + l_jump_derivative; } } if(right_jump_point2 && Rline[right_jump_point2+1] !=159 && Rline[right_jump_point2+2] !=159) { r_jump_derivative = Rline[right_jump_point2+1] - Rline[right_jump_point2+2]; for(row = right_jump_point2;row>=0;row--) { Rline[row] = Rline[row+1] + r_jump_derivative; } }//后端补线 } } if(left_jump_point > right_jump_point)//跳变点间滤波 { Fjump_end = MIN(l_jump_point[1],r_jump_point[1]); for(row=left_jump_point;row>Fjump_end;row--) { Lline[row] = 0; Rline[row] = 159; } } else if(right_jump_point > left_jump_point) { Fjump_end = MIN(l_jump_point[1],r_jump_point[1]); for(row=right_jump_point;row>Fjump_end;row--) { Lline[row] = 0; Rline[row] = 159; } } } } if(nomal_track_flag == 1 && (left_jump_point < 80 || right_jump_point <80)) //如果为正常赛道(弯道)则利用赛道边缘最后一个点的斜率对赛道进行补线 { if(left_jump_point) { for(row = left_jump_point;row>=0;row--) { Lline[row] = 0; } } if(right_jump_point) { for(row = right_jump_point; row >= 0 ;row--) { Rline[row] = 159; } } if(left_jump_point && Lline[left_jump_point+1] != 0 && Lline[left_jump_point+2] !=0) { l_jump_derivative = Lline[left_jump_point+1] - Lline[left_jump_point+2]; for(row = left_jump_point;row>=0;row--) { Lline[row] = Lline[row+1] + l_jump_derivative; } } if(right_jump_point && Rline[right_jump_point+1] !=159 && Rline[right_jump_point+2] !=159) { r_jump_derivative = Rline[right_jump_point+1] - Rline[right_jump_point+2]; for(row = right_jump_point;row>=0;row--) { Rline[row] = Rline[row+1] + r_jump_derivative; } } } for(row = 119 ; row >= 0; row --) { if(Lline[row] !=0 && Rline[row] != 159) { Mline[row] = (Lline[row] + Rline[row])/2.0 ; } if(Lline[row] != 0 && Rline[row] == 159) { Mline[row] = (Lline[row] + 72.0); } if(Lline[row] ==0 && Rline[row] != 159) { Mline[row] = (Rline[row] - 72.0); } } Imgfilter_Mline(Mline); if(nomal_track_flag == 1) { if(left_jump_point || right_jump_point) { if(left_jump_point > right_jump_point) { range_derivative = Slope_Range(left_jump_point,l_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); } else { range_derivative = Slope_Range(right_jump_point,r_First_derivative); Track_complexity = (int16)(range_derivative * range_derivative *10); } } else { range_derivative = ABS(Slope_Range(0,l_First_derivative) - Slope_Range(0,r_First_derivative)); Track_complexity = (int16)(range_derivative * range_derivative *10); } if(left_jump_point && right_jump_point) { Prospect_See = MIN(left_jump_point,right_jump_point); } else { if(left_jump_point || right_jump_point) Prospect_See = MAX(left_jump_point,right_jump_point); else Prospect_See = 0; } } camer_error_calculation(); }
/* Reads one entry from file. Returns entry or NULL on error. */ struct entry* read_entry(FILE* in, const char* name, int *lineno, uint32_t* default_ttl, ldns_rdf** origin, ldns_rdf** prev_rr) { struct entry* current = NULL; char line[MAX_LINE]; char* parse; ldns_pkt_section add_section = LDNS_SECTION_QUESTION; struct reply_packet *cur_reply = NULL; bool reading_hex = false; ldns_buffer* hex_data_buffer = NULL; while(fgets(line, (int)sizeof(line), in) != NULL) { line[MAX_LINE-1] = 0; parse = line; (*lineno) ++; while(isspace((int)*parse)) parse++; /* test for keywords */ if(isendline(*parse)) continue; /* skip comment and empty lines */ if(str_keyword(&parse, "ENTRY_BEGIN")) { if(current) { error("%s line %d: previous entry does not ENTRY_END", name, *lineno); } current = new_entry(); current->lineno = *lineno; cur_reply = entry_add_reply(current); continue; } else if(str_keyword(&parse, "$ORIGIN")) { get_origin(name, *lineno, origin, parse); continue; } else if(str_keyword(&parse, "$TTL")) { *default_ttl = (uint32_t)atoi(parse); continue; } /* working inside an entry */ if(!current) { error("%s line %d: expected ENTRY_BEGIN but got %s", name, *lineno, line); } if(str_keyword(&parse, "MATCH")) { matchline(parse, current); } else if(str_keyword(&parse, "REPLY")) { replyline(parse, cur_reply->reply); } else if(str_keyword(&parse, "ADJUST")) { adjustline(parse, current, cur_reply); } else if(str_keyword(&parse, "EXTRA_PACKET")) { cur_reply = entry_add_reply(current); } else if(str_keyword(&parse, "SECTION")) { if(str_keyword(&parse, "QUESTION")) add_section = LDNS_SECTION_QUESTION; else if(str_keyword(&parse, "ANSWER")) add_section = LDNS_SECTION_ANSWER; else if(str_keyword(&parse, "AUTHORITY")) add_section = LDNS_SECTION_AUTHORITY; else if(str_keyword(&parse, "ADDITIONAL")) add_section = LDNS_SECTION_ADDITIONAL; else error("%s line %d: bad section %s", name, *lineno, parse); } else if(str_keyword(&parse, "HEX_ANSWER_BEGIN")) { hex_data_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN); reading_hex = true; } else if(str_keyword(&parse, "HEX_ANSWER_END")) { if (!reading_hex) { error("%s line %d: HEX_ANSWER_END read but no HEX_ANSWER_BEGIN keyword seen", name, *lineno); } reading_hex = false; cur_reply->reply_from_hex = data_buffer2wire(hex_data_buffer); ldns_buffer_free(hex_data_buffer); } else if(str_keyword(&parse, "ENTRY_END")) { return current; } else if(reading_hex) { ldns_buffer_printf(hex_data_buffer, line); } else { /* it must be a RR, parse and add to packet. */ ldns_rr* n = NULL; ldns_status status; if(add_section == LDNS_SECTION_QUESTION) status = ldns_rr_new_question_frm_str( &n, parse, *origin, prev_rr); else status = ldns_rr_new_frm_str(&n, parse, *default_ttl, *origin, prev_rr); if(status != LDNS_STATUS_OK) error("%s line %d:\n\t%s: %s", name, *lineno, ldns_get_errorstr_by_id(status), parse); ldns_pkt_push_rr(cur_reply->reply, add_section, n); } } if (reading_hex) { error("%s: End of file reached while still reading hex, " "missing HEX_ANSWER_END\n", name); } if(current) { error("%s: End of file reached while reading entry. " "missing ENTRY_END\n", name); } return 0; }