home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Devil's Doorknob BBS Capture (1996-2003)
/
devilsdoorknobbbscapture1996-2003.iso
/
Dloads
/
WWIVMODS
/
PRE412.ZIP
/
MODNET.MOD
< prev
next >
Wrap
Text File
|
1990-08-05
|
84KB
|
2,284 lines
MODNET 9/10 -- Message Base Mods
This is the biggest of the current crop of mods. All here are for the message
base.
-=>mtb<=-
═════════════════════════════════════════════════════════════════════════════
Lt. Hytiek #1 @3504
03/23/90 at 1:28 pm <EST>
Profanity Restriction Mod
Original Code Work by:
The Copy Jockey & Bones
Ok, what this mod does, is restricts the users from cussing, to an
extent. You can use AR's to control the Profanity Restriction by
adding a 'C' to the users AR if you want them to cuss, or leave the
'C' off to turn on the restrictor. The restriction is used in the
following places: ONE-WAY CHAT(REG), EMAIL, and POSTING. The way
it checks for profanity is by checking every FORTH letter typed,
such as if you were to type: bitc it would erase it(backspace 4 times)
before you could hit the 'H'. I think I have covered all the
possibilities of spelling the words... If there are more, email 1@3504
with the updated word.
Ok, enough about the mod, now load up BBSUTL.C add to the '#include'
section this include: #include <ctype.h>
now serach for 'void inli' after you find it, delete the entire void,
and replace it with mine. Should Work Fine!
****************************************************************************/
void inli(char *s, char *rollover, int maxlen, int crend)
{
int cp,i,i1,done,cm,begx,remove,count,posit;
char s1[255],s2[255];
unsigned char ch;
cm=chatting;
begx=wherex(); if (rollover[0]!=0) { if (charbufferpointer) {
strcpy(s1,rollover); strcat(s1,&charbuffer[charbufferpointer]);
strcpy(&charbuffer[1],s1); charbufferpointer=1; } else {
strcpy(&charbuffer[1],rollover); charbufferpointer=1; } rollover[0]=0;
}
cp=0; done=0; do { ch=getkey(); if (two_color) if (lastcon) ansic(1);
else ansic(0); if (cm) if (chatting==0) ch=13;
if ((ch>=32)) {if ((wherex()<(thisuser.screenchars-1)) && (cp<maxlen)) {
s[cp++]=ch; outchr(ch); if (wherex()==(thisuser.screenchars-1))
done=1; } else { if (wherex()>=(thisuser.screenchars-1)) done=1; }
} else
switch(ch) {
case 7: if ((chatting) && (outcom)) outcomch(7); break;
case 13: /* C/R */s[cp]=0; done=1; break;
case 8: /* Backspace */if (cp) {if (s[cp-2]==3) {cp-=2;ansic(0);
} else if (s[cp-1]==8) { cp--; outchr(32); } else { cp--;
backspace(); } } break;
case 24: /* Ctrl-X */while (wherex()>begx) {backspace();cp=0;}
ansic(0); break;
case 23: /* Ctrl-W */if (cp) { do {if (s[cp-2]==3) {cp-=2;ansic(0);
} else if (s[cp-1]==8) { cp--; outchr(32); } else { cp--;
backspace(); }
} while ((cp) && (s[cp-1]!=32) && (s[cp-1]!=8) && (s[cp-2]!=3));
} break;
case 14: /* Ctrl-N */if ((wherex()) && (cp<maxlen)) {outchr(8);
s[cp++]=8; } break;
case 16: /* Ctrl-P */if (cp<maxlen-1) {ch=getkey();
if ((ch>='0') && (ch<='9')) {s[cp++]=3;s[cp++]=ch;ansic(ch-'0');}
} break;
case 9: /* Tab */i=5-(cp % 5);if (((cp+i)<maxlen) && ((wherex()+i)<thisuser.screenchars)) {
i=5-((wherex()+1) % 5);for (i1=0; i1<i; i1++) {s[cp++]=32;
outchr(32); } } break;
}
/*Profanity restrictor*/
if ((thisuser.ar & 4)==0)
{
remove=0;
strcpy(s2," ");
if (cp>=4) {
posit=1;count=0;
while ((posit<=cp) && (count<4))
if (isdigit(s[cp-posit]) && (s[cp-(posit+1)]==3)) posit+=2;
else if (s[cp-posit]==8) {posit++;remove++;}
else if (remove>0) {remove--;posit++;}
else {s2[3-count]=s[cp-posit];count++;posit++;}
strupr(s2);
if ((strcmp(s2,"FUCK")==0) || (strcmp(s2,"SHIT")==0) ||
(strcmp(s2,"FUC|")==0) || (strcmp(s2,"SHI+")==0) ||
(strcmp(s2,"DIC|")==0) || (strcmp(s2,"PU$$")==0) ||
(strcmp(s2,"PU$S")==0) || (strcmp(s2,"PUS$")==0) ||
(strcmp(s2,"COC|")==0) || (strcmp(s2,"PVSS")==0) ||
(strcmp(s2,"CRAP")==0) || (strcmp(s2,"PISS")==0) ||
(strcmp(s2,"PUSS")==0) || (strcmp(s2,"CUNT")==0) ||
(strcmp(s2,"DAMN")==0) || (strcmp(s2,"BITC")==0) ||
(strcmp(s2,"DICK")==0) || (strcmp(s2,"ASSH")==0) ||
(strcmp(s2,"A$$ ")==0) || (strcmp(s2,"CHYT")==0) ||
(strcmp(s2,"AS$ ")==0) || (strcmp(s2," AS$")==0) ||
(strcmp(s2," ASS")==0) || (strcmp(s2,"FUKI")==0) ||
(strcmp(s2,"FUK ")==0) || (strcmp(s2,"SHLT")==0) ||
(strcmp(s2,"SH1T")==0) || (strcmp(s2,"SHYT")==0) ||
(strcmp(s2,"COCK")==0) || (strcmp(s2,"BAST")==0) ||
(strcmp(s2,"SH!T")==0) || (strcmp(s2,"SHT ")==0) ||
(strcmp(s2,"ASSS")==0) || (strcmp(s2,"PUSY")==0))
{backspace();backspace();backspace();backspace();
for (count=1;count<posit;count++) cp--;
outstr("\a6[CENSORED]0\a\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b\b \b");}
}
}
} while ((done==0) && (hangup==0));
if (ch!=13) {
i=cp-1;
while ((i>0) && (s[i]!=32) && (s[i]!=8) || (s[i-1]==3))
i--;
if ((i>(wherex()/2)) && (i!=(cp-1))) {
i1=cp-i-1;
for (i=0; i<i1; i++) outchr(8);
for (i=0; i<i1; i++) outchr(32);
for (i=0; i<i1; i++) rollover[i]=s[cp-i1+i];
rollover[i1]=0; cp -= i1; } s[cp++]=1; s[cp]=0; }
if (crend) nl();
}
/***************************************************************************/
/* Now recompile and your done! If you find this useful... */
/* */
/* Tell 1@3504 that you're using it! */
/* */
/* And thats all there is to it! If you have any problems, contact 1@3504 */
/***************************************************************************/
────────────────────────────────────────────────────────────────────────────
Goose #14 @7303
Sat Apr 07 08:39:58 1990
Backspace to Previous Line
This is an update to my previous versions of the mod. I've made the following
changes and enhancements to the mod for this release of the PREVLINE mod:
- The calling of the inli void is unchanged, since there are other mods
that may use this "standard" function. Instead, I've added an inli2
that controls the backspacing capabilities.
- I've fixed the problem where colors are not displayed correctly when
backspacing to the previous line.
- This mod also has all the fixes I've previously released. Hey, what can
I say? I'm not perfect, unlike some people <grin>...
OK, on with the mod itself. What this mod does is allow users to backspace to
the previous line while posting a message. When the user gets to the
beginning of the line, the message:
[*> Previous Line <*]
is displayed, the previous line is shown, and the cursor is placed at the end
of the line. This makes it much easier to fix mistakes that are made at the
end of a line, since it saves the user from having to type /ED and re-enter
the entire line. This mod will sure be a blessing to those users who have not
yet learned to use a full screen editor (which, by the way, is the reason I
didn't bother to try to update the tiny editor that Wayne built in to the
source. Sysops should know enough to use a full screen editor).
First, load up FCNS.H and make the following change (note: - designates
existing code, + designates new or modified code. The & symbol indicates
lines that were split by the message editor to make it fit into the 80
column width. All these should be removed before trying to compile. They
are there to make your life easier):
- char *mmkey(int dl);
+ int inli2(char *s, char *rollover, int maxlen, int crend, int wb); /* mod -
& add */
- void inli(char *s, char *rollover, int maxlen, int crend);
- void getuser();
Now, load up BBSUTL.C and add the following external variable declaration at
the top of the file:
- extern char charbuffer[161];
- extern userrec thisuser;
+ extern int charbufferpointer,chatting,curatr; /* mod - change */
- extern int usernum,useron,num_sec,helpl;
Now find the inli(..) void to and rename it to inli2(..), and make the
following changes to it. Note also that it is being changed from a void to an
int function:
+ int inli2(char *s, char *rollover, int maxlen, int crend, int wb) /* mod -
& change */
- {
- int cp,i,i1,done,cm,begx;
- char s1[255];
- unsigned char ch;
And a little farther down in the code:
- backspace();
- }
+ } else /* mod - change */
+ if (wb) { /* mod - add */
+ i=curatr; /* mod - add */
+ ansic(3); /* mod - add */
+ pl("[*> Previous Line <*]"); /* mod - add */
+ setc(i); /* mod - add */
+ return(1); /* mod - add */
+ } /* mod - add */
- break;
- case 24: /* Ctrl-X */
And at the very bottom of the function:
- }
- if (crend)
- nl();
+ return(0); /* mod - add */
- }
Then, add a replacement inli function as shown. This will allow other mods to
call this function in the same way they always have:
+ void inli(char *s, char *rollover, int maxlen, int crend) /* mod - change
& entire void */
+ {
+ inli2(s,rollover,maxlen,crend,0);
+ }
- void getuser()
Next, load COM.C and make the following change in char inkey() to fix the
problem with changing colors in the line:
- if (charbufferpointer) {
- if (!charbuffer[charbufferpointer])
- charbufferpointer = charbuffer[0] = 0;
+ else { /* mod - change */
+ if ((charbuffer[charbufferpointer])==3) /* mod - add */
+ charbuffer[charbufferpointer]=16; /* mod - add */
- return(charbuffer[charbufferpointer++]);
+ } /* mod - add */
- }
OK, now for the change to MSGBASE.C to allow the user to actually to the
backspace. Make the following changes in void inmsg(...):
- while (!done) {
- helpl=27;
+ while (inli2(s,ro,160,1,curli)) { /* mod - change */
+ --curli; /* mod - add */
+ strcpy(ro,&(lin[(curli)*LEN])); /* mod - add */
+ if (strlen(ro)>thisuser.screenchars-1) /* mod - add */
+ ro[thisuser.screenchars-2]=0; /* mod - add */
+ } /* mod - add */
- if (hangup)
- done=1;
- savel=1;
And one more change in XFER.C to allow the user to back up when entering the
extended file description in void modify_extended_description(...). The first
part is in the variable declarations:
- void modify_extended_description(char **sss)
- {
- char s[161],s1[161];
+ int f,ii,i,i1,i2,i3; /* mod - change */
-
- if (*sss)
Then, a little farther down in the code:
- i=1;
+ i3=0; /* mod - add */
- nl();
- sprintf(s,"Enter up to %d lines, %d chars
& each.",MAX_LINES,78-INDENTION);
- pl(s);
- nl();
- s[0]=0;
- i1=thisuser.screenchars;
- if (thisuser.screenchars>(76-INDENTION))
- thisuser.screenchars=76-INDENTION;
- do {
- itoa(i,s1,10);
- strcat(s1,": ");
- prt(2,s1);
- s1[0]=0;
+ while (inli2(s1,s,90,1,i3)) { /* mod - change */
+ --i; /* mod - add */
+ itoa(i,s1,10); /* mod - add */
+ strcat(s1,": "); /* mod - add */
+ prt(2,s1); /* mod - add */
+ i2=0; /* mod - add */
+ i3-=2; /* mod - add */
+ do { /* mod - add */
+ s[i2]=*(sss[0]+i3-1); /* mod - add */
+ ++i2; /* mod - add */
+ --i3; /* mod - add */
+ } while ((*(sss[0]+i3)!=10) && (i3!=0)); /* mod - add */
+ if (i3) /* mod - add */
+ ++i3; /* mod - add */
+ *(sss[0]+i3)=0; /* mod - add */
+ s[i2]=0; /* mod - add */
+ strrev(s); /* mod - add */
+ if (strlen(s)>thisuser.screenchars-1) /* mod - add */
+ s[thisuser.screenchars-2]=0; /* mod - add */
+ } /* mod - add */
- i2=strlen(s1);
- if (i2 && (s1[i2-1]==1))
- s1[i2-1]=0;
- if (s1[0]) {
- strcat(s1,"En");
+ i3+=strlen(s1); /* mod - add */
- strcat(*sss,s1);
- }
- } while ((i++<10) && (s1[0]));
(NOTE: There may have been an easier way to accomplish this part of the code,
but I sure can't figure it out!).
That's it. You will need to recompile the entire BBS due to the change to
FCNS.H.
NOTE: If you have installed the previous version of this mod, you will
probably get the error "too many parameters in call to inli" or
something very similar to that. Well, if you look at the end of these
lines you will notice that there is a ",0" (comma followed by a zero)
just before the right parenthesis. Remove this and it should compile
just fine.
────────────────────────────────────────────────────────────────────────────
Φ∩Σ Σ¥Σδ (/\)죣¥ #1 @18852
(One Eyed Willy)
Sun Apr 08 16:38:31 1990
A very simple mod to do is to add the //UPLOAD command to the Read: prompt.
However, this mod is somewhat useless for the sysop, as he cannot use
//UPLOAD. This mod knows if there is a user online, and will use //LOAD if
either there is no user online (a local logon) or you have Comm Disable turned
on.
In MSGBASE1.C, in function void scan(blah blah)...
case 'Q':
quit=1; /* Search */
done=1;
*nextsub=0;
break;
case 'X': /* Add from here */
if (incom)
upload_post();
else {
nl();
prt(2,"Filename? ");
input(s1,50);
if (s1[0]) {
nl();
load_workspace(s1,1);
}
}
break; /* To here */
case 'B':
if (*nextsub! .. blah blah
I am in no way responsible for damages caused by this mod, although I really
dont know how one could have damages caused by it, but since everyone else
makes the same type of disclaimer.. welp.. here's mine!
────────────────────────────────────────────────────────────────────────────
The Hermit #1 @18408
Sat Apr 14 10:33:17 1990
DELETING NETWORK POSTS FROM P0.NET AND THE MSGBASE
The Most Excellent Hermit, @18408, @18412, @8403
04/14/90
Aha! I'll bet you're saying "here comes another dumb introduction to
a stupid mod." Well, you're right on both counts--this is indeed a dumb
introduction, but I think you'll find this mod very useful.
I've been running a WWIV network for a long time. All of that time has
seen me running LNET if I wanted to delete a networked post off of the
network as well as off of the local base.
WRONG!
This mod deletes a networked post from P0.NET when the users 'D'eletes it
or 'R'emoves it. No LNET, no LNETPLUS, no DEL DATA\P0.NET...
This mod has been thoroughly tested on all three of my systems, and it
works fine. If there's a problem, you can reach me at the following locations:
WWIVlink 1 @18408
WWIVnet 1 @8403
Fidonet John Wash 1:264/172
Internet eng9rxw@hibbs.vcu.edu
Feel free to use the more obscure ones (in terms of WWIV), 'cuz I'm
testing all of my connections.
Put the following block of code right after the externs at the beginning of
MSGBASE.C:
------------------------- BEGIN CODE ---------------------------
void backlseek (int handle, long seek, int loc)
/* This lseek () seeks backwards "seek" bytes; it's easier than doing an:
* lseek (handle, seek*-1, loc);
* not by much, admittedly, but I'm real big on modular code.
*/
{
lseek (handle, seek* (-1L), loc);
}
int delete_this_message (long daten)
/* Deletes the message from P0.NET with the date "daten". Returns TRUE
* if successful; otherwise, returns false.
*/
{
int handle;
char s[81];
net_header_rec nh;
nh.daten = -1; /* Init nh.daten with an ordinal value */
sprintf (s, "%sP0.NET", syscfg.datadir);
if (!exist (s)) /* Check for existence of P0.NET */
{
return (0);
}
handle = open (s, O_RDWR | O_BINARY); /* Open P0 for read/write */
if (handle < 0) /* Check success of opening P0 */
{
return (0);
}
while (!eof (handle)) /* While messages to be processed... */
{
read (handle, &(nh), sizeof (net_header_rec)); /* Read header */
if (nh.daten == daten) /* If this is the message.... */
{
backlseek (handle, sizeof(net_header_rec), SEEK_CUR); /* Go back */
nh.main_type = 65535; /* Mark message as deleted */
write (handle, &(nh), sizeof (net_header_rec)); /* Write header */
close (handle); /* Close P0 */
return (1); /* Exit function and return SUCCESS */
}
lseek (handle, (long) (sizeof (int) * nh.list_len), SEEK_CUR);
lseek (handle, nh.length, SEEK_CUR); /* Go to next message */
} /* Endwhile "checking P0.NET" */
close (handle);
return (0); /* Return FAILED */
} /* Endfunc delete_this_message () */
-------------------------- END CODE ----------------------------
One more modification:
At the end of MSGBASE.C, there's a function called delete (). Change
it to look like this:
void delete(int mn)
{
postrec p1;
int i;
iscan(cursub);
if ((mn>0) && (mn<=nummsgs)) {
p1=msgs[mn];
if (subboards[curlsub].type) /* Add this line */
{ /* Add this line */
delete_this_message (p1.daten) /* Add this line */
} /* Add this line */
remove_link(&p1.msg,(subboards[curlsub].filename));
for (i=mn; i<nummsgs; i++)
msgs[i]=msgs[i+1];
nummsgs--;
bchanged=1;
}
}
******************************************************************************
...well, that about wraps it up for this mod. Simple; useful; efficient.
JUST DO IT!
────────────────────────────────────────────────────────────────────────────
Scott Estrin #7 @2116
Sun Apr 15 17:36:26 1990
* The POST WITH ALIAS Mod
* By The Hitchhiker 1@9807
* For WWIV v4.11 (will NOT work with 4.10)
WHAT: This mod will allow users to choose a name to post under, providing that
you (the sysop) have allowed it on that sub.
PURPOSE: This mod has no real, practical purpose. I saw it on another board
(not WWIV), and the sub was definately the most interesting I've ever seen, so
I added it to WWIV. It is an interesting alternative to Dear Abby and/or the
Forced Anonymous subs.
HOW: Install the mod as instructed later in this message. Adding this mod will
make the following changes to the BBS:
- The "Real Name" option which Wayne added to version 4.11 is no
longer active.
- The Dear Abby format now allows messages to be saved as the user's
name, Abby, or Anonymous. The Problemed Person name has been
eliminated, so that the PP flag can be used for another
purpose. Any messages posted as "Problemed Person" before
the mod was installed will appear as normal messages when
read, but Anonymous messages in all other regards (replies,
etc.)
To set up a sub using this format, go to BOARDEDIT and set the Anony option
to "Real Name" (which is a misnomer, since it is actually a FAKE name that
the users are using). After a message is posted on that sub, and before it
is saved, the user will be prompted with "Enter name to post under:". If a
name is typed, that name will be used at the message header, and the message
will be considered Anonymous in all other regards. If you have MrBill's
BY-LINE mod installed, all replies will refer to the name that the user has
entered when saving the message. If you have Bruce Guthrie's "User Name in
Sub Title Scan" mod installed, these messages will have an author of >UNKNOWN<.
(If the user just hits ENTER or RETURN at this prompt, it will be a regular
message: Name: Sysop Hitchhiker #1 @9807)
THE MOD: Finally!
* Step One *
Make a backup of your files! I use PKZIP -F BACKUP.ZIP *.C *.H, but you may
use a different compressor and/or filename (if you don't have a backup file
yet, omit the -F switch).
* Step Two *
Load up the MSGBASE.C file, and go to void inmsg (blah).
= Existing Line
+ Add line
* Change Line
- Delete line
= void inmsg(messagerec *m1, etc..)
= {
* char s[LEN],s1[LEN],s2[LEN],ro[81],fnx[81],chx,*ss,*ss1,nombre[20];
= int maxli,curli,done,save,savel,i,i1,i2,i3,i4,i5,f,setanon,gati[50],gatp;
Skip down a bit and make the following changes:
= case anony_enable_dear_abby:
= nl();
= print("1. ",nam(&thisuser,usernum),"");
= pl("2. Abby");
* pl("3. Anonymous");
= nl();
= prt(5,"Which? ");
= chx=onek("\r123");
= switch (chx) {
= case '\r':
= case '1':
= *anony=0;
= break;
= case '2':
= *anony=anony_sender_da;
= break;
= case '3':
* *anony=anony_sender;
And a bit farther down...
= l1=0;
* if (real_name) { /*Note the brace at the end */
- addline(b,thisuser.realname,&l1); /*Dont want this line*/
+ nl();
+ *anony=anony_sender_pp;
+ prt(2,"Enter name to save under: ");
+ inputl(nombre,20);
+ if (nombre[0]==0) {
+ *anony=0;
+ addline(b,nam1(&thisuser,usernum,syscfg,systemnumber),&l1);
+ }
+ else addline(b,nombre,&li);
+ }
= else
= addline(b,nam1(&thisuser,usernum,syscfg,systemnumber),&l1);
* Step Three *
Find void read_message1 (blah...) and make the following changes:
= if (m.storage_type!=255) switch (an) {
= default:
= case 0:
+ case anony_sender_pp:
And a little farther down:
= case anony_sender_da:
- case anony_sender_pp:
= osan("Name: ",&abort,next);
= ansic(MSG_COLOR);
= plan("Abby",&abort,next);
= strcpy(byline,"BY: Abby"); /* If you have MrBill's BY-LINE mod */
- } else {
- osan("Name: ",&abort,next);
- ansic(MSG_COLOR);
- plan("Problemed Person",&abort,next);
- strcpy(byline,"BY: Problemed Person"); /* If BY-LINE mod installed */
- }
= if (readit) {
* Step Four *
Hit F9 and compile
Well, that's the mod (I'm pretty sure I got it all in there). If you have any
questions or comments, send me mail. Or just send me mail to let me know if
you're using the mod. My WWIVnet address is 1@9807 (this is my first mod, I
want to know if I should continue, even with my zero knowledge of C... all the
C I learned was by reading the source to WWIV).
And the usual disclaimer stuff. I take no responsibility for anything that may
happen to you, your computer, your BBS, your users, your kids, your house, your
town council, or anything else as a result of this mod.
One side note: When you read a message, it looks like this:
46/50: This is the title
Name: The Funky Chicken
Date: today's date.. I forgot WWIV's weird format
This is the Ctrl-D Macro
This is the Ctrl-F Macro
Read (1-50,^46,?):
You'll notice that the real name or handle is not shown, not even to the sysop
(that ruins all the fun!). Some smart-alec might decide to take advantage of
this and post something inappropriate, or, God forbid, illegal. If that
happens, type "A" at the end of the message, and it will give you the name of
the person (If you don't want to send them mail, hit ENTER at the title).
You need sysop access, obviously, otherwise you'll be sending E-mail to
Anonymous.
Oh yeah, for the record, I hate tag lines and long signoffs, but I'm just
trying to remind you to, in some way, let me know if you use the mod. I don't
expect you to send money, but if you happen to have a $100 bill in your wallet
saying "Spend me! Spend me!", leave me a message and we can work something out.
────────────────────────────────────────────────────────────────────────────
Goose #1 @7312
Wed Apr 11 20:01:34 1990
Fix ANSI Lockup Mod
This mod fixes a problem where WWIV may hang when invalid ANSI strings are
displayed. I decided to figure out what the problem was after my board
crashed after a user was trying to upload an ANSI screen, and seeing other
weird things happen during the display of ANSI characters.
This is a really simple mod, and I'm sure it'll be fixed in the next release
of WWIV (at least I hope so). Load up COM.C, and find void execute_ansi().
Go down about 20 lines to where he starts to parse the ANSI string, and make
the following one line change:
cmd = ansistr[ansiptr - 1];
ansistr[ansiptr - 1] = 0;
while ((ansistr[ptr]) && (tempptr<10) && (argptr<10)) { /* mod - change */
if (ansistr[ptr] == ';') {
temp[tempptr] = 0;
Basically, the problem was that the code didn't check the length of the ANSI
string, since all *valid* ANSI strings will be less than the ten characters
declared. However, with a little garbage in there (we all have heard of line
noise) it can overwrite many different variables and cause all sorts of
strange things to happen. If you have any problems with this mod... well, I'm
sure you won't so I'll leave off the normal closing line.
T.T.F.N.
────────────────────────────────────────────────────────────────────────────
Alleykat #1 @8352
Sun Apr 22 12:00:05 1990
With all the sublist mods showing up in this message base I couldn't
decide which one to use. Therefore I took the best of them and
combined them. There are at least 4 peoples mods here combined.
The main code is from Lt. Hyteck (sysop of The Morgue) and I can't
remember the others. The addition made to LH's mod was the addition
of the Number of messages and the number of new.
I take no credit for any of this other than the fact I merged them.
I further take no responsibitlity to any damage or ill effects this
mod has on your system or software.
Get BBS.C and Block read and replace the function sublist.
Recompile the BBS
void sublist()
{
int ok,i,abort,a,b;
char s[80],s1[50],sdf[120];
int sam,tally;
abort=0;
nl();
pla("5 Num7 Sub Typ 1Message Base Topic 2Msg 1New",&abort);
pla("3╔════╦═══════╦═════════════════════════════════════════╦═══╦═══╗ ",&abort);
i=0;
while ((i<32) && (usub[i].subnum!=-1)) {
if (strcmp(usub[cursub].keys,usub[i].keys))
strcpy(s1,"Yes");
else
strcpy(s1,"No");
strcpy(s,"3║ 5");
strcat(s,usub[i].keys);
s[8]=0;
if (s[7]==0)
s[8]=32;
if (i<=8)
strcat(s," ");
strcat(s," 3║ ");
if (subboards[usub[i].subnum].type) /* checks whether Networked */
strcat(s,"7>Net< 3║ 1"); /* or Local subs. */
else /* */
strcat(s,"2Local 3║ 1"); /* */
strcat(s,subboards[usub[i].subnum].name);
a=(67-(strlen(s)));
for (b=0; b<a; b++)
strcat(s," ");
strcat(s,"3║");
iscan(i);
sam=1;
while ((sam<=nummsgs) && (msgs[sam].qscan<=thisuser.qscnptr[usub[i].subnum]))
++sam;
tally=nummsgs-(sam-1);
sprintf(sdf,"%67s2%3d3║6%3d",s,nummsgs,tally);
strcat(sdf,"3║");
if (strcmp(s1,"Yes")) /* checks current sub - if */
strcat(sdf," 6<You're Here"); /* sub name = this position */
pla(sdf,&abort); /* puts pointer on this line */
i++;
}
pla("3╚════╩═══════╩═════════════════════════════════════════╩═══╩═══╝ ",&abort);
if (i==0)
pla("6None.",&abort);
nl();
}
────────────────────────────────────────────────────────────────────────────
Merlin #1 @6869
Sat May 05 14:24:33 1990
Hello, and welcome to MERLIN2.MOD...
This might have been duplicated by an Elric Mod, but I'm sure.
Anyhow, what this will do is move the regional information to a separate
line, and put the originating BBS's phone number back to make your message
headers look something like this...
1/100: This is the title.
Name: |\/|erlin #1@6869
Date: Sun Apr 22 15:04 1990
From: |\/|erlin's Tower [618-473-xxxx]
Region: S-Ill. <Belleville>
As usual with most of these mods, the author (me) takes no resposibility
what-so-ever if this mod causes your cat to jump on your keyboard and
delete every user you have or if your modem decides it doesn't like you
and fries itself, committing datacide...
If you have any questions or comments, either leave mail to 4@6862
or log onto the Lion's Den (618) 746-4534 and tell the SysOp that you
came because I suggested it...<GRIN>...
Thanks...
|\/|erlin 4@6862
/***********************/
/* L E G E N D */
/***********************/
/* - = Deleted Line */
/* + = New Line */
/* # = Existing Line */
/* ! = Modified Line */
/* * = Search For Line */
/***********************/
Part 1: Replace this SECTION, not just setorigin, but the ENTIRE section
starting from the row of asterisks!
/****************************************************************************/
static char origin_str[81], origin_str2[81];
void setorigin(int sysnum)
{
int i,csi;
char s[81],ch;
origin_str[0]=0;
origin_str2[0]=0;
if (sysnum) {
csi=-1;
for (i=0; i<num_sys_list; i++)
if (csn[i].sysnum==sysnum)
csi=i;
if (csi>-1) {
if (csn[csi].other & other_coordinator)
ch='*';
else
ch=' ';
describe_area_code(atoi(csn[csi].phone),s);
if (s[0]) {
sprintf(origin_str,"%c%s [%s]",ch,csn[csi].name,csn[csi].phone);
sprintf(origin_str2,"Region: %s",s);
} else {
sprintf(origin_str,"%c%s [%s]",ch,csn[csi].name,csn[csi].phone);
sprintf(origin_str2,"REGIONS.DAT missing!");
}
} else
strcpy(origin_str," Unknown System");
}
}
Part 2: Now, in void read_message1(blah blah blah), make the following
changes...
# ansic(MSG_COLOR);
# strcpy(s,d);
# plan(s,&abort,next);
* if (origin_str[0]) {
# osan("From:",&abort,next);
# plan(origin_str,&abort,next);
+ if (origin_str2[0])
+ plan(origin_str2,&abort,next);
# }
# break;
# case anony_sender:
────────────────────────────────────────────────────────────────────────────
Parker Prospect #1 @9964
Tue May 08 22:09:08 1990
This tag line mod will work great, and it is simple (around 7 lines). This
has no messy misplaced else errors that non-programming sysops give out
either. I will admit that the original idea was not mine, but the original
idea loaded a file, read one line from it, and used it as a tag line.
The following code is in MSGBASE.C in void inmsg.
-- Search for this line
++ Add this line
********************************* THE MOD *************************************
-- } else {
-- for (i5=0; i5<curli; i5++)
-- addline(b,&(lin[i5*LEN]),&l1);
-- }
++ if ((subboards[curlsub].type) && (syscfg.systemnumber))
++ {
++ addline(b,"",&l1); /* Blank line, leave this alone! */
++ addline(b,"<insert the first line of your tag here>",&l1);
++ addline(b,"<insert the next line of your tag here>",&l1);
++ addline(b,". . .",&l1);
/* You may ^^^^ do the above line as little or as much as you wish. Simply
add and delete the addline procedures as needed. The general format for
addline is "addline(b," message ",&l1);". I have to yet figure out the
parameters, but this works! */
++ }
-- if (b[l1-1]!=26)
-- b[l1++]=26;
-- savefile(b,l1,&m,aux);
*******************************************************************************
The credit for this mod goes somewhat to Doug Fields, who (indirectly) showed
me how to use addline. I am a programmer, but in Pascal (C is a close
relative). Anyway, the good part:
If anything happens that is not good because you used this mod,
is not my fault, not is it the fault of my mod. It was simply your stupidity.
(just kidding). I am not in any way liable for this mod.
< The East Carolina Connection *MODS GALORE* 919-756-2939 1200/2400 >
────────────────────────────────────────────────────────────────────────────
Birdhunter #1 @3451
Tue May 08 22:06:19 1990
!!!!!!! MAILINMS.MOD !!!!!
Did you ever wind up seeing something in a post that reminds you that you
want to mail ANOTHER user??? And to do so you have to Quit your scan,
Email or Fmail the person and start your scan all over again??!!!
Frustrating!!!!
OK, this mod will allow you to both "F"mail the sysop OR to mail ANY
user in the NET or on your board FROM the message WITHOUT quitting the
message base.
Search for the following in MSGBASE1.C
void scan(int msgnum, int optype, int *nextsub)
{
char s[81],s1[81],s2[81],*b,*ss1;
int i,i1,i2,done,quit,abort,next,val,realexpress;
slrec ss;
When you reach that function search for the following:
case 'B':
if (*nextsub!=0) {
*nextsub=1;
done=1;
quit=1;
}
ADD this code BEFORE case 'B': as shown below:
case 'F': /* BH mod */
feedback(); /* BH mod */
break; /* BH mod */
case '=': /* BH mod */
/* Note the = can be replaced by ANY unused function that you like */
send_email(); /* BH mod */
break; /* BH mod */
case 'B': /* the rest is existing code */
if (*nextsub!=0) {
*nextsub=1;
done=1;
quit=1;
}
break;
case 'T':
optype=1;
break;
That's it. I don't normally publish mods, just hack. So any
problems with this, let me know but do NOT hold me responsible!!
Birdhunter
Birdhunter #1 @3451
Tue May 08 22:08:55 1990
Don't forget to add the = function to your menus and let the users know it
is available.
<<<<~~~~BIRDHUNTER~~~~>>>>
────────────────────────────────────────────────────────────────────────────
The Tyrant #1 @6909
Sat May 12 14:44:18 1990
This is the first ever mod by The Tyrant!
It changes the Read Prompt in MSGBASE1.C (search for "/* Read Prompt */") so
that the newer users (and the old pro's too) can understand what info is
actually there. Just load the above file, search like it says, and replace
whatever is different. A few extra lines were thrown in on either side of the
mod to know where to begin and where to end REPLACEMENT (since the old stuff
will have to be tossed). Enjoy...
switch(optype) {
case 0: /* Read Prompt */
if (express) {
s[0]=0;
nl();
nl();
} else {
sprintf(s,"[-<1-%u Available>-]",nummsgs);
pl(s);
i3=msgnum+1;
if (nummsgs<i3)
pl("[-<Enter=Done>-]");
else {
sprintf(s,"[-<Enter=Read %u>-]",i3);
pl(s);
}
prt(2,"[-<?=Help>-]: ");
helpl=16;
input(s,3);
while (s[0]==32) {
strcpy(s1,&(s[1]));
strcpy(s,s1);
}
}
optype=0;
i=atoi(s);
if (s[0]==0) {
i=msgnum+1;
────────────────────────────────────────────────────────────────────────────
Parker Prospect #1 @9964
Mon May 14 22:37:32 1990
Mod Name : Message Editor Mod v2.0
Mod Filename : EX20.MOD
Mod Author : Parker Prospect #1 @9964
Mod Description : Since this mod had been thoroughly requested, either
out of a need to have nice editing features for WWIV, that it obviously
lacks, or a wave of nostalgia hit some of the old WWIV v3.21d sysops
(yes I was one of them) and they wanted the old editor back. Well, Tau
Ceti made the first version of this mod, and the last version he had
released worked, but was not bulletproof. I did so. Also, I could
never get the /T: command to work. I finally did that also. Enjoy!
************** Legend **************
* %% Delete Line *
* -- Search for Line, DON'T CHANGE *
* ++ Add Line *
* -+ Modify Line *
* ## Line is part of another mod *
************************************
------------------------------------------------------------------------
Step #1 <MSGBASE.C>: Add the following code (a lot) where specified.
-- done=1;
-- savel=1;
-- if (s[0]=='/') {
-- if (stricmp(s,"/HELP")==0) {
-- savel=0;
-- printmenu(2);
-- }
++ if (stricmp(s,"/EX")==0) {
++ exloop = 1;
++ while (exloop) {
++ nl();
++ prt(5,"Message Editor {?} : ");
++ c[0] = onek("CA?SLNRTDIU");
++ switch(c[0]) {
++ case '?' :
++ prhelp();
++ break;
++ case 'S' :
++ save=1;
++ done=1;
++ savel=0;
++ exloop=0;
++ break;
++ case 'L' :
++ savel=0;
++ prt(5,"With line numbers? ");
++ i1=yn();
++ i2=0;
++ for (i=0; (i<curli) && (!i2); i++) {
++ if (i1) {
++ itoa(i+1,s1,10);
++ strcat(s1,":");
++ pl(s1);
++ }
++ strcpy(s1,&(lin[i*LEN]));
++ i3=strlen(s1);
++ if (s1[i3-1]==1)
++ s1[i3-1]=0;
++ if (s1[0]==2) {
++ strcpy(s1,&(s1[1]));
++ i5=0;
++ for(i4=0; i4<strlen(s1); i4++)
++ if ((s1[i4]==8) || (s1[i4]==3))
++ --i5;
++ else
++ ++i5;
++ for (i4=0; (i4<(thisuser.screenchars-i5)/2) && (!i2);
i4++)
++ osan(" ",&i2,&i1);
++ }
++ pla(s1,&i2);
++ }
++ break;
++ case 'A' :
++ prt(5, "Abort message? ");
++ if (yn()) {
++ done=1;
++ savel=0;
++ exloop=0;
++ }
++ break;
++ case 'N' :
++ prt(5, "Are you sure? ");
++ if (yn()) {
++ savel=0;
++ curli=0;
++ nl();
++ pl("Message cleared... Start over...");
++ } else {
++ pl("Continue...");
++ nl();
++ nl();
++ exloop=0;
++ break;
++ case 'C' :
++ nl();
++ prt(5,"Continue editing...");
++ nl();
++ nl();
++ exloop=0;
++ break;
++ case 'R' :
++ savel=0;
++ i2=0;
++ nl();
++ itoa(curli,s1,10);
++ prt(5,"Replace line 1-");
++ prt(5,s1);
++ prt(5,"? ");
++ input(c,2);
++ i=atoi(c);
++ if ((i>0) && (i<=curli)) {
++ i=i-1;
++ strcpy(s1,&(lin[i*LEN]));
++ i3=strlen(s1);
++ if (s1[i3-1]==1)
++ s1[i3-1]=0;
++ if (s1[0]==2) {
++ strcpy(s1,&(s1[1]));
++ i5=0;
++ for(i4=0; i4<strlen(s1); i4++)
++ if ((s1[i4]==8) || (s1[i4]==3))
++ --i5;
++ else
++ ++i5;
++ for (i4=0; (i4<(thisuser.screenchars-i5)/2) && (!i2); i4++)
++ osan(" ",&i2,&i1);
++ }
++ pla(s1,&i2);
++ }
++ prt(5,"Enter replacement line:");
++ nl();
++ inli(s,ro,160,1);
++ strcpy(&(lin[(i)*LEN]),s);
++ break;
++ case 'T' :
++ savel=0;
++ if (okansi()) {
++ prt(2,"Title: ");
++ mpl(60);
++ inputl(title,60);
++ } else {
++ pl("
(---=----=----=----=----=----=----=----=----=----=----=----)");
++ outstr("Title: ");
++ inputl(title,60);
## if ((subboards[curlsub].type == 2370) && (aux != "EMAIL"))
{
## prt(5, "Is this post a mod? ");
## if (yn()) {
## title[strlen(title)] = 32;
## title[55] = 60;
## title[56] = 77;
## title[57] = 79;
## title[58] = 68;
## title[59] = 62;
## title[60] = 0;
## }
## }
++ }
++ break;
++ case 'D' :
++ savel=0;
++ itoa(curli,s1,10);
++ prt(5,"Delete line 1-");
++ prt(5,s1);
++ prt(5,"? ");
++ input(c,2);
++ n=atoi(c);
++ if ((n > 0) && (n <=curli)) {
++ n=n-1;
++ i= &(lin[curli*LEN])+LEN-&(lin[(n+1)*LEN]);
++
memmove(&lin[(n)*LEN],&lin[(n+1)*LEN],&(lin[curli*LEN])+LEN-&(lin[(n+1)*LEN]));
++ --curli;
++ }
++ break;
++ case 'I' :
++ savel=0;
++ if (curli==maxli){
++ prt(5,"No room to insert a line");
++ nl();
++ } else {
++ itoa(curli,s1,10);
++ prt(5,"Insert line before 1-");
++ prt(5,s1);
++ prt(5,"? ");
++ input(c,2);
++ n=atoi(c);
++ if ((n>0) && (n<=curli)) {
++
memmove(&lin[(n)*LEN],&lin[(n-1)*LEN],&(lin[curli*LEN])+LEN-&(lin[(n)*LEN]));
++ curli++;
++ prt(5,"Enter insert line:");
++ nl();
++ inli(s,ro,160,1);
++ strcpy(&(lin[(n-1)*LEN]),s);
++ }
++ }
++ break;
++ case 'U' :
++ savel=0;
++ i2=0;
++ nl();
++ itoa(curli,s1,10);
++ prt(5,"Update line 1-");
++ prt(5,s1);
++ prt(5,"? ");
++ input(c,2);
++ i=atoi(c);
++ if ((i>0) && (i<=curli)) {
++ i=i-1;
++ strcpy(s1,&(lin[i*LEN]));
++ i3=strlen(s1);
++ if (s1[i3-1]==1)
++ s1[i3-1]=0;
++ if (s1[0]==2) {
++ strcpy(s1,&(s1[1]));
++ i5=0;
++ for(i4=0; i4<strlen(s1); i4++)
++ if ((s1[i4]==8) || (s1[i4]==3))
++ --i5;
++ else
++ ++i5;
++ for (i4=0; (i4<(thisuser.screenchars-i5)/2) && (!i2);
i4++)
++ osan(" ",&i2,&i1);
++ }
++ pla(s1,&i2);
++ }
++ prt(5,"Enter in form oldstring/newstring");
++ nl();
++ inli(s,ro,160,1);
++ if (!s[0])
++ break;
++ ss=strstr(s,"/");
++ ss1=&(ss[1]);
++ ss[0]=0;
++ stuff(&(lin[(i)*LEN]),s,ss1);
++ prt(5,"Line now reads:");
++ nl();
++ pl(&(lin[(i)*LEN]));
++ break;
++ }
++ }
++ }
-- if (stricmp(s,"/LI")==0) {
-- savel=0;
-- prt(5,"With line numbers? ");
-- i1=yn();
-- i2=0;
------------------------------------------------------------------------
Step #2 <MSGBASE.C>: Add the following code where specified.
-- pl("Continue...");
-- nl();
-- }
-- strcpy(s1,s);
-- s1[3]=0;
++ if (stricmp(s1,"/T:")==0) {
++ savel=0;
++ i3=strlen(s)-3;
++ if ((i3 > 0) && (i3 < 71) && (curli < (maxli-3))) {
++ s1[0]=2;
++ s1[1]='+';
++ memset(&s1[2], '-', (i3+2));
++ s1[i3+4]=0;
++ strcat(s1,"+");
++ strcpy(&(lin[(curli++)*LEN]),s1);
++ s2[0]=2;
++ s2[1]=0;
++ strcat(s2,"| ");
++ strcat((&s2[3]),&(s[3]));
++ strcat(s2," |");
++ strcpy(&(lin[(curli++)*LEN]),s2);
++ strcpy(&(lin[(curli++)*LEN]),s1);
++ } else
++ pl("*Length of boxed string must be between 1 and 70
characters*");
++ }
-- if (stricmp(s1,"/C:")==0) {
-- s1[0]=2;
------------------------------------------------------------------------
Step #3 <MSGBASE.C>: Add the following code where specified.
-- void inmsg(messagerec *m1, char *title, int *anony, int needtitle,
-- char *aux, int fsed)
-- {
-- char s[LEN],s1[LEN],s2[LEN],ro[81],fnx[81],chx,*ss,*ss1;
-- int maxli,curli,done,save,savel,i,i1,i2,i3,i4,i5,f,setanon,gati[50],
-- gatp;
-- messagerec m;
-- long ll,l1;
-- char *lin, *b;
-- int real_name=0;
++ int exloop, n;
++ char c[LEN];
------------------------------------------------------------------------
Step #4 <MSGBASE.C>: Add the following code BEFORE void inmsg.
void prhelp()
{
pl("? - This menu S - Save message");
pl("L - List lines A - Abort message");
pl("N - New message C - Continue");
pl("R - Replace a line T - new Title");
pl("D - Delete a line I - Insert a line");
pl("U - Update a line (search & replace)");
nl();
}
------------------------------------------------------------------------
Final Step
Compile the BBS and update your menus to reflect the changes you made...
------------------------------------------------------------------------
Disclaimer
I, Jeff Garzik, claim no liability for this mod, or for any damage that
may have resulted from the use of this mod. I also attach no warranty,
expressed OR implied, to this product. This type of warranty and
liability disclaimer is prohibited by law in certain states, and is
therefore void in those states.
────────────────────────────────────────────────────────────────────────────
Shadow-Starr #1 @2374
Thursday, May 17, 1990 6:52 pm
The Ulti-mail Mod
This mod takes care of one silly little occurance in WWIV that I
personally found wasteful. It combines the Email, Multiple SysOp Feedback,
and Multi-mail into one useful little menu.
One little note: all the case 'x' (where is x is a number)
instances are the locations for my myself, my two remote sysops, and my 4
co-sysops. You will need to eliminate or change these as necessary for your
management cadre (mine is somewhat large).
Ok... now, let's get to it...
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
STEP UN (ONE):
In BBSUTIL.C, block read in the following code immediately following
the external calls.
void feedback()
{
char ch,s1[80];
nl();
printmenu(16);
tleft(1);
print("Time remaining - ",ctim(nsl()),"");
ansic(1);
outstr("() Phoenix Express Feedback (> "); /* The name of your bbs here */
ch=onek("1234567EMQ"); /* Make sure each CASE '?' is listed here */
switch(ch) {
case '1':
strcpy(irt,"Feedback"); /* This is your account */
email(1,0,0,0);
break;
case '2':
strcpy(irt,"Feedback to Remote SysOp"); /* These will be the RE:s */
email(9,0,0,0);
break;
case '3':
strcpy(irt,"Feedback to Remote SysOp (MESSAGE BASE)");
email(3,0,0,0); /* Change 1st number to account # */
break;
case '4':
strcpy(irt,"Co-SysOp Feedback (USER MEETS)");
email(2,0,0,0);
break;
case '5':
strcpy(irt,"Co-SysOp Feedback (TRANSFERS)");
email(18,0,0,0);
break;
case '6':
strcpy(irt,"Co-SysOp Feedback (USER ENFORCEMENT)");
email(8,0,0,0);
break;
case '7':
strcpy(irt,"Co-SysOp Feedback (PUBLIC RELATIONS)");
email(2,0,0,0);
break;
case 'E':
send_email(); /* standard email */
break;
case 'M':
slash_e(); /* multi-mail */
break;
case 'Q': /* quit */
break;
}
}
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
STEP DEUX (TWO):
In BBS.C, search for 'slash_e()' and delete that line and the one
above it (they make the call to the multi-mail, and since this is no longer
needed...), and then search down to "case 'E':" and replace case 'E' and case
'F' with:
case 'E':
feedback();
break;
Notice that there is no more case 'F'....
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
STEP TROIS (THREE):
Compile that puppy and watch it go... and all should go well.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
STEP QUATRE (FOUR):
Use TheDraw or something to make menu16.msg and or menu16.ans. Mine
look like this:
/-----------------------------------\
| 1 Shadow-Starr (SY)|
| 2 FrenChem (RS)|
| 3 Baron Ferd Von Die Welten (RS)|
| 4 Lady Astra (CO)|
| 5 Rangerlord K (CO)|
| 6 The Galaxative (CO)|
| 7 Howard the Flaming Propoise (CO)|
\-----------------------------------/
/-----------------\
|E Standard Email|
|M Multi-Mail |
|Q Quit |
\-----------------/
That being my ASCII version of the menu.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
UPCOMING FEATURES:
* //MAILR command (hotkey) for sysops at prompt
* Kill command in menu
* Read mail command in menu
* Multi-mail to sysops (management)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
DISCLAIMER:
I, in no way force or imply to force, you to use this mod of mine,
nor at any point do I ask for your money (I, like many sysops out there,
am utterly broke, but still proud) and thus, claim no responsibility for any
damages that may occur to your system do to faulty programming skills.
This mod does work with 100% accuracy on Phoenix Express (WWIV @2374)
and thus, any fault must lie in translation or reinstillation.
If you do use this mod, however, I would like to know what you think
about it, so please email me at 1@2374.
And thank you for your support....
────────────────────────────────────────────────────────────────────────────
Merlin #4 @6862
Fri May 25 10:37:23 1990
Multi-Tagline for 4.11
(MERLIN1.MOD)
Now, we all know that there are TONS of tag line modifications out in the
world today. Two that I always liked were Doug Field's TAGLINE, and Parker
Prospect's TAGMOD2 (or, at least, that's what the file name where that I
got). Anyhow, one day I decided that I wanted to combine both to create a
most triumphant (yeah Bill and Ted!) mod.
~~~~~~~~~~~~~~~
Now, if you aren't familiar with the above-mentioned mods, then you
probably have no idea what these mods do. P.Prospect's mod allows the tag
to be added to even FSED messages because it uses the 'addline' routine.
D.Field's mod created a separate tagline for EACH subtype by the use of a
tag file (and thus, you DON'T have to recompile the BBS everytime you want
to change it...YEAH!). (BTW, hi to MtB--for the ORIGINIAL Tagline idea!)
Merlin 4@6862
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Well, after closer look at my code, I realized that i forgot
a few statements here and there so that EMail wouldn't be
affected by the TAG. Well, that's been killed off. Enjoy.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
/***********************/
/* L E G E N D */
/***********************/
/* - = Deleted Line */
/* + = New Line */
/* # = Existing Line */
/* ! = Modified Line */
/* * = Search For Line */
/***********************/
In MSGBASE.C: void inmsg();
= messagerec m;
= long ll,l1;
= char *lin, *b;
+ char s8[181]; /* MERLIN1 --> TAG MOD */
+ FILE *nettagfile; /* MERLIN1 --> TAG MOD */
= int real_name=0;
Later on in MSGBASE.C: void inmsg();
= } else {
= for (i5=0; i5<curli; i5++)
= addline(b,&(lin[i5*LEN]),&l1);
= }
+ /* MERLIN1.MOD --> THE ULTIMATE TAG MOD */
+ if ((subboards[cursub].type) && (syscfg.systemnumber) &&
!(strcmp(aux,"EMAIL"))) {
+ addline(b,"",&l1); /* Blank Line */
+ sprintf(s8, "%sTAG%u.MSG", syscfg.datadir,subboards[cursub].type);
+ if ((nettagfile = fopen(s8, "rt"))==NULL) {
+ sprintf(s8, "%sTAG-GEN.MSG", syscfg.datadir);
+ nettagfile = fopen(s8,"rt");
+ }
+ if (nettagfile !=NULL) {
+ while (!feof(nettagfile) && (curli < maxli)) {
+ fgets(s8, 180, nettagfile);
+ if (!feof(nettagfile)) addline(b, s8, &l1);
+ }
+ fclose(nettagfile);
+ }
+ addline(b, "", &l1);
+ }
+ /* MERLIN1.MOD --> THE ULTIMATE TAG MOD */
= if (b[l1-1]!=26)
= b[l1++]=26;
Oh, and BTW, I messed up on MERLIN1 (again...<GRIN>)...replace the line that
said...
+ if ((subboards[cursub].type) && (syscfg.systemnumber) &&
!(strcmp(aux,"EMAIL"))) {
with this
+ if ((subboards[cursub].type) && (syscfg.systemnumber) &&
(strcmp(aux,"EMAIL")!=0)) {
Thanks all!
|\/|erlin! 4@6862
(Someday, I'll be able to post mod's w/out having to correct them 3 or 4
times...<GRIN>)
────────────────────────────────────────────────────────────────────────────
Tarl Cabot #46 @8352
Sun May 27 20:14:36 1990
Hi there everyone. This is somewhat of a surprise for me, but none the less
here I am...a surprise in that I am NOT a TC programmer - yet - but have
picked up a tad here and a bit there...
This isn't a modification on its own, but rather a correction to a previously
release modification release by Parker Prospect. The mod that needed
correction for my system was the EX20.MOD file or Message Editor Mod v2.0.
What follows is basically all Parker Prospect's work with my alterations
and corrections installed and I am NOT taking credit for this work, only for
the ability to have found and corrected two bugs in it and making a "nice"
alteration to save on BBS code space.
Tarl Cabot
1@8350
/*** Updated Message Editor Mod v2.0**/
Parker Prospect #1 @9964
Mon May 14 22:37:32 1990
Mod Name : Message Editor Mod v2.0
Mod Filename : EX20.MOD
Mod Author : Parker Prospect #1 @9964
Mod Description : Since this mod had been thoroughly requested, either
out of a need to have nice editing features for WWIV, that it obviously
lacks, or a wave of nostalgia hit some of the old WWIV v3.21d sysops
(yes I was one of them) and they wanted the old editor back. Well, Tau
Ceti made the first version of this mod, and the last version he had
released worked, but was not bulletproof. I did so. Also, I could
never get the /T: command to work. I finally did that also. Enjoy!
************** Legend **************
* %% Delete Line *
* -- Search for Line, DON'T CHANGE *
* ++ Add Line *
* -+ Modify Line *
* ## Line is part of another mod *
************************************
------------------------------------------------------------------------
Step #1 <MSGBASE.C>: Add the following code (a lot) where specified.
-- done=1;
-- savel=1;
-- if (s[0]=='/') {
-- if (stricmp(s,"/HELP")==0) {
-- savel=0;
-- printmenu(2);
-- }
++ if (stricmp(s,"/EX")==0) {
++ if ((msgnum > 0) && (msgnum <= nummsgs)) {
++ b =
readfile(&(msgs[msgnum].msg),(subboards[curlsub].filename),&len);
++ write_out_to_msg(b,len);
++ }
++ load_workspace("OUTPUT.MSG", 0);
++ unlink("OUTPUT.MSG");
++ }
++ }
-- if ((msgs[msgnum].ownersys) && (!msgs[msgnum].owneruser))
--
grab_user_name(&(msgs[msgnum].msg),subboards[curlsub].filename);
-- ss=syscfg.sl[thisuser.sl];
-- if ((lcs()) || (ss.ability & ability_read_post_anony) ||
(msgs[msgnum].anony==0))
-- email(msgs[msgnum].owneruser,msgs[msgnum].ownersys,0,0);
-- else
--
email(msgs[msgnum].owneruser,msgs[msgnum].ownersys,0,msgs[msgnum].anony);
-- break;
-- case 'P':
## byline[0]=0;
-- irt[0]=0;
-- case 'W':
-- deleted_flag = 0;
++ if (s[0] != 'P')
++ if (okfsed()) {
++ prt(2, "Quote from message? ");
++ if (yn()) {
++ if ((msgnum > 0) && (msgnum <= nummsgs)) {
++ b =
readfile(&(msgs[msgnum].msg),(subboards[curlsub].filename),&len);
++ write_out_to_msg(b,len);
++ }
++ load_workspace("OUTPUT.MSG", 0);
++ unlink("OUTPUT.MSG");
++ }
++ }
-- post();
-- if (deleted_flag && (deleted_flag<=msgnum))
-- --msgnum;
-- break;
------------------------------------------------------------------------
Step #2 <MSGBASE1.C>: Add the following function BEFORE void scan.
void write_out_to_msg(char *b, long len)
{
char s2[81];
int i;
sprintf(s2, "OUTPUT.MSG", syscfg.tempdir);
i=open(s2,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
write(i,(void *)b,len);
close(i);
farfree(b);
}
------------------------------------------------------------------------
Step #3 <MSGBASE1.C>: Edit the following code in void readmail.
-- nl();
-- }
-- break;
-- case 'A':
-- case 'S':
## byline[0]=0;
-- if (!okmail)
-- break;
-- close(f);
++ if (okfsed()) {
++ prt(2, "Quote from message? ");
++ if ((yn()) && (okmail)) {
++ b = readfile(&(m.msg),"EMAIL",&len);
++ write_out_to_msg(b,len);
++ load_workspace("OUTPUT.MSG", 0);
++ unlink("OUTPUT.MSG");
++ }
++ }
-- num_mail=((long) thisuser.feedbacksent) +
-- ((long) thisuser.emailsent) +
-- ((long) thisuser.emailnet);
------------------------------------------------------------------------
Final Step
Compile the BBS and update your menus to reflect the changes you made...
------------------------------------------------------------------------
Disclaimer
I, Jeff Garzik, claim no liability for this mod, or for any damage that
may have resulted from the use of this mod. I also attach no warranty,
expressed OR implied, to this product. This type of warranty and
liability disclaimer is prohibited by law in certain states, and is
therefore void in those states.
────────────────────────────────────────────────────────────────────────────
Joe Barry #1 @6905
Sunday, May 27, 1990 11:41 am
╓────────────────────────────╖
║ FSEDTAG.MOD ║
║ for WWIV 4.10 ║
║ v.1.0 ║
╙────────────────────────────╜
This mod is based on Doug Fields tag mod for WWIV 4.07 BUT this version
redone & running on my system WILL work with all FSED & ofcourse the WWIV
builtin editor. IF you have Doug's original mod in your code you will have to
1st remove it since this version goes in a different area & also has been
changed too. For those that aren't fimilar with this mod, this is what
it does. You can have a different TAG for EACH netted sub you have on
your system. You will need to keep a number of files in your DATA directory,
each bearing the name TAGxxxxx.MSG,where the xxxxx is the subtype of the
linked sub. If the file does not exist, then it will try to print a file
TAG-GEN.MSG for a general tag. If this in turn does not exist, then it does not
try to add a tag. So, for example, I could put a TAG6902.MSG and & it would
append that tag to a post in that subtype, IF I didn't have a subtype tag for
that sub, it would then default to TAG-GEN.MSG and when someone posts a message
it would append that tag instead. Also IF a sub doesn't allow tags, then all
you have to do is make up that tag subtype with a 1 byte 'blank' & that will
help you to solve that problem. The files can be of unlimited length, but only
the number of lines up to that user's maximum number of lines will be appended.
OK so here we go, load up MSGBASE.C and then search for void inmsg
KEY
== Original Line
++ New line
=+ modified line
void inmsg(messagerec *m1, char *title, int *anony, int needtitle, char *aux,
int fsed)
{
== char s[LEN],s1[LEN],ro[81],fnx[81],chx,*ss,*ss1;
== int maxli,curli,done,save,savel,i,i1,i2,i3,i4,i5,setanon;
== messagerec m;
== long ll,l1;
== char *lin, *b;
++ char s8[181];
++ FILE *nettagfile;
A little further down in the code also in void inmsg look for this section of
code & add the stuff with the ++ next to those lines.
== if (fsed) {
== ll=filelength(i5);
== read(i5, (void *) (& (b[l1]) ),ll);
== l1 += ll;
== close(i5);
== } else {
== for (i5=0; i5<curli; i5++)
== addline(b,&(lin[i5*LEN]),&l1);
== }
++ if ((subboards[curlsub].type) && (syscfg.systemnumber)) /*SEE NOTE*/
++ {
++ addline(b,"",&l1);
++ sprintf(s8, "%sTAG%u.MSG", syscfg.datadir,subboards[cursub].type );
++ if ((nettagfile = fopen(s8, "rt")) == NULL)
++ {
++ sprintf(s8, "%sTAG-GEN.MSG", syscfg.datadir);
++ nettagfile = fopen(s8, "rt");
++ }
++ if (nettagfile != NULL)
++ {
++ fgets(s8, 180, nettagfile);
++ addline(b,s8,&l1);
++ fclose(nettagfile);
++ }
== }
== if (b[l1-1]!=26) /*code continues*/
== b[l1++]=26;
savefile(b,l1,&m,aux);
if (fsed)
unlink(fnx);
} else {
if (fsed)
unlink(fnx);
*******************************************************************************
NOTE:
IF you DON'T won't the tag to be placed in e-mail then use this line for the
above area line that I marked SEE NOTE & it won't add the tag to e-mail.
if ((subboards[curlsub].type) && (aux!="EMAIL")) /*NO E-MAIL TAG*/
Hit F-9 & it will recompile msgbase.c & your all done, any questions OR
problems E-MAIL me at 1@6905. I have been useing this for a month now & it
works perfectly.
────────────────────────────────────────────────────────────────────────────
Tarl Cabot #46 @8352
Tue May 29 03:26:39 1990
Hello there again...so soon after I added that modification by Parker Prospect
into my own system, I figured out how to correct the color addition into the
/T: option and here I am again. This is an update to EX201.MOD that has been
posted here in this message base. The modification file when released will
contain this update in it already, but for those that have been looking over
the code in this base, this is for you. Basically, what I did was trial and
error until I figured out how to get the loop and checking done to check for
that little heart symbol and remove two characters from the string length
calculation, otherwise the box would have the top and bottom too long for the
actual string. The small modified line in the code is so that any color added
into the text will not spoil the color-less box on the right side. Even if you
do not want to have the /EX mod installed, but want to add the boxed text mod,
this will do it for you nicely. Simply search out the area in the INMSG
function in the MESSAGE.C file and add this set of code around the area of the
/LI section. This code works for me, and it should work for you too. Enjoy.
David "Tarl Cabot" Stidham
1@8350
@@@@@ Legend @@@@@
@@ -- Existing Line @@
@@ -+ Modified Line @@
@@ ++ Added Line @@
@@@@@@@@@@@@@@@@@@@@@@@
/* Update to EX201.MOD */
-- if (stricmp(s1,"/T:")==0) {
-- savel=0;
-- i3=strlen(s)-3;
++ for (i4=0; i4<strlen(s); i4++)
++ if (s[i4]==3)
++ i3-=2;
-- if ((i3 > 0) && (i3 < 71) && (curli < (maxli-3))) {
-- s1[0]=2;
-- s1[1]='+';
-- memset(&s1[2], '-', (i3+2));
-- s1[i3+4]=0;
-- strcat(s1,"+");
-- strcpy(&(lin[(curli++)*LEN]),s1);
-- s2[0]=2;
-- s2[1]=0;
-- strcat(s2,"| ");
-- strcat((&s2[3]),&(s[3]));
-+ strcat(s2,"<alt3+0> |");
/* the above <alt3+0> should be replaced with the actual keystrokes */
-- strcpy(&(lin[(curli++)*LEN]),s2);
-- strcpy(&(lin[(curli++)*LEN]),s1);
-- } else
-- pl("*Length of boxed string must be between 1 and 70
characters*");
-- }
────────────────────────────────────────────────────────────────────────────
Tolkien #1 @3456
Wed May 30 01:04:10 1990
/*
Whoops, sorry 'bout the first version of this I posted. I totally forgot
to check on what colors are assigned if the the user number is the same as
whoever is logged on but from another system. Caused erratic behavior. This
fixes it.
This small modification will add color to your list of titles when you hit
"T" from the read prompt, in an informative way; if the caller posted the
message from your own board it will be one color, if from another board then
it will be in another color. And it's still a square bracket if YOU posted it
yourself and parenthesis if someone else did.
This serves a decent purpose -- you can quickly see which posts on any net
sub came from YOUR board and see if you are going to be embarassed or already
have been.
The idea behind it came from Sandman 1@3462 and he deserves all the credit as
the actual writing of the mod was quite simple.
As always take the proper precautions, back up your source, use a condom, etc.
We won't be responsible if your computer starts giving off radiation that
attracts UFO's or anything, but none have come for us yet.
So. Here it is:
Look for void scan() in msgbase1.c and find this hunk of code. Replace with
the following and it will show those who posted from your BBS in a different
color than those who didn't, and square brackets as usual if it is you who
posted it.
Replace all occurrences of "^P^C" with the heart character, which you can get
with control-p control-c from the TC Integrated Environment.
*/
/***************************************************************************/
case 1: /* List Titles */
i=0;
abort=0;
if (msgnum>=nummsgs)
abort=1;
nl();
while ((!abort) && (!hangup) && (++i<=10)) {
++msgnum;
itoa(msgnum,s,10);
if ((msgs[msgnum].ownersys!=0) &&
(msgs[msgnum].owneruser==usernum))
sprintf(s1,"^P^C1(^P^C0%s^P^C1)",s);
if ((msgs[msgnum].ownersys==0) && (msgs[msgnum].owneruser==usernum))
sprintf(s1,"^P^C7[^P^C0%s^P^C7]",s);
if ((msgs[msgnum].ownersys==0) &&
(msgs[msgnum].owneruser!=usernum))
sprintf(s1,"^P^C7(^P^C0%s^P^C7)",s);
if ((msgs[msgnum].ownersys!=0) &&
(msgs[msgnum].owneruser!=usernum))
sprintf(s1,"^P^C1(^P^C0%s^P^C1)",s);
for (i1=0; i1<16; i1++)
s[i1]=32;
if (msgs[msgnum].qscan>thisuser.qscnptr[curlsub])
s[0]='*';
strcpy(&s[12-strlen(s1)],s1);
strcat(s," ^P^C2");
strcat(s,msgs[msgnum].title);
pla(s,&abort);
if (msgnum>=nummsgs)
abort=1;
}
optype=0;
■ Normal code from here on down.
■
■
/***************************************************************************
Concept: Sandman 1@3462 Code Changes: Tolkien 1@3456
*/
────────────────────────────────────────────────────────────────────────────
Ed O'Brien #1 @7701
Thu May 31 19:11:35 1990
** AUTOSIGN.MOD **
DISCLAIMER - I offer this mod with NO guarantees. Use it at your own risk.
It works fine on my heavily modded WWIV4.11 with NO problems. It will work
on WWIV4.10 but other than that I won't say. If it damages your computer,
WWIV software or anything else I will NOT be held responsible.
By using this mod you agree to do so at your own risk.
===========================================================================
Welcome to my first GREAT, publicly released MOD for WWIV4.1+. I cannot
claim full credit for this mod as it is a combination of MODS done by others
and edited by me to work as I prefer on my system. It is a combination of
the message status mod and the auto signature mod. I liked the idea of
having the ability for my users as well as myself to be able to tag E-Mail
with the Message Status -> Reply requested or No reply necessary message and
also like the ability to have the tag line added to the bottom of my systems
posts. Unfortunately, as written the message status mod only worked with the
built in WWIV line editor but NOT with FSED. I use FSED exclusively as do
MOST of my users so I made the necessary changes.
My version of these two fine mods auto signs any E-Mail with the users name
and node number and gives the user the ability to ask for a response to their
mail when necessary. This mod unlike some of the others does NOT allow for
the [Message Status] line in a NET post but restricts it to E-Mail ONLY. In
addition this mod adds the users name and node number, the name of the NET
sub as well as a customized TAG line for your BBS.
============================================================================
All changes are in MSGBASE.C void inmsg(blah blah blah)
Legend
~~~~~~
!=existing line
+=add line
! } else {
! for (i5=0; i5<curli; i5++)
! addline(b,&(lin[i5*LEN]),&l1); /* search for */
! }
+ addline(b," ",&l1); /* Begin Mod */
+ strcpy(s,"[Message Author] ");
+ strcat(s,nam1(&thisuser,usernum,syscfg.systemnumber));
+ addline(b,s,&l1);
+ if ((subboards[curlsub].type) && (syscfg.systemnumber) &&
+ (aux!="EMAIL")) {
+ strcpy(s,"[Net Sub Origin] ");
+ strcat(s,subboards[curlsub].name);
+ addline(b,s,&l1);
+ addline(b,"[System] << Your custom TAG line goes here >>",&l1);
+ } else {
+ if (aux=="EMAIL") {
+ outstr("Do you want a response to this message? [y/N] : ");
+ if (yn()) {
+ addline(b,"[Message Status] Please respond to this message.
+ Thanks!",&l1);
+ } else {
+ addline(b,"[Message Status] No response necessary.",&l1);
+ }
+ }
+ } /* End mod */
! if (b[l1-1]!=26)
! b[l1++]=26;
! savefile(b,l1,&m,aux);
! if (fsed)
! unlink(fnx);
! } else {
=============================================================================
I hope you can use and enjoy this mod.
────────────────────────────────────────────────────────────────────────────
Parker Prospect #1 @9964
Thu May 31 22:11:13 1990
Mod Name : Basic Message Quoting w/ FSEDs v1.2
Mod Filename : QUOTE1_2.MOD
Mod Author : Parker Prospect #1 @9964
Mod Description : I live in a small town, with relatively few BBSes (total
number = 5). Four of those are IBM BBSes, and one is SearchLight. I am
quite taken with SearchLight, and love its editor to death. One of the
features in this editor is the ability to "Get reply text". What this does
is you press two keys (^KG) and the message you are replying to appears in
the editor, with quote characters '>' on the beginning of each line. I
decided I wanted to do this, but it wouldn't be of real use unless you
could delete the unwanted lines. Hence, the full-screen editor restriction
on quoting messages here (you need one in order to be able to edit it).
This works both locally and remotely, as long as the user supports a full
screen editor.
************** Legend **************
* %% Delete Line *
* -- Search for Line, DON'T CHANGE *
* ++ Add Line *
* -+ Modify Line *
* ## Line is part of another mod *
************************************
------------------------------------------------------------------------
Step #1 <MSGBASE1.C>: In void scan, edit the code below as shown.
++ case 'A':
## byline[0]=0;
++ if (okfsed()) {
++ prt(2, "Quote from message? ");
++ if (yn()) {
++ if ((msgnum > 0) && (msgnum <= nummsgs)) {
++ b =
readfile(&(msgs[msgnum].msg),(subboards[curlsub].filename),&len);
++ write_out_to_msg(b,len);
++ }
++ load_workspace("OUTPUT.MSG", 0);
++ unlink("OUTPUT.MSG");
++ }
++ }
-- if ((msgs[msgnum].ownersys) && (!msgs[msgnum].owneruser))
--
grab_user_name(&(msgs[msgnum].msg),subboards[curlsub].filename);
-- ss=syscfg.sl[thisuser.sl];
-- if ((lcs()) || (ss.ability & ability_read_post_anony) ||
(msgs[msgnum].anony==0))
-- email(msgs[msgnum].owneruser,msgs[msgnum].ownersys,0,0);
-- else
--
email(msgs[msgnum].owneruser,msgs[msgnum].ownersys,0,msgs[msgnum].anony);
-- break;
-- case 'P':
## byline[0]=0;
-- irt[0]=0;
-- case 'W':
-- deleted_flag = 0;
++ if (s[0] != 'P')
++ if (okfsed()) {
++ prt(2, "Quote from message? ");
++ if (yn()) {
++ if ((msgnum > 0) && (msgnum <= nummsgs)) {
++ b =
readfile(&(msgs[msgnum].msg),(subboards[curlsub].filename),&len);
++ write_out_to_msg(b,len);
++ }
++ load_workspace("OUTPUT.MSG", 0);
++ unlink("OUTPUT.MSG");
++ }
++ }
-- post();
-- if (deleted_flag && (deleted_flag<=msgnum))
-- --msgnum;
-- break;
------------------------------------------------------------------------
Step #2 <MSGBASE1.C>: Add the following function BEFORE void scan.
void write_out_to_msg(char *b, long len)
{
char s2[81];
int i;
sprintf(s2, "OUTPUT.MSG", syscfg.tempdir);
i=open(s2,O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
write(i,(void *)b,len);
close(i);
farfree(b);
}
------------------------------------------------------------------------
Step #3 <MSGBASE1.C>: Edit the following code in void readmail.
-- nl();
-- }
-- break;
-- case 'A':
-- case 'S':
## byline[0]=0;
-- if (!okmail)
-- break;
-- close(f);
++ if (okfsed()) {
++ prt(2, "Quote from message? ");
++ if ((yn()) && (okmail)) {
++ b = readfile(&(m.msg),"EMAIL",&len);
++ write_out_to_msg(b,len);
++ load_workspace("OUTPUT.MSG", 0);
++ unlink("OUTPUT.MSG");
++ }
++ }
-- num_mail=((long) thisuser.feedbacksent) +
-- ((long) thisuser.emailsent) +
-- ((long) thisuser.emailnet);
------------------------------------------------------------------------
Final Step
Compile the BBS and update your menus to reflect the changes you made...
------------------------------------------------------------------------
Disclaimer
I, Jeff Garzik, claim no liability for this mod, or for any damage that
may have resulted from the use of this mod. I also attach no warranty,
expressed OR implied, to this product. This type of warranty and
liability disclaimer is prohibited by law in certain states, and is
therefore void in those states.
If you like this mod, you can call my board at:
The East Carolina Connection
919-756-2939 :::: 2400 baud MNP level 4
24hrs a day -- 7 days a week
Autovalidation of WWIV sysops (first call)
────────────────────────────────────────────────────────────────────────────
Scott Lockwood #1 @15906
Sun Jun 03 20:09:05 1990
/*===========================================================================*/
AUTOSAVE WITH HANGUP MESSAGE
by Midnight Tree Bandit
[Ed.'s note: of course, this originally appeared in VARIOUS1 with a former
handle. I took the liberty of changing it to my current handle. -=>mtb]
Doug said he thought he'd taken care of this, but I haven't seen an autosave
feature that saved messages at (hangup) anywhere, so here it is. I find this
handy for those with call waiting or bosses who look in, who find them selves
hanging up on the 28th line of a 30-line magnum opus. Happened to me plenty
when I was living in my old apartment, with five roommates and call waiting.
This mod will not only automatically save the message (very simple), but leave
a line at the end of the message that informs the readers that the writer hung
up (in case they get confused by an abrupt ending).
1. Load (or keep) MSGBASE.C.
2. Search in 'void inmsg(..)' for:
if (hangup)
save=1;
3. Replace it with:
if (hangup) {
save=1;
done=1;
}
And that takes care of the autosave (said it was simple). To add in the extra
line:
4. Search for:
if (savel) {
strcpy(&(lin[(curli++)*LEN]),s);
if (curli==maxli) {
nl();
pl("-= No more lines =-");
pl("/ES to save");
nl();
--curli;
}
}
}
if (curli==0) {
[Note: If you added my two-line-warning, then that will also appear in this
block of code.]
5. And replace it with (= is same line, + is add line, * is amend line):
= if (savel) {
= strcpy(&(lin[(curli++)*LEN]),s);
= if (curli==maxli) {
= nl();
= pl("-= No more lines =-");
= pl("/ES to save");
= nl();
= --curli;
+ } else {
+ if (hangup) {
+ curli+=2;
+ strcpy(&(lin[(curli++) *LEN]),"[*> *clik* They Hung up! Thppt! <*]");
+ }
= }
= }
= }
= if (curli==0) {
NOTES:
Again, if you have the two-line-warning in your program, it will also appear
here.
Also again, this will not appear in FSED. If you figure out how...
Make sure you have all four closing brackets at the end. When I forgot them,
I got a "Misplaced else" error, and kept getting it because I though it was on
the brackets in the next set (which is the tag line mod). It was because I
only had three brackets.
There was, as I said, an odd effect on E-mail. When I tested these, the
e-mail behaved as it should when I entered a regulr message to 1@8400 from
here. But then I tested the hangup in e-mail, and the "They Hung up!" message
appeared as it should, but the tag line ALSO appeared. Hmm... If anyone
knows how the code could fix this, let me know.
/*===========================================================================*/