|
|
1.1 ! root 1: #line 2 "SCFGSUB.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include "scfg.h" ! 6: ! 7: void sub_cfg(uint grpnum) ! 8: { ! 9: static int dflt,tog_dflt,opt_dflt,net_dflt,adv_dflt,bar; ! 10: char str[81],str2[81],str3[11],done=0,code[9],*p; ! 11: int j,m,n,ptridx,q,s; ! 12: uint i,subnum[MAX_OPTS+1]; ! 13: static sub_t savsub; ! 14: ! 15: while(1) { ! 16: for(i=0,j=0;i<total_subs && j<MAX_OPTS;i++) ! 17: if(sub[i]->grp==grpnum) { ! 18: subnum[j]=i; ! 19: if(sub[subnum[0]]->qwkconf) ! 20: sprintf(opt[j],"%-5u %s" ! 21: ,sub[i]->qwkconf,sub[i]->lname); ! 22: else ! 23: sprintf(opt[j],"%s" ! 24: ,sub[i]->lname); ! 25: j++; } ! 26: subnum[j]=total_subs; ! 27: opt[j][0]=0; ! 28: sprintf(str,"%s Sub-boards",grp[grpnum]->sname); ! 29: savnum=0; ! 30: i=WIN_SAV|WIN_ACT; ! 31: if(j) ! 32: i|=WIN_DEL|WIN_GET|WIN_DELACT; ! 33: if(j<MAX_OPTS) ! 34: i|=WIN_INS|WIN_XTR|WIN_INSACT; ! 35: if(savsub.sname[0]) ! 36: i|=WIN_PUT; ! 37: SETHELP(WHERE); ! 38: /* ! 39: &Message Sub-boards:& ! 40: ! 41: This is a list of message sub-boards that have been configured for the ! 42: selected message group. ! 43: ! 44: To add a sub-board, select the desired position with the arrow keys and ! 45: hit INS . ! 46: ! 47: To delete a sub-board, select it with the arrow keys and hit DEL . ! 48: ! 49: To configure a sub-board, select it with the arrow keys and hit ENTER . ! 50: */ ! 51: i=ulist(i,24,1,LEN_SLNAME+5,&dflt,&bar,str,opt); ! 52: savnum=1; ! 53: if((signed)i==-1) ! 54: return; ! 55: if((i&MSK_ON)==MSK_INS) { ! 56: i&=MSK_OFF; ! 57: strcpy(str,"General"); ! 58: SETHELP(WHERE); ! 59: /* ! 60: &Sub-board Long Name:& ! 61: ! 62: This is a description of the message sub-board which is displayed in all ! 63: sub-board listings. ! 64: */ ! 65: if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board Long Name",str,LEN_SLNAME ! 66: ,K_EDIT)<1) ! 67: continue; ! 68: sprintf(str2,"%.*s",LEN_SSNAME,str); ! 69: SETHELP(WHERE); ! 70: /* ! 71: &Sub-board Short Name:& ! 72: ! 73: This is a short description of the message sub-board which is displayed ! 74: at the main and reading messages prompts. ! 75: */ ! 76: if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board Short Name",str2,LEN_SSNAME ! 77: ,K_EDIT)<1) ! 78: continue; ! 79: sprintf(str3,"%.10s",str2); ! 80: SETHELP(WHERE); ! 81: /* ! 82: &Sub-board QWK Name:& ! 83: ! 84: This is the name of the sub-board used for QWK off-line readers. ! 85: */ ! 86: if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board QWK Name",str3,10 ! 87: ,K_EDIT)<1) ! 88: continue; ! 89: sprintf(code,"%.8s",str3); ! 90: p=strchr(code,SP); ! 91: if(p) *p=0; ! 92: strupr(code); ! 93: SETHELP(WHERE); ! 94: /* ! 95: &Sub-board Internal Code:& ! 96: ! 97: Every sub-board must have its own unique code for Synchronet to refer to ! 98: it internally. This code should be descriptive of the sub-board's topic, ! 99: usually an abreviation of the sub-board's name. ! 100: */ ! 101: if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board Internal Code",code,8 ! 102: ,K_EDIT|K_UPPER)<1) ! 103: continue; ! 104: if(!code_ok(code)) { ! 105: helpbuf=invalid_code; ! 106: savnum=0; ! 107: umsg("Invalid Code"); ! 108: helpbuf=0; ! 109: continue; } ! 110: ! 111: if((sub=(sub_t **)REALLOC(sub,sizeof(sub_t *)*(total_subs+1)))==NULL) { ! 112: errormsg(WHERE,ERR_ALLOC,nulstr,total_subs+1); ! 113: total_subs=0; ! 114: bail(1); ! 115: continue; } ! 116: ! 117: for(ptridx=0;ptridx>-1;ptridx++) { /* Search for unused pointer indx */ ! 118: for(n=0;n<total_subs;n++) ! 119: if(sub[n]->ptridx==ptridx) ! 120: break; ! 121: if(n==total_subs) ! 122: break; } ! 123: ! 124: if(j) { ! 125: for(n=total_subs;n>subnum[i];n--) ! 126: sub[n]=sub[n-1]; ! 127: for(q=0;q<total_qhubs;q++) ! 128: for(s=0;s<qhub[q]->subs;s++) ! 129: if(qhub[q]->sub[s]>=subnum[i]) ! 130: qhub[q]->sub[s]++; } ! 131: ! 132: if((sub[subnum[i]]=(sub_t *)MALLOC(sizeof(sub_t)))==NULL) { ! 133: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(sub_t)); ! 134: continue; } ! 135: memset((sub_t *)sub[subnum[i]],0,sizeof(sub_t)); ! 136: sub[subnum[i]]->grp=grpnum; ! 137: if(total_faddrs) ! 138: sub[subnum[i]]->faddr=faddr[0]; ! 139: else ! 140: memset(&sub[subnum[i]]->faddr,0,sizeof(faddr_t)); ! 141: sub[subnum[i]]->maxmsgs=500; ! 142: strcpy(sub[subnum[i]]->code,code); ! 143: strcpy(sub[subnum[i]]->lname,str); ! 144: strcpy(sub[subnum[i]]->sname,str2); ! 145: strcpy(sub[subnum[i]]->qwkname,str3); ! 146: sub[subnum[i]]->misc=(SUB_NSDEF|SUB_SSDEF|SUB_QUOTE|SUB_TOUSER ! 147: |SUB_HDRMOD|SUB_FAST); ! 148: sub[subnum[i]]->ptridx=ptridx; ! 149: total_subs++; ! 150: changes=1; ! 151: continue; } ! 152: if((i&MSK_ON)==MSK_DEL) { ! 153: i&=MSK_OFF; ! 154: SETHELP(WHERE); ! 155: /* ! 156: &Delete Data in Sub-board:& ! 157: ! 158: If you want to delete all the messages for this sub-board, select &Yes&. ! 159: */ ! 160: j=1; ! 161: strcpy(opt[0],"Yes"); ! 162: strcpy(opt[1],"No"); ! 163: opt[2][0]=0; ! 164: j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0 ! 165: ,"Delete Data in Sub-board",opt); ! 166: if(j==-1) ! 167: continue; ! 168: if(j==0) { ! 169: sprintf(str,"%s.s*",sub[subnum[i]]->code); ! 170: if(!sub[subnum[i]]->data_dir[0]) ! 171: sprintf(tmp,"%sSUBS\\",data_dir); ! 172: else ! 173: strcpy(tmp,sub[subnum[i]]->data_dir); ! 174: delfiles(tmp,str); ! 175: clearptrs(subnum[i]); } ! 176: FREE(sub[subnum[i]]); ! 177: total_subs--; ! 178: for(j=subnum[i];j<total_subs;j++) ! 179: sub[j]=sub[j+1]; ! 180: for(q=0;q<total_qhubs;q++) ! 181: for(s=0;s<qhub[q]->subs;s++) { ! 182: if(qhub[q]->sub[s]==subnum[i]) ! 183: qhub[q]->sub[s]=INVALID_SUB; ! 184: else if(qhub[q]->sub[s]>subnum[i]) ! 185: qhub[q]->sub[s]--; } ! 186: changes=1; ! 187: continue; } ! 188: if((i&MSK_ON)==MSK_GET) { ! 189: i&=MSK_OFF; ! 190: savsub=*sub[subnum[i]]; ! 191: continue; } ! 192: if((i&MSK_ON)==MSK_PUT) { ! 193: i&=MSK_OFF; ! 194: ptridx=sub[subnum[i]]->ptridx; ! 195: *sub[subnum[i]]=savsub; ! 196: sub[subnum[i]]->ptridx=ptridx; ! 197: sub[subnum[i]]->grp=grpnum; ! 198: changes=1; ! 199: continue; } ! 200: i=subnum[i]; ! 201: j=0; ! 202: done=0; ! 203: while(!done) { ! 204: n=0; ! 205: sprintf(opt[n++],"%-27.27s%s","Long Name",sub[i]->lname); ! 206: sprintf(opt[n++],"%-27.27s%s","Short Name",sub[i]->sname); ! 207: sprintf(opt[n++],"%-27.27s%s","QWK Name",sub[i]->qwkname); ! 208: sprintf(opt[n++],"%-27.27s%s","Internal Code",sub[i]->code); ! 209: sprintf(opt[n++],"%-27.27s%.40s","Access Requirements" ! 210: ,sub[i]->ar); ! 211: sprintf(opt[n++],"%-27.27s%.40s","Reading Requirements" ! 212: ,sub[i]->read_ar); ! 213: sprintf(opt[n++],"%-27.27s%.40s","Posting Requirements" ! 214: ,sub[i]->post_ar); ! 215: sprintf(opt[n++],"%-27.27s%.40s","Operator Requirements" ! 216: ,sub[i]->op_ar); ! 217: sprintf(opt[n++],"%-27.27s%.40s","Moderated Posting User" ! 218: ,sub[i]->mod_ar); ! 219: sprintf(opt[n++],"%-27.27s%u","Maximum Messages" ! 220: ,sub[i]->maxmsgs); ! 221: if(sub[i]->maxage) ! 222: sprintf(str,"Enabled (%u days old)",sub[i]->maxage); ! 223: else ! 224: strcpy(str,"Disabled"); ! 225: sprintf(opt[n++],"%-27.27s%s","Purge by Age",str); ! 226: if(sub[i]->maxcrcs) ! 227: sprintf(str,"Enabled (%lu message CRCs)",sub[i]->maxcrcs); ! 228: else ! 229: strcpy(str,"Disabled"); ! 230: sprintf(opt[n++],"%-27.27s%s","Duplicate Checking",str); ! 231: ! 232: strcpy(opt[n++],"Toggle Options..."); ! 233: strcpy(opt[n++],"Network Options..."); ! 234: strcpy(opt[n++],"Advanced Options..."); ! 235: opt[n][0]=0; ! 236: sprintf(str,"%s Sub-board",sub[i]->sname); ! 237: savnum=1; ! 238: SETHELP(WHERE); ! 239: /* ! 240: &Sub-board Configuration:& ! 241: ! 242: This menu allows you to configure the individual selected sub-board. ! 243: Options with a trailing &...& provide a sub-menu of more options. ! 244: */ ! 245: switch(ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT ! 246: ,0,0,60,&opt_dflt,0,str,opt)) { ! 247: case -1: ! 248: done=1; ! 249: break; ! 250: case 0: ! 251: SETHELP(WHERE); ! 252: /* ! 253: &Sub-board Long Name:& ! 254: ! 255: This is a description of the message sub-board which is displayed in all ! 256: sub-board listings. ! 257: */ ! 258: strcpy(str,sub[i]->lname); /* save */ ! 259: if(!uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Listings" ! 260: ,sub[i]->lname,LEN_SLNAME,K_EDIT)) ! 261: strcpy(sub[i]->lname,str); /* restore */ ! 262: break; ! 263: case 1: ! 264: SETHELP(WHERE); ! 265: /* ! 266: &Sub-board Short Name:& ! 267: ! 268: This is a short description of the message sub-board which is displayed ! 269: at the main and reading messages prompts. ! 270: */ ! 271: uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Prompts" ! 272: ,sub[i]->sname,LEN_SSNAME,K_EDIT); ! 273: break; ! 274: case 2: ! 275: SETHELP(WHERE); ! 276: /* ! 277: &Sub-board QWK Name:& ! 278: ! 279: This is the name of the sub-board used for QWK off-line readers. ! 280: */ ! 281: uinput(WIN_MID|WIN_SAV,0,17,"Name to use for QWK Packets" ! 282: ,sub[i]->qwkname,10,K_EDIT); ! 283: break; ! 284: case 3: ! 285: SETHELP(WHERE); ! 286: /* ! 287: &Sub-board Internal Code:& ! 288: ! 289: Every sub-board must have its own unique code for Synchronet to refer ! 290: to it internally. This code should be descriptive of the sub-board's ! 291: topic, usually an abreviation of the sub-board's name. ! 292: */ ! 293: strcpy(str,sub[i]->code); ! 294: uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)" ! 295: ,str,8,K_EDIT|K_UPPER); ! 296: if(code_ok(str)) ! 297: strcpy(sub[i]->code,str); ! 298: else { ! 299: helpbuf=invalid_code; ! 300: umsg("Invalid Code"); ! 301: helpbuf=0; } ! 302: break; ! 303: case 4: ! 304: savnum=2; ! 305: sprintf(str,"%s Access",sub[i]->sname); ! 306: getar(str,sub[i]->ar); ! 307: break; ! 308: case 5: ! 309: savnum=2; ! 310: sprintf(str,"%s Reading",sub[i]->sname); ! 311: getar(str,sub[i]->read_ar); ! 312: break; ! 313: case 6: ! 314: savnum=2; ! 315: sprintf(str,"%s Posting",sub[i]->sname); ! 316: getar(str,sub[i]->post_ar); ! 317: break; ! 318: case 7: ! 319: savnum=2; ! 320: sprintf(str,"%s Operator",sub[i]->sname); ! 321: getar(str,sub[i]->op_ar); ! 322: break; ! 323: case 8: ! 324: savnum=2; ! 325: sprintf(str,"%s Moderated Posting User",sub[i]->sname); ! 326: getar(str,sub[i]->mod_ar); ! 327: break; ! 328: case 9: ! 329: sprintf(str,"%u",sub[i]->maxmsgs); ! 330: SETHELP(WHERE); ! 331: /* ! 332: &Maximum Number of Messages:& ! 333: ! 334: This value is the maximum number of messages that will be kept in the ! 335: sub-board. Once this maximum number of messages is reached, the oldest ! 336: messages will be automatically purged. Usually, 100 messages is a ! 337: sufficient maximum. ! 338: */ ! 339: uinput(WIN_MID|WIN_SAV,0,17,"Maximum Number of Messages" ! 340: ,str,5,K_EDIT|K_NUMBER); ! 341: sub[i]->maxmsgs=atoi(str); ! 342: sub[i]->misc|=SUB_HDRMOD; ! 343: break; ! 344: case 10: ! 345: sprintf(str,"%u",sub[i]->maxage); ! 346: SETHELP(WHERE); ! 347: /* ! 348: &Maximum Age of Messages:& ! 349: ! 350: This value is the maximum number of days that messages will be kept in ! 351: the sub-board. ! 352: */ ! 353: uinput(WIN_MID|WIN_SAV,0,17,"Maximum Age of Messages (in days)" ! 354: ,str,5,K_EDIT|K_NUMBER); ! 355: sub[i]->maxage=atoi(str); ! 356: sub[i]->misc|=SUB_HDRMOD; ! 357: break; ! 358: case 11: ! 359: sprintf(str,"%u",sub[i]->maxcrcs); ! 360: SETHELP(WHERE); ! 361: /* ! 362: &Maximum Number of CRCs:& ! 363: ! 364: This value is the maximum number of CRCs that will be kept in the ! 365: sub-board for duplicate message checking. Once this maximum number of ! 366: CRCs is reached, the oldest CRCs will be automatically purged. ! 367: */ ! 368: uinput(WIN_MID|WIN_SAV,0,17,"Maximum Number of CRCs" ! 369: ,str,5,K_EDIT|K_NUMBER); ! 370: sub[i]->maxcrcs=atol(str); ! 371: sub[i]->misc|=SUB_HDRMOD; ! 372: break; ! 373: case 12: ! 374: while(1) { ! 375: n=0; ! 376: sprintf(opt[n++],"%-27.27s%s","Allow Private Posts" ! 377: ,sub[i]->misc&SUB_PRIV ? sub[i]->misc&SUB_PONLY ! 378: ? "Only":"Yes":"No"); ! 379: sprintf(opt[n++],"%-27.27s%s","Allow Anonymous Posts" ! 380: ,sub[i]->misc&SUB_ANON ? sub[i]->misc&SUB_AONLY ! 381: ? "Only":"Yes":"No"); ! 382: sprintf(opt[n++],"%-27.27s%s","Post Using Real Names" ! 383: ,sub[i]->misc&SUB_NAME ? "Yes":"No"); ! 384: sprintf(opt[n++],"%-27.27s%s","Users Can Delete Posts" ! 385: ,sub[i]->misc&SUB_DEL ? sub[i]->misc&SUB_DELLAST ! 386: ? "Last":"Yes":"No"); ! 387: sprintf(opt[n++],"%-27.27s%s","Default On for New Scan" ! 388: ,sub[i]->misc&SUB_NSDEF ? "Yes":"No"); ! 389: sprintf(opt[n++],"%-27.27s%s","Forced On for New Scan" ! 390: ,sub[i]->misc&SUB_FORCED ? "Yes":"No"); ! 391: sprintf(opt[n++],"%-27.27s%s","Default On for Your Scan" ! 392: ,sub[i]->misc&SUB_SSDEF ? "Yes":"No"); ! 393: sprintf(opt[n++],"%-27.27s%s","Public 'To' User" ! 394: ,sub[i]->misc&SUB_TOUSER ? "Yes":"No"); ! 395: sprintf(opt[n++],"%-27.27s%s","Allow Message Quoting" ! 396: ,sub[i]->misc&SUB_QUOTE ? "Yes":"No"); ! 397: sprintf(opt[n++],"%-27.27s%s","Permanent Operator Msgs" ! 398: ,sub[i]->misc&SUB_SYSPERM ? "Yes":"No"); ! 399: sprintf(opt[n++],"%-27.27s%s","Kill Read Messages" ! 400: ,sub[i]->misc&SUB_KILL ? "Yes" ! 401: : (sub[i]->misc&SUB_KILLP ? "Pvt" : "No")); ! 402: #if 1 ! 403: sprintf(opt[n++],"%-27.27s%s","Compress Messages (LZH)" ! 404: ,sub[i]->misc&SUB_LZH ? "Yes" : "No"); ! 405: #endif ! 406: opt[n][0]=0; ! 407: savnum=2; ! 408: SETHELP(WHERE); ! 409: /* ! 410: &Sub-board Toggle Options:& ! 411: ! 412: This menu allows you to toggle certain options for the selected ! 413: sub-board between two or more settings, such as &Yes& and &No&. ! 414: */ ! 415: n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,36,&tog_dflt,0 ! 416: ,"Toggle Options",opt); ! 417: if(n==-1) ! 418: break; ! 419: savnum=3; ! 420: switch(n) { ! 421: case 0: ! 422: n=1; ! 423: strcpy(opt[0],"Yes"); ! 424: strcpy(opt[1],"No"); ! 425: strcpy(opt[2],"Only"); ! 426: opt[3][0]=0; ! 427: SETHELP(WHERE); ! 428: /* ! 429: &Allow Private Posts on Sub-board:& ! 430: ! 431: If you want users to be able to post private messages to other users ! 432: on this sub-board, set this value to &Yes&. Usually, E-mail is the ! 433: preferred method of private communication. If you want users to be able ! 434: to post private messages only on this sub-board, select &Only&. ! 435: */ ! 436: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 437: ,"Allow Private Posts",opt); ! 438: if(n==-1) ! 439: break; ! 440: if(!n && (sub[i]->misc&(SUB_PRIV|SUB_PONLY)) ! 441: !=SUB_PRIV) { ! 442: changes=1; ! 443: sub[i]->misc&=~SUB_PONLY; ! 444: sub[i]->misc|=SUB_PRIV; ! 445: break; } ! 446: if(n==1 && sub[i]->misc&SUB_PRIV) { ! 447: changes=1; ! 448: sub[i]->misc&=~SUB_PRIV; ! 449: break; } ! 450: if(n==2 && (sub[i]->misc&(SUB_PRIV|SUB_PONLY)) ! 451: !=(SUB_PRIV|SUB_PONLY)) { ! 452: changes=1; ! 453: sub[i]->misc|=(SUB_PRIV|SUB_PONLY); } ! 454: break; ! 455: case 1: ! 456: n=1; ! 457: strcpy(opt[0],"Yes"); ! 458: strcpy(opt[1],"No"); ! 459: strcpy(opt[2],"Only"); ! 460: opt[3][0]=0; ! 461: SETHELP(WHERE); ! 462: /* ! 463: &Allow Anonymous Posts on Sub-board:& ! 464: ! 465: If you want users with the &A& exemption to be able to post anonymously on ! 466: this sub-board, select &Yes&. If you want all posts on this sub-board to be ! 467: forced anonymous, select &Only&. If you do not want anonymous posts allowed ! 468: on this sub-board at all, select &No&. ! 469: */ ! 470: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 471: ,"Allow Anonymous Posts",opt); ! 472: if(n==-1) ! 473: break; ! 474: if(!n && (sub[i]->misc&(SUB_ANON|SUB_AONLY)) ! 475: !=SUB_ANON) { ! 476: changes=1; ! 477: sub[i]->misc&=~SUB_AONLY; ! 478: sub[i]->misc|=SUB_ANON; ! 479: break; } ! 480: if(n==1 && sub[i]->misc&(SUB_ANON|SUB_AONLY)) { ! 481: changes=1; ! 482: sub[i]->misc&=~(SUB_ANON|SUB_AONLY); ! 483: break; } ! 484: if(n==2 && (sub[i]->misc&(SUB_ANON|SUB_AONLY)) ! 485: !=(SUB_ANON|SUB_AONLY)) { ! 486: changes=1; ! 487: sub[i]->misc|=(SUB_ANON|SUB_AONLY); } ! 488: break; ! 489: case 2: ! 490: n=1; ! 491: strcpy(opt[0],"Yes"); ! 492: strcpy(opt[1],"No"); ! 493: opt[2][0]=0; ! 494: SETHELP(WHERE); ! 495: /* ! 496: &User Real Names in Posts on Sub-board:& ! 497: ! 498: If you allow aliases on your system, you can have messages on this ! 499: sub-board automatically use the real name of the posting user by setting ! 500: this option to &Yes&. ! 501: */ ! 502: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 503: ,"Use Real Names in Posts",opt); ! 504: if(n==-1) ! 505: break; ! 506: if(!n && !(sub[i]->misc&SUB_NAME)) { ! 507: changes=1; ! 508: sub[i]->misc|=SUB_NAME; ! 509: break; } ! 510: if(n==1 && sub[i]->misc&SUB_NAME) { ! 511: changes=1; ! 512: sub[i]->misc&=~SUB_NAME; } ! 513: break; ! 514: case 3: ! 515: n=2; ! 516: strcpy(opt[0],"Yes"); ! 517: strcpy(opt[1],"No"); ! 518: strcpy(opt[2],"Last Post Only"); ! 519: opt[3][0]=0; ! 520: SETHELP(WHERE); ! 521: /* ! 522: &Users Can Delete Posts on Sub-board:& ! 523: ! 524: If you want users to be able to delete any of their own posts on this ! 525: sub-board, set this option to &Yes&. If you want to allow users the ! 526: ability to delete their message only if it is the last message on the ! 527: sub-board, select &Last Post Only&. If you want to disallow users from ! 528: deleting any of their posts, set this option to &No&. ! 529: */ ! 530: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 531: ,"Users Can Delete Posts",opt); ! 532: if(n==-1) ! 533: break; ! 534: if(!n && (sub[i]->misc&(SUB_DEL|SUB_DELLAST)) ! 535: !=SUB_DEL) { ! 536: changes=1; ! 537: sub[i]->misc&=~SUB_DELLAST; ! 538: sub[i]->misc|=SUB_DEL; ! 539: break; } ! 540: if(n==1 && sub[i]->misc&SUB_DEL) { ! 541: changes=1; ! 542: sub[i]->misc&=~SUB_DEL; ! 543: break; } ! 544: if(n==2 && (sub[i]->misc&(SUB_DEL|SUB_DELLAST)) ! 545: !=(SUB_DEL|SUB_DELLAST)) { ! 546: changes=1; ! 547: sub[i]->misc|=(SUB_DEL|SUB_DELLAST); } ! 548: break; ! 549: case 4: ! 550: n=0; ! 551: strcpy(opt[0],"Yes"); ! 552: strcpy(opt[1],"No"); ! 553: opt[2][0]=0; ! 554: SETHELP(WHERE); ! 555: /* ! 556: &Default On for New Scan:& ! 557: ! 558: If you want this sub-board to be included in all user new message scans ! 559: by default, set this option to &Yes&. ! 560: */ ! 561: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 562: ,"Default On for New Scan",opt); ! 563: if(n==-1) ! 564: break; ! 565: if(!n && !(sub[i]->misc&SUB_NSDEF)) { ! 566: changes=1; ! 567: sub[i]->misc|=SUB_NSDEF; ! 568: break; } ! 569: if(n==1 && sub[i]->misc&SUB_NSDEF) { ! 570: changes=1; ! 571: sub[i]->misc&=~SUB_NSDEF; } ! 572: break; ! 573: case 5: ! 574: n=1; ! 575: strcpy(opt[0],"Yes"); ! 576: strcpy(opt[1],"No"); ! 577: opt[2][0]=0; ! 578: SETHELP(WHERE); ! 579: /* ! 580: &Forced On for New Scan:& ! 581: ! 582: If you want this sub-board to be included in all user new message scans ! 583: even if the user has removed it from their new scan configuration, set ! 584: this option to &Yes&. ! 585: */ ! 586: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 587: ,"Forced New Scan",opt); ! 588: if(n==-1) ! 589: break; ! 590: if(!n && !(sub[i]->misc&SUB_FORCED)) { ! 591: changes=1; ! 592: sub[i]->misc|=SUB_FORCED; ! 593: break; } ! 594: if(n==1 && sub[i]->misc&SUB_FORCED) { ! 595: changes=1; ! 596: sub[i]->misc&=~SUB_FORCED; } ! 597: break; ! 598: case 6: ! 599: n=0; ! 600: strcpy(opt[0],"Yes"); ! 601: strcpy(opt[1],"No"); ! 602: opt[2][0]=0; ! 603: SETHELP(WHERE); ! 604: /* ! 605: &Default On for Your Scan:& ! 606: ! 607: If you want this sub-board to be included in all user personal message ! 608: scans by default, set this option to &Yes&. ! 609: */ ! 610: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 611: ,"Default On for Your Scan",opt); ! 612: if(n==-1) ! 613: break; ! 614: if(!n && !(sub[i]->misc&SUB_SSDEF)) { ! 615: changes=1; ! 616: sub[i]->misc|=SUB_SSDEF; ! 617: break; } ! 618: if(n==1 && sub[i]->misc&SUB_SSDEF) { ! 619: changes=1; ! 620: sub[i]->misc&=~SUB_SSDEF; } ! 621: break; ! 622: case 7: ! 623: n=1; ! 624: strcpy(opt[0],"Yes"); ! 625: strcpy(opt[1],"No"); ! 626: opt[2][0]=0; ! 627: SETHELP(WHERE); ! 628: /* ! 629: &Prompt for 'To' User on Public Posts:& ! 630: ! 631: If you want all posts on this sub-board to be prompted for a 'To' user, ! 632: set this option to &Yes&. This is a useful option for sub-boards that ! 633: are on a network that does not allow private posts. ! 634: */ ! 635: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 636: ,"Prompt for 'To' User on Public Posts",opt); ! 637: if(n==-1) ! 638: break; ! 639: if(!n && !(sub[i]->misc&SUB_TOUSER)) { ! 640: changes=1; ! 641: sub[i]->misc|=SUB_TOUSER; ! 642: break; } ! 643: if(n==1 && sub[i]->misc&SUB_TOUSER) { ! 644: changes=1; ! 645: sub[i]->misc&=~SUB_TOUSER; } ! 646: break; ! 647: case 8: ! 648: n=1; ! 649: strcpy(opt[0],"Yes"); ! 650: strcpy(opt[1],"No"); ! 651: opt[2][0]=0; ! 652: SETHELP(WHERE); ! 653: /* ! 654: &Allow Message Quoting:& ! 655: ! 656: If you want users to be allowed to quote messages on this sub-board, set ! 657: this option to &Yes&. ! 658: */ ! 659: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 660: ,"Allow Message Quoting",opt); ! 661: if(n==-1) ! 662: break; ! 663: if(!n && !(sub[i]->misc&SUB_QUOTE)) { ! 664: changes=1; ! 665: sub[i]->misc|=SUB_QUOTE; ! 666: break; } ! 667: if(n==1 && sub[i]->misc&SUB_QUOTE) { ! 668: changes=1; ! 669: sub[i]->misc&=~SUB_QUOTE; } ! 670: break; ! 671: case 9: ! 672: n=1; ! 673: strcpy(opt[0],"Yes"); ! 674: strcpy(opt[1],"No"); ! 675: opt[2][0]=0; ! 676: SETHELP(WHERE); ! 677: /* ! 678: &Operator Messages Automatically Permanent:& ! 679: ! 680: If you want messages posted by &System& and &Sub-board Operators& to be ! 681: automatically permanent (non-purgable) for this sub-board, set this ! 682: option to &Yes&. ! 683: */ ! 684: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 685: ,"Permanent Operator Messages",opt); ! 686: if(n==-1) ! 687: break; ! 688: if(!n && !(sub[i]->misc&SUB_SYSPERM)) { ! 689: changes=1; ! 690: sub[i]->misc|=SUB_SYSPERM; ! 691: break; } ! 692: if(n==1 && sub[i]->misc&SUB_SYSPERM) { ! 693: changes=1; ! 694: sub[i]->misc&=~SUB_SYSPERM; } ! 695: break; ! 696: case 10: ! 697: n=1; ! 698: strcpy(opt[0],"Yes"); ! 699: strcpy(opt[1],"No"); ! 700: strcpy(opt[2],"Private"); ! 701: opt[3][0]=0; ! 702: SETHELP(WHERE); ! 703: /* ! 704: &Kill Read Messages Automatically:& ! 705: ! 706: If you want messages that have been read by the intended recipient to ! 707: be automatically deleted by &SMBUTIL&, set this option to &Yes& or ! 708: &Private& if you want only private messages to be automatically deleted. ! 709: */ ! 710: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 711: ,"Kill Read Messages",opt); ! 712: if(n==-1) ! 713: break; ! 714: if(!n && !(sub[i]->misc&SUB_KILL)) { ! 715: changes=1; ! 716: sub[i]->misc|=SUB_KILL; ! 717: sub[i]->misc&=~SUB_KILLP; ! 718: break; } ! 719: if(n==1 && sub[i]->misc&(SUB_KILL|SUB_KILLP)) { ! 720: changes=1; ! 721: sub[i]->misc&=~(SUB_KILL|SUB_KILLP); } ! 722: if(n==2 && !(sub[i]->misc&SUB_KILLP)) { ! 723: changes=1; ! 724: sub[i]->misc|=SUB_KILLP; ! 725: sub[i]->misc&=~SUB_KILL; ! 726: break; } ! 727: break; ! 728: #if 1 ! 729: case 11: ! 730: n=1; ! 731: strcpy(opt[0],"Yes"); ! 732: strcpy(opt[1],"No"); ! 733: opt[2][0]=0; ! 734: SETHELP(WHERE); ! 735: /* ! 736: &Compress Messages with LZH Encoding:& ! 737: ! 738: If you want all messages in this sub-board to be automatically ! 739: compressed via &LZH& (Lempel/Ziv/Huffman algorithm used in LHarc, LHA, ! 740: and other popular compression and archive programs), this option to &Yes&. ! 741: ! 742: Compression will slow down the reading and writing of messages slightly, ! 743: but the storage space saved can be as much as &50 percent&. ! 744: ! 745: Before setting this option to &Yes&, make sure that all of the SMB ! 746: compatible mail programs you use support the &LZH& translation. ! 747: */ ! 748: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 749: ,"Compress Messages (LZH)",opt); ! 750: if(n==-1) ! 751: break; ! 752: if(!n && !(sub[i]->misc&SUB_LZH)) { ! 753: changes=1; ! 754: sub[i]->misc|=SUB_LZH; ! 755: break; } ! 756: if(n==1 && sub[i]->misc&SUB_LZH) { ! 757: changes=1; ! 758: sub[i]->misc&=~SUB_LZH; } ! 759: break; ! 760: #endif ! 761: } } ! 762: break; ! 763: case 13: ! 764: while(1) { ! 765: n=0; ! 766: sprintf(opt[n++],"%-27.27s%s","Append Tag/Origin Line" ! 767: ,sub[i]->misc&SUB_NOTAG ? "No":"Yes"); ! 768: sprintf(opt[n++],"%-27.27s%s","Export ASCII Only" ! 769: ,sub[i]->misc&SUB_ASCII ? "Yes":"No"); ! 770: sprintf(opt[n++],"%-27.27s%s","Gate Between Net Types" ! 771: ,sub[i]->misc&SUB_GATE ? "Yes":"No"); ! 772: sprintf(opt[n++],"%-27.27s%s","QWK Networked" ! 773: ,sub[i]->misc&SUB_QNET ? "Yes":"No"); ! 774: sprintf(opt[n++],"QWK Tagline"); ! 775: sprintf(opt[n++],"%-27.27s%s","Internet" ! 776: ,sub[i]->misc&SUB_INET ? "Yes":"No"); ! 777: sprintf(opt[n++],"%-27.27s%s","PostLink or PCRelay" ! 778: ,sub[i]->misc&SUB_PNET ? "Yes":"No"); ! 779: sprintf(opt[n++],"%-27.27s%s","FidoNet EchoMail" ! 780: ,sub[i]->misc&SUB_FIDO ? "Yes":"No"); ! 781: sprintf(opt[n++],"%-27.27s%s","FidoNet Address" ! 782: ,faddrtoa(sub[i]->faddr)); ! 783: sprintf(opt[n++],"EchoMail Origin Line"); ! 784: if(!sub[i]->echopath[0]) ! 785: sprintf(str,"%s%s\\",echomail_dir,sub[i]->code); ! 786: else ! 787: strcpy(str,sub[i]->echopath); ! 788: sprintf(opt[n++],"%-27.27s%.40s","EchoMail Directory" ! 789: ,str); ! 790: if(!sub[i]->echomail_sem[0]) ! 791: strcpy(str,echomail_sem); ! 792: else ! 793: strcpy(str,sub[i]->echomail_sem); ! 794: sprintf(opt[n++],"%-27.27s%.40s","EchoMail Semaphore File" ! 795: ,str); ! 796: opt[n][0]=0; ! 797: savnum=2; ! 798: SETHELP(WHERE); ! 799: /* ! 800: &Sub-board Network Options:& ! 801: ! 802: This menu contains options for the selected sub-board that pertain ! 803: specifically to message networking. ! 804: */ ! 805: n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,60,&net_dflt,0 ! 806: ,"Network Options",opt); ! 807: if(n==-1) ! 808: break; ! 809: savnum=3; ! 810: switch(n) { ! 811: case 0: ! 812: n=0; ! 813: strcpy(opt[0],"Yes"); ! 814: strcpy(opt[1],"No"); ! 815: opt[2][0]=0; ! 816: SETHELP(WHERE); ! 817: /* ! 818: &Append Tag/Origin Line to Posts:& ! 819: ! 820: If you want to disable the automatic addition of a network tagline or ! 821: origin line to the bottom of outgoing networked posts from this ! 822: sub-board, set this option to &No&. ! 823: */ ! 824: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 825: ,"Append Tag/Origin Line to Posts",opt); ! 826: if(n==-1) ! 827: break; ! 828: if(!n && sub[i]->misc&SUB_NOTAG) { ! 829: changes=1; ! 830: sub[i]->misc&=~SUB_NOTAG; ! 831: break; } ! 832: if(n==1 && !(sub[i]->misc&SUB_NOTAG)) { ! 833: changes=1; ! 834: sub[i]->misc|=SUB_NOTAG; } ! 835: break; ! 836: case 1: ! 837: n=0; ! 838: strcpy(opt[0],"Yes"); ! 839: strcpy(opt[1],"No"); ! 840: opt[2][0]=0; ! 841: SETHELP(WHERE); ! 842: /* ! 843: &Export ASCII Characters Only:& ! 844: ! 845: If the network that this sub-board is echoed on does not allow extended ! 846: ASCII (>127) or control codes (<20, not including CR), set this option ! 847: to &Yes&. ! 848: */ ! 849: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 850: ,"Export ASCII Characters Only",opt); ! 851: if(n==-1) ! 852: break; ! 853: if(n && sub[i]->misc&SUB_ASCII) { ! 854: changes=1; ! 855: sub[i]->misc&=~SUB_ASCII; ! 856: break; } ! 857: if(!n && !(sub[i]->misc&SUB_ASCII)) { ! 858: changes=1; ! 859: sub[i]->misc|=SUB_ASCII; } ! 860: break; ! 861: case 2: ! 862: n=1; ! 863: strcpy(opt[0],"Yes"); ! 864: strcpy(opt[1],"No"); ! 865: opt[2][0]=0; ! 866: SETHELP(WHERE); ! 867: /* ! 868: &Gate Between Net Types:& ! 869: ! 870: If this sub-board is networked using more than one network technology, ! 871: and you want messages to be &gated& between the networks, set this ! 872: option to &Yes&. ! 873: ! 874: If this option is set to &No&, messages imported from one network type ! 875: will ¬& be exported to another network type. This is the default and ! 876: should be used unless you have &specific& permission from both networks ! 877: to gate this sub-board. Incorrectly gated sub-boards can cause duplicate ! 878: messages loops and cross-posted messages. ! 879: ! 880: This option does not affect the exporting of messages created on your ! 881: BBS. ! 882: */ ! 883: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 884: ,"Gate Between Net Types",opt); ! 885: if(n==-1) ! 886: break; ! 887: if(!n && !(sub[i]->misc&SUB_GATE)) { ! 888: changes=1; ! 889: sub[i]->misc|=SUB_GATE; ! 890: break; } ! 891: if(n==1 && sub[i]->misc&SUB_GATE) { ! 892: changes=1; ! 893: sub[i]->misc&=~SUB_GATE; } ! 894: break; ! 895: case 3: ! 896: n=1; ! 897: strcpy(opt[0],"Yes"); ! 898: strcpy(opt[1],"No"); ! 899: opt[2][0]=0; ! 900: SETHELP(WHERE); ! 901: /* ! 902: &Sub-board Networked via QWK Packets:& ! 903: ! 904: If this sub-board is networked with other BBSs via QWK packets, this ! 905: option should be set to &Yes&. With this option set to &Yes&, titles of ! 906: posts on this sub-board will be limited to the QWK packet limitation of ! 907: 25 characters. It also allows the &N&etwork restriction to function ! 908: properly. ! 909: */ ! 910: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 911: ,"Networked via QWK Packets",opt); ! 912: if(n==-1) ! 913: break; ! 914: if(!n && !(sub[i]->misc&SUB_QNET)) { ! 915: changes=1; ! 916: sub[i]->misc|=SUB_QNET; ! 917: break; } ! 918: if(n==1 && sub[i]->misc&SUB_QNET) { ! 919: changes=1; ! 920: sub[i]->misc&=~SUB_QNET; } ! 921: break; ! 922: case 4: ! 923: SETHELP(WHERE); ! 924: /* ! 925: &Sub-board QWK Network Tagline:& ! 926: ! 927: If you want to use a different QWK tagline than the configured default ! 928: tagline in the &Networks& configuration, you should enter that tagline ! 929: here. If this option is left blank, the default tagline is used. ! 930: */ ! 931: uinput(WIN_MID|WIN_SAV,0,0,nulstr,sub[i]->tagline ! 932: ,63,K_MSG|K_EDIT); ! 933: break; ! 934: case 5: ! 935: n=1; ! 936: strcpy(opt[0],"Yes"); ! 937: strcpy(opt[1],"No"); ! 938: opt[2][0]=0; ! 939: SETHELP(WHERE); ! 940: /* ! 941: &Sub-board Networked via Internet:& ! 942: ! 943: If this sub-board is networked to the Internet via UUCP, this option ! 944: should be set to &Yes&. ! 945: ! 946: It will allow the &N&etwork restriction to function properly. ! 947: */ ! 948: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 949: ,"Networked via Internet",opt); ! 950: if(n==-1) ! 951: break; ! 952: if(!n && !(sub[i]->misc&SUB_INET)) { ! 953: changes=1; ! 954: sub[i]->misc|=SUB_INET; ! 955: break; } ! 956: if(n==1 && sub[i]->misc&SUB_INET) { ! 957: changes=1; ! 958: sub[i]->misc&=~SUB_INET; } ! 959: break; ! 960: case 6: ! 961: n=1; ! 962: strcpy(opt[0],"Yes"); ! 963: strcpy(opt[1],"No"); ! 964: opt[2][0]=0; ! 965: SETHELP(WHERE); ! 966: /* ! 967: &Sub-board Networked via PostLink or PCRelay:& ! 968: ! 969: If this sub-board is networked with other BBSs via PostLink or PCRelay, ! 970: this option should be set to &Yes&. With this option set to &Yes&, ! 971: titles of posts on this sub-board will be limited to the UTI ! 972: specification limitation of 25 characters. It also allows the &N&etwork ! 973: restriction to function properly. ! 974: */ ! 975: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 976: ,"Networked via PostLink or PCRelay",opt); ! 977: if(n==-1) ! 978: break; ! 979: if(!n && !(sub[i]->misc&SUB_PNET)) { ! 980: changes=1; ! 981: sub[i]->misc|=SUB_PNET; ! 982: break; } ! 983: if(n==1 && sub[i]->misc&SUB_PNET) { ! 984: changes=1; ! 985: sub[i]->misc&=~SUB_PNET; } ! 986: break; ! 987: case 7: ! 988: n=1; ! 989: strcpy(opt[0],"Yes"); ! 990: strcpy(opt[1],"No"); ! 991: opt[2][0]=0; ! 992: SETHELP(WHERE); ! 993: /* ! 994: &Sub-board Networked via FidoNet EchoMail:& ! 995: ! 996: If this sub-board is part of a FidoNet EchoMail conference, set this ! 997: option to &Yes&. ! 998: */ ! 999: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 1000: ,"Networked via FidoNet EchoMail",opt); ! 1001: if(n==-1) ! 1002: break; ! 1003: if(!n && !(sub[i]->misc&SUB_FIDO)) { ! 1004: changes=1; ! 1005: sub[i]->misc|=SUB_FIDO; ! 1006: break; } ! 1007: if(n==1 && sub[i]->misc&SUB_FIDO) { ! 1008: changes=1; ! 1009: sub[i]->misc&=~SUB_FIDO; } ! 1010: break; ! 1011: case 8: ! 1012: strcpy(str,faddrtoa(sub[i]->faddr)); ! 1013: SETHELP(WHERE); ! 1014: /* ! 1015: &Sub-board FidoNet Address:& ! 1016: ! 1017: If this sub-board is part of a FidoNet EchoMail conference, this is ! 1018: the address used for this sub-board. Format: &Zone:Net/Node[.Point]& ! 1019: */ ! 1020: uinput(WIN_MID|WIN_SAV,0,0,"FidoNet Address" ! 1021: ,str,20,K_EDIT); ! 1022: sub[i]->faddr=atofaddr(str); ! 1023: break; ! 1024: case 9: ! 1025: SETHELP(WHERE); ! 1026: /* ! 1027: &Sub-board FidoNet Origin Line:& ! 1028: ! 1029: If this sub-board is part of a FidoNet EchoMail conference and you ! 1030: want to use an origin line other than the default origin line in the ! 1031: &Networks& configuration, set this value to the desired origin line. ! 1032: ! 1033: If this option is blank, the default origin line is used. ! 1034: */ ! 1035: uinput(WIN_MID|WIN_SAV,0,0,nulstr,sub[i]->origline ! 1036: ,50,K_EDIT); ! 1037: break; ! 1038: case 10: ! 1039: SETHELP(WHERE); ! 1040: /* ! 1041: &Sub-board EchoMail Storage Directory:& ! 1042: ! 1043: This is the storage directory where FidoNet style (FTS-0001 stored ! 1044: message format) messages are imported from and exported to for this ! 1045: sub-board. If this option is blank, then the &EchoMail Base Directory& is ! 1046: used with the internal code of this sub-board as the sub-directory where ! 1047: the FidoNet messages are stored. ! 1048: */ ! 1049: ! 1050: uinput(WIN_MID|WIN_SAV,0,0 ! 1051: ,"EchoMail Directory" ! 1052: ,sub[i]->echopath,50,K_UPPER|K_EDIT); ! 1053: break; ! 1054: case 11: ! 1055: SETHELP(WHERE); ! 1056: /* ! 1057: &EchoMail Semaphore File:& ! 1058: ! 1059: This is a filename that will be used as a semaphore (signal) to your ! 1060: FidoNet front-end that new EchoMail has been created and the messages ! 1061: should be re-scanned. ! 1062: */ ! 1063: uinput(WIN_MID|WIN_SAV,0,17,"EchoMail Semaphore" ! 1064: ,sub[i]->echomail_sem,50,K_EDIT|K_UPPER); ! 1065: break; } } ! 1066: break; ! 1067: case 14: ! 1068: while(1) { ! 1069: n=0; ! 1070: if(sub[i]->qwkconf) ! 1071: sprintf(str,"Static (%u)",sub[i]->qwkconf); ! 1072: else ! 1073: strcpy(str,"Dynamic"); ! 1074: sprintf(opt[n++],"%-27.27s%s","QWK Conference Number" ! 1075: ,str); ! 1076: sprintf(opt[n++],"%-27.27s%s","Storage Method" ! 1077: ,sub[i]->misc&SUB_HYPER ? "Hyper Allocation" ! 1078: : sub[i]->misc&SUB_FAST ? "Fast Allocation" ! 1079: : "Self-packing"); ! 1080: if(!sub[i]->data_dir[0]) ! 1081: sprintf(str,"%sSUBS\\",data_dir); ! 1082: else ! 1083: strcpy(str,sub[i]->data_dir); ! 1084: sprintf(opt[n++],"%-27.27s%.40s","Storage Directory",str); ! 1085: opt[n][0]=0; ! 1086: savnum=2; ! 1087: SETHELP(WHERE); ! 1088: /* ! 1089: &Sub-board Advanced Options:& ! 1090: ! 1091: This menu contains options for the selected sub-board that are advanced ! 1092: in nature. ! 1093: */ ! 1094: n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,60,&adv_dflt,0 ! 1095: ,"Advanced Options",opt); ! 1096: if(n==-1) ! 1097: break; ! 1098: savnum=3; ! 1099: switch(n) { ! 1100: case 0: ! 1101: SETHELP(WHERE); ! 1102: /* ! 1103: &Sub-board QWK Conference Number:& ! 1104: ! 1105: If you wish to have the QWK conference number for this sub-board ! 1106: automatically generated by Synchronet (based on the group number ! 1107: and sub-board number for the user), set this option to &Dynamic&. ! 1108: ! 1109: If you wish to have the same QWK conference number for this sub-board ! 1110: regardless of which user access it, set this option to &Static& ! 1111: by entering the conference number you want to use. ! 1112: */ ! 1113: if(sub[i]->qwkconf) ! 1114: sprintf(str,"%u",sub[i]->qwkconf); ! 1115: else ! 1116: str[0]=0; ! 1117: if(uinput(WIN_MID|WIN_SAV,0,17 ! 1118: ,"QWK Conference Number (0=Dynamic)" ! 1119: ,str,5,K_EDIT|K_NUMBER)>=0) ! 1120: sub[i]->qwkconf=atoi(str); ! 1121: break; ! 1122: case 1: ! 1123: n=0; ! 1124: strcpy(opt[0],"Hyper Allocation"); ! 1125: strcpy(opt[1],"Fast Allocation"); ! 1126: strcpy(opt[2],"Self-packing"); ! 1127: opt[3][0]=0; ! 1128: SETHELP(WHERE); ! 1129: /* ! 1130: &Self-Packing& is the slowest storage method because it conserves disk ! 1131: space as it imports messages by using deleted message header and data ! 1132: blocks for new messages automatically. If you use this storage method, ! 1133: you will not need to run &SMBUTIL P& on this message base unless you ! 1134: accumilate a large number of deleted message blocks and wish to free ! 1135: that disk space. You can switch from self-packing to fast allocation ! 1136: storage method and back again as you wish. ! 1137: &Fast Allocation& is faster than self-packing because it does not search ! 1138: for deleted message blocks for new messages. It automatically places ! 1139: all new message blocks at the end of the header and data files. If you ! 1140: use this storage method, you will need to run &SMBUTIL P& on this ! 1141: message base periodically or it will continually use up disk space. ! 1142: &Hyper Allocation& is the fastest storage method because it does not ! 1143: maintain allocation files at all. Once a message base is setup to use ! 1144: this storage method, it should not be changed without first deleting ! 1145: the message base data files in your &DATA\DIRS\SUBS& directory for this ! 1146: sub-board. You must use &SMBUTIL P& as with the fast allocation method. ! 1147: */ ! 1148: n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0 ! 1149: ,"Storage Method",opt); ! 1150: if(n==-1) ! 1151: break; ! 1152: if(!n && !(sub[i]->misc&SUB_HYPER)) { ! 1153: changes=1; ! 1154: sub[i]->misc|=SUB_HYPER; ! 1155: sub[i]->misc&=~SUB_FAST; ! 1156: sub[i]->misc|=SUB_HDRMOD; ! 1157: break; } ! 1158: if(!n) ! 1159: break; ! 1160: if(sub[i]->misc&SUB_HYPER) { /* Switching from hyper */ ! 1161: strcpy(opt[0],"Yes"); ! 1162: strcpy(opt[1],"No, I want to use Hyper Allocation"); ! 1163: opt[2][0]=0; ! 1164: m=0; ! 1165: if(ulist(WIN_SAV|WIN_MID,0,0,0,&m,0 ! 1166: ,"Delete all messages in this sub-board?",opt)!=0) ! 1167: break; ! 1168: if(sub[i]->data_dir[0]) ! 1169: sprintf(str,"%s",sub[i]->data_dir); ! 1170: else ! 1171: sprintf(str,"%sSUBS\\",data_dir); ! 1172: sprintf(str2,"%s.*",sub[i]->code); ! 1173: delfiles(str,str2); } ! 1174: ! 1175: if(sub[i]->misc&SUB_HYPER) ! 1176: sub[i]->misc|=SUB_HDRMOD; ! 1177: if(n==1 && !(sub[i]->misc&SUB_FAST)) { ! 1178: changes=1; ! 1179: sub[i]->misc|=SUB_FAST; ! 1180: sub[i]->misc&=~SUB_HYPER; ! 1181: break; } ! 1182: if(n==2 && sub[i]->misc&(SUB_FAST|SUB_HYPER)) { ! 1183: changes=1; ! 1184: sub[i]->misc&=~(SUB_FAST|SUB_HYPER); ! 1185: break; } ! 1186: break; ! 1187: case 2: ! 1188: SETHELP(WHERE); ! 1189: /* ! 1190: &Sub-board Storage Directory:& ! 1191: ! 1192: Use this if you wish to place the data directory for this sub-board on ! 1193: another drive or in another directory besides the default setting. ! 1194: */ ! 1195: uinput(WIN_MID|WIN_SAV,0,17,"Directory" ! 1196: ,sub[i]->data_dir,50,K_EDIT|K_UPPER); ! 1197: break; } } ! 1198: break; ! 1199: } } } ! 1200: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.