summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ufed-curses-checklist.c18
-rw-r--r--ufed-curses-globals.c2
-rw-r--r--ufed-curses-globals.h2
-rw-r--r--ufed-curses.c19
-rw-r--r--ufed.pl.in6
5 files changed, 42 insertions, 5 deletions
diff --git a/ufed-curses-checklist.c b/ufed-curses-checklist.c
index 003fc9a..4a12968 100644
--- a/ufed-curses-checklist.c
+++ b/ufed-curses-checklist.c
@@ -51,6 +51,24 @@ static char *getline(FILE *fp)
if(fgets(lineBuf, size, fp) == NULL)
return NULL;
else {
+
+ /* See to configuration bytes if not read already */
+ if (!configDone) {
+ /* Byte 1: Whether read-only-mode is set or not */
+ if ( '0' != lineBuf[0] )
+ ro_mode = true;
+
+ configDone = true;
+
+ /* Remove the leading bytes transporting configuration values */
+ char *oldLine = lineBuf;
+ lineBuf = malloc(size);
+ if (NULL == lineBuf)
+ ERROR_EXIT(-1, "Can not allocate %lu bytes for line buffer\n", sizeof(char) * size);
+ memcpy(lineBuf, oldLine + 1, size - 1);
+ free(oldLine);
+ } /* End of having to read configuration bytes */
+
char *p = strchr(lineBuf, '\n');
if(p != NULL) {
*p = '\0';
diff --git a/ufed-curses-globals.c b/ufed-curses-globals.c
index ad9b66d..8c348d0 100644
--- a/ufed-curses-globals.c
+++ b/ufed-curses-globals.c
@@ -8,7 +8,9 @@
#include "ufed-curses-types.h"
int bottomline = 0;
+bool configDone = false;
int minwidth = 0;
+int ro_mode = false;
int topline = 0;
eMask e_mask = eMask_unmasked;
eOrder e_order = eOrder_left;
diff --git a/ufed-curses-globals.h b/ufed-curses-globals.h
index 514563e..54f2cf2 100644
--- a/ufed-curses-globals.h
+++ b/ufed-curses-globals.h
@@ -11,6 +11,7 @@
#include "ufed-curses-types.h"
extern int bottomline;
+extern bool configDone;
extern eMask e_mask;
extern eOrder e_order;
extern eScope e_scope;
@@ -18,6 +19,7 @@ extern eState e_state;
extern char* fayt;
extern sListStats listStats;
extern int minwidth;
+extern bool ro_mode;
extern int topline;
extern sWindow window[wCount];
diff --git a/ufed-curses.c b/ufed-curses.c
index 1948f99..6870e66 100644
--- a/ufed-curses.c
+++ b/ufed-curses.c
@@ -339,8 +339,14 @@ void drawTop(bool withSep)
WINDOW* w = win(Top);
char buf[COLS + 1];
- wattrset(w, COLOR_PAIR(1) | A_BOLD);
- sprintf(buf, "%-*.*s", wWidth(Top), wWidth(Top), "Gentoo USE flags editor " PACKAGE_VERSION);
+ if (ro_mode) {
+ wattrset(w, COLOR_PAIR(4) | A_BOLD | A_REVERSE);
+ sprintf(buf, "%-*.*s", wWidth(Top), wWidth(Top),
+ "(RO) Gentoo USE flags editor " PACKAGE_VERSION " (RO)");
+ } else {
+ wattrset(w, COLOR_PAIR(1) | A_BOLD);
+ sprintf(buf, "%-*.*s", wWidth(Top), wWidth(Top), "Gentoo USE flags editor " PACKAGE_VERSION);
+ }
mvwaddstr(w, 0, 0, buf);
/// REMOVEME: Stop wasting space
@@ -352,8 +358,13 @@ void drawTop(bool withSep)
mvwaddch(w, 1, wWidth(Top)-1, ACS_URCORNER);
waddch(w, ACS_VLINE);
- wattrset(w, COLOR_PAIR(3));
- sprintf(buf, " %-*.*s ", wWidth(Top)-4, wWidth(Top)-4, subtitle);
+ if (ro_mode) {
+ wattrset(w, COLOR_PAIR(4) | A_REVERSE);
+ sprintf(buf, " READ-ONLY MODE! %-*.*s READ-ONLY MODE! ", wWidth(Top)-36, wWidth(Top)-36, subtitle);
+ } else {
+ wattrset(w, COLOR_PAIR(3));
+ sprintf(buf, " %-*.*s ", wWidth(Top)-4, wWidth(Top)-4, subtitle);
+ }
waddstr(w, buf);
wattrset(w, COLOR_PAIR(2) | A_BOLD);
waddch(w, ACS_VLINE);
diff --git a/ufed.pl.in b/ufed.pl.in
index a922109..17ffd8e 100644
--- a/ufed.pl.in
+++ b/ufed.pl.in
@@ -119,7 +119,11 @@ sub flags_dialog {
# Now let the interface know of the result
if (open my $fh, '>&=', $iwrite) {
binmode( $fh, ":encoding(ISO-8859-1)" );
- print $fh $outTxt;
+
+ # Fixed config:
+ # byte 1: Read only 0/1
+ # Rest: The flags configuration
+ print $fh "$Portage::ro_mode$outTxt";
close $fh;
} else {
die "Couldn't let interface know of flags\n";