Category : BBS Programs+Doors
Archive   : TONSMOD.ZIP
Filename : MODNET1.MOD
| WWIV ModNet Modifications
| Collection Number One
| 2/14/89
| Compiled by
| Moribund the Burgermeister 2@8407
| (AKA The Other Wayne 1@8407)
-----+------------------------------------------------------------------------
The following mods were originally posted on the WWIVnet Modifications Sub,
number 2370, carried by The Captain's board, the White Star Line, @2370.
Messages were captured from my board, and have been reprinted with the name of
the author and the date posted preserved.
These Collections will be released every month or two, depending on how fast
they come in, when I get them together and when I call out to distribute them.
They will always be released on the fifteenth of the month of release.
Due to my abject poverty, I will only upload them to a few boards, MrBills
Abode (the original) being one of them at least, and maybe the Galactic
Headquarters. California is too far away, so I won't be sending them to
Wayne's board....
Anyway, this is Collection Number One, as it says above. Slick's new SALT
system is in the acompanying file, SALTII.MOD. At 8 pages, it was too large
to be included here. All else received at this board up to February 14 is in
this file (meaningless messages have been excluded, of course).
Before we start, the obligatory plug for by board:
The Rappahannock Vaporboard, Kilmarnock, VA
Home of the Deadtown Vapornet Suburbs, the pop-culture net
WWIVNet node 8407
(804) 435-0602
===========================================================================
David Truong #73 @2382 [The Tech Corner]
Sat Jan 21 12:16:49 1989
UNLIMITED UPLOAD POST
BY SLICK THE SLICKSTER
1/20/89
This ARC file SLICK2.ARC, contains this file, SLICK2.MOD.
This is a mod that will eliminate the limited bytes the users (and us
remote sysops too) gets when he/she uses the //UPLOAD command. When you add this mod into your source, and compile it, the user can upload any mount of bytes the temporary directory has free.
FIRST
All of the code mods are in VOID UPLOAD_POST(), which is in BBSUTL.C.
void upload_post() /* LEGEND: * = Change Line */
{ /* - = Delete Line */
char s[81],s1[81],ch; /* + = Add Line */
* int i,i1,f;
long l,l1;
- if (thisuser.sl<45)
- maxli=30;
- else
- if (thisuser.sl<60)
- maxli=50;
- else
- if (thisuser.sl<80)
- maxli=80;
strcpy(s,syscfg.tempdir);
strcat(s,"INPUT.MSG");
* l1=1024*(long)(freek1(syscfg.tempdir));
The first "*" just deletes the variable MAXLI, because we do not need to
limit the maximum bytes. All the "-" just deletes the lines that do the limiting, so we don't need those. The second "*" just changes the value of the variable "L1". "L1" contains the maximum bytes you can write to the "INPUT.MSG" file.
We calculated this by passing the path to the temporary directory to the
FREEK1 (found in UTILITY.C) function which returns the "Free Kilobytes" in
the temporary dir and we multiply it by 1024 so that the kilobytes would now
be bytes. So, now "L1" has the value of the maximum free bytes in the
temporary directory. Now the rest of the source of UPLOAD_POST() would take
care of "L1" variable...
------------------------------------------------------------------------------
Walter Liebkemann #1 @5404 [Metropolis BBS]
Mon Jan 23 00:11:36 1989
Birthday Gold MOD....
Here's a nice little MOD if you have the GOLD system on your BBS - it gives
a user 30 gold (or however much you wish) on their birthday. You don't need
to check for thisuser.ontoday because the date only changes once. The user will be given their gold on their birthday or their first call afterwards...
Enjoy.
Walter Liebkemann - Metropolis BBS - Node 5404
(File is BBSUTL.C)
= means the line is already there; search for it.
+ means this is a line to add.
=if (thisuser.year) {
= s[0]=years_old(thisuser.month,thisuser.day,thisuser.year);
= if (thisuser.age!=s[0]) {
= thisuser.age=s[0];
+ nl(); nl(); nl();
+ prt(3," --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--");
+ nl();
+ prt(5," Happy birthday to you, Happy birthday to you, Happy Birthday");
+ nl();
+ ansic(5);
+ print(" dear ",thisuser.name,", happy birthday to you!","");
+ nl();
+ prt(3," --==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--");
+ nl(); nl();
+ prt(2," Enjoy your -=> 30 gold !!!!!!!!!!!");
+ nl();
+ thisuser.gold +=30.0;
= topscreen();
------------------------------------------------------------------------------
Jonathan Schrag #1 @8405 [Frontier BBS]
Sun Jan 22 09:47:12 1989
this mod should be VERY easy to figure out how to do... Well, two actually!
First:
I would like one mod that will allow the BBS to switch between more than
one welcome... Like for one caller print one, and the next caller, it
rotates to the next picture...
Second:
I would like a mod that when you type Y to post a message on a sub....
After you finish posting that message, I would like it to ask the same
'Would you like to post on.....' again!
Now a mod from me... REAL simple...
This mod will allow the user to see a Sysop Is Avalible message at the
main menu prompt if scroll lock is on...
1st:
Cntrl-Q-F: strcat(s2,subboards[usub[cursub].subnum].name);
Now look down about 4-5 lines and you will see a line that says:
prt(s1);
Add the following line BEFORE 'prt(s1);':
Add:
if (sysop2())
print("Sysop Is Available"); /* Anything you want it to say about the sysop being availbale can go here */
else
print("Sysop Is Not Available"); /* Anything here too, or if you want
NOTHING if the sysop is not available,
just do not add this line...*/
So it should look like:
* if (sysop2())
* print(3,"Sysop Is Available");
* else
* print(3,"Sysop Is Not Available"); /* Can Be Left Out */
+ prt(s1);
Legend: + = ORIGINAL CODE
* = NEW CODE
The number 3 that shows up in the: print(3,"sysop is.... can be changed
to any number from 0-7... That is the color... You all know the ansi
colors I guess (or can easily find them out...)... So, those lines can be
made any color you want!
Thats it!
Jonathan
1 @ 8405
------------------------------------------------------------------------------
The Black Dragon #1 @2380 [Black Dragon Enterprises]
Sun Jan 22 15:34:37 1989
Well, this is my "auto-purge" routine. It will purge all users who haven't
called for at least the number of days indicated by the "if (d>##)" conditional below. It will not purge user #1 under any circumstances! It will also produce a log record of all users which have been purged.
A good place to put the call to this routine is just after the call to
begin_day(); in BBSUTL.C. Remember to add the function to FCNS.H
#define exempt_purge 0x## /* Whatever bit position you want as long as it's
unique from the other exemptions */
void auto_delete()
{
int count, i;
float d;
char s[81];
userrec u;
count=0;
for (i=2;i<=syscfg.maxusers;i--) {
read_user(i,&u);
if (!(u.inact & inact_deleted) && !(u.exempt & exempt_purge)) {
d=(time(&s)-u.daten)/24.0/3600.0;
if (d>33) { /* NUMBER OF DAYS USER MUST BE INACTIVE */
sprintf(s,"=> Auto-deleted user #%d - %s", i, u.name);
deluser(i);
sysoplog(s);
++count;
}
}
}
sprintf(s,"Auto-Deleted %d user(s)",count);
sysoplog(s);
prt(6,s);
nl();
}
-------------
In my Auto-purge routine, ... (error correction)
Name: The Black Dragon #1 @2380 [Black Dragon Enterprises]
Date: Sun Jan 22 23:31:03 1989
THe for loop should end with ++i, not --i. That was a minor ovesight; I
copied the routine from an older copy where I did the loop backwards, but
decided that the user numbers should be printed out in order.
The Black Dragon.
------------------------------------------------------------------------------
Piano Man #1 @5402
Mon Jan 23 18:41:13 1989
REPLY TO POST MOD
by Piano Man
Starlite BBS -- (504) 832-0696
This mod will allow users to reply to a post from the 'Read(1-xx,^xx),? :'
prompt when scanning a sub-board. Typing 'RE' at the read prompt will
allow a reply to be posted, which will contain a line of the form 'RE:'
followed by the title of the message which is being replied to (assumed
to be the message just read).
In MSGBASE1.C:
= existing line
+ add
= if (strcmp(s,"CLS")==0)
= outchr('\x0c');
+ if (strcmp(s,"RE")==0) {
+ strcpy(irt,"RE: ");
+ strcpy(irt,msgs[msgnum].title);
+ nl(); prt(2,"Reply to: "); prt(1,msgs[msgnum].title); nl();
+ post();
+ break;
+ }
= }
= break;
= case 1: /* List Titles */
= i=0;
= abort=0
------------------------------------------------------------------------------
Piano Man #1 @5402
Mon Jan 23 21:49:15 1989
ABORT N-SCAN MOD
by Piano Man
Starlite BBS -- (504) 832-0696
OK, Sparky, this one's for you. It will allow you to abort a N-scan
at any time by hitting Ctrl-X.
...PM
= existing line (don't change) File: MSGBASE1.C
+ add line
x modify existing line
void nscan(int ss)
{
= int i,nextsub;
+ char ch;
= nl();
= nextsub=1;
x prt(3,"<< Q-Scan All >> -- Ctrl-X to abort");
= nl();
+ ch=0;
x for (i=ss; (usub[i].subnum!=-1) && (i<32) && (nextsub) && (!hangup)
&& (!(ch==24)); i++) {
+ ch=inkey();
= if (thisuser.qscn & (1L<<(usub[i].subnum)))
= qscan(i,&nextsub);
= }
= nl();
= prt(3,"<< Global Q-Scan Done >>");
= nl();
= nl()
------------------------------------------------------------------------------
The Captain #1 @2370
Thu Jan 26 14:10:24 1989
NEW MAIN MENU PROMPT
By The Captain of the White Star Line (@2370)
This is a simple modification that will make your main prompt look like:
Time Left: 04:15:15 {Editor's note: These lines appeared in
[Local Message Area] color in the original mod printing -wh}
[1] [News from the SysOps]:
When the user is logged to a network message area, the second line will say
[Network Message Area] {So did this one. -wh}
instead. As you can see, it helps the user to know when he is on a network
message sub or a local sub.
It would be easiest to just block-copy the following code into BBS.C,
replacing the current main prompt code.
In BBS.C. (void mainmenu).....
if ((sysstatus_expert & thisuser.sysstatus)==0) /* Existing Line */
printmenu(0); /* " */
nl();
nl();
tleft(1);
prt(0,"Time Left"); /* Begin Mod */
prt(2,": ");
ansic(0);
print("",ctim(nsl()),"");
s1[0]=0;
if (usub[cursub].subnum==-1) {
cursub=0;
if (usub[cursub].subnum==-1) {
strcpy(s1,"[] No Subs Available :");
}
}
if (s1[0]==0) {
prt(2,"[");
if (subboards[usub[cursub].subnum].type)
prt(5,"Network");
else prt(5,"Local");
prt(5," Message Area");
prt(2,"]");
nl();
prt(2,"[");
prt(3,usub[cursub].keys);
prt(2,"] [");
prt(1,subboards[usub[cursub].subnum].name);
prt(2,"]");
prt(0,": ");
} /* End Mod */
helpl=1; /* Existing Line */
s=mmkey(0);
------------------------------------------------------------------------------
This is the companion modification to the Main Menu mod. It will
make the transfer system prompt match the format of the new main menu
prompt.
In BBS.C (void dlmainmenu)...
if ((sysstatus_expert & thisuser.sysstatus)==0) /* Existing Line */
printmenu(3); /* " */
nl(); /* " */
nl(); /* " */
tleft(1); /* " */
prt(0,"Time Left"); /* Begin Mod */
prt(2,": ");
ansic(0);
print("",ctim(nsl()),"");
s1[0]=0;
if (udir[curdir].subnum==-1) {
curdir=0;
if (udir[curdir].subnum==-1) {
strcpy(s1,"() No Dirs Available :");
curdloads=0;
return;
}
}
if (s1[0]==0) {
prt(2,"[");
prt(5,"Transfer System");
prt(2,"]");
nl();
prt(2,"[");
prt(3,udir[curdir].keys);
prt(2,"] [");
prt(1,directories[udir[curdir].subnum].name);
prt(2,"]");
prt(0,": ");
} /* End Mod */
helpl=2; /* Existing Line */
s=mmkey(1); /* " */
------------------------------------------------------------------------------
The Captain #1 @2370
Thu Jan 26 14:24:47 1989
This is such a simple mod, I'm including it here just in case you haven't
done this already. If you are using the GUEST modification, that allows a
user to logon as GUEST to look around your BBS before registering, you can
add the following to BBS.C to give them the //REGISTER command. If the GUEST
user types that command at the main prompt, he/she will be able to register
while on-line, without having to hang-up and call back.
In BBS.C (void mainmenu):
if (strcmp(s,"REGISTER")==0) { /* Add */
if (strcmp(thisuser.name,"GUEST")==0) /* " */
newuser(); /* " */
} /* " */
if (strcmp(s,"NET")==0) /* Existing Line */
print_net_listing(); /* " */
------------------------------------------------------------------------------
/*
The Captain #1 @2370
Sat Jan 28 22:03:02 1989
NAME (ALIAS) CHANGE MODIFICATION
By Several Authors
This mod will allow your users to change their name (alias) by typing
//NAME at the main prompt. Copy the following code to the section of void
mainmenu where you see other similar blocks of code (around CLS is good).
*/
if ((strcmp(s,"NAME")==0) && (thisuser.sl>=30)) {
nl();
prt(1,"Why do you feel that you need a new name?");
nl();
mpl(50);
strcpy(reason,"* Wants a new name because: ");
inputl(s3,50);
strcat(reason,s3);
sysoplog(reason);
nl();
prt2("What do you want as your new name? ");
nl();
outstr(": ");
input(s3,30);
if (finduser(s3)<1) {
strcpy(s2,"** Changed name to ");
strcat(s2,s3);
sysoplog(s2);
dsr(thisuser.name);
strcpy(thisuser.name,s3);
isr(usernum,thisuser.name);
write_user(usernum,&thisuser.name);
} else
prt2("Sorry, but that name is already in use. Try another.");
nl();
nl();
topscreen();
}
/*
The first line of the mod also determines what security level is required
to be able to change the name. Right now it is set at 30. Just change that
number to whatever you want as a minimum for the NAME function. Also be
sure to let your users know about the new command!
In the variable declaration section of void mainmenu(), be sure you have
s3[81] declared as a char. In other words,
char s3[81];
should be in there. You'll get an error during compilation if it isn't.
The Captain of The White Star Line
Long Beach, California - @2370
------------------------------------------------------------------------------
/*
The Black Dragon #1 @2380 [Black Dragon Enterprises]
Sun Jan 29 19:59:47 1989
Modification to //REN in the Xfer section.
Well, I got sick of the BBS only allowing me to change one filename or
description on the //REN xfer command. So, below is my version which will
loop through all files if a pattern is given to the "File to rename:"
prompt.
Just take the code below and replace the entire subroutine in XFER.C
The Black Dragon.
Black Dragon Enterprises.
*/
void rename_file()
{
char s[81],s0[81],s1[81],s2[81];
int count,i;
uploadsrec u;
nl();
nl();
prt(2,"File to rename: ");
input(s,12);
if (!s[0])
return;
if (strchr(s,'.')==NULL)
strcat(s,".*");
align(s);
dliscan();
nl();
count=0;
i=recno(s);
while ((i>0) && !hangup) {
SETREC(i);
read(dlf,(void *)&u,sizeof(uploadsrec));
printfileinfo(&u);
nl();
prt(2,"New filename? ");
input(s0,12);
if (s0[0]) {
align(s0);
if (strcmp(s0," . ")) {
strcpy(s1,directories[udir[curdir].subnum].path);
strcpy(s2,s1);
strcat(s1,s0);
if (exist(s1))
pl("Filename already in use; not changed.");
else {
strcat(s2,u.filename);
rename(s2,s1);
if (exist(s1))
strcpy(u.filename,s0);
else
pl("Bad filename.");
}
}
}
nl();
pl("New description:");
prt(2,": ");
inputl(s0,58);
if (s0[0]) {
strcpy(u.description,s0);
}
SETREC(i);
write(dlf,(void *)&u,sizeof(uploadsrec));
i=nrecno(s,i);
count++;
}
if (count) {
sprintf(s,"%d file(s) found",count);
pl(s);
}
else
pl("No files found.");
closedl();
}
------------------------------------------------------------------------------
The Other Wayne #1 @8407
Tue Feb 07 22:49:23 1989
| MESSAGE UPLOAD COMMAND FOR 4.05
| (for use with UPLDUSA.ARC file)
| a mod enhancement
Believe it or not, there still a few sysops out there who don't have the
ABSOLUTE LATEST in WWIV technology. We still have 4.05 or 4.04 or whatever,
for one reason or another. Can't explain them, but my reason is simple. 4.06+
is too big for my system's piddling 512k, and I don't have enough disk to
maintain Turbo C v1.5 AND v2.0 (and I'm not ready to give up 1.5 yet).
Plumb laziness figures in it somewhere.
So, instead, we have mods that make the system ALMOST 4.07-like. For
instance, the USAlliance's UPLDUSA.ARC, which allows uploading of messages to
the temporary workspace. In Cp's mod, we are encouraged to use it so that the
user is asked each time if he'd rather upload the message. It was said we
could create a separate command for it if we so desired. I decided to do
that, making an "//UPLOAD" command like the 4.06 version, and then some.
Here's how, for those who haven't done it, though they've wanted to...
1. You MUST have Cp's UPLDUSA mod, as I am not going to repeat it here. Once
you have it, install it as instructed, EXCEPT: DO NOT rename the "post()" and
"send_email()" calls in void mainmenu() to "post2()" and "send_email2()", as
you are told to.
2. In the declaration part of void mainmenu() (in BBS.C):
#include "uploadm.c"
void mainmenu()
{
char *s, s1[81],s2[81],ch; /* ADD VARIABLE ch HERE! */
int i;
long l;
...
3. Look for the end of the cosysop commands in void mainmenu():
if ((strcmp(s,"/?")==0) && (cs()))
printmenu(5);
/*************************************************/
if (strcmp(s,"CLS")==0)
outstr("\x0c");
if (strcmp(s,"/O")==0)
hangup=1;
Add in right AFTER the line of *'s:
if (strcmp(s,"UPLOAD")==0) {
prt(3,"Do you want to upload a Post or E-Mail (P/E)?");
ch=onek("PE");
switch(ch) {
case 'P' :
pl("Upload a Post:");
post2();
break;
case 'E' :
pl("Upload E-Mail:");
send_email2();
break;
}
}
And that is ALL! Of course, if you already HAVE the UPLDUSA mod installed,
just change the 'post2()' and 'send_email2()' calls back to 'post()' and
'send_email()', and follow the directions from #2
By the way, Jon, as usual, I like your suggestions, and will see what I can
do, if no one gets it before me.
Also, could someone please post Ninja's mod to my Tag Line mod, which adds the
tag to FSED-created messages. I still don't know what he (or whoever else it
was) did, and I'd like to have it...
have a good lunch
-=><=-
------------------------------------------------------------------------------
The Captain #1 @2370
Tue Feb 07 02:17:25 1989
SECURITY REGISTRATION CODE
By The Captain of The White Star Line (@2370)
This is a simple modification that may help persuade your local hacker
to find another line of work. It is primarily geared to stop
"killer-macros," which repeatedly logon to bulletin boards entering false
accounts, the goal being to fill up the user base and cause great
aggravation on the part of the sysop. Most of these macros operate by a
series of commands that wait for certain strings to appear, then they
output the information. The advanced ones will randomly generate a user
name each time it is run (usually a string of characters that are
unintelligible). Others simply use delays, waiting a few seconds, sending
data, waiting a few more, sending more, and so on. This modification will
add a "registration code" to the new user procedure. It randomly generates
an alphanumeric string ranging (randomly again) from 4 to 9 characters in
length. This string is then output for the user to see, and the user is
then prompted to type in the registration code. The user has three tries to
get it right (a different code being shown each time) before automatic
disconnection. If the user gets the string right, then registration
proceeds normally. It would take a very bright person indeed to develop a
"killer-macro" that would read the string when it appears and then output
that string back to the BBS. Telix is generally thought to have the best
script language, and looking through it I didn't notice any such capability.
I've been told by someone that it is possible, but the skills required to
generate the macro were of a high calibur indeed. So, this modification will
present no trouble for your genuine users, and I can guarantee that
"killer-macros" will not like it at all. Too bad.
* * * * * * *
In NEWUSER.C, add this function before void input_name()
void input_code()
{
int i,i2,i3,ok,count;
char n[11],code[11],ch;
count=0;
do {
i2=rand();
if (i2<6500) i3=4;
else if (i2<13000) i3=5;
else if (i2<19500) i3=6;
else if (i2<26000) i3=7;
else if (i2<32500) i3=8;
else i3=9;
for (i=0; i
if (ch<10)
ch+='0';
else
ch+='A'-10;
code[i]=ch;
}
code[i3]=0;
nl();
prt(2,"Registration Code: ");
prt(1,code);
nl();
nl();
prt(3,"Please enter the above Registration Code");
nl();
prt(3,"for security reasons.");
nl();
outstr(":");
mpl(i3);
input(n,i3);
nl();
if ((strcmp(code,n)==0))
ok=1;
else ok=0;
if (!ok) {
prt(2,"That is not correct.");
nl();
++count;
if (count==3)
hangup=1;
}
} while ((!ok) && (!hangup));
}
* * * * * * *
Now search in NEWUSER.C for "NEWUSER" and look down a few lines. You will
see a block of code that calls the various registration functions, as in...
input_name();
input_realname();
input_phone();
...et cetera. Add the line:
input_code();
somewhere among those lines, wherever you wish the question to appear. A
good place might be before the input_name line. For an added measure of
security, and to further complicate matters for hackers, you can have
the line appear elsewhere during registration. That's entirely up to you.
The Captain of The White Star Line
Long Beach, California - @2370
------------------------------------------------------------------------------
The Captain #1 @2370
Wed Feb 08 01:16:26 1989
ARCHIVE TEST MODIFICATION
By The Captain of The White Star Line (@2370)
This modification will allow most archives to be tested, both automatically
after an upload and manually by using a menu command. The modification as
presented will support testing archives with the extensions of ARC, PAK, or
ZIP. Future compression techniques may be added later should the need arise.
For all of these to work, you will either need to have all of the archive
utilities in your main BBS directory, or in a directory listed in your PATH
statement. For testing archives, this mod will use the programs PAK and PKZIP.
PAK is capable of testing both ARC and PAK files, so that is why a third
utility is not necessary. If you do not have PAK or PKZIP, change the
modification to suit your needs. Examples will follow at the end of this doc
file.
* * * * * * * *
STEP 1
Add the following block of code to the beginning of XFER.C, just before
void get_arc_cmd...
void test_upload(char *s)
{
char s1[81],s2[81];
int i,abort,next,i1;
uploadsrec u;
align(s);
dliscan();
abort=0;
next=0;
i=recno(s);
do {
if (i>0) {
lseek(dlf,(long) (i * sizeof(uploadsrec)),SEEK_SET);
read(dlf,(void *)&u,sizeof(uploadsrec));
if ((compare(u.filename,"????????.ARC"))
|| (compare(u.filename,"????????.PAK"))
|| (compare(u.filename,"????????.ZIP"))) {
strcpy(s1,directories[udir[curdir].subnum].path);
strcat(s1,stripfn(u.filename));
if (strstr(u.filename, ".PAK") || strstr(u.filename, ".ARC"))
strcpy(s2,"PAK T");
else
strcpy(s2,"PKUNZIP -T");
strcat(s2," ");
strcat(s2,s1);
if (exist(s1)) {
nl();
ansic(2);
prompt("Testing archive integrity of ",u.filename,":","");
nl();
do_external(s2,1);
checka(&abort,&next);
nl();
prt(3,"If the archive contains errors, please notify the sysop.");
nl();
}
}
i=nrecno(s,i);
}
} while ((i>0) && (!hangup) && (!abort));
closedl();
}
* * * * * * * * * *
STEP 2
In void upload(int dn), also in XFER.C, search for the following block of code:
strcpy(&(s[1]),u.filename);
strcat(s," uploaded on ");
strcat(s,(directories[dn].name));
sysoplog(s);
The next line should be replaced with the following:
if ((strstr(u.filename, ".ARC")) || (strstr(u.filename, ".PAK"))
|| (strstr(u.filename, ".ZIP")))
test_upload(u.filename);
* * * * * * * * * *
STEP 3
Now search for void arc_l() (XFER.C again) and add the following block of code
BEFORE that.
void test_arc()
{
char s[81],s1[81],s2[81];
int i,abort,next,i1;
uploadsrec u;
nl();
prt(2,"Archive to Test: ");
mpl(12);
input(s,12);
if (strchr(s,'.')==NULL)
strcat(s,".*");
align(s);
dliscan();
abort=0;
next=0;
i=recno(s);
do {
if (i>0) {
lseek(dlf,(long) (i * sizeof(uploadsrec)),SEEK_SET);
read(dlf,(void *)&u,sizeof(uploadsrec));
if ((compare(u.filename,"????????.ARC"))
|| (compare(u.filename,"????????.PAK"))
|| (compare(u.filename,"????????.ZIP"))) {
strcpy(s1,directories[udir[curdir].subnum].path);
strcat(s1,stripfn(u.filename));
if (strstr(u.filename, ".PAK") || strstr(u.filename, ".ARC"))
strcpy(s2,"PAK T");
else
strcpy(s2,"PKUNZIP -T");
strcat(s2," ");
strcat(s2,s1);
if (exist(s1)) {
nl();
nl();
ansic(2);
prompt("Testing archive integrity of ",u.filename,":","");
nl();
if (do_external(s2,1))
abort=1;
checka(&abort,&next);
}
}
i=nrecno(s,i);
}
} while ((i>0) && (!hangup) && (!abort));
closedl();
}
* * * * * * * * * *
STEP 4
Now in BBS.C, search for:
if ((strcmp(s,"/?")==0) && (dcs()))
printmenu(8);
and add the following:
if (strcmp(s,"/T")==0)
test_arc();
* * * * * * * * * *
STEP 5
In FCNS.H, search for:
void sort_all();
void arc_l();
and add the following line:
void test_arc();
* * * * * * * * * *
STEP 6
Now hit F9 and recompile. After what will no doubt seem to be an eternity, the
board will be compiled and ready to run. As you've probably surmized by now,
the command /T from the transfer system prompt will allow you to test an
archive (extension optional of course). Whenever a file with an extension of
ARC, PAK, or ZIP is uploaded, it will be tested automatically. Note that this
mod will not take any action other than showing you if a file contains errors.
It does not delete anything, nor does it leave you mail about the problem.
With the recent advances in archive recovery programs, I didn't think you
would want, for instance, a 500k archive that some poor soul had spent an hour
uploading to be deleted because of a single error. Now then, edit your
transfer menu to reflect the new option that is available. Also note that the
option is not restricted to sysops/co-sysops only.
* * * * * * * * * *
ADDITIONAL NOTES
Adding or deleting file compression utilities is relatively easy and does not
involve recompiling the entire BBS. Below I will give you an example of how
you would go about removing support for the PAK method, and adding support for
a method we will call WIZ.
Please refer to STEP 1. Search for PAK. See it? I knew you would. What we have
to do is substitute WIZ for PAK. Now WIZ, being a delightful new program
developed by a Mister Oz, is not compatible with any of the other programs.
This is what the new block of code in that area would look like:
read(dlf,(void *)&u,sizeof(uploadsrec));
if ((compare(u.filename,"????????.ARC"))
|| (compare(u.filename,"????????.WIZ"))
|| (compare(u.filename,"????????.ZIP"))) {
strcpy(s1,directories[udir[curdir].subnum].path);
strcat(s1,stripfn(u.filename));
if (strstr(u.filename, ".ARC"))
strcpy(s2,"PKPAK T"); /* or "PKARC T," or "PAK T" */
if (strstr(u.filename, ".WIZ"))
strcpy(s2,"WIZ T");
if (strstr(u.filename, ".ZIP"))
strcpy(s2,"PKUNZIP -T");
strcat(s2," ");
Now refer to STEP 2. This is what the added block of code would look like:
if ((strstr(u.filename, ".ARC")) || (strstr(u.filename, ".WIZ"))
|| (strstr(u.filename, ".ZIP")))
test_upload(u.filename);
Almost done. Look at STEP 3. The change in that step is exactly the same as it
was in STEP 1. Just look up a couple of paragraphs at the changes I made for
STEP 1, and apply that to STEP 3.
++++++++++++
DISCLAIMER
That's the end of the modification; there are no more steps to take.
I make no guarantees that it will not at some point break.
If your computer explodes tomorrow, don't get too mad at me.
Just keep this fact in mind: You got this mod for free.
The Captain of The White Star Line (@2370)
------------------------------------------------------------------------------
The Other Wayne #1 @8407
Tue Feb 14 02:56:39 1989
|
| Circular Post mod
| For Jonathan Schragg
|
Okay, Jon, you should have known that if you suggested it, I would come up
with it. Okay, here's the rather simple solution to repeating the "Do you
want to post on [sub name]?" question. (remember that I have v4.05, so the
code may be different).
All changes are in MSGBASE1.C.
(Legend: '=' is same, '+' is new, '*' is changed)
First, we need to add the character variable ch to void scan(...):
= void scan(int msgnum, int optype, int *nextsub)
= {
* char s[81],s1[81],s2[81],*b,*ss1,ch;
= int i,i1,i2,done,quit,abort,next,val,realexpress;
= slrec ss;
= long l,len;
= postrec p,p1;
Next, go down toward the end of void scan (...) to find and change this block:
= if ((!quit) && (!express)) {
= nl();
= ss=syscfg.sl[thisuser.sl];
= if (
= ((restrict_post & thisuser.restrict)==0) &&
= (thisuser.posttoday
+ do {
+ nl();
= strcpy(s,"Post on ");
= strcat(s,subboards[curlsub].name);
= strcat(s,"? ");
= prt(5,s);
+ ch=yn();
* if (ch)
= post();
+ } while (ch);
= }
= }
And that does it. The board will keep asking if you want to post on the sub
until you tell it NO, at which point it will proceed to the next.
I'll work on the random openings later....
have a good lunch
-=><=-
------------------------------------------------------------------------------
The Other Wayne #1 @8407
Tue Feb 14 22:36:20 1989
|
| Sysop Toggle Mod
|
Being the friendly sort I am, I like to be able to be available for chat
whenever I'm around, even if it's not during the official SYSOP HOURS.
I also have the tendency to forget to hit the SCROLL LOCK when the sysop hours
ARE in force, and not having a light on the keyboard, I don't know if it's on
or off unless I log myself on, or wait for another caller.
Unfortunately, Wayne has designed the sysop chat function so that the sysop is
ONLY available during the Chat Hours, and ONLY if you have remembered to set
the scroll lock. Too rigid for me. So this mod shows how you can change
void sysop2() so that:
1. Chat is enabled during Sysop Hours regardless of status of scroll lock; and
2. Chat is enabled if you have the scroll lock on, regardless of Sysop Hours.
It's very simple. Just add the lines indicated in my version of void sysop()
listed here (this is in BBSUTIL.C, by the way):
[legend: = is same, * is changed, + is added]
= int sysop2()
= {
= int ok;
= ok=sysop1();
= if (restrict_chat & thisuser.restrict)
= ok=0;
+ if (!sysop1()) {
= if (syscfg.sysoplowtime != syscfg.sysophightime) {
= if (syscfg.sysophightime>syscfg.sysoplowtime) {
= if ((timer()<=(syscfg.sysoplowtime*60.0)) ||
= (timer()>=(syscfg.sysophightime*60.0)))
= ok=0;
+ else
+ ok=1;
= } else {
= if ((timer()<=(syscfg.sysoplowtime*60.0)) &&
= (timer()>=(syscfg.sysophightime*60.0)))
= ok=0;
+ else
+ ok=1;
= }
= }
+ }
= return(ok);
= }
That's all there is to it.
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/