home *** CD-ROM | disk | FTP | other *** search
/ The Arcade BBS / arcadebbs.zip / arcadebbs / bbstools / MODS / SPV031II.ZIP / SPV031II.MOD
Encoding:
Text File  |  1995-06-09  |  24.2 KB  |  701 lines

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