diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 793b35d4cf10dbd98089c7f62e0d3ff83404e25c..46752210c4dcaf9bf9a5f63624c4348ea1e7abf4 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -355,12 +355,12 @@ enum { /* Values for xtrn_t.type */ XTRN_NONE /* No data file needed */ ,XTRN_SBBS /* Synchronet external */ ,XTRN_WWIV /* WWIV external */ - ,XTRN_GAP /* Gap door */ + ,XTRN_DOOR_SYS /* 52-line door.sys file */ ,XTRN_RBBS /* RBBS, QBBS, or Remote Access */ ,XTRN_WILDCAT /* Wildcat */ ,XTRN_PCBOARD /* PCBoard */ ,XTRN_SPITFIRE /* SpitFire */ - ,XTRN_UTI /* UTI Doors - MegaMail */ + ,XTRN_GAP /* 31-line doors.sys file */ ,XTRN_SR /* Solar Realms */ ,XTRN_RBBS1 /* DORINFO1.DEF always */ ,XTRN_TRIBBS /* TRIBBS.SYS */ diff --git a/src/sbbs3/scfg/scfgxtrn.c b/src/sbbs3/scfg/scfgxtrn.c index b6f4d2bf98dae300609295c882f108f48e0e85aa..10e5125e5832a9ef65d5795f4fd8005c28b98f78 100644 --- a/src/sbbs3/scfg/scfgxtrn.c +++ b/src/sbbs3/scfg/scfgxtrn.c @@ -216,92 +216,52 @@ static char* mdaystr(long mdays) static char* dropfile(int type, ulong misc) { static char str[128]; - char fname[64]=""; switch(type) { case XTRN_SBBS: - strcpy(fname,"XTRN.DAT"); + strcpy(str,"XTRN.DAT"); break; case XTRN_WWIV: - strcpy(fname,"CHAIN.TXT"); + strcpy(str,"CHAIN.TXT"); break; case XTRN_GAP: - strcpy(fname,"DOOR.SYS"); + strcpy(str,"DOOR.SYS (31 lines)"); break; - case XTRN_RBBS: - strcpy(fname,"DORINFO#.DEF"); - break; - case XTRN_RBBS1: - strcpy(fname,"DORINFO1.DEF"); - break; - case XTRN_WILDCAT: - strcpy(fname,"CALLINFO.BBS"); - break; - case XTRN_PCBOARD: - strcpy(fname,"PCBOARD.SYS"); - break; - case XTRN_SPITFIRE: - strcpy(fname,"SFDOORS.DAT"); - break; - case XTRN_UTI: - strcpy(fname,"UTIDOOR.TXT"); - break; - case XTRN_SR: - strcpy(fname,"DOORFILE.SR"); - break; - case XTRN_TRIBBS: - strcpy(fname,"TRIBBS.SYS"); - break; - case XTRN_DOOR32: - strcpy(fname,"DOOR32.SYS"); - break; - } - - if(misc&XTRN_LWRCASE) - strlwr(fname); - - switch(type) { - case XTRN_SBBS: - sprintf(str,"%-15s %s","Synchronet",fname); - break; - case XTRN_WWIV: - sprintf(str,"%-15s %s","WWIV",fname); - break; - case XTRN_GAP: - sprintf(str,"%-15s %s","GAP",fname); + case XTRN_DOOR_SYS: + strcpy(str,"DOOR.SYS (52 lines)"); break; case XTRN_RBBS: - sprintf(str,"%-15s %s","RBBS/QuickBBS",fname); + strcpy(str,"DORINFO#.DEF"); break; case XTRN_RBBS1: - sprintf(str,"%-15s %s","RBBS/QuickBBS",fname); + strcpy(str,"DORINFO1.DEF"); break; case XTRN_WILDCAT: - sprintf(str,"%-15s %s","Wildcat",fname); + strcpy(str,"CALLINFO.BBS"); break; case XTRN_PCBOARD: - sprintf(str,"%-15s %s","PCBoard",fname); + strcpy(str,"PCBOARD.SYS"); break; case XTRN_SPITFIRE: - sprintf(str,"%-15s %s","SpitFire",fname); - break; - case XTRN_UTI: - sprintf(str,"%-15s %s","MegaMail",fname); + strcpy(str,"SFDOORS.DAT"); break; case XTRN_SR: - sprintf(str,"%-15s %s","Solar Realms",fname); + strcpy(str,"DOORFILE.SR"); break; case XTRN_TRIBBS: - sprintf(str,"%-15s %s","TriBBS",fname); + strcpy(str,"TRIBBS.SYS"); break; case XTRN_DOOR32: - sprintf(str,"%-15s %s","Mystic",fname); + strcpy(str,"DOOR32.SYS"); break; default: strcpy(str,"None"); - break; + return str; } - return(str); + + if(misc&XTRN_LWRCASE) + strlwr(str); + return str; } void xprogs_cfg() @@ -1225,7 +1185,7 @@ void xtrn_cfg(int section) snprintf(opt[k++],MAX_OPLN,"%-27.27s%s","Disable Local Display" ,cfg.xtrn[i]->misc&XTRN_NODISPLAY ? "Yes" : "No"); snprintf(opt[k++],MAX_OPLN,"%-23.23s%-4s%s","BBS Drop File Type" - ,cfg.xtrn[i]->misc&REALNAME ? "(R)":nulstr + ,(cfg.xtrn[i]->type != XTRN_NONE && (cfg.xtrn[i]->misc&REALNAME)) ? "(R)":nulstr ,dropfile(cfg.xtrn[i]->type,cfg.xtrn[i]->misc)); snprintf(opt[k++],MAX_OPLN,"%-27.27s%s","Place Drop File In" ,cfg.xtrn[i]->misc&STARTUPDIR ? "Start-Up Directory":cfg.xtrn[i]->misc&XTRN_TEMP_DIR ? "Temp Directory" : "Node Directory"); @@ -1518,12 +1478,12 @@ void xtrn_cfg(int section) strcpy(opt[k++],"None"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","Synchronet","XTRN.DAT"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","WWIV","CHAIN.TXT"); - snprintf(opt[k++], MAX_OPLN, "%-15s %s","GAP","DOOR.SYS"); + snprintf(opt[k++], MAX_OPLN, "%-15s %s","GAP (extended)","DOOR.SYS (52 lines)"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","RBBS/QuickBBS","DORINFO#.DEF"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","Wildcat","CALLINFO.BBS"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","PCBoard","PCBOARD.SYS"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","SpitFire","SFDOORS.DAT"); - snprintf(opt[k++], MAX_OPLN, "%-15s %s","MegaMail","UTIDOOR.TXT"); + snprintf(opt[k++], MAX_OPLN, "%-15s %s","GAP (original)","DOOR.SYS (31 lines)"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","Solar Realms","DOORFILE.SR"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","RBBS/QuickBBS","DORINFO1.DEF"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","TriBBS","TRIBBS.SYS"); @@ -1547,9 +1507,15 @@ void xtrn_cfg(int section) " Wildcat! 2.x CALLINFO.BBS\n" " SpitFire SFDOORS.DAT\n" " TriBBS TRIBBS.SYS\n" - " MegaMail UTIDOOR.TXT\n" " Solar Realms DOORFILE.SR\n" " Synchronet XTRN.DAT MODUSER.DAT\n" + "\n" + "The drop file format compatible with the largest number of online\n" + "programs (e.g. door games) written for MS-DOS based BBSes is the\n" + "`DOOR.SYS` file format. Synchronet supports both the original (GAP)\n" + "31-line DOOR.SYS file format and the extended 52-line format.\n" + "If you encounter door compatibility issues with the original 32-line\n" + "format, try using the 52-line format (or vice versa).\n" ; k=uifc.list(WIN_MID|WIN_ACT,0,0,0,&k,0 ,"BBS Drop File Type",opt); @@ -2263,12 +2229,12 @@ void xedit_cfg() strcpy(opt[k++],"None"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","Synchronet","XTRN.DAT"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","WWIV","CHAIN.TXT"); - snprintf(opt[k++], MAX_OPLN, "%-15s %s","GAP","DOOR.SYS"); + snprintf(opt[k++], MAX_OPLN, "%-15s %s","GAP (extended)","DOOR.SYS (52 lines)"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","RBBS/QuickBBS","DORINFO#.DEF"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","Wildcat","CALLINFO.BBS"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","PCBoard","PCBOARD.SYS"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","SpitFire","SFDOORS.DAT"); - snprintf(opt[k++], MAX_OPLN, "%-15s %s","MegaMail","UTIDOOR.TXT"); + snprintf(opt[k++], MAX_OPLN, "%-15s %s","GAP (original)","DOOR.SYS (31 lines)"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","Solar Realms","DOORFILE.SR"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","RBBS/QuickBBS","DORINFO1.DEF"); snprintf(opt[k++], MAX_OPLN, "%-15s %s","TriBBS","TRIBBS.SYS"); diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index 7d9883fc32bd327f7dd9139a07226b8ddf96889a..74dc757a1b4e18dd7960c62ea5fdce35fdbf9682 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -352,7 +352,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle fclose(fp); } - else if(type==XTRN_GAP) { /* Gap DOOR.SYS File */ + else if(type==XTRN_GAP || type==XTRN_DOOR_SYS) { /* Gap DOOR.SYS File */ SAFECOPY(tmp,"DOOR.SYS"); if(misc&XTRN_LWRCASE) strlwr(tmp); @@ -429,52 +429,58 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle t = getnextevent(&cfg, NULL); localtime_r(&t, &tm); - safe_snprintf(str, sizeof(str), "%u\n%" PRIu64 "\n%s\n%s\n%s\n%s" - "\n%s\n%02d:%02d\n%c\n" + safe_snprintf(str, sizeof(str), "%u\n%" PRIu64 "\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) */ - ,node_dir /* 33: Path to MAIN directory */ - ,data_dir /* 34: Path to GEN directory */ - ,cfg.sys_op /* 35: Sysop name */ - ,useron.handle /* 36: Alias name */ - ,tm.tm_hour /* 37: Event time HH:MM */ - ,tm.tm_min - ,'Y'); /* 38: Error correcting connection */ + ); lfexpand(str,misc); fwrite(str,strlen(str),1,fp); - localtime_r(&ns_time,&tm); - safe_snprintf(str, sizeof(str), "%c\n%c\n%u\n%" PRIu32 "\n%02d/%02d/%02d\n" - ,(term & (NO_EXASCII|ANSI|COLOR)) == ANSI - ? 'Y':'N' /* 39: ANSI supported but NG mode */ - ,'Y' /* 40: Use record locking */ - ,cfg.color[clr_external] /* 41: BBS default color */ - ,MIN(useron.min, INT16_MAX) /* 42: Time credits in minutes */ - ,TM_MONTH(tm.tm_mon) /* 43: File new-scan date */ - ,tm.tm_mday - ,TM_YEAR(tm.tm_year)); - lfexpand(str,misc); - fwrite(str,strlen(str),1,fp); + if(type == XTRN_DOOR_SYS) { // 52-line variant + safe_snprintf(str, sizeof(str), "%s\n%s\n%s\n%s" + "\n%s\n%02d:%02d\n%c\n" + ,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 */ + ,useron.handle /* 36: Alias name */ + ,tm.tm_hour /* 37: Event time HH:MM */ + ,tm.tm_min + ,'Y'); /* 38: Error correcting connection */ + lfexpand(str,misc); + fwrite(str,strlen(str),1,fp); - localtime_r(&logontime,&tm); - localtime32(&useron.laston,&tl); - safe_snprintf(str, sizeof(str), "%02d:%02d\n%02d:%02d\n%u\n%u\n%" PRIu64 "\n" - "%" PRIu64 "\n%s\n%u\n%u\n" - ,tm.tm_hour /* 44: Time of this call */ - ,tm.tm_min - ,tl.tm_hour /* 45: Time of last call */ - ,tl.tm_min - ,999 /* 46: Max daily files available */ - ,0 /* 47: Files downloaded so far today */ - ,useron.ulb/1024UL /* 48: Total Kbytes uploaded */ - ,useron.dlb/1024UL /* 49: Total Kbytes downloaded */ - ,useron.comment /* 50: User comment */ - ,0 /* 51: Total doors opened */ - ,MIN(useron.posts, INT16_MAX)); /* 52: User message left */ - lfexpand(str,misc); - fwrite(str,strlen(str),1,fp); + localtime_r(&ns_time,&tm); + safe_snprintf(str, sizeof(str), "%c\n%c\n%u\n%" PRIu32 "\n%02d/%02d/%02d\n" + ,(term & (NO_EXASCII|ANSI|COLOR)) == ANSI + ? 'Y':'N' /* 39: ANSI supported but NG mode */ + ,'Y' /* 40: Use record locking */ + ,cfg.color[clr_external] /* 41: BBS default color */ + ,MIN(useron.min, INT16_MAX) /* 42: Time credits in minutes */ + ,TM_MONTH(tm.tm_mon) /* 43: File new-scan date */ + ,tm.tm_mday + ,TM_YEAR(tm.tm_year)); + lfexpand(str,misc); + fwrite(str,strlen(str),1,fp); + localtime_r(&logontime,&tm); + localtime32(&useron.laston,&tl); + safe_snprintf(str, sizeof(str), "%02d:%02d\n%02d:%02d\n%u\n%u\n%" PRIu64 "\n" + "%" PRIu64 "\n%s\n%u\n%u\n" + ,tm.tm_hour /* 44: Time of this call */ + ,tm.tm_min + ,tl.tm_hour /* 45: Time of last call */ + ,tl.tm_min + ,999 /* 46: Max daily files available */ + ,0 /* 47: Files downloaded so far today */ + ,useron.ulb/1024UL /* 48: Total Kbytes uploaded */ + ,useron.dlb/1024UL /* 49: Total Kbytes downloaded */ + ,useron.comment /* 50: User comment */ + ,0 /* 51: Total doors opened */ + ,MIN(useron.posts, INT16_MAX)); /* 52: User message left */ + lfexpand(str,misc); + fwrite(str,strlen(str),1,fp); + } fclose(fp); } @@ -862,31 +868,6 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, uint tle fclose(fp); } - else if(type==XTRN_UTI) { /* UTI v2.1 - UTIDOOR.TXT */ - SAFECOPY(tmp,"UTIDOOR.TXT"); - if(misc&XTRN_LWRCASE) - strlwr(tmp); - SAFEPRINTF2(str,"%s%s",dropdir,tmp); - (void)removecase(str); - if((fp = fnopen(NULL,str,O_WRONLY|O_CREAT|O_TRUNC|O_TEXT)) == NULL) { - errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC|O_TEXT); - return; - } - - SAFECOPY(tmp,name); - strupr(tmp); - safe_snprintf(str, sizeof(str), "%s\n%u\n%u\n%u\n%u\n" - ,tmp /* User name */ - ,cur_rate /* Actual BPS rate */ - ,online==ON_LOCAL ? 0: cfg.com_port /* COM Port */ - ,dte_rate /* DTE rate */ - ,tleft); /* Time left in sec */ - lfexpand(str,misc); - fwrite(str, strlen(str), 1, fp); - - fclose(fp); - } - else if(type==XTRN_SR) { /* Solar Realms DOORFILE.SR */ SAFECOPY(tmp,"DOORFILE.SR"); if(misc&XTRN_LWRCASE) @@ -1029,7 +1010,7 @@ void sbbs_t::moduserdat(uint xtrnnum) } return; } - else if(cfg.xtrn[xtrnnum]->type==XTRN_GAP) { + else if(cfg.xtrn[xtrnnum]->type == XTRN_GAP || cfg.xtrn[xtrnnum]->type == XTRN_DOOR_SYS) { SAFEPRINTF(path,"%sDOOR.SYS", xtrn_dropdir(cfg.xtrn[xtrnnum], startup, sizeof(startup))); fexistcase(path); if((stream=fopen(path,"rb"))!=NULL) { @@ -1083,12 +1064,14 @@ void sbbs_t::moduserdat(uint xtrnnum) } } - for(;i<42;i++) - if(!fgets(str,128,stream)) - break; - if(i==42 && IS_DIGIT(str[0])) { /* Time Credits in Minutes */ - useron.min=atol(str); - putuserdec32(useron.number, USER_MIN, useron.min); + if(cfg.xtrn[xtrnnum]->type == XTRN_DOOR_SYS) { + for(;i<42;i++) + if(!fgets(str,128,stream)) + break; + if(i==42 && IS_DIGIT(str[0])) { /* Time Credits in Minutes */ + useron.min=atol(str); + putuserdec32(useron.number, USER_MIN, useron.min); + } } fclose(stream); @@ -1328,7 +1311,7 @@ bool sbbs_t::exec_xtrn(uint xtrnnum, bool user_event) case XTRN_WWIV: SAFECOPY(name,"CHAIN.TXT"); break; - case XTRN_GAP: + case XTRN_DOOR_SYS: SAFECOPY(name,"DOOR.SYS"); break; case XTRN_RBBS: @@ -1343,9 +1326,6 @@ bool sbbs_t::exec_xtrn(uint xtrnnum, bool user_event) case XTRN_PCBOARD: SAFECOPY(name,"PCBOARD.SYS"); break; - case XTRN_UTI: - SAFECOPY(name,"UTIDOOR.TXT"); - break; case XTRN_SR: SAFECOPY(name,"DOORFILE.SR"); break;