Allow all non-ephemeral buffers to be toggled write/read-only. This toggle works while mg is running, unlike the -R option which is only during mg startup.
ok? Index: buffer.c =================================================================== RCS file: /cvs/src/usr.bin/mg/buffer.c,v retrieving revision 1.104 diff -u -p -u -p -r1.104 buffer.c --- buffer.c 6 Aug 2017 04:39:45 -0000 1.104 +++ buffer.c 27 Nov 2018 19:52:41 -0000 @@ -31,6 +31,28 @@ extern int globalwd; /* ARGSUSED */ int +togglereadonlyall(int f, int n) +{ + struct buffer *bp = NULL; + int len = 0; + + allbro = !allbro; + for (bp = bheadp; bp != NULL; bp = bp->b_bufp) { + len = strlen(bp->b_bname); + if (bp->b_bname[0] != '*' && bp->b_bname[len - 1] != '*') { + if (allbro) + bp->b_flag |= BFREADONLY; + else + bp->b_flag &= ~BFREADONLY; + } + } + curwp->w_rflag |= WFMODE; + + return (TRUE); +} + +/* ARGSUSED */ +int togglereadonly(int f, int n) { int s; Index: def.h =================================================================== RCS file: /cvs/src/usr.bin/mg/def.h,v retrieving revision 1.156 diff -u -p -u -p -r1.156 def.h --- def.h 29 Aug 2018 07:50:16 -0000 1.156 +++ def.h 27 Nov 2018 19:52:41 -0000 @@ -417,6 +417,7 @@ int delwind(int, int); /* buffer.c */ int togglereadonly(int, int); +int togglereadonlyall(int, int); struct buffer *bfind(const char *, int); int poptobuffer(int, int); int killbuffer(struct buffer *); @@ -737,6 +738,7 @@ extern int defb_flag; extern int doaudiblebell; extern int dovisiblebell; extern int dblspace; +extern int allbro; extern char cinfo[]; extern char *keystrings[]; extern char pat[NPAT]; Index: funmap.c =================================================================== RCS file: /cvs/src/usr.bin/mg/funmap.c,v retrieving revision 1.54 diff -u -p -u -p -r1.54 funmap.c --- funmap.c 29 Aug 2018 07:50:16 -0000 1.54 +++ funmap.c 27 Nov 2018 19:52:41 -0000 @@ -201,6 +201,7 @@ static struct funmap functnames[] = { {usebuffer, "switch-to-buffer",}, {poptobuffer, "switch-to-buffer-other-window",}, {togglereadonly, "toggle-read-only" }, + {togglereadonlyall, "toggle-read-only-all" }, {twiddle, "transpose-chars",}, {transposepara, "transpose-paragraphs",}, {transposeword, "transpose-words",}, Index: main.c =================================================================== RCS file: /cvs/src/usr.bin/mg/main.c,v retrieving revision 1.84 diff -u -p -u -p -r1.84 main.c --- main.c 16 Sep 2016 17:17:40 -0000 1.84 +++ main.c 27 Nov 2018 19:52:41 -0000 @@ -28,6 +28,7 @@ int startrow; /* row to start */ int doaudiblebell; /* audible bell toggle */ int dovisiblebell; /* visible bell toggle */ int dblspace; /* sentence end #spaces */ +int allbro; /* all buffs read-only */ struct buffer *curbp; /* current buffer */ struct buffer *bheadp; /* BUFFER list head */ struct mgwin *curwp; /* current window */ @@ -65,6 +66,7 @@ main(int argc, char **argv) switch (o) { case 'R': bro = 1; + allbro = 1; break; case 'n': nobackups = 1; Index: mg.1 =================================================================== RCS file: /cvs/src/usr.bin/mg/mg.1,v retrieving revision 1.108 diff -u -p -u -p -r1.108 mg.1 --- mg.1 18 Nov 2018 07:57:28 -0000 1.108 +++ mg.1 27 Nov 2018 19:52:41 -0000 @@ -884,6 +884,10 @@ Prompt and switch to a new buffer in the Switch to buffer in another window. .It toggle-read-only Toggle the read-only flag on the current buffer. +.It toggle-read-only-all +Toggle the read-only flag on all non-ephemeral buffers. +A simple toggle that switches a global read-only flag either on +or off. .It transpose-chars Transpose the two characters in front of and under dot, then move forward one character.