--- sbbs/sbbs2/smm/smmcfg.c 2018/04/24 16:37:52 1.1 +++ sbbs/sbbs2/smm/smmcfg.c 2018/04/24 16:38:57 1.1.1.2 @@ -1,616 +1,616 @@ -/* SMMCFG.C */ - -/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ - -#include -#include -#include "gen_defs.h" -#include "smmdefs.h" -#include "smmvars.c" - -char **opt; - -void bail(int code); -void main(); -char fexist(char *filespec); - -unsigned _stklen=16000; /* Set stack size in code, not header */ - -void bail(int code) -{ - -if(code) - getch(); -uifcbail(); -exit(code); -} - -void main() -{ - char str[256]; - int i,j,k,file,dflt,sysop_level; - FILE *stream; - -savnum=0; -if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) { - cputs("memory allocation error\r\n"); - bail(1); } -for(i=0;i<300;i++) - if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) { - cputs("memory allocation error\r\n"); - bail(1); } -uifcini(); -sprintf(str,"Synchronet Match Maker v%s",SMM_VER); -uscrn(str); - -if((file=open("SMM.CFG",O_RDONLY|O_BINARY|O_DENYNONE))==-1) { - textattr(LIGHTGRAY); - clrscr(); - lprintf("Error opening SMM.CFG\r\n"); - bail(1); } -if((stream=fdopen(file,"rb"))==NULL) { - textattr(LIGHTGRAY); - clrscr(); - lprintf("Error fdopen SMM.CFG\r\n"); - bail(1); } - -str[0]=0; -fgets(str,128,stream); -purity_age=atoi(str); -str[0]=0; -fgets(str,128,stream); -min_age=atoi(str); -str[0]=0; -fgets(str,128,stream); -min_level=atoi(str); - -req_flags1[0]=0; -fgets(req_flags1,128,stream); -req_flags1[27]=0; -truncsp(req_flags1); - -req_flags2[0]=0; -fgets(req_flags2,128,stream); -req_flags2[27]=0; -truncsp(req_flags2); - -req_flags3[0]=0; -fgets(req_flags3,128,stream); -req_flags3[27]=0; -truncsp(req_flags3); - -req_flags4[0]=0; -fgets(req_flags4,128,stream); -req_flags4[27]=0; -truncsp(req_flags4); - -str[0]=0; -fgets(str,128,stream); -profile_cdt=atol(str); -str[0]=0; -fgets(str,128,stream); -telegram_cdt=atol(str); -str[0]=0; -fgets(str,128,stream); -auto_update=atoi(str); -str[0]=0; -fgets(str,128,stream); -notify_user=atoi(str); - -str[0]=0; -fgets(str,128,stream); // regnum - -str[0]=0; -fgets(str,128,stream); -telegram_level=atoi(str); - -str[0]=0; -fgets(str,128,stream); -que_level=atoi(str); - -str[0]=0; -fgets(str,128,stream); -wall_level=atoi(str); - -str[0]=0; -fgets(str,128,stream); -wall_cdt=atol(str); - -str[0]=0; -fgets(str,128,stream); -que_cdt=atol(str); - -zmodem_send[0]=0; -fgets(zmodem_send,128,stream); -if(!zmodem_send[0]) - strcpy(zmodem_send,DEFAULT_ZMODEM_SEND); -truncsp(zmodem_send); - -str[0]=0; -fgets(str,128,stream); -smm_misc=atol(str); - -str[0]=0; -fgets(str,128,stream); -sprintf(system_name,"%.25s",str); -truncsp(system_name); - -local_view[0]=0; -fgets(local_view,128,stream); -truncsp(local_view); - -str[0]=0; -fgets(str,128,stream); -sysop_level=atoi(str); -if(!sysop_level) - sysop_level=90; - -str[0]=0; -fgets(str,128,stream); -wall_age=atoi(str); - -str[0]=0; -fgets(str,128,stream); -age_split=atoi(str); - -fclose(stream); - - -dflt=0; -while(1) { - helpbuf= -" Synchronet Match Maker Configuration \r\n\r\n" -"Move through the various options using the arrow keys. Select the\r\n" -"highlighted options by pressing ENTER.\r\n\r\n"; - j=0; - sprintf(opt[j++],"%-40.40s %s","System Name",system_name); - sprintf(opt[j++],"Wall Security..."); - sprintf(opt[j++],"Profile Database Security..."); - sprintf(str,"Credit %s for Adding Profile" - ,profile_cdt>0 ? "Bonus":"Cost"); - sprintf(opt[j++],"%-40.40s %ldk",str - ,profile_cdt>0 ? profile_cdt/1024L : (-profile_cdt)/1024L); - sprintf(str,"Credit %s for Sending Telegram" - ,telegram_cdt>0 ? "Bonus":"Cost"); - sprintf(opt[j++],"%-40.40s %ldk",str - ,telegram_cdt>0 ? telegram_cdt/1024L : (-telegram_cdt)/1024L); - sprintf(str,"Credit %s for Writing on the Wall" - ,wall_cdt>0 ? "Bonus":"Cost"); - sprintf(opt[j++],"%-40.40s %ldk",str - ,wall_cdt>0 ? wall_cdt/1024L : (-wall_cdt)/1024L); - sprintf(str,"Credit %s for Reading Questionnaire" - ,que_cdt>0 ? "Bonus":"Cost"); - sprintf(opt[j++],"%-40.40s %ldk",str - ,que_cdt>0 ? que_cdt/1024L : (-que_cdt)/1024L); - sprintf(opt[j++],"%-40.40s %u","Minimum Level to Send Telegrams" - ,telegram_level); - sprintf(opt[j++],"%-40.40s %u","Minimum Level to Read Questionnaires" - ,que_level); - sprintf(opt[j++],"%-40.40s %s","Minor Segregation (Protection) Age" - ,age_split ? itoa(age_split,str,10):"Disabled"); - sprintf(opt[j++],"%-40.40s %u","Sysop Level",sysop_level); - sprintf(opt[j++],"%-40.40s %s","Auto-Update Profiles" - ,auto_update ? itoa(auto_update,str,10):"Disabled"); - sprintf(opt[j++],"%-40.40s %s","Notify User of Activity" - ,notify_user ? itoa(notify_user,str,10):"Disabled"); - sprintf(opt[j++],"%-40.40s %s","Use Metric System" - ,smm_misc&SMM_METRIC ? "Yes":"No"); - sprintf(opt[j++],"%-40.40s %.25s","Zmodem Send Command" - ,zmodem_send); - sprintf(opt[j++],"%-40.40s %.25s","Local Photo Viewer" - ,local_view); - opt[j][0]=NULL; - switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&dflt,0 - ,"Synchronet Match Maker Configuration",opt)) { - case 0: -helpbuf= -" System Name \r\n\r\n" -"This is your BBS name. Once you have configured your BBS name here, you\r\n" -"will not be able to change it, without losing all of your local users'\r\n" -"profiles in your database.\r\n" -"\r\n" -"It is highly recommended that you do not change your BBS name here,\r\n" -"even if you decide to change your actual BBS name in the future.\r\n" -"\r\n" -"All BBS names in a match maker network must be unique."; - uinput(WIN_MID,0,0,"System Name" - ,system_name,40,K_EDIT|K_UPPER); - break; - case 1: - j=0; - while(1) { - k=0; - sprintf(opt[k++],"%-40.40s %u" - ,"Minimum User Age to Access Wall" - ,wall_age); - sprintf(opt[k++],"%-40.40s %u" - ,"Minimum Security Level to Write on Wall" - ,wall_level); - opt[k][0]=NULL; -helpbuf= -" Wall Security \r\n\r\n" -"This menu allows you to specify which users can access the wall.\r\n"; - - j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0 - ,"Wall Security",opt); - if(j==-1) - break; - switch(j) { - case 0: -helpbuf= -" Minimum User Age \r\n\r\n" -"This is the minimum user age that will be allowed to access (read or\r\n" -"write) the wall."; - sprintf(str,"%u",wall_age); - uinput(WIN_L2R|WIN_SAV,0,0, - "Minimum Age to Access Wall" - ,str,2,K_EDIT|K_NUMBER); - wall_age=atoi(str); - break; - case 1: -helpbuf= -" Minimum User Level \r\n\r\n" -"This is the minimum user level required to write on the wall.\r\n"; - sprintf(str,"%u",wall_level); - uinput(WIN_L2R|WIN_SAV,0,0, - "Minimum Level to Write on Wall" - ,str,2,K_EDIT|K_NUMBER); - wall_level=atoi(str); - break; } } - break; - case 2: - j=0; - while(1) { - k=0; - sprintf(opt[k++],"%-40.40s %u" - ,"Minimum User Age to Add Profile" - ,min_age); - sprintf(opt[k++],"%-40.40s %u" - ,"Minimum User Age to Take Purity Test" - ,purity_age); - sprintf(opt[k++],"%-40.40s %u" - ,"Minimum Security Level to Add Profile" - ,min_level); - sprintf(opt[k++],"%-40.40s %s" - ,"Required Flags (Set 1) to Add Profile" - ,req_flags1); - sprintf(opt[k++],"%-40.40s %s" - ,"Required Flags (Set 2) to Add Profile" - ,req_flags2); - sprintf(opt[k++],"%-40.40s %s" - ,"Required Flags (Set 3) to Add Profile" - ,req_flags3); - sprintf(opt[k++],"%-40.40s %s" - ,"Required Flags (Set 4) to Add Profile" - ,req_flags4); - opt[k][0]=NULL; -helpbuf= -" Profile Security \r\n\r\n" -"This menu allows you to specify which users can create profiles\r\n" -"and take the purity test."; - - j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0 - ,"Profile Database Security",opt); - if(j==-1) - break; - switch(j) { - case 0: -helpbuf= -" Minimum User Age \r\n\r\n" -"This is the minimum user age that will be allowed to add a profile to\r\n" -"the database."; - sprintf(str,"%u",min_age); - uinput(WIN_L2R|WIN_SAV,0,0, - "Minimum Age",str,2,K_EDIT|K_NUMBER); - min_age=atoi(str); - break; - case 1: -helpbuf= -" Minimum User Age for Purity Test\r\n\r\n" -"This is the minimum user age that will be allowed to take the purity\r\n" -"test."; - sprintf(str,"%u",purity_age); - uinput(WIN_L2R|WIN_SAV,0,0, - "Minimum Age for Purity Test" - ,str,2,K_EDIT|K_NUMBER); - purity_age=atoi(str); - break; - case 2: -helpbuf= -" Minimum Security Level \r\n\r\n" -"This is the minimum security level that is required to add a profile\r\n" -"to the database."; - sprintf(str,"%u",min_level); - uinput(WIN_L2R|WIN_SAV,0,0, - "Security Level",str,3,K_EDIT|K_NUMBER); - min_level=atoi(str); - break; - case 3: -helpbuf= -" Required Flags from Flag Set 1 \r\n\r\n" -"These are the flags that a required for the user to add a profile\r\n" -"to the database."; - uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 1" - ,req_flags1 - ,26,K_EDIT|K_UPPER|K_ALPHA); - break; - case 4: -helpbuf= -" Required Flags from Flag Set 2 \r\n\r\n" -"These are the flags that a required for the user to add a profile\r\n" -"to the database."; - uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 2" - ,req_flags2 - ,26,K_EDIT|K_UPPER|K_ALPHA); - break; - case 5: -helpbuf= -" Required Flags from Flag Set 3 \r\n\r\n" -"These are the flags that a required for the user to add a profile\r\n" -"to the database."; - uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 3" - ,req_flags3 - ,26,K_EDIT|K_UPPER|K_ALPHA); - break; - case 6: -helpbuf= -" Required Flags from Flag Set 4 \r\n\r\n" -"These are the flags that a required for the user to add a profile\r\n" -"to the database."; - uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 4" - ,req_flags4 - ,26,K_EDIT|K_UPPER|K_ALPHA); - break; } } - break; - case 3: -helpbuf= -" Credit Adjustment for Adding Profile \r\n\r\n" -"You can have Synchronet Match Maker either give credits to or take\r\n" -"credits from the user for adding a profile to the database."; - strcpy(opt[0],"Add Credits"); - strcpy(opt[1],"Remove Credits"); - opt[2][0]=0; - i=1; - i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 - ,"Credit Adjustment for Adding Profile",opt); - if(i==-1) - break; - sprintf(str,"%ld",profile_cdt<0 ? -profile_cdt:profile_cdt); - uinput(WIN_MID,0,0,"Credits (K=1024)" - ,str,10,K_EDIT|K_UPPER); - if(strchr(str,'K')) - profile_cdt=atol(str)*1024L; - else - profile_cdt=atol(str); - if(i==1) - profile_cdt=-profile_cdt; - break; - case 4: -helpbuf= -" Credit Adjustment for Sending Telegram \r\n\r\n" -"You can have Synchronet Match Maker either give credits to or take\r\n" -"credits from the user for sending a telegram to another user in SMM."; - strcpy(opt[0],"Add Credits"); - strcpy(opt[1],"Remove Credits"); - opt[2][0]=0; - i=1; - i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 - ,"Credit Adjustment for Sending Telegram",opt); - if(i==-1) - break; - sprintf(str,"%ld",telegram_cdt<0 ? -telegram_cdt:telegram_cdt); - uinput(WIN_MID,0,0,"Credits (K=1024)" - ,str,10,K_EDIT|K_UPPER); - if(strchr(str,'K')) - telegram_cdt=atol(str)*1024L; - else - telegram_cdt=atol(str); - if(i==1) - telegram_cdt=-telegram_cdt; - break; - case 5: -helpbuf= -" Credit Adjustment for Writing on the Wall \r\n\r\n" -"You can have Synchronet Match Maker either give credits to or take\r\n" -"credits from the user for writing on the wall."; - strcpy(opt[0],"Add Credits"); - strcpy(opt[1],"Remove Credits"); - opt[2][0]=0; - i=1; - i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 - ,"Credit Adjustment for Writing on the Wall",opt); - if(i==-1) - break; - sprintf(str,"%ld",wall_cdt<0 ? -wall_cdt:wall_cdt); - uinput(WIN_MID,0,0,"Credits (K=1024)" - ,str,10,K_EDIT|K_UPPER); - if(strchr(str,'K')) - wall_cdt=atol(str)*1024L; - else - wall_cdt=atol(str); - if(i==1) - wall_cdt=-wall_cdt; - break; - case 6: -helpbuf= -" Credit Adjustment for Reading Questionnaire \r\n\r\n" -"You can have Synchronet Match Maker either give credits to or take\r\n" -"credits from the user when reading another user's questionnaire"; - strcpy(opt[0],"Add Credits"); - strcpy(opt[1],"Remove Credits"); - opt[2][0]=0; - i=1; - i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 - ,"Credit Adjustment for Reading Questionnaire",opt); - if(i==-1) - break; - sprintf(str,"%ld",que_cdt<0 ? -que_cdt:que_cdt); - uinput(WIN_MID,0,0,"Credits (K=1024)" - ,str,10,K_EDIT|K_UPPER); - if(strchr(str,'K')) - que_cdt=atol(str)*1024L; - else - que_cdt=atol(str); - if(i==1) - que_cdt=-que_cdt; - break; - case 7: -helpbuf= -" Minimum Level to Send Telegrams \r\n\r\n" -"Use this option to restrict the sending of telegrams to users of a\r\n" -"specific security level or higher."; - sprintf(str,"%u",telegram_level); - uinput(WIN_MID,0,0,"Minimum Level to Send Telegrams" - ,str,3,K_EDIT|K_NUMBER); - telegram_level=atoi(str); - break; - case 8: -helpbuf= -" Minimum Level to Read Questionnaires \r\n\r\n" -"Users will only be allowed to read other users' questionnaires if\r\n" -"their security level is this value or higher."; - sprintf(str,"%u",que_level); - uinput(WIN_MID,0,0,"Minimum Level to Read Questionnaires" - ,str,3,K_EDIT|K_NUMBER); - que_level=atoi(str); - break; - case 9: -helpbuf= -" Minor Segregation (Protection) Age \r\n\r\n" -"This option (if enabled) separates all users into two groups:\r\n" -"\r\n" -"Minors: Those users below the specified age (normally 18)\r\n" -"Adults: Those users at or above the specified age\r\n" -"\r\n" -"If enabled, adults cannot see minors' profiles or send telegrams to\r\n" -"minors and vice versa.\r\n" -"\r\n" -"If disabled, all users can see eachother's profiles regardless of age.\r\n"; - sprintf(str,"%u",age_split); - uinput(WIN_MID,0,0,"Minor Segregation Age (0=Disabled)" - ,str,2,K_EDIT|K_NUMBER); - age_split=atoi(str); - break; - case 10: -helpbuf= -" Sysop Level \r\n\r\n" -"Every user of this level or higher will be given access to sysop\r\n" -"commands in the match maker."; - sprintf(str,"%u",sysop_level); - uinput(WIN_MID,0,0,"Sysop Level",str,3,K_EDIT|K_NUMBER); - sysop_level=atoi(str); - break; - - case 11: -helpbuf= -" Auto-Update Profiles \r\n\r\n" -"If you would like to have Synchronet Match Maker automatically send\r\n" -"a network update message for a user that is active in SMM, but hasn't\r\n" -"actually made any changes to his or her profile, set this option to the\r\n" -"number of days between Auto-Updates (e.g. 30 days is a good value).\r\n" -"\r\n" -"Setting this option to 0 disables this feature."; - sprintf(str,"%u",auto_update); - uinput(WIN_MID,0,0,"Auto-Update Profiles (in Days)" - ,str,3,K_EDIT|K_NUMBER); - auto_update=atoi(str); - break; - case 12: -helpbuf= -" Notify User of Activity \r\n\r\n" -"If you would like to have Synchronet Match Maker automatically send\r\n" -"a message to a specific user (most commonly the sysop) whenever a user\r\n" -"adds a profile to the database or sends a telegram from SMM, set this\r\n" -"option to the number of that user (e.g. 1 would indicate user #1).\r\n" -"\r\n" -"Setting this option to 0 disables this feature."; - sprintf(str,"%u",notify_user); - uinput(WIN_MID,0,0,"Notify User Number (0=disabled)" - ,str,5,K_EDIT|K_NUMBER); - notify_user=atoi(str); - break; - case 13: -helpbuf= -" Use Metric System \r\n\r\n" -"If you wish to use centimeters and kilograms instead of inches and\r\n" -"pounds for height and weight measurements, set this option to Yes."; - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - i=ulist(WIN_MID|WIN_ACT,0,0,0,&i,0 - ,"Use Metric Measurement System",opt); - if(i==-1) - break; - if(i==1) - smm_misc&=~SMM_METRIC; - else - smm_misc|=SMM_METRIC; - break; - - case 14: -helpbuf= -" Zmodem Send Command \r\n\r\n" -"This is the command line to execute to send files to remote user.\r\n"; - uinput(WIN_MID,0,0,"Zmodem Send" - ,zmodem_send,50,K_EDIT); - break; - case 15: -helpbuf= -" Local Photo Viewer \r\n\r\n" -"This is the command line to execute to view photos when logged on\r\n" -"locally.\r\n"; - uinput(WIN_MID,0,0,"Local Viewer" - ,local_view,50,K_EDIT); - break; - case -1: -helpbuf= -" Save Configuration File \r\n\r\n" -"Select Yes to save the config file, No to quit without saving,\r\n" -"or hit  ESC  to go back to the menu.\r\n\r\n"; - i=0; - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt); - if(i==-1) break; - if(i) bail(0); - if((file=open("SMM.CFG" - ,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC,S_IWRITE))==-1) { - textattr(LIGHTGRAY); - clrscr(); - lprintf("Error opening SMM.CFG\r\n"); - bail(1); } - if((stream=fdopen(file,"wb"))==NULL) { - textattr(LIGHTGRAY); - clrscr(); - lprintf("Error fdopen SMM.CFG\r\n"); - bail(1); } - fprintf(stream,"%u\r\n%u\r\n%u\r\n%s\r\n%s\r\n%s\r\n%s\r\n" - ,purity_age,min_age,min_level - ,req_flags1,req_flags2,req_flags3,req_flags4); - fprintf(stream,"%ld\r\n%ld\r\n%u\r\n%u\r\n%s\r\n%u\r\n%u\r\n" - ,profile_cdt,telegram_cdt,auto_update,notify_user,"" - ,telegram_level,que_level); - fprintf(stream,"%u\r\n%ld\r\n%ld\r\n%s\r\n%ld\r\n%s\r\n" - ,wall_level,wall_cdt,que_cdt,zmodem_send,smm_misc,system_name); - fprintf(stream,"%s\r\n%u\r\n%u\r\n%u\r\n" - ,local_view,sysop_level,wall_age,age_split); - fclose(stream); - bail(0); - } -} -} -/****************************************************************************/ -/* Checks the disk drive for the existance of a file. Returns 1 if it */ -/* exists, 0 if it doesn't. */ -/* Called from upload */ -/****************************************************************************/ -char fexist(char *filespec) -{ - struct ffblk f; - -if(findfirst(filespec,&f,0)==NULL) - return(1); -return(0); -} +/* SMMCFG.C */ + +/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ + +#include +#include +#include "gen_defs.h" +#include "smmdefs.h" +#include "smmvars.c" + +char **opt; + +void bail(int code); +void main(); +char fexist(char *filespec); + +unsigned _stklen=16000; /* Set stack size in code, not header */ + +void bail(int code) +{ + +if(code) + getch(); +uifcbail(); +exit(code); +} + +void main() +{ + char str[256]; + int i,j,k,file,dflt,sysop_level; + FILE *stream; + +savnum=0; +if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) { + cputs("memory allocation error\r\n"); + bail(1); } +for(i=0;i<300;i++) + if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) { + cputs("memory allocation error\r\n"); + bail(1); } +uifcini(); +sprintf(str,"Synchronet Match Maker v%s",SMM_VER); +uscrn(str); + +if((file=open("SMM.CFG",O_RDONLY|O_BINARY|O_DENYNONE))==-1) { + textattr(LIGHTGRAY); + clrscr(); + lprintf("Error opening SMM.CFG\r\n"); + bail(1); } +if((stream=fdopen(file,"rb"))==NULL) { + textattr(LIGHTGRAY); + clrscr(); + lprintf("Error fdopen SMM.CFG\r\n"); + bail(1); } + +str[0]=0; +fgets(str,128,stream); +purity_age=atoi(str); +str[0]=0; +fgets(str,128,stream); +min_age=atoi(str); +str[0]=0; +fgets(str,128,stream); +min_level=atoi(str); + +req_flags1[0]=0; +fgets(req_flags1,128,stream); +req_flags1[27]=0; +truncsp(req_flags1); + +req_flags2[0]=0; +fgets(req_flags2,128,stream); +req_flags2[27]=0; +truncsp(req_flags2); + +req_flags3[0]=0; +fgets(req_flags3,128,stream); +req_flags3[27]=0; +truncsp(req_flags3); + +req_flags4[0]=0; +fgets(req_flags4,128,stream); +req_flags4[27]=0; +truncsp(req_flags4); + +str[0]=0; +fgets(str,128,stream); +profile_cdt=atol(str); +str[0]=0; +fgets(str,128,stream); +telegram_cdt=atol(str); +str[0]=0; +fgets(str,128,stream); +auto_update=atoi(str); +str[0]=0; +fgets(str,128,stream); +notify_user=atoi(str); + +str[0]=0; +fgets(str,128,stream); // regnum + +str[0]=0; +fgets(str,128,stream); +telegram_level=atoi(str); + +str[0]=0; +fgets(str,128,stream); +que_level=atoi(str); + +str[0]=0; +fgets(str,128,stream); +wall_level=atoi(str); + +str[0]=0; +fgets(str,128,stream); +wall_cdt=atol(str); + +str[0]=0; +fgets(str,128,stream); +que_cdt=atol(str); + +zmodem_send[0]=0; +fgets(zmodem_send,128,stream); +if(!zmodem_send[0]) + strcpy(zmodem_send,DEFAULT_ZMODEM_SEND); +truncsp(zmodem_send); + +str[0]=0; +fgets(str,128,stream); +smm_misc=atol(str); + +str[0]=0; +fgets(str,128,stream); +sprintf(system_name,"%.25s",str); +truncsp(system_name); + +local_view[0]=0; +fgets(local_view,128,stream); +truncsp(local_view); + +str[0]=0; +fgets(str,128,stream); +sysop_level=atoi(str); +if(!sysop_level) + sysop_level=90; + +str[0]=0; +fgets(str,128,stream); +wall_age=atoi(str); + +str[0]=0; +fgets(str,128,stream); +age_split=atoi(str); + +fclose(stream); + + +dflt=0; +while(1) { + helpbuf= +" Synchronet Match Maker Configuration \r\n\r\n" +"Move through the various options using the arrow keys. Select the\r\n" +"highlighted options by pressing ENTER.\r\n\r\n"; + j=0; + sprintf(opt[j++],"%-40.40s %s","System Name",system_name); + sprintf(opt[j++],"Wall Security..."); + sprintf(opt[j++],"Profile Database Security..."); + sprintf(str,"Credit %s for Adding Profile" + ,profile_cdt>0 ? "Bonus":"Cost"); + sprintf(opt[j++],"%-40.40s %ldk",str + ,profile_cdt>0 ? profile_cdt/1024L : (-profile_cdt)/1024L); + sprintf(str,"Credit %s for Sending Telegram" + ,telegram_cdt>0 ? "Bonus":"Cost"); + sprintf(opt[j++],"%-40.40s %ldk",str + ,telegram_cdt>0 ? telegram_cdt/1024L : (-telegram_cdt)/1024L); + sprintf(str,"Credit %s for Writing on the Wall" + ,wall_cdt>0 ? "Bonus":"Cost"); + sprintf(opt[j++],"%-40.40s %ldk",str + ,wall_cdt>0 ? wall_cdt/1024L : (-wall_cdt)/1024L); + sprintf(str,"Credit %s for Reading Questionnaire" + ,que_cdt>0 ? "Bonus":"Cost"); + sprintf(opt[j++],"%-40.40s %ldk",str + ,que_cdt>0 ? que_cdt/1024L : (-que_cdt)/1024L); + sprintf(opt[j++],"%-40.40s %u","Minimum Level to Send Telegrams" + ,telegram_level); + sprintf(opt[j++],"%-40.40s %u","Minimum Level to Read Questionnaires" + ,que_level); + sprintf(opt[j++],"%-40.40s %s","Minor Segregation (Protection) Age" + ,age_split ? itoa(age_split,str,10):"Disabled"); + sprintf(opt[j++],"%-40.40s %u","Sysop Level",sysop_level); + sprintf(opt[j++],"%-40.40s %s","Auto-Update Profiles" + ,auto_update ? itoa(auto_update,str,10):"Disabled"); + sprintf(opt[j++],"%-40.40s %s","Notify User of Activity" + ,notify_user ? itoa(notify_user,str,10):"Disabled"); + sprintf(opt[j++],"%-40.40s %s","Use Metric System" + ,smm_misc&SMM_METRIC ? "Yes":"No"); + sprintf(opt[j++],"%-40.40s %.25s","Zmodem Send Command" + ,zmodem_send); + sprintf(opt[j++],"%-40.40s %.25s","Local Photo Viewer" + ,local_view); + opt[j][0]=NULL; + switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&dflt,0 + ,"Synchronet Match Maker Configuration",opt)) { + case 0: +helpbuf= +" System Name \r\n\r\n" +"This is your BBS name. Once you have configured your BBS name here, you\r\n" +"will not be able to change it, without losing all of your local users'\r\n" +"profiles in your database.\r\n" +"\r\n" +"It is highly recommended that you do not change your BBS name here,\r\n" +"even if you decide to change your actual BBS name in the future.\r\n" +"\r\n" +"All BBS names in a match maker network must be unique."; + uinput(WIN_MID,0,0,"System Name" + ,system_name,40,K_EDIT|K_UPPER); + break; + case 1: + j=0; + while(1) { + k=0; + sprintf(opt[k++],"%-40.40s %u" + ,"Minimum User Age to Access Wall" + ,wall_age); + sprintf(opt[k++],"%-40.40s %u" + ,"Minimum Security Level to Write on Wall" + ,wall_level); + opt[k][0]=NULL; +helpbuf= +" Wall Security \r\n\r\n" +"This menu allows you to specify which users can access the wall.\r\n"; + + j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0 + ,"Wall Security",opt); + if(j==-1) + break; + switch(j) { + case 0: +helpbuf= +" Minimum User Age \r\n\r\n" +"This is the minimum user age that will be allowed to access (read or\r\n" +"write) the wall."; + sprintf(str,"%u",wall_age); + uinput(WIN_L2R|WIN_SAV,0,0, + "Minimum Age to Access Wall" + ,str,2,K_EDIT|K_NUMBER); + wall_age=atoi(str); + break; + case 1: +helpbuf= +" Minimum User Level \r\n\r\n" +"This is the minimum user level required to write on the wall.\r\n"; + sprintf(str,"%u",wall_level); + uinput(WIN_L2R|WIN_SAV,0,0, + "Minimum Level to Write on Wall" + ,str,2,K_EDIT|K_NUMBER); + wall_level=atoi(str); + break; } } + break; + case 2: + j=0; + while(1) { + k=0; + sprintf(opt[k++],"%-40.40s %u" + ,"Minimum User Age to Add Profile" + ,min_age); + sprintf(opt[k++],"%-40.40s %u" + ,"Minimum User Age to Take Purity Test" + ,purity_age); + sprintf(opt[k++],"%-40.40s %u" + ,"Minimum Security Level to Add Profile" + ,min_level); + sprintf(opt[k++],"%-40.40s %s" + ,"Required Flags (Set 1) to Add Profile" + ,req_flags1); + sprintf(opt[k++],"%-40.40s %s" + ,"Required Flags (Set 2) to Add Profile" + ,req_flags2); + sprintf(opt[k++],"%-40.40s %s" + ,"Required Flags (Set 3) to Add Profile" + ,req_flags3); + sprintf(opt[k++],"%-40.40s %s" + ,"Required Flags (Set 4) to Add Profile" + ,req_flags4); + opt[k][0]=NULL; +helpbuf= +" Profile Security \r\n\r\n" +"This menu allows you to specify which users can create profiles\r\n" +"and take the purity test."; + + j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0 + ,"Profile Database Security",opt); + if(j==-1) + break; + switch(j) { + case 0: +helpbuf= +" Minimum User Age \r\n\r\n" +"This is the minimum user age that will be allowed to add a profile to\r\n" +"the database."; + sprintf(str,"%u",min_age); + uinput(WIN_L2R|WIN_SAV,0,0, + "Minimum Age",str,2,K_EDIT|K_NUMBER); + min_age=atoi(str); + break; + case 1: +helpbuf= +" Minimum User Age for Purity Test\r\n\r\n" +"This is the minimum user age that will be allowed to take the purity\r\n" +"test."; + sprintf(str,"%u",purity_age); + uinput(WIN_L2R|WIN_SAV,0,0, + "Minimum Age for Purity Test" + ,str,2,K_EDIT|K_NUMBER); + purity_age=atoi(str); + break; + case 2: +helpbuf= +" Minimum Security Level \r\n\r\n" +"This is the minimum security level that is required to add a profile\r\n" +"to the database."; + sprintf(str,"%u",min_level); + uinput(WIN_L2R|WIN_SAV,0,0, + "Security Level",str,3,K_EDIT|K_NUMBER); + min_level=atoi(str); + break; + case 3: +helpbuf= +" Required Flags from Flag Set 1 \r\n\r\n" +"These are the flags that a required for the user to add a profile\r\n" +"to the database."; + uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 1" + ,req_flags1 + ,26,K_EDIT|K_UPPER|K_ALPHA); + break; + case 4: +helpbuf= +" Required Flags from Flag Set 2 \r\n\r\n" +"These are the flags that a required for the user to add a profile\r\n" +"to the database."; + uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 2" + ,req_flags2 + ,26,K_EDIT|K_UPPER|K_ALPHA); + break; + case 5: +helpbuf= +" Required Flags from Flag Set 3 \r\n\r\n" +"These are the flags that a required for the user to add a profile\r\n" +"to the database."; + uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 3" + ,req_flags3 + ,26,K_EDIT|K_UPPER|K_ALPHA); + break; + case 6: +helpbuf= +" Required Flags from Flag Set 4 \r\n\r\n" +"These are the flags that a required for the user to add a profile\r\n" +"to the database."; + uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 4" + ,req_flags4 + ,26,K_EDIT|K_UPPER|K_ALPHA); + break; } } + break; + case 3: +helpbuf= +" Credit Adjustment for Adding Profile \r\n\r\n" +"You can have Synchronet Match Maker either give credits to or take\r\n" +"credits from the user for adding a profile to the database."; + strcpy(opt[0],"Add Credits"); + strcpy(opt[1],"Remove Credits"); + opt[2][0]=0; + i=1; + i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 + ,"Credit Adjustment for Adding Profile",opt); + if(i==-1) + break; + sprintf(str,"%ld",profile_cdt<0 ? -profile_cdt:profile_cdt); + uinput(WIN_MID,0,0,"Credits (K=1024)" + ,str,10,K_EDIT|K_UPPER); + if(strchr(str,'K')) + profile_cdt=atol(str)*1024L; + else + profile_cdt=atol(str); + if(i==1) + profile_cdt=-profile_cdt; + break; + case 4: +helpbuf= +" Credit Adjustment for Sending Telegram \r\n\r\n" +"You can have Synchronet Match Maker either give credits to or take\r\n" +"credits from the user for sending a telegram to another user in SMM."; + strcpy(opt[0],"Add Credits"); + strcpy(opt[1],"Remove Credits"); + opt[2][0]=0; + i=1; + i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 + ,"Credit Adjustment for Sending Telegram",opt); + if(i==-1) + break; + sprintf(str,"%ld",telegram_cdt<0 ? -telegram_cdt:telegram_cdt); + uinput(WIN_MID,0,0,"Credits (K=1024)" + ,str,10,K_EDIT|K_UPPER); + if(strchr(str,'K')) + telegram_cdt=atol(str)*1024L; + else + telegram_cdt=atol(str); + if(i==1) + telegram_cdt=-telegram_cdt; + break; + case 5: +helpbuf= +" Credit Adjustment for Writing on the Wall \r\n\r\n" +"You can have Synchronet Match Maker either give credits to or take\r\n" +"credits from the user for writing on the wall."; + strcpy(opt[0],"Add Credits"); + strcpy(opt[1],"Remove Credits"); + opt[2][0]=0; + i=1; + i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 + ,"Credit Adjustment for Writing on the Wall",opt); + if(i==-1) + break; + sprintf(str,"%ld",wall_cdt<0 ? -wall_cdt:wall_cdt); + uinput(WIN_MID,0,0,"Credits (K=1024)" + ,str,10,K_EDIT|K_UPPER); + if(strchr(str,'K')) + wall_cdt=atol(str)*1024L; + else + wall_cdt=atol(str); + if(i==1) + wall_cdt=-wall_cdt; + break; + case 6: +helpbuf= +" Credit Adjustment for Reading Questionnaire \r\n\r\n" +"You can have Synchronet Match Maker either give credits to or take\r\n" +"credits from the user when reading another user's questionnaire"; + strcpy(opt[0],"Add Credits"); + strcpy(opt[1],"Remove Credits"); + opt[2][0]=0; + i=1; + i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 + ,"Credit Adjustment for Reading Questionnaire",opt); + if(i==-1) + break; + sprintf(str,"%ld",que_cdt<0 ? -que_cdt:que_cdt); + uinput(WIN_MID,0,0,"Credits (K=1024)" + ,str,10,K_EDIT|K_UPPER); + if(strchr(str,'K')) + que_cdt=atol(str)*1024L; + else + que_cdt=atol(str); + if(i==1) + que_cdt=-que_cdt; + break; + case 7: +helpbuf= +" Minimum Level to Send Telegrams \r\n\r\n" +"Use this option to restrict the sending of telegrams to users of a\r\n" +"specific security level or higher."; + sprintf(str,"%u",telegram_level); + uinput(WIN_MID,0,0,"Minimum Level to Send Telegrams" + ,str,3,K_EDIT|K_NUMBER); + telegram_level=atoi(str); + break; + case 8: +helpbuf= +" Minimum Level to Read Questionnaires \r\n\r\n" +"Users will only be allowed to read other users' questionnaires if\r\n" +"their security level is this value or higher."; + sprintf(str,"%u",que_level); + uinput(WIN_MID,0,0,"Minimum Level to Read Questionnaires" + ,str,3,K_EDIT|K_NUMBER); + que_level=atoi(str); + break; + case 9: +helpbuf= +" Minor Segregation (Protection) Age \r\n\r\n" +"This option (if enabled) separates all users into two groups:\r\n" +"\r\n" +"Minors: Those users below the specified age (normally 18)\r\n" +"Adults: Those users at or above the specified age\r\n" +"\r\n" +"If enabled, adults cannot see minors' profiles or send telegrams to\r\n" +"minors and vice versa.\r\n" +"\r\n" +"If disabled, all users can see eachother's profiles regardless of age.\r\n"; + sprintf(str,"%u",age_split); + uinput(WIN_MID,0,0,"Minor Segregation Age (0=Disabled)" + ,str,2,K_EDIT|K_NUMBER); + age_split=atoi(str); + break; + case 10: +helpbuf= +" Sysop Level \r\n\r\n" +"Every user of this level or higher will be given access to sysop\r\n" +"commands in the match maker."; + sprintf(str,"%u",sysop_level); + uinput(WIN_MID,0,0,"Sysop Level",str,3,K_EDIT|K_NUMBER); + sysop_level=atoi(str); + break; + + case 11: +helpbuf= +" Auto-Update Profiles \r\n\r\n" +"If you would like to have Synchronet Match Maker automatically send\r\n" +"a network update message for a user that is active in SMM, but hasn't\r\n" +"actually made any changes to his or her profile, set this option to the\r\n" +"number of days between Auto-Updates (e.g. 30 days is a good value).\r\n" +"\r\n" +"Setting this option to 0 disables this feature."; + sprintf(str,"%u",auto_update); + uinput(WIN_MID,0,0,"Auto-Update Profiles (in Days)" + ,str,3,K_EDIT|K_NUMBER); + auto_update=atoi(str); + break; + case 12: +helpbuf= +" Notify User of Activity \r\n\r\n" +"If you would like to have Synchronet Match Maker automatically send\r\n" +"a message to a specific user (most commonly the sysop) whenever a user\r\n" +"adds a profile to the database or sends a telegram from SMM, set this\r\n" +"option to the number of that user (e.g. 1 would indicate user #1).\r\n" +"\r\n" +"Setting this option to 0 disables this feature."; + sprintf(str,"%u",notify_user); + uinput(WIN_MID,0,0,"Notify User Number (0=disabled)" + ,str,5,K_EDIT|K_NUMBER); + notify_user=atoi(str); + break; + case 13: +helpbuf= +" Use Metric System \r\n\r\n" +"If you wish to use centimeters and kilograms instead of inches and\r\n" +"pounds for height and weight measurements, set this option to Yes."; + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + i=ulist(WIN_MID|WIN_ACT,0,0,0,&i,0 + ,"Use Metric Measurement System",opt); + if(i==-1) + break; + if(i==1) + smm_misc&=~SMM_METRIC; + else + smm_misc|=SMM_METRIC; + break; + + case 14: +helpbuf= +" Zmodem Send Command \r\n\r\n" +"This is the command line to execute to send files to remote user.\r\n"; + uinput(WIN_MID,0,0,"Zmodem Send" + ,zmodem_send,50,K_EDIT); + break; + case 15: +helpbuf= +" Local Photo Viewer \r\n\r\n" +"This is the command line to execute to view photos when logged on\r\n" +"locally.\r\n"; + uinput(WIN_MID,0,0,"Local Viewer" + ,local_view,50,K_EDIT); + break; + case -1: +helpbuf= +" Save Configuration File \r\n\r\n" +"Select Yes to save the config file, No to quit without saving,\r\n" +"or hit  ESC  to go back to the menu.\r\n\r\n"; + i=0; + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt); + if(i==-1) break; + if(i) bail(0); + if((file=open("SMM.CFG" + ,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC,S_IWRITE))==-1) { + textattr(LIGHTGRAY); + clrscr(); + lprintf("Error opening SMM.CFG\r\n"); + bail(1); } + if((stream=fdopen(file,"wb"))==NULL) { + textattr(LIGHTGRAY); + clrscr(); + lprintf("Error fdopen SMM.CFG\r\n"); + bail(1); } + fprintf(stream,"%u\r\n%u\r\n%u\r\n%s\r\n%s\r\n%s\r\n%s\r\n" + ,purity_age,min_age,min_level + ,req_flags1,req_flags2,req_flags3,req_flags4); + fprintf(stream,"%ld\r\n%ld\r\n%u\r\n%u\r\n%s\r\n%u\r\n%u\r\n" + ,profile_cdt,telegram_cdt,auto_update,notify_user,"" + ,telegram_level,que_level); + fprintf(stream,"%u\r\n%ld\r\n%ld\r\n%s\r\n%ld\r\n%s\r\n" + ,wall_level,wall_cdt,que_cdt,zmodem_send,smm_misc,system_name); + fprintf(stream,"%s\r\n%u\r\n%u\r\n%u\r\n" + ,local_view,sysop_level,wall_age,age_split); + fclose(stream); + bail(0); + } +} +} +/****************************************************************************/ +/* Checks the disk drive for the existance of a file. Returns 1 if it */ +/* exists, 0 if it doesn't. */ +/* Called from upload */ +/****************************************************************************/ +char fexist(char *filespec) +{ + struct ffblk f; + +if(findfirst(filespec,&f,0)==NULL) + return(1); +return(0); +}