fix
This commit is contained in:
+25
-16
@@ -5,8 +5,8 @@
|
||||
#include "utils.hpp"
|
||||
|
||||
/* macros rather then function to avoid warnings */
|
||||
#define UNEXPECTED_END() { endwin(); cerr << "Unexpected end of file" << std::endl; exit(1); }
|
||||
#define UNEXPECTED_CHAR(c) { endwin(); cerr << "Line " << line << ": Unexpected '" << c << std::endl; exit(1); }
|
||||
#define ERR_UNEXPECTED_END() { endwin(); cerr << "Unexpected end of file" << endl; exit(1); }
|
||||
#define ERR_UNEXPECTED_CHAR(c) { endwin(); cerr << "Line " << line << ": Unexpected '" << c << endl; exit(1); }
|
||||
|
||||
|
||||
using std::cerr;
|
||||
@@ -14,6 +14,7 @@ using std::cerr;
|
||||
using std::string;
|
||||
using std::vector;
|
||||
using std::pair;
|
||||
using std::endl;
|
||||
|
||||
namespace /* internal */
|
||||
{
|
||||
@@ -44,6 +45,13 @@ namespace /* internal */
|
||||
/* result */
|
||||
Tree* cur_tree;
|
||||
|
||||
void err_three_parents(const char* extra_name)
|
||||
{
|
||||
endwin();
|
||||
cerr << "Line " << line << " two parents are already defined, "
|
||||
<< extra_name << " is third" << endl;
|
||||
}
|
||||
|
||||
bool isNum(char c)
|
||||
{
|
||||
return c >= '0' && c <= '9';
|
||||
@@ -57,7 +65,7 @@ namespace /* internal */
|
||||
!isNum(*it_data))
|
||||
{
|
||||
if(*it_data == ':' /* && *it_data == '-' */)
|
||||
UNEXPECTED_CHAR(*it_data);
|
||||
ERR_UNEXPECTED_CHAR(*it_data);
|
||||
++it_data;
|
||||
}
|
||||
|
||||
@@ -85,11 +93,11 @@ namespace /* internal */
|
||||
else if(*it_data == 'F')
|
||||
res = F;
|
||||
else
|
||||
UNEXPECTED_CHAR(*it_data);
|
||||
ERR_UNEXPECTED_CHAR(*it_data);
|
||||
|
||||
++it_data;
|
||||
if(*it_data != '\n')
|
||||
UNEXPECTED_CHAR(*it_data);
|
||||
ERR_UNEXPECTED_CHAR(*it_data);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@@ -110,7 +118,7 @@ namespace /* internal */
|
||||
break;
|
||||
case '.':
|
||||
if(val == 0)
|
||||
UNEXPECTED_CHAR('.')
|
||||
ERR_UNEXPECTED_CHAR('.')
|
||||
else
|
||||
return sign * val;
|
||||
break;
|
||||
@@ -119,10 +127,10 @@ namespace /* internal */
|
||||
return sign * val;
|
||||
/* case '?': todo */
|
||||
default:
|
||||
UNEXPECTED_CHAR(*it_data)
|
||||
ERR_UNEXPECTED_CHAR(*it_data)
|
||||
}
|
||||
}
|
||||
UNEXPECTED_END()
|
||||
ERR_UNEXPECTED_END()
|
||||
}
|
||||
|
||||
EventTime processDate(char*& it_data) /* todo validate */
|
||||
@@ -158,7 +166,8 @@ namespace /* internal */
|
||||
else if(res.second == Nobody)
|
||||
res.second = cur_tree->findId(name.data())[same_name_index];
|
||||
else
|
||||
/* todo */TFT_EXIT(1);
|
||||
err_three_parents(name.data());
|
||||
|
||||
same_name_index = 0;
|
||||
name.clear();
|
||||
break;
|
||||
@@ -166,7 +175,7 @@ namespace /* internal */
|
||||
if(name.empty() && res.first == Nobody)
|
||||
return prev_parents;
|
||||
else
|
||||
UNEXPECTED_CHAR('-')
|
||||
ERR_UNEXPECTED_CHAR('-')
|
||||
case '\n':
|
||||
++line;
|
||||
if(res.first == Nobody)
|
||||
@@ -184,7 +193,7 @@ namespace /* internal */
|
||||
name.push_back(*it_data);
|
||||
}
|
||||
}
|
||||
UNEXPECTED_END()
|
||||
ERR_UNEXPECTED_END()
|
||||
}
|
||||
|
||||
vector<person_id> parseSpouses(char*& it_data)
|
||||
@@ -200,7 +209,7 @@ namespace /* internal */
|
||||
if(name.empty())
|
||||
res.push_back( cur_tree->last() );
|
||||
else
|
||||
UNEXPECTED_CHAR('-')
|
||||
ERR_UNEXPECTED_CHAR('-')
|
||||
break;
|
||||
case ',':
|
||||
if(!name.empty())
|
||||
@@ -210,7 +219,7 @@ namespace /* internal */
|
||||
same_name_index = 0;
|
||||
}
|
||||
else
|
||||
UNEXPECTED_CHAR(',')
|
||||
ERR_UNEXPECTED_CHAR(',')
|
||||
break;
|
||||
case '\n':
|
||||
++line;
|
||||
@@ -248,7 +257,7 @@ namespace /* internal */
|
||||
case '-':
|
||||
case 0 ... 9:
|
||||
case ':':
|
||||
UNEXPECTED_CHAR(*it_data)
|
||||
ERR_UNEXPECTED_CHAR(*it_data)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -305,7 +314,7 @@ namespace /* internal */
|
||||
spouses = parseSpouses(it_data);
|
||||
break;
|
||||
default:
|
||||
UNEXPECTED_CHAR(it_data[-1])
|
||||
ERR_UNEXPECTED_CHAR(it_data[-1])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -320,7 +329,7 @@ namespace /* internal */
|
||||
break;
|
||||
/* case 0...9: */
|
||||
/* case ':': */
|
||||
/* UNEXPECTED_CHAR(*it_data) */
|
||||
/* ERR_UNEXPECTED_CHAR(*it_data) */
|
||||
/* default: */
|
||||
/* break; */
|
||||
}
|
||||
|
||||
@@ -383,6 +383,9 @@ static void displayHelp()
|
||||
|
||||
void Tree::display()
|
||||
{
|
||||
if(people.size() == 0)
|
||||
return;
|
||||
|
||||
bool to_draw = true;
|
||||
I32 c;
|
||||
do
|
||||
|
||||
Reference in New Issue
Block a user