This commit is contained in:
vrd
2023-03-07 19:33:02 +02:00
parent 35d9d44aa6
commit 83d47cbefa
2 changed files with 28 additions and 16 deletions
+25 -16
View File
@@ -5,8 +5,8 @@
#include "utils.hpp" #include "utils.hpp"
/* macros rather then function to avoid warnings */ /* macros rather then function to avoid warnings */
#define UNEXPECTED_END() { endwin(); cerr << "Unexpected end of file" << std::endl; exit(1); } #define ERR_UNEXPECTED_END() { endwin(); cerr << "Unexpected end of file" << endl; exit(1); }
#define UNEXPECTED_CHAR(c) { endwin(); cerr << "Line " << line << ": Unexpected '" << c << std::endl; exit(1); } #define ERR_UNEXPECTED_CHAR(c) { endwin(); cerr << "Line " << line << ": Unexpected '" << c << endl; exit(1); }
using std::cerr; using std::cerr;
@@ -14,6 +14,7 @@ using std::cerr;
using std::string; using std::string;
using std::vector; using std::vector;
using std::pair; using std::pair;
using std::endl;
namespace /* internal */ namespace /* internal */
{ {
@@ -44,6 +45,13 @@ namespace /* internal */
/* result */ /* result */
Tree* cur_tree; 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) bool isNum(char c)
{ {
return c >= '0' && c <= '9'; return c >= '0' && c <= '9';
@@ -57,7 +65,7 @@ namespace /* internal */
!isNum(*it_data)) !isNum(*it_data))
{ {
if(*it_data == ':' /* && *it_data == '-' */) if(*it_data == ':' /* && *it_data == '-' */)
UNEXPECTED_CHAR(*it_data); ERR_UNEXPECTED_CHAR(*it_data);
++it_data; ++it_data;
} }
@@ -85,11 +93,11 @@ namespace /* internal */
else if(*it_data == 'F') else if(*it_data == 'F')
res = F; res = F;
else else
UNEXPECTED_CHAR(*it_data); ERR_UNEXPECTED_CHAR(*it_data);
++it_data; ++it_data;
if(*it_data != '\n') if(*it_data != '\n')
UNEXPECTED_CHAR(*it_data); ERR_UNEXPECTED_CHAR(*it_data);
} }
return res; return res;
} }
@@ -110,7 +118,7 @@ namespace /* internal */
break; break;
case '.': case '.':
if(val == 0) if(val == 0)
UNEXPECTED_CHAR('.') ERR_UNEXPECTED_CHAR('.')
else else
return sign * val; return sign * val;
break; break;
@@ -119,10 +127,10 @@ namespace /* internal */
return sign * val; return sign * val;
/* case '?': todo */ /* case '?': todo */
default: default:
UNEXPECTED_CHAR(*it_data) ERR_UNEXPECTED_CHAR(*it_data)
} }
} }
UNEXPECTED_END() ERR_UNEXPECTED_END()
} }
EventTime processDate(char*& it_data) /* todo validate */ EventTime processDate(char*& it_data) /* todo validate */
@@ -158,7 +166,8 @@ namespace /* internal */
else if(res.second == Nobody) else if(res.second == Nobody)
res.second = cur_tree->findId(name.data())[same_name_index]; res.second = cur_tree->findId(name.data())[same_name_index];
else else
/* todo */TFT_EXIT(1); err_three_parents(name.data());
same_name_index = 0; same_name_index = 0;
name.clear(); name.clear();
break; break;
@@ -166,7 +175,7 @@ namespace /* internal */
if(name.empty() && res.first == Nobody) if(name.empty() && res.first == Nobody)
return prev_parents; return prev_parents;
else else
UNEXPECTED_CHAR('-') ERR_UNEXPECTED_CHAR('-')
case '\n': case '\n':
++line; ++line;
if(res.first == Nobody) if(res.first == Nobody)
@@ -184,7 +193,7 @@ namespace /* internal */
name.push_back(*it_data); name.push_back(*it_data);
} }
} }
UNEXPECTED_END() ERR_UNEXPECTED_END()
} }
vector<person_id> parseSpouses(char*& it_data) vector<person_id> parseSpouses(char*& it_data)
@@ -200,7 +209,7 @@ namespace /* internal */
if(name.empty()) if(name.empty())
res.push_back( cur_tree->last() ); res.push_back( cur_tree->last() );
else else
UNEXPECTED_CHAR('-') ERR_UNEXPECTED_CHAR('-')
break; break;
case ',': case ',':
if(!name.empty()) if(!name.empty())
@@ -210,7 +219,7 @@ namespace /* internal */
same_name_index = 0; same_name_index = 0;
} }
else else
UNEXPECTED_CHAR(',') ERR_UNEXPECTED_CHAR(',')
break; break;
case '\n': case '\n':
++line; ++line;
@@ -248,7 +257,7 @@ namespace /* internal */
case '-': case '-':
case 0 ... 9: case 0 ... 9:
case ':': case ':':
UNEXPECTED_CHAR(*it_data) ERR_UNEXPECTED_CHAR(*it_data)
} }
} }
} }
@@ -305,7 +314,7 @@ namespace /* internal */
spouses = parseSpouses(it_data); spouses = parseSpouses(it_data);
break; break;
default: default:
UNEXPECTED_CHAR(it_data[-1]) ERR_UNEXPECTED_CHAR(it_data[-1])
} }
} }
@@ -320,7 +329,7 @@ namespace /* internal */
break; break;
/* case 0...9: */ /* case 0...9: */
/* case ':': */ /* case ':': */
/* UNEXPECTED_CHAR(*it_data) */ /* ERR_UNEXPECTED_CHAR(*it_data) */
/* default: */ /* default: */
/* break; */ /* break; */
} }
+3
View File
@@ -383,6 +383,9 @@ static void displayHelp()
void Tree::display() void Tree::display()
{ {
if(people.size() == 0)
return;
bool to_draw = true; bool to_draw = true;
I32 c; I32 c;
do do