home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / SYSOP / MODS1.ZIP / SPV031IH.MOD < prev    next >
Text File  |  1995-05-31  |  24KB  |  675 lines

  1. Papa Bear #1 @11579
  2. 7Saturday1, 7May 271, 71995 2 26:231 am
  3. 0R 34 05/31 06:23 WWIVnet ->8339
  4. 0R 34 05/29 17:25 WWIVnet 8314->8304
  5. 0R 34 05/28 15:02 WWIVNET 4001->8314
  6. 0R 34 05/28 19:17 WWIVnet 4000->4001
  7. 0R 34 05/28 10:43 WWIVnet ->4000
  8. 0R 34 05/27 06:25 WWIVnet 4001->4000
  9. 0R 34 05/27 12:29 WWIVnet 11579->4001
  10. 0R 34 05/27 02:35 WWIVnet ->11579
  11. 4Msg. Status:9▄ 5Please reply!
  12. 9 ▀▀▀▀▀▀▀▀▀▀▀▀
  13. ┌────────────────────────────A CEREBRUM RELEASE!─────────────────────────────┐
  14. │ Mod Name: SPV031IH.MOD     Mod Authors: 8-Ball                             │
  15. │ Difficulty: ▓▓▓▓▓▓░░░░ <<< TAKE NOTE!   Repo Man                           │
  16. │ Revision Dates: FIRST [01/10/92]        Captain EJ                         │
  17. │                 LAST  [05/26/95]        Pâpâ ßêâr  (1@11579 WW4net)        │
  18. │ WWIV Version: 4.24  [not for versions previous to 4.24!]                   │
  19. │ Files Affected: MSGBASE.C MSGBASE1.C READMAIL.C FCNS.H VARS.H              │
  20. │ Description: 8-Ball's Quote Mod! As revised by Repo Man and myself.  Code  │
  21. │from Captain EJ included.  I think this is the *best* quote mod I've seen!  │
  22. │>>> NOW WORKS WITH NON-FSE's AS WELL AS FSE's!!! Added Anonymous support.   │
  23. ╞═────────────────────────────────────═╤═───────────────────────────────────═╡
  24. │ StarPort Valhalla [   ]   -     ASV 28.8kbps  Home of the SPV mod series!  │
  25. └─────────────────────────────────────═╧═────────────────────────────────────┘
  26.  
  27.                      >>> OFFICIAL WWIV SUPPORT SITE! <<<
  28.  
  29.  Word of Warning:  You installed it, you're responsible! Make back-ups BEFORE
  30.  attempting to install this modification!  Read all text before beginning.
  31.  Again, READ THIS ENTIRE MOD >BEFORE< BEGINNING!
  32. ─────────────────────────────────────────────────────────────────────────────
  33.  LEGEND:
  34.  ==  Original Code [use this to search on]
  35.  ++  Add this Line [mods ALWAYS add stuff, don't they?]
  36.  --  Delete this Line [or comment out, its not needed]
  37.  -+  Change this Line [I usually comment these lines]
  38.  ... Skipping some code here [keeps the mod shorter]
  39. ─────────────────────────────────────────────────────────────────────────────
  40.  LONG DESCRIPTION:  The famous SPV modification redone for WWIV 4.24.  You
  41. should note that 4.24 introduced the M command at the mail prompt that will
  42. allow you reply to E-Mail to a different address than it was sent from.  For
  43. that reason, this that feature has been removed from this mod proper.  The @
  44. command will allow you to send a subboard post to a E-Mail address other than
  45. the one it originated from.
  46.   I've completely redone the docs for this.  This mod contains some
  47. improvements over the last 4.23 version ("G" revision) that I'd previous;y
  48. released.
  49. ─────────────────────────────────────────────────────────────────────────────
  50. STEP 1: Add this line the the top of MSGBASE.C
  51.  
  52. == #include "vars.h"
  53. ==
  54. == #pragma hdrstop
  55.  
  56. == #include <mem.h>
  57. == #include <errno.h>
  58. == #include "subxtr.h"
  59. ++ #include <ctype.h>                                         // SPV031IH add
  60. ==
  61. == #define ALLOW_FULLSCREEN 1
  62. ─────────────────────────────────────────────────────────────────────────────
  63. STEP 2: In MSGBASE.C, make the following changes in:
  64.         char *readfile(messagerec *m1, char *aux, long *l)
  65.  
  66. ==        return(NULL);
  67. ==      }
  68. ==      l1=filelength(f);
  69. -+      if ((b=malloca(l1+2L))==NULL) {                 // SPV031IH - add +2L
  70. ==        sh_close(f);
  71. ==        return(NULL);
  72. ==      }
  73. . . . SKIPPING SOME LINES HERE, TAKE CARE TO NOTE THE PROPER LOCATION! . . .
  74. ==        return(NULL);
  75. ==      }
  76. ==      l1=filelength(f);
  77. -+      if ((b=malloca(l1+258L))==NULL) {     // SPV031IH - change 256 to 258
  78. ==        sh_close(f);
  79. ==        return(NULL);
  80. ==      }
  81. ==      sh_read(f,(void *)b,l1);
  82. ─────────────────────────────────────────────────────────────────────────────
  83. STEP 3: Add these variable declarations in MSGBASE.C to  void inmsg(...)
  84.  
  85. ==   FILE *result;
  86. ==   struct {char tlen, ttl[81], anon; } fedit_data;
  87. == #ifdef OPT_MSG_TAG_ABILITY
  88. ==   xtrasubsnetrec *xnp;
  89. == #endif
  90. ++   FILE *pbquote;                                               // SPV031IH
  91. ++   char pb[13],pb1[161],pb2[161];                               // SPV031IH
  92. ++   int j=0;                                                     // SPV031IH
  93. ─────────────────────────────────────────────────────────────────────────────
  94. STEP 4: Still in void inmsg(...) a little ways down, make these changes
  95.  
  96. ==    outstr(get_string(627));
  97. ==    pln(maxli);
  98. ==    pl(get_string(628));
  99. ++    if (quoted) {
  100. ++      nl();
  101. ++      pl("9Type 1/Q9 in the message to view the quoted text!0");
  102. ++      nl();
  103. ++    }
  104. ==    strcpy(s,get_string(629));
  105. ==    s[thisuser.screenchars]=0;
  106. ==    pl(s);
  107. . . . JUST A LITTLE FURTHER DOWN NOW . . .
  108. ==        if (stricmp(s,get_string(942))==0) {
  109. ==          savel=0;
  110. ==          printmenu(2);
  111. ==        }
  112. // START SPV031IH BLOCK COPY
  113.         if (stricmp(s,"/Q")==0) {
  114.           if (quoted) {
  115.             sprintf(pb,"%sINPUT.MSG",syscfgovr.tempdir);
  116.             printfile(pb);
  117.           } else {
  118.             nl();
  119.             pl("6You must quote the message you're replying to to0");
  120.             pl("6use this command.  Please continue your message.0");
  121.             nl();
  122.           }
  123.         }
  124. // END SPV031IH BLOCK COPY
  125. ==        if (stricmp(s,get_string(943))==0) {
  126. ==          savel=0;
  127. ==          prt(5,get_string(630));
  128. ─────────────────────────────────────────────────────────────────────────────
  129. STEP 5: Still in void inmsg(...) a LOT further down, make these changes
  130.  
  131. ==    if (fsed) {
  132. ==      ll=filelength(i5);
  133. ==      sh_read(i5, (void *) (& (b[l1]) ),ll);
  134. ==      l1 += ll;
  135. ==      sh_close(i5);
  136. ==    } else {
  137. // START SPV031IH BLOCK COPY
  138.     if (quoted) {
  139.       sprintf(pb,"%sINPUT.MSG",syscfgovr.tempdir);
  140.       pbquote=fsh_open(pb,"rt");
  141.       if (!pbquote) {
  142.         nl();
  143.         pl("6Quote file does not exist! Notify SysOp!0");
  144.         j=0;
  145.         nl();
  146.       } else {
  147.         while (!feof(pbquote)) {
  148.           j=1;
  149.           sprintf(pb2,(fgets(pb1,160,pbquote)));
  150.           addline(b,pb2,&l1);
  151.         }
  152.       }
  153.       fsh_close(pbquote);
  154.       unlink(pb);
  155.     }
  156.     nl();
  157.     if (j)
  158.         pl("5The Quote file has been attached to your message!0");
  159. // END SPV031IH BLOCK COPY
  160. ==      for (i5=0; i5<curli; i5++)
  161. ==        addline(b,&(lin[i5*LEN]),&l1);
  162. ==    }
  163. ==
  164. == #ifdef OPT_MSG_TAG_ABILITY
  165. ─────────────────────────────────────────────────────────────────────────────
  166. STEP 6: Add these lines in MSGBASE.C
  167.  
  168. ==    if (an) {
  169. ==      strcat(s,nam(&ur,un));
  170. ==      sysoplog(s);
  171. ++      Unknown=0;                                                // SPV031IH
  172. ==    } else {
  173. ++      Unknown=1;                                                // SPV031IH
  174. ==      strcpy(s1,s);
  175. ==      strcat(s1,nam(&ur,un));
  176. ==      sysoplog(s1);
  177. ==      strcat(s,get_string(482));
  178. . . . A little farther down . . .
  179. ==    if (an) {
  180. ==      read_user(un,&ur);
  181. ==      strcpy(s2,nam(&ur,un));
  182. ++      Unknown=0;                                                // SPV031IH
  183. -+    } else {                                            // SPV031IH added {
  184. ++      Unknown=1;                                                // SPV031IH
  185. ==      strcpy(s2,get_string(482));
  186. ++    }                                                           // SPV031IH
  187. ==  } else {
  188. ==    if (net_num_max>1) {
  189. ─────────────────────────────────────────────────────────────────────────────
  190. STEP 7: Add these three functions to the end of MSGBASE.C
  191.  
  192. // SPV031IH BLOCK COPY START
  193. void extract_out2(char *org, long len, int type, long daten)
  194. {
  195.   char s[255],s1[81],s2[81],*p,buf[255],*b,tb[81],tb1[81],b1[81],pb[81],ch;
  196.   int i,ii=0,j,jj,length,qnq=1,line_control,done,k;
  197.   FILE *Output;
  198.  
  199.   printfile("QUOTE");
  200.   if (!okfsed())
  201.     pausescr();
  202.   nl();
  203.   quoted=0;
  204.   if (okfsed()) {
  205.     npr("5Do you want to select the lines to quote? 0");
  206.     if (!yn())
  207.       qnq=0;
  208.     else
  209.       outchr(12);
  210.   } else
  211.     outchr(12);
  212.   p=b=org;
  213.   sprintf(s2,"%sINPUT.MSG",syscfgovr.tempdir);
  214.   unlink(s2);
  215.   if (!hangup) {
  216.     if ((Output=fopen(s2,"w+t"))==NULL) {
  217.       sprintf(s,"6ERR2: 9Could not create 1%s9! 5(1quote file5)0");
  218.       nl();
  219.       if (so())
  220.         pl(s);
  221.       else {
  222.         ssm(1,0,s);
  223.         pl("6Could not create quote file -- SysOp notified!0");
  224.       }
  225.       nl();
  226.       return;
  227.     }
  228.     while (*p!='\r')
  229.       ++p;
  230.     *p='\0';
  231.     strcpy(s1,b);
  232.     p+=2;
  233.     len=len-(p-b);
  234.     b=p;
  235.     while (*p!='\r')
  236.       ++p;
  237.     p+=2;
  238.     len=len-(p-b);
  239.     b=p;
  240.     sprintf(pb,"%s",ctime(&daten));
  241.     sprintf(s2,"1%s7, 1%s7. 1%s7, 1%s0",
  242.            (strnncpy(pb,0,2)),
  243.            (strnncpy(pb,4,6)),
  244.            (strnncpy(pb,8,9)),
  245.            (strnncpy(pb,20,23)));
  246.     strcpy(tb1,stripcolors(strip_to_node(s1)));
  247.     properize(tb1);
  248.     if (strlen(tb1)%2!=0)
  249.       sprintf(tb," %s",tb1);
  250.     else
  251.       strcpy(tb,tb1);
  252.     jj=tb1[0]=0;
  253.     for (j=0;j<strlen(tb);j++) {
  254.       if ((toupper(tb[j])==tb[j]) &&
  255.         (isalpha(tb[j]))) {
  256.         tb1[jj]=tb[j];
  257.         tb1[jj+1]=0;
  258.         jj++;
  259.       }
  260.     }
  261.     if (!tb1[0]) {
  262.       if (tb[0]==32)
  263.         tb1[0]=tb[1];
  264.       else
  265.         tb1[0]=tb[0];
  266.       tb1[1]=0;
  267.     }
  268.     if (Unknown) {
  269.       sprintf(tb," %s",get_string(482));
  270.       strcpy(tb1,"6>2U6<0");
  271.       Unknown=0;
  272.     }
  273.     switch (type) {
  274.       case 1:
  275.         sprintf(buf,"3» 9In your E-Mail of 1%s7,9 you wrote: 3«0",s2);
  276.         break;
  277.       case 2:
  278.         sprintf(buf,
  279.          "3» 9This was forwarded from 1%s9, sent on 1%s9. 3«0",tb,s2);
  280.         break;
  281.       case 3:
  282.         sprintf(buf,
  283.                   "3» 9In a message posted 1%s7,9 you wrote: 3«0",s2);
  284.         break;
  285.       case 4:
  286.         sprintf(buf,"3» 9On 1%s7, 1%s9 said this: 3«0",s2,tb);
  287.         break;
  288.     }
  289.     length=0;
  290.     for (j=0;j<strlen(buf);j++) {
  291.       if ((buf[j]!='\003') && (buf[j-1]!='\003'))
  292.         length++;
  293.     }
  294.     jj=(39-(length/2));
  295.     fprintf(Output,"2%s%s%s0\n",charstr(jj,196),buf,charstr(jj,196));
  296.     line_control=1;
  297.     done=0;
  298.     k=78-strlen(tb1);
  299.     while ((len>0) && (!done) && (!hangup)) {
  300.       while ((strchr("\r\001",*p)==NULL) && ((p-b)<(len<253 ? len : 253)))
  301.         ++p;
  302.       if (*p=='\001')
  303.         *(p++)='\0';
  304.       *p='\0';
  305.       if ((*b!='\004') && (strchr(b,'\033')==NULL)) {
  306.         for (j=0;j<k;j++) {
  307.           if (((b[j]=='0') && (b[j-1]!='\003')) || (b[j]!='0'))
  308.             b1[j]=b[j];
  309.           else
  310.             b1[j]='7';
  311.           b1[j+1]=0;
  312.         }
  313.         if ((qnq) && (line_control>thisuser.screenlines)) {
  314.           line_control=0;
  315.           outchr(12);
  316.         }
  317.         if ((qnq) && (okansi())) {
  318.           goxy(0,line_control);
  319.           line_control++;
  320.         }
  321.         if ((ii) && (okansi()) && (qnq)) {
  322.           pl(charstr(79,32));
  323.           goxy(0,line_control-1);
  324.         }
  325.         sprintf(buf,"1%s7»9%s0",tb1,b1);
  326.         if (qnq) {
  327.           if (!okansi())
  328.             outchr(12);
  329.           pl(buf);
  330.           if (okansi()) {
  331.             goxy(0,line_control);
  332.             line_control++;
  333.           }
  334.           npr(
  335. "5Quote this line? 3(1[2Y1]es, [2n1]o, [2q1]uit, [2a1]bort3) 0");
  336.           ch=onek("QY\rNA");
  337.           switch (ch) {
  338.             case '\r':
  339.             case 'Y':
  340.               fprintf(Output,"%s\n",buf);
  341.               quoted=1;
  342.               ii=0;
  343.               line_control--;
  344.               goxy(0,line_control);
  345.               pl(charstr(79,32));
  346.               done=0;
  347.               break;
  348.             case 'N':
  349.               line_control-=2;
  350.               ii=1;
  351.               done=0;
  352.               break;
  353.             case 'A':
  354.               pl("Aborted!");
  355.               quoted=0;
  356.               done=1;
  357.               break;
  358.             default:
  359.             case 'Q':
  360.               done=1;
  361.               break;
  362.           }
  363.         } else {
  364.           fprintf(Output,"%s\n",buf);
  365.           quoted=1;
  366.         }
  367.       }
  368.       p+=2;
  369.       len=len-(p-b);
  370.       b=p;
  371.     }
  372.     nl();
  373.     pl("5Enter your reply text 3(1default6: 2My reply to this3)0");
  374.     mpl(60);
  375.     inputl(s,60);
  376.     if (!s[0])
  377.       strcpy(s,"My reply to this");
  378.     jj=(39-((strlen(s)+4)/2));
  379.     fprintf(Output,"2%s3» 4%s3 «2%s0\n",
  380.             charstr(jj,196),s,charstr(jj,196));
  381.     outchr(12);
  382.     if (!okfsed())
  383.       fprintf(Output,"\0");
  384.     fclose(Output);
  385.     if (!quoted) {
  386.       sprintf(s2,"%sINPUT.MSG",syscfgovr.tempdir);
  387.       unlink(s2);
  388.     }
  389.     irt_name[0]='\0';
  390.   }
  391.   farfree(org);
  392. }
  393.  
  394. char *strip_to_node(char *txt)
  395. {
  396.   int i,ok;
  397.   char s[81];
  398.  
  399.   if (strstr(txt,"@")!=NULL) {
  400.     ok=1;
  401.     for (i=0; i<strlen(txt); i++) {
  402.       if (ok) {
  403.         s[i]=txt[i];
  404.         s[i+1]=0;
  405.       }
  406.       if (txt[i+2]=='#')
  407.         ok=0;
  408.     }
  409.     return(s);
  410.   }
  411.   if (strstr(txt,"AT")!=NULL) {
  412.     ok=1;
  413.     for (i=2; i<strlen(txt); i++) {
  414.       if (ok) {
  415.         s[i-2]=txt[i];
  416.         s[i-1]=0;
  417.       }
  418.       if (txt[i+1]=='`')
  419.         ok=0;
  420.     }
  421.     return(s);
  422.   }
  423.   return(txt);
  424. }
  425.  
  426. char *strnncpy(char *str_parse, int start_ch, int end_ch)
  427. {
  428.   int i,j=0;
  429.   char s[255];
  430.  
  431.   if (start_ch<0)
  432.     start_ch=0;
  433.   if (end_ch>(strlen(str_parse)))
  434.     end_ch=strlen(str_parse);
  435.   for (i=start_ch;i<(end_ch+1);i++) {
  436.     s[j]=str_parse[i];
  437.     s[j+1]=0;
  438.     j++;
  439.   }
  440.   return(s);
  441. }
  442. // SPV031IH BLOCK COPY END
  443.  
  444. NOTE:  To use this function, simply call it something like:
  445.  
  446.   strcpy(s,(strnncpy("This is a test",5,8)));
  447.  
  448.   This places "is a" into the variable s.
  449. ─────────────────────────────────────────────────────────────────────────────
  450. STEP 8: Prototype the function ins FCNS.H:
  451.  
  452. == int existprint(unsigned char *fn);
  453. == void read_message(int n, int *next, int *val);
  454. == void lineadd(messagerec *m1, char *sx, char *aux);
  455. ++ void extract_out2(char *org, long len, int type, long daten);   //SPV031IH
  456. ++ char *strip_to_node(char *txt);                                 //SPV031IH
  457. ++ char *strnncpy(char *str_parse, int start_ch, int end_ch);      //SPV031IH
  458. ==
  459. == /* File: msgbase1.c */
  460. ─────────────────────────────────────────────────────────────────────────────
  461. STEP 9: Add these global variable declarations to VARS.H in the __EXTRN__
  462.         int section:
  463.  
  464. ==               use_workspace, using_modem, wfc, x_only,
  465. ==               instance,debuglevel,multitasker,tagging,tagptr,cursormove,
  466. -+              titled, abortext,quoted,Unknown;                  // SPV031IH
  467. ==
  468. == __EXTRN__ unsigned short com_speed, *csn_index, crc, *gat, modem_flag,
  469. ==                       modem_mode, modem_speed, net_sysnum, curloc, eflags;
  470. ─────────────────────────────────────────────────────────────────────────────
  471. STEP 10: In MSGBASE1.C, add this line in
  472.          void scan(int msgnum, int optype, int *nextsub)
  473.  
  474. ==    write_inst(INST_LOC_SUBS, usub[cursub].subnum, INST_FLAGS_NONE);
  475. ==    switch(optype) {
  476. ==      case 0: /* Read Prompt */
  477. ++        quoted=0;                                               // SPV031IH
  478. ==        if (E_C) {
  479. ==          sprintf(s,"1%s0:7(11-%u,^%u7)1,? 0: ",get_string(678),
  480. ==            nummsgs,msgnum);
  481. ─────────────────────────────────────────────────────────────────────────────
  482. STEP 11: In MSGBASE1.C, make the following changes in:
  483.          void scan(int msgnum, int optype, int *nextsub)
  484.  
  485. ==          optype=2;
  486. ==          msgnum=i;
  487. ==        } else
  488. ==          if (s[1]==0) {
  489. // START SPV031IH BLOCK COPY
  490.             if ((s[0]=='A') || (s[0]=='W')) {
  491.               nl();
  492.               npr("5Quote from this message? 0");
  493.               if (ny()) {
  494.                 p2=*get_post(msgnum);
  495.                 grab_quotes(&(p2.msg),subboards[curlsub].filename);
  496.                 if ((msgnum>0) && (msgnum<=nummsgs)) {
  497.                   b=readfile(&(get_post(msgnum)->msg),
  498.                             (subboards[curlsub].filename),&len);
  499.                   extract_out2(b,len,((s[0]=='A')?3:4),p2.daten);
  500.                 }
  501.               }
  502.             }
  503. // END SPV031IH BLOCK COPY
  504. ==            switch(s[0]) {
  505. ==
  506. ==              /* Find addition */
  507. ─────────────────────────────────────────────────────────────────────────────
  508. STEP 12: In MSGBASE1.C, make the following changes in:
  509.          void scan(int msgnum, int optype, int *nextsub)
  510.  
  511. ++              case '@':                                         // SPV031IH
  512. ==              case 'A':
  513. ==                if (rip_on()) {
  514. ==                  sprintf(s,"\n!|w000%c271610|e|#\r ", formery);
  515. ==                  comstr(s);
  516. . . . SKIPPING DOWN A HAIR . . .
  517. ==                    pl(get_string(679));
  518. ==                    break;
  519. ==                  }
  520. ==                }
  521. // START SPV031IH BLOCK COPY
  522.                 if (s[0]=='@') {
  523.                   nl();
  524.                   pl("4Replying to a different address!0");
  525.                   send_email();
  526.                 } else {
  527. // END SPV031IH BLOCK COPY
  528. ==                  if ((lcs()) || (ss.ability & ability_read_post_anony) ||
  529. ==                     (get_post(msgnum)->anony==0))
  530. ─────────────────────────────────────────────────────────────────────────────
  531. STEP 13: Make these changes in MSGBASE1.C, function:
  532.          void scan(int msgnum, int optype, int *nextsub)
  533.  
  534. ==            if ((msgs[msgnum].anony & anony_sender) &&
  535. ==              ((syscfg.sl[actsl].ability & ability_read_post_anony)==0)) {
  536. ==                strcat(s,get_string(482));
  537. ++              Unknown=1;                                        // SPV031IH
  538. ==            } else {
  539. ++              Unknown=0;                                        // SPV031IH
  540. ==              b=readfile(&(msgs[msgnum].msg),(subboards[curlsub].filename),
  541. ==                         &len);
  542. ─────────────────────────────────────────────────────────────────────────────
  543. STEP 14: Now in READMAIL.C make these changes in void readmail(void)
  544.  
  545. ==            pl(get_string(715));
  546. ==            nl();
  547. ==            break;
  548. ==          }
  549. ==          nln(2);
  550. // START SPV031IH BLOCK COPY
  551.           nl();
  552.           npr("5Quote this message?0 ");
  553.           if (ny()) {
  554.             b=readfile(&(m.msg),"EMAIL",&len);
  555.             extract_out2(b,len,2,m.daten);
  556.             nl();
  557.             pl("6Forwarding this E-Mail.0");
  558.             send_email();
  559.             break;
  560.           }
  561. // END SPV031IH BLOCK COPY
  562. ==          prt(2,get_string(716));
  563. ==          input(s,75);
  564. . . . SKIPPING SOME MORE LINES! . . .
  565. ==        case 'A':
  566. ==        case 'S':
  567. ==        case 'M':
  568. // START SPV031IG BLOCK READ
  569.           nl();
  570.           npr("5Quote from this message? 0");
  571.           if (ny()) {
  572.             grab_quotes(&(m.msg),"EMAIL");
  573.             b=readfile(&(m.msg),"EMAIL",&len);
  574.             extract_out2(b,len,((ch=='M')?2:1),m.daten);
  575.             if (ch=='M') {
  576.               nl();
  577.               pl("5Forwarding this E-Mail!0");
  578.             }
  579.           }
  580. // END SPV031IG BLOCK READ
  581. ==          if (rip_on()) {
  582. ==            sprintf(s,"\n!|w000%c271610|e|#\r ", formery);
  583. . . .SKIP DOWN JUST A FEW MORE LINES . . .
  584. ==            i2=0;
  585. ==            break;
  586. ==          } else if (m.fromuser!=65535) {
  587. --            grab_quotes(&(m.msg),"EMAIL");     // SPV031IH delete this line
  588. ==            if (ch=='M') {
  589. ─────────────────────────────────────────────────────────────────────────────
  590. STEP 15: Make these changes throughout READMAIL.C
  591.  
  592. ==      sprintf(s,"2%3d 7%c0 ",i+1,okansi()?'│':'|');
  593. ==      if ((m.anony & anony_sender) &&
  594. ==          ((ss.ability & ability_read_email_anony)==0)) {
  595. ==        strcat(s,get_string(482));
  596. ++        Unknown=1;                                              // SPV031IH
  597. ==      } else {
  598. ++        Unknown=0;                                              // SPV031IH
  599. ==        if (m.fromsys==0) {
  600. ==          if (m.fromuser==65535) {
  601. . . . SKIPPING DOWN . . .
  602. ==                  strcpy(s,nam1(&thisuser,usernum,net_sysnum));
  603. -+                if (m.anony & anony_receiver) {         // SPV031IH added {
  604. ==                  strcpy(s,get_string(482));
  605. ++                  Unknown=1;
  606. ++                } else
  607. ++                  Unknown=0;
  608. ==                strcat(s,get_string(713));
  609. . . . DOWN SOME MORE . . .
  610. ==            sprintf(s,"%s: %s",net_name,nam1(&thisuser,usernum,net_sysnum));
  611. ==          else
  612. ==            strcpy(s,nam1(&thisuser,usernum,net_sysnum));
  613. -+          if (m.anony & anony_receiver) {               // SPV031IH added {
  614. ==            strcpy(s,get_string(482));
  615. ++            Unknown=1;
  616. ++          } else
  617. ++            Unknown=0;
  618. ==          strcat(s,get_string(713));
  619. . . .YEP, GO DOWN SOME MORE! (YES IT LOOKS THE SAME AS ABOVE). . .
  620. ==            sprintf(s,"%s: %s",net_name,nam1(&thisuser,usernum,net_sysnum));
  621. ==          else
  622. ==            strcpy(s,nam1(&thisuser,usernum,net_sysnum));
  623. -+          if (m.anony & anony_receiver) {               // SPV031IH added {
  624. ==            strcpy(s,get_string(482));
  625. ++            Unknown=1;
  626. ++          } else
  627. ++            Unknown=0;
  628. ==          strcat(s,get_string(713));
  629. ==          strcat(s,date());
  630. ─────────────────────────────────────────────────────────────────────────────
  631. STEP 16: In NEWUSER.C, make this change in: void properize(char *s)
  632.  
  633. ==  for (i=0;i<strlen(s);i++) {
  634. ==    if ((i==0) || ((i>0) && ((s[i-1]==' ') ||
  635. ++        (s[i-1]=='-') ||                                        // SPV031IH
  636. ==        (s[i-1]=='.')))) {
  637. ─────────────────────────────────────────────────────────────────────────────
  638. STEP 17: Make a file in your GFILES and call it QUOTE.MSG.  Mine looks like
  639.         this, and yours should be similar!
  640.  
  641. QUOTE.MSG
  642. ---------
  643.  
  644.     You are about to send a msg/e-mail with a quotation in it.  You should
  645.     remove unnecessary lines, including taglines and signoff macros.  This
  646.                         helps reduce network LD costs.
  647.  
  648. ─────────────────────────────────────────────────────────────────────────────
  649. STEP 18: Recompile this beast, and enjoy your new quoting!
  650. ─────────────────────────────────────────────────────────────────────────────
  651.   Well, this is a complete overhauled mod for 4.24.  I've installed it forst
  652. thing on my virgin 4.24 system 'cause this is the most installation intensive
  653. mod I make.
  654.   The word is, it works fine...
  655.  
  656.     This mod is copyright 1993-1995 by Tracy Baker, aka Papa Bear, and is
  657.  distributed as freeware.  Permission is granted to distribute and post this
  658.    mod on BBS systems and online services, provided no alterations are made
  659.   (removal of message headers/taglines allowed).  This mod may contain some
  660.   parts of WWIV source code, which is copyright 1988-1994 by Wayne Bell and
  661.     licensed only to registered users of WWIV.  Use of WWIV source without
  662.      registration constitutes a license violation and could lead to legal
  663.                         prosecution and certain doom.
  664.    Shareware distributors and CD-ROM publishers may not distribute this mod
  665.  without express written permission of the Author or WWIV Software Services.
  666.  
  667. 7-9=1*6>2Pâpâ ßêâr6<1*9=7-0
  668.  
  669. 8311579.wwivnet1· 2 ╪╫9≡8║7⌐¬4¥5╓╥╖1·     ·     2▒1 ·   2▒       3(510)522-35831    ·
  670. 732.sexnet  1∙   6 ·0░░▒▒▓▓6∞0▓▒░6·2 StarPort   ▒   ▒ 2 ▒1  ·2▒   ▒ ▒1 ·2 ▒   ▒1  ·2▒     ▒ 1·
  671. 6315061.wwivlink    0 ████1 ·     .       2  ▒ ▒  ▒ ▒  ▒1 · 2▒▒▒  ▒ ▒  ▒   ▒    ▒ ▒
  672. 535079.icenet 1.  .  0 │└6·0└6· 1     ∙         2 ▒  ▒   ▒ ▒▒▒ ▒ ▒ ▒1 ·2 ▒ ▒▒▒ ▒▒▒ ▒1 ∙ 2▒
  673. ---
  674. 3This tagline is made from recycled electrons.
  675.