From 9398f8f70a98e731e29f58439bdc75faa554dd04 Mon Sep 17 00:00:00 2001
From: Hanna K <hanna.knutsson@protonmail.com>
Date: Wed, 31 Oct 2018 08:27:06 +0100
Subject: [PATCH] Fix compilation without readline; Use bold text for mode
headings
---
src/qalc.cc | 118 ++++++++++++++++------------------------------------
1 file changed, 37 insertions(+), 81 deletions(-)
diff --git a/src/qalc.cc b/src/qalc.cc
index 0621913..db15a1a 100644
--- a/src/qalc.cc
+++ b/src/qalc.cc
@@ -409,10 +409,12 @@ bool check_exchange_rates() {
#ifdef HAVE_LIBREADLINE
# define CHECK_IF_SCREEN_FILLED if(!cfile) {rcount++; if(rcount + 3 >= rows) {FPUTS_UNICODE(_("\nPress Enter to continue."), stdout); fflush(stdout); rl_read_key(); puts(""); rcount = 1;}}
# define CHECK_IF_SCREEN_FILLED_PUTS(x) if(!cfile) {rcount += countRows(x, cols); if(rcount + 2 >= rows) {FPUTS_UNICODE(_("\nPress Enter to continue."), stdout); fflush(stdout); rl_read_key(); puts(""); rcount = 1;}} PUTS_UNICODE(x);
+# define CHECK_IF_SCREEN_FILLED_HEADING(x) rcount += 2; CHECK_IF_SCREEN_FILLED; if(rcount > 1) {puts("");} PUTS_BOLD(x); puts(""); if(rcount == 1) {rcount = 3;}
# define INIT_SCREEN_CHECK int rows, cols, rcount = 0; if(!cfile) rl_get_screen_size(&rows, &cols);
#else
# define CHECK_IF_SCREEN_FILLED
# define CHECK_IF_SCREEN_FILLED_PUTS(x) PUTS_UNICODE(x);
+# define CHECK_IF_SCREEN_FILLED_HEADING(x) puts(""); PUTS_BOLD(x); puts("");
# define INIT_SCREEN_CHECK {}
#endif
@@ -907,7 +909,7 @@ void set_option(string str) {
#define STR_AND_TABS_T3(x) str = x; pctl = unicode_length(str); if(pctl >= 16) {str += "\t";} else if(pctl >= 8) {str += "\t\t";} else {str += "\t\t\t";}
#define STR_AND_TABS_T4(x) str = x; pctl = unicode_length(str); if(pctl >= 24) {str += "\t";} else if(pctl >= 16) {str += "\t\t";} else if(pctl >= 8) {str += "\t\t\t";} else {str += "\t\t\t\t";}
#define PRINT_AND_COLON_TABS(x) FPUTS_UNICODE(x, stdout); pctl = unicode_length_check(x); if(pctl >= 32) fputs("\t", stdout); else if(pctl >= 24) fputs("\t\t", stdout); else if(pctl >= 16) fputs("\t\t\t", stdout); else if(pctl >= 8) fputs("\t\t\t\t", stdout); else fputs("\t\t\t\t\t", stdout);
-#define PUTS_BOLD(x) str = "\033[1m"; str += x; str += "\033[0m"; puts(str.c_str());
+#define PUTS_BOLD(x) str = "\033[1m"; str += x; str += "\033[0m"; PUTS_UNICODE(str.c_str());
bool equalsIgnoreCase(const string &str1, const string &str2, size_t i2, size_t i2_end, size_t minlength) {
if(str1.empty() || str2.empty()) return false;
@@ -2318,12 +2320,11 @@ int main(int argc, char *argv[]) {
//qalc command
} else if(EQUALS_IGNORECASE_AND_LOCAL(str, "mode", _("mode"))) {
INIT_SCREEN_CHECK
- puts(""); CHECK_IF_SCREEN_FILLED
+
int pctl;
- PUTS_UNICODE(_("Algebraic Mode"));
- puts("");
- rcount += 2;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Algebraic Mode"));
+
PRINT_AND_COLON_TABS(_("algebra mode"));
switch(evalops.structuring) {
case STRUCTURING_NONE: {PUTS_UNICODE(_("none")); break;}
@@ -2355,11 +2356,8 @@ int main(int argc, char *argv[]) {
if(value.empty()) value = _("unknown");
PRINT_AND_COLON_TABS(_("assumptions")); PUTS_UNICODE(value.c_str()); CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Calculation"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Calculation"));
+
PRINT_AND_COLON_TABS(_("angle unit"));
switch(evalops.parse_options.angle_unit) {
case ANGLE_UNIT_RADIANS: {PUTS_UNICODE(_("rad")); break;}
@@ -2378,11 +2376,8 @@ int main(int argc, char *argv[]) {
PRINT_AND_COLON_TABS(_("interval")); PUTS_UNICODE(b2oo(CALCULATOR->usesIntervalArithmetic(), false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("precision")) printf("%i\n", CALCULATOR->getPrecision()); CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Enabled Objects"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Enabled Objects"));
+
PRINT_AND_COLON_TABS(_("calculate functions")); PUTS_UNICODE(b2oo(evalops.calculate_functions, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("calculate variables")); PUTS_UNICODE(b2oo(evalops.calculate_variables, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("complex numbers")); PUTS_UNICODE(b2oo(evalops.allow_complex, false)); CHECK_IF_SCREEN_FILLED
@@ -2393,11 +2388,8 @@ int main(int argc, char *argv[]) {
PRINT_AND_COLON_TABS(_("variables")); PUTS_UNICODE(b2oo(evalops.parse_options.variables_enabled, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("variable units")); PUTS_UNICODE(b2oo(CALCULATOR->variableUnitsEnabled(), false)); CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Generic Display Options"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Generic Display Options"));
+
PRINT_AND_COLON_TABS(_("abbreviations")); PUTS_UNICODE(b2oo(printops.abbreviate_names, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("division sign"));
switch(printops.division_sign) {
@@ -2420,11 +2412,8 @@ int main(int argc, char *argv[]) {
PRINT_AND_COLON_TABS(_("spell out logical")); PUTS_UNICODE(b2oo(printops.spell_out_logical_operators, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("unicode")); PUTS_UNICODE(b2oo(printops.use_unicode_signs, false)); CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Numerical Display"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Numerical Display"));
+
PRINT_AND_COLON_TABS(_("base"));
switch(printops.base) {
case BASE_ROMAN_NUMERALS: {PUTS_UNICODE(_("roman")); break;}
@@ -2513,11 +2502,8 @@ int main(int argc, char *argv[]) {
PRINT_AND_COLON_TABS(_("show ending zeroes")); PUTS_UNICODE(b2oo(printops.show_ending_zeroes, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("two's complement")); PUTS_UNICODE(b2oo(printops.twos_complement, false)); CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Parsing"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Parsing"));
+
PRINT_AND_COLON_TABS(_("decimal comma"));
if(b_decimal_comma < 0) {PUTS_UNICODE(_("locale"));}
else if(b_decimal_comma == 0) {PUTS_UNICODE(_("off"));}
@@ -2552,11 +2538,8 @@ int main(int argc, char *argv[]) {
CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("rpn syntax")); PUTS_UNICODE(b2oo(evalops.parse_options.rpn, false)); CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Units"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Units"));
+
PRINT_AND_COLON_TABS(_("all prefixes")); PUTS_UNICODE(b2oo(printops.use_all_prefixes, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("autoconversion"));
switch(evalops.auto_post_conversion) {
@@ -2583,11 +2566,8 @@ int main(int argc, char *argv[]) {
}
CHECK_IF_SCREEN_FILLED
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Other"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Other"));
+
PRINT_AND_COLON_TABS(_("rpn")); PUTS_UNICODE(b2oo(rpn_mode, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("save definitions")); PUTS_UNICODE(b2yn(save_defs_on_exit, false)); CHECK_IF_SCREEN_FILLED
PRINT_AND_COLON_TABS(_("save mode")); PUTS_UNICODE(b2yn(save_mode_on_exit, false)); CHECK_IF_SCREEN_FILLED
@@ -3011,11 +2991,8 @@ int main(int argc, char *argv[]) {
CHECK_IF_SCREEN_FILLED_PUTS("");
CHECK_IF_SCREEN_FILLED_PUTS(_("Available options and accepted values are (the current value is marked with '*'):"));
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Algebraic Mode"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Algebraic Mode"));
+
STR_AND_TABS_2(_("algebra mode"), evalops.structuring, _("none"), _("simplify"), _("factorize"));
STR_AND_TABS_BOOL(_("assume nonzero denominators"), evalops.assume_denominators_nonzero);
STR_AND_TABS_BOOL(_("warn nonzero denominators"), evalops.warn_about_denominators_assumed_nonzero);
@@ -3049,21 +3026,15 @@ int main(int argc, char *argv[]) {
if(ass->type() == ASSUMPTION_TYPE_INTEGER) str += "*";
str += ")"; CHECK_IF_SCREEN_FILLED_PUTS(str.c_str());
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Calculation"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Calculation"));
+
STR_AND_TABS_3(_("angle unit"), evalops.parse_options.angle_unit, _("none"), _("radians"), _("degrees"), _("gradians"));
STR_AND_TABS_2(_("approximation"), evalops.approximation, _("exact"), _("try exact"), _("approximate"));
STR_AND_TABS_BOOL(_("interval"), CALCULATOR->usesIntervalArithmetic());
STR_AND_TABS(_("precision")); str += "(> 0) "; str += i2s(CALCULATOR->getPrecision()); str += "*"; CHECK_IF_SCREEN_FILLED_PUTS(str.c_str());
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Enabled Objects"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Enabled Objects"));
+
STR_AND_TABS_BOOL(_("calculate functions"), evalops.calculate_functions);
STR_AND_TABS_BOOL(_("calculate variables"), evalops.calculate_variables);
STR_AND_TABS_BOOL(_("complex numbers"), evalops.allow_complex);
@@ -3074,11 +3045,8 @@ int main(int argc, char *argv[]) {
STR_AND_TABS_BOOL(_("variables"), evalops.parse_options.variables_enabled);
STR_AND_TABS_BOOL(_("variable units"), CALCULATOR->variableUnitsEnabled());
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Generic Display Options"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Generic Display Options"));
+
STR_AND_TABS_BOOL(_("abbreviations"), printops.abbreviate_names);
STR_AND_TABS_2(_("division sign"), printops.division_sign, "/", SIGN_DIVISION_SLASH, SIGN_DIVISION);
STR_AND_TABS_BOOL(_("excessive parentheses"), printops.excessive_parenthesis);
@@ -3088,12 +3056,9 @@ int main(int argc, char *argv[]) {
STR_AND_TABS_BOOL(_("spacious"), printops.spacious);
STR_AND_TABS_BOOL(_("spell out logical"), printops.spell_out_logical_operators);
STR_AND_TABS_BOOL(_("unicode"), printops.use_unicode_signs);
-
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Numerical Display"));
- puts("");
- if(rcount == 1) rcount = 3;
+
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Numerical Display"));
+
STR_AND_TABS(_("base")); str += "(2 - 36"; str += ", "; str += _("bin");
if(printops.base == BASE_BINARY) str += "*";
str += ", "; str += _("oct");
@@ -3154,11 +3119,8 @@ int main(int argc, char *argv[]) {
STR_AND_TABS_BOOL(_("show ending zeroes"), printops.show_ending_zeroes);
STR_AND_TABS_BOOL(_("two's complement"), printops.twos_complement);
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Parsing"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Parsing"));
+
STR_AND_TABS(_("decimal comma")); str += "("; str += _("locale");
if(b_decimal_comma < 0) str += "*";
str += ", "; str += _("off");
@@ -3191,11 +3153,8 @@ int main(int argc, char *argv[]) {
STR_AND_TABS_2(_("read precision"), evalops.parse_options.read_precision, _("off"), _("always"), _("when decimals"))
STR_AND_TABS_BOOL(_("rpn syntax"), evalops.parse_options.rpn);
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Units"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Units"));
+
STR_AND_TABS_BOOL(_("all prefixes"), printops.use_all_prefixes);
STR_AND_TABS(_("autoconversion"));
str += (_("none"));
@@ -3222,11 +3181,8 @@ int main(int argc, char *argv[]) {
if(auto_update_exchange_rates > 0) {str += " "; str += i2s(auto_update_exchange_rates); str += "*";}
CHECK_IF_SCREEN_FILLED_PUTS(str.c_str());
- rcount += 2; CHECK_IF_SCREEN_FILLED
- if(rcount > 1) puts("");
- PUTS_UNICODE(_("Other"));
- puts("");
- if(rcount == 1) rcount = 3;
+ CHECK_IF_SCREEN_FILLED_HEADING(_("Other"));
+
STR_AND_TABS_BOOL(_("rpn"), rpn_mode);
STR_AND_TABS_YESNO(_("save definitions"), save_defs_on_exit);
STR_AND_TABS_YESNO(_("save mode"), save_mode_on_exit);