AmendHub

Download:

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) {