This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
magicka/src/settings.c
Dan Cross aacb1000c8 Arrays to vectors.
This is the big push to get rid of the last of the
unadorned dynamic arrays.  Use ptr_vectors for things
like mail conferences etc.

Lots of incidental cleanup along the way.

Signed-off-by: Dan Cross <patchdev@fat-dragon.org>
2018-10-17 13:11:25 +10:00

166 lines
3.9 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "bbs.h"
extern struct bbs_config conf;
void settings_menu(struct user_record *user) {
char buffer[256];
int dosettings = 0;
char c;
char *hash;
int new_arc;
int i;
char *sig;
while (!dosettings) {
struct archiver *arc = ptr_vector_get(&conf.archivers, user->defarchiver - 1);
struct protocol *proto = ptr_vector_get(&conf.protocols, user->defprotocol - 1);
s_printf(get_string(149));
s_printf(get_string(150));
s_printf(get_string(151));
s_printf(get_string(152), user->location);
s_printf(get_string(205), arc->name);
s_printf(get_string(213), proto->name);
s_printf(get_string(215), (user->nodemsgs ? "TRUE" : "FALSE"));
s_printf(get_string(221), (user->codepage ? "UTF-8" : "CP437"));
switch (user->exteditor) {
case 0:
strlcpy(buffer, "NO", sizeof buffer);
break;
case 1:
strlcpy(buffer, "YES", sizeof buffer);
break;
case 2:
strlcpy(buffer, "ASK", sizeof buffer);
break;
}
s_printf(get_string(222), buffer);
s_printf(get_string(235), (user->bwavestyle ? "mo?,tu? ..." : "000-999"));
s_printf(get_string(245));
s_printf(get_string(246), (user->autosig ? "TRUE" : "FALSE"));
s_printf(get_string(153));
s_printf(get_string(154));
c = s_getc();
switch (tolower(c)) {
case 27: {
c = s_getc();
if (c == 91) {
c = s_getc();
}
} break;
case 'p': {
s_printf(get_string(155));
s_readpass(buffer, 16);
hash = hash_sha256(buffer, user->salt);
if (strcmp(hash, user->password) == 0) {
s_printf(get_string(156));
s_readstring(buffer, 16);
if (strlen(buffer) >= 8) {
free(user->password);
free(user->salt);
gen_salt(&user->salt);
user->password = hash_sha256(buffer, user->salt);
save_user(user);
s_printf(get_string(157));
} else {
s_printf(get_string(158));
}
} else {
s_printf(get_string(159));
}
} break;
case 'l': {
s_printf(get_string(160));
s_readstring(buffer, 32);
free(user->location);
user->location = strdup(buffer);
save_user(user);
} break;
case 'a': {
s_printf(get_string(206));
for (i = 0; i < ptr_vector_len(&conf.archivers); i++) {
struct archiver *arc = ptr_vector_get(&conf.archivers, i);
s_printf(get_string(207), i + 1, arc->name);
}
s_printf(get_string(208));
s_readstring(buffer, 5);
new_arc = atoi(buffer);
if (new_arc - 1 < 0 || new_arc > ptr_vector_len(&conf.archivers)) {
break;
} else {
user->defarchiver = new_arc;
save_user(user);
}
} break;
case 'o': {
s_printf(get_string(212));
for (i = 0; i < ptr_vector_len(&conf.protocols); i++) {
struct protocol *proto = ptr_vector_get(&conf.protocols, i);
s_printf(get_string(207), i + 1, proto->name);
}
s_printf(get_string(208));
s_readstring(buffer, 5);
new_arc = atoi(buffer);
if (new_arc - 1 < 0 || new_arc > ptr_vector_len(&conf.protocols)) {
break;
} else {
user->defprotocol = new_arc;
save_user(user);
}
} break;
case 'm': {
user->nodemsgs = !user->nodemsgs;
save_user(user);
} break;
case 'c': {
user->codepage = !user->codepage;
save_user(user);
} break;
case 'e': {
user->exteditor++;
if (user->exteditor == 3) {
user->exteditor = 0;
}
save_user(user);
} break;
case 'b': {
user->bwavepktno = 0;
user->bwavestyle = !user->bwavestyle;
save_user(user);
} break;
case 's': {
// set signature
if (user->signature != NULL) {
free(user->signature);
}
sig = external_editor(user, "No-One", "No-One", NULL, 0, "No-One", "Signature Editor", 0, 1);
if (sig != NULL) {
user->signature = sig;
save_user(user);
}
} break;
case 't': {
user->autosig = !user->autosig;
save_user(user);
} break;
case 'q':
dosettings = 1;
break;
}
}
}