jcs
/amend
/amendments
/152
settings: Minor tweaks
jcs made amendment 152 about 1 year ago
--- amend.π.r Thu Jan 11 14:41:34 2024
+++ amend.π.r Thu Oct 24 11:08:11 2024
@@ -53,18 +53,18 @@ data 'DITL' (130, "ASK") {
};
data 'DITL' (131, "SETTINGS") {
- $"0008 0000 0000 0078 006E 008C 00A8 0404" /* .......x.n.å.®.. */
- $"5361 7665 0000 0000 0078 0028 008C 0062" /* Save.....x.(.å.b */
- $"0406 4361 6E63 656C 0000 0000 0014 006E" /* ..Cancel.......n */
- $"0024 00D7 1007 756E 6B6E 6F77 6E61 0000" /* .$.◊..unknowna.. */
- $"0000 0032 006E 0042 0089 1001 346F 0000" /* ...2.n.B.â..4o.. */
- $"0000 0050 006E 0060 0096 1003 3130 3068" /* ...P.n.`.ñ..100h */
- $"0000 0000 0014 000A 0025 003D 8807 4175" /* .........%.=à.Au */
- $"7468 6F72 3A20 0000 0000 0032 000A 0042" /* thor: .....2...B */
+ $"0008 0000 0000 006E 0050 0082 008A 0404" /* .......n.P.Ç.ä.. */
+ $"5361 7665 0000 0000 006E 0096 0082 00D0" /* Save.....n.ñ.Ç.– */
+ $"0406 4361 6E63 656C 0000 0000 000F 00AA" /* ..Cancel.......™ */
+ $"001F 0113 1007 756E 6B6E 6F77 6E61 0000" /* ......unknowna.. */
+ $"0000 002D 00AA 003D 00C5 1001 346F 0000" /* ...-.™.=.≈..4o.. */
+ $"0000 004B 00AA 005B 00D2 1003 3130 3068" /* ...K.™.[.“..100h */
+ $"0000 0000 000F 000A 0020 003D 8807 4175" /* ......... .=à.Au */
+ $"7468 6F72 3A0A 0000 0000 002D 000A 003D" /* thor:......-...= */
$"0051 880A 5461 6220 7769 6474 683A 0000" /* .Qà.Tab width:.. */
- $"0000 0046 000A 0068 0065 8813 416D 656E" /* ...F...h.eà.Amen */
- $"646D 656E 7473 2074 6F20 6C6F 6164 3A00" /* dments to load:. */
- $"0000 0000 0050 00A0 0060 00D9 8809 2830" /* .....P.†.`..à∆(0 */
+ $"0000 004B 000A 005C 009E 8813 416D 656E" /* ...K...\.ûà.Amen */
+ $"646D 656E 7473 2074 6F20 6C6F 6164 3A09" /* dments to load:∆ */
+ $"0000 0000 004B 00DC 005B 0115 8809 2830" /* .....K...[..à∆(0 */
$"203D 2041 6C6C 2900" /* = All). */
};
@@ -87,18 +87,6 @@ data 'vers' (1) {
$"732E 6F72 673E" /* s.org> */
};
-data 'STR ' (129, "TABWIDTH") {
- $"0134" /* .4 */
-};
-
-data 'STR ' (128, "AUTHOR") {
- $"036A 6373" /* .jcs */
-};
-
-data 'STR ' (130, "MAX_AMENDMENTS") {
- $"0331 3030" /* .100 */
-};
-
data 'LDEF' (128, "commit list", purgeable) {
$"2F3A 0004 4E75 0000 0000" /* /:..Nu.... */
};
@@ -108,8 +96,9 @@ data 'LDEF' (129, "file list", purgeable) {
};
data 'DLOG' (130, "SETTINGS_DLOG_ID") {
- $"005C 008C 00F0 0170 0001 0100 0000 0000" /* .\.å...p........ */
- $"0000 0083 00BA 280A" /* ...É.∫(. */
+ $"005E 0070 00EA 0194 0010 0100 0000 0000" /* .^.p...î........ */
+ $"0000 0083 1141 6D65 6E64 2050 7265 6665" /* ...É.Amend Prefe */
+ $"7265 6E63 6573 280A" /* rences(. */
};
data 'BNDL' (128) {
--- main.c Fri Feb 16 14:02:33 2024
+++ main.c Tue Aug 27 09:37:31 2024
@@ -24,11 +24,14 @@
#include "focusable.h"
#include "repo.h"
#include "settings.h"
+#include "tests.h"
#include "util.h"
MenuHandle apple_menu, file_menu, edit_menu, repo_menu, amendment_menu;
bool quitting = false;
+struct settings settings;
+
#ifdef MALLOC_DEBUG
MenuHandle debug_menu;
#define DEBUG_MENU_DUMP_ID 999
@@ -38,7 +41,7 @@ size_t xalloc_printf(const char *format, ...);
bool handle_menu(long menu_id);
-int
+short
main(void)
{
Handle mbar;
@@ -64,7 +67,12 @@ main(void)
util_init();
settings_load();
-
+
+#ifdef TEST_SUITE
+ tests_run();
+ return 0;
+#endif
+
mbar = GetNewMBar(MBAR_ID);
SetMenuBar(mbar);
apple_menu = GetMHandle(APPLE_MENU_ID);
@@ -241,7 +249,7 @@ handle_menu(long menu_id)
break;
}
case FILE_MENU_SETTINGS_ID:
- settings_edit();
+ settings_edit(false);
break;
case FILE_MENU_QUIT_ID:
if (focusables_quit())
@@ -330,4 +338,4 @@ menu_defaults(void)
DisableItem(amendment_menu, AMENDMENT_MENU_EDIT_ID);
DisableItem(amendment_menu, AMENDMENT_MENU_EXPORT_ID);
-}
\ No newline at end of file
+}
--- settings.c Thu Mar 21 08:48:51 2024
+++ settings.c Thu Oct 24 10:53:50 2024
@@ -29,11 +29,6 @@
#include "tetab.h"
#include "util.h"
-/* used in pre-2.8 */
-#define STR_AUTHOR_ID 128
-#define STR_TABWIDTH_ID 129
-#define STR_MAX_AMENDMENTS_ID 130
-
enum {
SETTING_STRING,
SETTING_SHORT,
@@ -43,9 +38,14 @@ enum {
SETTING_BOOL
};
+enum {
+ SETTING_FLAG_ALLOW_BLANK = (1 << 0)
+};
+
struct setting {
char name[32];
short type;
+ long flags;
long min;
long max;
char sdefault[32];
@@ -54,13 +54,16 @@ struct setting {
unsigned long size;
char password_storage[256];
} settings_defs[] = {
- { "Author", SETTING_STRING, 1, 0, "unknown",
+ { "Author", SETTING_STRING, 0,
+ 1, 0, "unknown",
SETTINGS_AUTHOR_ID, offsetof(struct settings, author),
member_size(struct settings, author) },
- { "Tab Width", SETTING_USHORT, 1, 32, "4",
+ { "Tab Width", SETTING_USHORT, 0,
+ 1, 32, "4",
SETTINGS_TABWIDTH_ID, offsetof(struct settings, tabwidth),
member_size(struct settings, tabwidth) },
- { "Max Amendments to Load", SETTING_USHORT, 1, 65535, "100",
+ { "Max Amendments to Load", SETTING_USHORT, 0,
+ 1, 65535, "100",
SETTINGS_MAX_AMENDMENTS_ID, offsetof(struct settings, max_amendments),
member_size(struct settings, max_amendments) },
};
@@ -76,7 +79,7 @@ settings_load(void)
char fn[] = SETTINGS_FILENAME;
char *res;
short error, vrefnum, prefrefnum;
- long len, dirid;
+ long len, rlen, dirid;
Handle h;
bool use_defaults = true;
@@ -95,25 +98,26 @@ settings_load(void)
return;
}
- len = sizeof(short);
- FSRead(pb.ioParam.ioRefNum, &len, &(tsettings.version));
- SetFPos(pb.ioParam.ioRefNum, fsFromStart, 0);
+ rlen = len = sizeof(struct settings);
+ FSRead(pb.ioParam.ioRefNum, &rlen, &tsettings);
- switch (tsettings.version) {
- case 1:
- len = sizeof(struct settings);
- FSRead(pb.ioParam.ioRefNum, &len, &tsettings);
- if (len != sizeof(struct settings))
- warn("Short read of preferences file, may be corrupt");
- break;
- default:
- FSClose(pb.ioParam.ioRefNum);
+ while (tsettings.version < SETTINGS_VERSION) {
+ switch (tsettings.version) {
+ case 1:
+ /* 1->2 added amendhub token, leave blank */
+ break;
+ default:
+ FSClose(pb.ioParam.ioRefNum);
+
+ if (ask("Unknown preferences version (%d), reset?",
+ tsettings.version)) {
+ settings_edit(true);
+ return;
+ } else
+ ExitToShell();
+ }
- if (ask("Unknown preferences version (%d), reset?")) {
- settings_edit(true);
- return;
- } else
- ExitToShell();
+ tsettings.version++;
}
FSClose(pb.ioParam.ioRefNum);
@@ -189,7 +193,7 @@ settings_edit(bool use_defaults)
DialogPtr dlg;
Handle ihandle;
Rect irect;
- size_t size, n, m;
+ size_t size, n, m, slen;
long lval;
bool bval, save;
short hit, itype, ret;
@@ -305,13 +309,25 @@ verify:
switch (s->type) {
case SETTING_STRING:
case SETTING_PASSWORD:
- if (s->min && strlen((char *)stmp) < s->min) {
- warn("%s is too short (minimum %ld)", s->name, s->min);
- goto get_input;
- }
- if (s->max && strlen((char *)stmp) > s->max) {
- warn("%s is too long (maximum %ld)", s->name, s->max);
- goto get_input;
+ slen = strlen((char *)stmp);
+
+ if (slen == 0 && (s->flags & SETTING_FLAG_ALLOW_BLANK)) {
+ /* ok */
+ } else {
+ if (s->min && s->max && s->min == s->max &&
+ slen != s->min) {
+ warn("%s must be %ld character%s", s->name, s->min,
+ s->min == 1 ? "" : "s");
+ goto get_input;
+ }
+ if (s->min && slen < s->min) {
+ warn("%s is too short (minimum %ld)", s->name, s->min);
+ goto get_input;
+ }
+ if (s->max && slen > s->max) {
+ warn("%s is too long (maximum %ld)", s->name, s->max);
+ goto get_input;
+ }
}
if (save) {