diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp index 7c7088218b5f2773038e5f80dba32b74cff02e39..6ca8cd0a4c783c69496f8f474c23b1ec8b648a3c 100644 --- a/src/sbbs3/atcodes.cpp +++ b/src/sbbs3/atcodes.cpp @@ -712,11 +712,11 @@ const char* sbbs_t::atcode(const char* sp, char* str, size_t maxlen, int* pmode, } if(strcmp(sp, "DATEFMT") == 0) { - return date_format(&cfg); + return date_format(&cfg, str, maxlen); } if(strcmp(sp, "BDATEFMT") == 0 || strcmp(sp, "BIRTHFMT") == 0) { - return birthdate_format(&cfg); + return birthdate_format(&cfg, str, maxlen); } if(strcmp(sp, "GENDERS") == 0) diff --git a/src/sbbs3/date_str.c b/src/sbbs3/date_str.c index 8170c448a12cac0349a34f4eaacd51e3fca36e19..2e0f82951a2546023765a4b1212cf2d6db369a8e 100644 --- a/src/sbbs3/date_str.c +++ b/src/sbbs3/date_str.c @@ -28,16 +28,25 @@ const char *mon[]={"Jan","Feb","Mar","Apr","May","Jun" /****************************************************************************/ /****************************************************************************/ -const char* date_format(scfg_t* cfg) +char* date_format(scfg_t* cfg, char* buf, size_t size) { switch (cfg->sys_date_fmt) { - case DDMMYY: return "DD/MM/YY"; - case MMDDYY: return "MM/DD/YY"; - case YYMMDD: return "YY/MM/DD"; + case DDMMYY: snprintf(buf, size, "DD%cMM%cYY", cfg->sys_date_sep, cfg->sys_date_sep); return buf; + case MMDDYY: snprintf(buf, size, "MM%cDD%cYY", cfg->sys_date_sep, cfg->sys_date_sep); return buf; + case YYMMDD: snprintf(buf, size, "YY%cMM%cDD", cfg->sys_date_sep, cfg->sys_date_sep); return buf; } return "????????"; } +/****************************************************************************/ +/* Assumes buf is at least 9 bytes in size */ +/****************************************************************************/ +char* date_template(scfg_t* cfg, char* buf, size_t size) +{ + snprintf(buf, size, "nn%cnn%cnn", cfg->sys_date_sep, cfg->sys_date_sep); + return buf; +} + #define DECVAL(ch, mul) (DEC_CHAR_TO_INT(ch) * (mul)) /****************************************************************************/ @@ -102,33 +111,41 @@ time32_t dstrtounix(scfg_t* cfg, const char *instr) /****************************************************************************/ char* unixtodstr(scfg_t* cfg, time32_t t, char *str) { - struct tm tm; + struct tm tm = {0}; time_t unix_time=t; - if(!unix_time) - strcpy(str,"00/00/00"); - else { - if(localtime_r(&unix_time,&tm)==NULL) { - strcpy(str,"00/00/00"); - return(str); + if (unix_time != 0) { + if (localtime_r(&unix_time, &tm) != NULL) { + if(tm.tm_mon>11) { /* DOS leap year bug */ + tm.tm_mon=0; + tm.tm_year++; + } + if(tm.tm_mday>31) + tm.tm_mday=1; } - if(tm.tm_mon>11) { /* DOS leap year bug */ - tm.tm_mon=0; - tm.tm_year++; - } - if(tm.tm_mday>31) - tm.tm_mday=1; - if (cfg->sys_date_fmt == YYMMDD) - sprintf(str,"%02u/%02u/%02u" - ,TM_YEAR(tm.tm_year), tm.tm_mon+1, tm.tm_mday); - else if(cfg->sys_date_fmt == DDMMYY) - sprintf(str,"%02u/%02u/%02u",tm.tm_mday,tm.tm_mon+1 - ,TM_YEAR(tm.tm_year)); - else - sprintf(str,"%02u/%02u/%02u",tm.tm_mon+1,tm.tm_mday - ,TM_YEAR(tm.tm_year)); } - return(str); + if (cfg->sys_date_fmt == YYMMDD) + sprintf(str,"%02u%c%02u%c%02u" + ,TM_YEAR(tm.tm_year) + ,cfg->sys_date_sep + ,tm.tm_mon+1 + ,cfg->sys_date_sep + ,tm.tm_mday); + else if(cfg->sys_date_fmt == DDMMYY) + sprintf(str,"%02u%c%02u%c%02u" + ,tm.tm_mday + ,cfg->sys_date_sep + ,tm.tm_mon+1 + ,cfg->sys_date_sep + ,TM_YEAR(tm.tm_year)); + else + sprintf(str,"%02u%c%02u%c%02u" + ,tm.tm_mon+1 + ,cfg->sys_date_sep + ,tm.tm_mday + ,cfg->sys_date_sep + ,TM_YEAR(tm.tm_year)); + return str; } /****************************************************************************/ diff --git a/src/sbbs3/date_str.h b/src/sbbs3/date_str.h index 71b65d1457492cec9c6c572bbda3ba3dc6ce1c45..ad87b45b6dc4ca422d0ded7ae86b83e7e7348157 100644 --- a/src/sbbs3/date_str.h +++ b/src/sbbs3/date_str.h @@ -32,7 +32,8 @@ extern "C" { extern const char* wday[]; /* abbreviated weekday names */ extern const char* mon[]; /* abbreviated month names */ -DLLEXPORT const char* date_format(scfg_t*); +DLLEXPORT char * date_format(scfg_t*, char* buf, size_t); +DLLEXPORT char * date_template(scfg_t*, char* buf, size_t); DLLEXPORT char * zonestr(short zone); DLLEXPORT time32_t dstrtounix(scfg_t*, const char *str); DLLEXPORT char * unixtodstr(scfg_t*, time32_t, char *str); diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index 2eb1a01c5673435713fb13c0ba9be6605e491c0a..df664fe4b3a60ce2acbcb60123cc732ec0b1ae52 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -281,9 +281,9 @@ BOOL sbbs_t::newuser() } } while((cfg.uq&UQ_BIRTH) && online && text[EnterYourBirthday][0]) { - bprintf(text[EnterYourBirthday], birthdate_format(&cfg)); + bprintf(text[EnterYourBirthday], birthdate_format(&cfg, tmp, sizeof tmp)); format_birthdate(&cfg, useron.birth, str, sizeof(str)); - if(gettmplt(str, cfg.sys_date_fmt == YYMMDD ? "nnnn/nn/nn" : "nn/nn/nnnn", K_EDIT) < 10) + if(gettmplt(str, birthdate_template(&cfg, tmp, sizeof tmp), K_EDIT) < 10) continue; int age = getage(&cfg, parse_birthdate(&cfg, str, tmp, sizeof(tmp))); if(age >= 0 && age <= 200) { // TODO: Configurable min/max user age diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c index b07cc7d8a78d2911f9519028b212306944a21679..3ed725834803514a326ed5fd09407ec9d8b41117 100644 --- a/src/sbbs3/scfg/scfgsys.c +++ b/src/sbbs3/scfg/scfgsys.c @@ -1316,7 +1316,18 @@ int edit_sys_datefmt(int page, int total) { int mode = WIN_SAV | WIN_MID; int i = cfg.sys_date_fmt; - char* opts[] = { "MM/DD/YY", "DD/MM/YY", "YY/MM/DD", NULL }; + if(cfg.sys_date_sep == '.') + i += 3; + else if(cfg.sys_date_sep == '_') + i += 6; + else if(cfg.sys_date_sep == ' ') + i += 9; + char* opts[] = { + "MM/DD/YY", "DD/MM/YY", "YY/MM/DD", + "MM.DD.YY", "DD.MM.YY", "YY.MM.DD", + "MM-DD-YY", "DD-MM-YY", "YY-MM-DD", + "MM DD YY", "DD MM YY", "YY MM DD", + NULL }; uifc.helpbuf= "`Date Display Format:`\n" "\n" @@ -1324,13 +1335,24 @@ int edit_sys_datefmt(int page, int total) "U.S. date format of month first, choose `MM/DD/YY`. If you prefer the\n" "European traditional date format of day first, choose `DD/MM/YY`.\n" "If you and your users would prefer year first, choose `YY/MM/DD`.\n" + "\n" + "Different date value separators are also supported.\n"; ; if(page) mode = wiz_help(page, total, uifc.helpbuf); - i=uifc.list(mode,0,10,0,&i,0 + i=uifc.list(mode,0,00,0,&i,0 ,"Date Display Format", opts); - if(i >= 0) - cfg.sys_date_fmt = i; + if (i < 0) + return i; + cfg.sys_date_fmt = i % 3; + if (i < 3) + cfg.sys_date_sep = '/'; + else if(i < 6) + cfg.sys_date_sep = '.'; + else if(i < 9) + cfg.sys_date_sep = '-'; + else + cfg.sys_date_sep = ' '; return i; } @@ -1655,7 +1677,7 @@ void sys_cfg(void) snprintf(opt[i++],MAX_OPLN,"%-20s%s %s","Local Time Zone" ,smb_zonestr(cfg.sys_timezone,NULL) ,SMB_TZ_HAS_DST(cfg.sys_timezone) && cfg.sys_misc&SM_AUTO_DST ? "(Auto-DST)" : ""); - snprintf(opt[i++],MAX_OPLN,"%-20s%s","Local Date Format", date_format(&cfg)); + snprintf(opt[i++],MAX_OPLN,"%-20s%s","Local Date Format", date_format(&cfg, str, sizeof str)); snprintf(opt[i++],MAX_OPLN,"%-20s%s","Operator",cfg.sys_op); strcpy(opt[i++],"Notifications..."); diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h index 6383895d6ef6f6ed70ed611400ecffc1e54f9ff0..16bbedda7040f9d10034da6718d04ee28fb703c5 100644 --- a/src/sbbs3/scfgdefs.h +++ b/src/sbbs3/scfgdefs.h @@ -463,6 +463,7 @@ typedef struct char sys_location[41]; /* System Location */ int16_t sys_timezone; /* Time Zone of BBS */ enum date_fmt sys_date_fmt; + char sys_date_sep; char sys_daily[LEN_CMD+1]; /* Daily event */ char sys_logon[LEN_CMD+1]; /* Logon event */ char sys_logout[LEN_CMD+1]; /* Logoff event */ diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index 75774bb42cfb6830dde23d50599a2158d8e9be33..5752c03ddc6ace44a24bd26d2aadb2bc501c4fe1 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -103,6 +103,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen) cfg->sys_timezone = iniGetInt16(ini, ROOT_SECTION, "timezone", 0); cfg->sys_misc = iniGetUInteger(ini, ROOT_SECTION, "settings", 0); cfg->sys_date_fmt = iniGetInteger(ini, ROOT_SECTION, "date_fmt", cfg->sys_misc & SM_EURODATE ? DDMMYY : MMDDYY); + cfg->sys_date_sep = *iniGetString(ini, NULL, "date_sep", "/", value); cfg->sys_login = iniGetUInteger(ini, ROOT_SECTION, "login", 0); cfg->sys_pwdays = iniGetInteger(ini, ROOT_SECTION, "pwdays", 0); cfg->sys_deldays = iniGetInteger(ini, ROOT_SECTION, "deldays", 0); diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c index 47a993c9be6b7e24fe5218ecfe78afc2bb113297..5a32cacbdeae50457252ad6cb3eff78fdc8e45df 100644 --- a/src/sbbs3/scfgsave.c +++ b/src/sbbs3/scfgsave.c @@ -123,6 +123,8 @@ BOOL write_main_cfg(scfg_t* cfg) iniSetInt16(&ini, ROOT_SECTION, "timezone", cfg->sys_timezone, NULL); iniSetHexInt(&ini, ROOT_SECTION, "settings", cfg->sys_misc, NULL); iniSetUInteger(&ini, ROOT_SECTION, "date_fmt", cfg->sys_date_fmt, NULL); + SAFEPRINTF(tmp, "%c", cfg->sys_date_sep); + iniSetString(&ini, ROOT_SECTION, "date_sep", tmp, NULL); iniSetHexInt(&ini, ROOT_SECTION, "login", cfg->sys_login, NULL); iniSetUInteger(&ini, ROOT_SECTION, "lastnode", cfg->sys_lastnode, NULL); iniSetUInteger(&ini, ROOT_SECTION, "pwdays", cfg->sys_pwdays, NULL); diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index be3c246ce42614cfc18a0f99f828da303368afa6..c1aad034d7a91237924e6e0ff1ad3b2c43a87a7f 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -934,31 +934,37 @@ int getbirthday(scfg_t* cfg, const char* birth) } // Always returns string in MM/DD/YY format -char* getbirthmmddyy(scfg_t* cfg, const char* birth, char* buf, size_t max) +char* getbirthmmddyy(scfg_t* cfg, char sep, const char* birth, char* buf, size_t max) { - safe_snprintf(buf, max, "%02u/%02u/%02u" + safe_snprintf(buf, max, "%02u%c%02u%c%02u" , getbirthmonth(cfg, birth) + , sep , getbirthday(cfg, birth) + , sep , getbirthyear(birth) % 100); return buf; } // Always returns string in DD/MM/YY format -char* getbirthddmmyy(scfg_t* cfg, const char* birth, char* buf, size_t max) +char* getbirthddmmyy(scfg_t* cfg, char sep, const char* birth, char* buf, size_t max) { - safe_snprintf(buf, max, "%02u/%02u/%02u" + safe_snprintf(buf, max, "%02u%c%02u%c%02u" , getbirthday(cfg, birth) + , sep , getbirthmonth(cfg, birth) + , sep , getbirthyear(birth) % 100); return buf; } // Always returns string in YY/MM/DD format -char* getbirthyymmdd(scfg_t* cfg, const char* birth, char* buf, size_t max) +char* getbirthyymmdd(scfg_t* cfg, char sep, const char* birth, char* buf, size_t max) { - safe_snprintf(buf, max, "%02u/%02u/%02u" + safe_snprintf(buf, max, "%02u%c%02u%c%02u" , getbirthyear(birth) % 100 + , sep , getbirthmonth(cfg, birth) + , sep , getbirthday(cfg, birth)); return buf; } @@ -966,11 +972,11 @@ char* getbirthyymmdd(scfg_t* cfg, const char* birth, char* buf, size_t max) char* getbirthdstr(scfg_t* cfg, const char* birth, char* buf, size_t max) { if(cfg->sys_date_fmt == YYMMDD) - getbirthyymmdd(cfg, birth, buf, max); + getbirthyymmdd(cfg, cfg->sys_date_sep, birth, buf, max); else if(cfg->sys_date_fmt == DDMMYY) - getbirthddmmyy(cfg, birth, buf, max); + getbirthddmmyy(cfg, cfg->sys_date_sep, birth, buf, max); else - getbirthmmddyy(cfg, birth, buf, max); + getbirthmmddyy(cfg, cfg->sys_date_sep, birth, buf, max); return buf; } @@ -1026,28 +1032,53 @@ char* format_birthdate(scfg_t* cfg, const char* birthdate, char* out, size_t max *out = '\0'; if(*birthdate) { if (cfg->sys_date_fmt == YYMMDD) - safe_snprintf(out, maxlen, "%04u/%02u/%02u" - , getbirthyear(birthdate), getbirthmonth(cfg, birthdate), getbirthday(cfg, birthdate)); + safe_snprintf(out, maxlen, "%04u%c%02u%c%02u" + , getbirthyear(birthdate) + , cfg->sys_date_sep + , getbirthmonth(cfg, birthdate) + , cfg->sys_date_sep + , getbirthday(cfg, birthdate)); else if (cfg->sys_date_fmt == DDMMYY) - safe_snprintf(out, maxlen, "%02u/%02u/%04u" - ,getbirthday(cfg, birthdate), getbirthmonth(cfg, birthdate), getbirthyear(birthdate)); + safe_snprintf(out, maxlen, "%02u%c%02u%c%04u" + , getbirthday(cfg, birthdate) + , cfg->sys_date_sep + , getbirthmonth(cfg, birthdate) + , cfg->sys_date_sep + , getbirthyear(birthdate)); else - safe_snprintf(out, maxlen, "%02u/%02u/%04u" - ,getbirthmonth(cfg, birthdate), getbirthday(cfg, birthdate), getbirthyear(birthdate)); + safe_snprintf(out, maxlen, "%02u%c%02u%c%04u" + , getbirthmonth(cfg, birthdate) + , cfg->sys_date_sep + , getbirthday(cfg, birthdate) + , cfg->sys_date_sep + , getbirthyear(birthdate)); } return out; } -const char* birthdate_format(scfg_t* cfg) +/****************************************************************************/ +/****************************************************************************/ +char* birthdate_format(scfg_t* cfg, char* buf, size_t size) { switch (cfg->sys_date_fmt) { - case MMDDYY: return "MM/DD/YYYY"; - case DDMMYY: return "DD/MM/YYYY"; - case YYMMDD: return "YYYY/MM/DD"; + case MMDDYY: snprintf(buf, size, "MM%cDD%cYYYY", cfg->sys_date_sep, cfg->sys_date_sep); return buf; + case DDMMYY: snprintf(buf, size, "DD%cMM%cYYYY", cfg->sys_date_sep, cfg->sys_date_sep); return buf; + case YYMMDD: snprintf(buf, size, "YYYY%cMM%cDD", cfg->sys_date_sep, cfg->sys_date_sep); return buf; } return "??????????"; } +/****************************************************************************/ +/****************************************************************************/ +char* birthdate_template(scfg_t* cfg, char* buf, size_t size) +{ + if (cfg->sys_date_fmt == YYMMDD) + snprintf(buf, size, "nnnn%cnn%cnn", cfg->sys_date_sep, cfg->sys_date_sep); + else + snprintf(buf, size, "nn%cnn%cnnnn", cfg->sys_date_sep, cfg->sys_date_sep); + return buf; +} + /****************************************************************************/ /****************************************************************************/ int opennodedat(scfg_t* cfg) diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h index dd25df51c0fbf66d14b591a9db186d5a570d3879..62f038979427a7487764a7e5ef856a3fe44ab274 100644 --- a/src/sbbs3/userdat.h +++ b/src/sbbs3/userdat.h @@ -63,12 +63,13 @@ DLLEXPORT int getbirthmonth(scfg_t*, const char* birthdate); DLLEXPORT int getbirthday(scfg_t*, const char* birthdate); DLLEXPORT int getbirthyear(const char* birthdate); DLLEXPORT char* getbirthdstr(scfg_t*, const char* birthdate, char* buf, size_t); -DLLEXPORT char* getbirthmmddyy(scfg_t*, const char* birthdate, char* buf, size_t); -DLLEXPORT char* getbirthddmmyy(scfg_t*, const char* birthdate, char* buf, size_t); -DLLEXPORT char* getbirthyymmdd(scfg_t*, const char* birthdate, char* buf, size_t); +DLLEXPORT char* getbirthmmddyy(scfg_t*, char sep, const char* birthdate, char* buf, size_t); +DLLEXPORT char* getbirthddmmyy(scfg_t*, char sep, const char* birthdate, char* buf, size_t); +DLLEXPORT char* getbirthyymmdd(scfg_t*, char sep, const char* birthdate, char* buf, size_t); DLLEXPORT char* parse_birthdate(scfg_t*, const char* birthdate, char* out, size_t); DLLEXPORT char* format_birthdate(scfg_t*, const char* birthdate, char* out, size_t); -DLLEXPORT const char* birthdate_format(scfg_t*); +DLLEXPORT char* birthdate_format(scfg_t*, char* buf, size_t); +DLLEXPORT char* birthdate_template(scfg_t*, char* buf, size_t); DLLEXPORT char* username(scfg_t*, int usernumber, char * str); DLLEXPORT char* usermailaddr(scfg_t*, char* addr, const char* name); DLLEXPORT void smtp_netmailaddr(scfg_t*, smbmsg_t*, char* name, size_t namelen, char* addr, size_t addrlen); diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp index 89ab11c6be1a1096221319869e1b6d2d9b88b9f0..28ddab921b00e2b4b5535f9b89b130c272b78675 100644 --- a/src/sbbs3/useredit.cpp +++ b/src/sbbs3/useredit.cpp @@ -183,9 +183,9 @@ void sbbs_t::useredit(int usernumber) putuserstr(user.number, USER_HANDLE, user.handle); break; case 'B': - bprintf(text[EnterYourBirthday], birthdate_format(&cfg)); + bprintf(text[EnterYourBirthday], birthdate_format(&cfg, tmp, sizeof tmp)); format_birthdate(&cfg, user.birth, str, sizeof(str)); - if(gettmplt(str, "nn/nn/nnnn", kmode) == 10) { + if(gettmplt(str, birthdate_template(&cfg, tmp, sizeof tmp), kmode) == 10) { parse_birthdate(&cfg, str, user.birth, sizeof(user.birth)); putuserstr(user.number, USER_BIRTH, user.birth); } @@ -342,28 +342,28 @@ void sbbs_t::useredit(int usernumber) case 'K': /* date changes */ bputs(text[UeditLastOn]); unixtodstr(&cfg,user.laston,str); - gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT); + gettmplt(str, date_template(&cfg, tmp, sizeof tmp),K_LINE|K_EDIT); if(sys_status&SS_ABORT) break; user.laston=dstrtounix(&cfg,str); putuserdatetime(user.number, USER_LASTON, user.laston); bputs(text[UeditFirstOn]); unixtodstr(&cfg,user.firston,str); - gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT); + gettmplt(str, date_template(&cfg, tmp, sizeof tmp),K_LINE|K_EDIT); if(sys_status&SS_ABORT) break; user.firston=dstrtounix(&cfg,str); putuserdatetime(user.number, USER_FIRSTON, user.firston); bputs(text[UeditExpire]); unixtodstr(&cfg,user.expire,str); - gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT); + gettmplt(str, date_template(&cfg, tmp, sizeof tmp),K_LINE|K_EDIT); if(sys_status&SS_ABORT) break; user.expire=dstrtounix(&cfg,str); putuserdatetime(user.number, USER_EXPIRE, user.expire); bputs(text[UeditPwModDate]); unixtodstr(&cfg,user.pwmod,str); - gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT); + gettmplt(str, date_template(&cfg, tmp, sizeof tmp),K_LINE|K_EDIT); if(sys_status&SS_ABORT) break; user.pwmod=dstrtounix(&cfg,str); diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index 2f394c9878a1980d5e30a7de21fbd59a3084416d..0dfa4f5ad4b8566c743e10200b6b16db326f3d29 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -213,7 +213,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle safe_snprintf(str, sizeof(str), "%u\n%u\n%s\n%c\n%u\n%s\n" ,useron.level /* User main level */ ,useron.level /* User transfer level */ - ,getbirthmmddyy(&cfg, useron.birth, tmp, sizeof(tmp)) /* User birthday (MM/DD/YY) */ + ,getbirthmmddyy(&cfg, '/', useron.birth, tmp, sizeof(tmp)) /* User birthday (MM/DD/YY) */ ,useron.sex ? useron.sex : '?' /* User sex (M/F) */ ,useron.number /* User number */ ,useron.phone); /* User phone number */ @@ -433,7 +433,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle "\n%s\n%02d:%02d\n%c\n" ,0 /* 30: Kbytes downloaded today */ ,user_available_credits(&useron)/1024UL /* 31: Max Kbytes to download today */ - ,getbirthmmddyy(&cfg, useron.birth, tmp, sizeof(tmp)) /* 32: User birthday (MM/DD/YY) */ + ,getbirthmmddyy(&cfg, '/', useron.birth, tmp, sizeof(tmp)) /* 32: User birthday (MM/DD/YY) */ ,node_dir /* 33: Path to MAIN directory */ ,data_dir /* 34: Path to GEN directory */ ,cfg.sys_op /* 35: Sysop name */ @@ -681,7 +681,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle ,8 /* Data bits */ ,online==ON_LOCAL?"LOCAL":"REMOTE" /* Online local or remote */ ,cfg.com_port /* COMx port */ - ,getbirthmmddyy(&cfg, useron.birth, tmp, sizeof(tmp)) /* User birthday (MM/DD/YY) */ + ,getbirthmmddyy(&cfg, '/', useron.birth, tmp, sizeof(tmp)) /* User birthday (MM/DD/YY) */ ,dte_rate /* DTE rate */ ,"FALSE" /* Already connected? */ ,"Normal Connection"); /* Normal or ARQ connect */ @@ -939,7 +939,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle ,MIN((tleft/60), INT16_MAX) /* Minutes left */ ,useron.phone /* User's phone number */ ,useron.location /* User's city and state */ - ,getbirthmmddyy(&cfg, useron.birth, tmp, sizeof(tmp)) /* User's birth date (MM/DD/YY) */ + ,getbirthmmddyy(&cfg, '/', useron.birth, tmp, sizeof(tmp)) /* User's birth date (MM/DD/YY) */ ); lfexpand(str,misc); fwrite(str, strlen(str), 1, fp);