home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / WWIVMODS / PRE412.ZIP / ELRIC3.MOD < prev    next >
Text File  |  1990-04-21  |  22KB  |  636 lines

  1.  
  2.  
  3.          The new and improved FROM mod collection.
  4.                  by
  5.         Lord Elric          1@8251
  6.  
  7.             With code borrowed from
  8.           MrBill             1@7300
  9.              The Black Dragon     1@2380
  10.  
  11. Well, this is a rather extensive modification here. Before you start, let me
  12. warn you that it will take a while. It will also involve changing the format
  13. of your user list. To simplify this, there is a program written by The Black
  14. Dragon for which I am forever in debt. No way did I want to re-enter the
  15. whole bloody user list. Well, anyway, let's get right down to it.
  16.  
  17. INFORMATION: I did this with Turbo C 2.0 and WWIV v4.10. I don't know if it 
  18. works on earlier versions, because I don't have them. I have no idea if it 
  19. will work on later version, because I haven't seen them yet. All I do know is 
  20. that it works with what I have.
  21.  
  22.  
  23. ============================================================================
  24.  
  25. 0. (step 0 beacuse I added this later.....)
  26.  Before you do anything else, this is such a great idea whenver you mod...
  27.   get in the directory where you keep your source, and do this...
  28.  
  29.      PKZIP source *.c *.h
  30.  
  31. (or LHARC, or PKARC, or PAK, or whatever. but put all your current source 
  32. code in an archive so if you get halway done here, and then decide to
  33.  quit, you can just unarc/unzip it, and be right back where you started....
  34. it really helps if you put in a mod that for some reason just won't quite 
  35. work, and then you have to take it back out one piece at a time......
  36.  
  37.  
  38. ============================================================================
  39.  
  40. 1. First, copy VARDEC.H to a file called OLD.H. Rename the user record 
  41. structure (the first one in the file) to olduserrec. Delete everything 
  42. that comes after it. For example, here's what mine looks like now.
  43.  
  44.  
  45.  
  46. /* DATA FOR EVERY USER */
  47. typedef struct {
  48.     char        name[31],        /* user's name */
  49.             realname[21],        /* user's real name */
  50.             callsign[7],        /* user's amateur callsign */
  51.             phone[13],        /* user's phone number */
  52.             pw[9],            /* user's password */
  53.             laston[9],        /* last date on */
  54.             firston[9],        /* first date on */
  55.             note[41],        /* sysop's note about user */
  56.             macros[3][81],        /* macro keys */
  57.             sex;            /* user's sex */
  58.     unsigned char    age,            /* user's age */
  59.             inact,            /* if deleted or inactive */
  60.             comp_type,        /* computer type */
  61.  
  62. /* a bunch more stuff in here.........*/
  63.  
  64.     unsigned int    emailnet,        /* email sent into net */
  65.             postnet;        /* posts sent into net */
  66.     unsigned short    fsenttoday1;        /* feedbacks today */
  67.         unsigned char   num_extended;           /* num lines of ext desc */
  68.         char            res[34];                /* reserved bytes */
  69. } olduserrec;
  70.  
  71.    Right there at the end is where you make the change, and then nuke 
  72. everything below it. You can keep the copywrite stuff in at the top, I just 
  73. took it out to make this file shorter.....
  74. /** note, the number of reserved bytes will change in 4.11 **/
  75. ===========================================================================
  76.  
  77. 2. You should still have an unmodified version of Vardec.H. Load this up now, 
  78. and make the following changes...
  79.  
  80. (This is a part of MrBill's original mod)
  81.  
  82.  
  83. /* search for this */   macros[3][81],        /* macro keys */
  84.             street[31],             /* add this */
  85.             citystate[31],          /* add this */
  86.             zip[6],                 /* add this */
  87.             sex;            /* user's sex */
  88.  
  89. Make sure you put this in the first section, the char section. If not, you 
  90. will be screwed.
  91.  
  92. ===========================================================================
  93.  
  94. 3. Load up FCNS.H
  95. add these procedures where ever you like, here's how I did it...
  96.  
  97.  
  98. void input_name();              /* search for */
  99. void input_realname();          
  100. void input_street();        /* add this */
  101. void input_citystate();        /* add this */
  102. void input_zip();        /* add this */
  103. void input_callsign();
  104. void input_phone();
  105.  
  106. ==========================================================================
  107.  
  108. 4. Now load up NewUser.C
  109. (more from MrBill)
  110. Add these procedures somewhere near the top, in the section of void 
  111. input_blah...() procedures. I put it right after void input_name myself.
  112.  
  113.  
  114. void input_street()
  115. {
  116.   do {
  117.     nl();
  118.     pl("Enter your street address.");
  119.     outstr(":");
  120.     inputl(thisuser.street,30);
  121.  
  122.     if (thisuser.street[0]==0) {
  123.       nl();
  124.       pl("I'm sorry, you must enter your street address.");
  125.     }
  126.   } while ((thisuser.street[0]==0) && (!hangup));
  127. }
  128.  
  129. void input_citystate()
  130. {
  131.    do {
  132.      nl();
  133.      pl("Enter your city and state (i.e Manassas, Va)");
  134.      outstr(":");
  135.      inputl(thisuser.citystate,30);
  136.  
  137.      if (thisuser.citystate[0]==0) {
  138.        nl();
  139.        pl("I'm sorry, you must enter your city and state in the correct form.")
  140.      }
  141.    } while ((thisuser.citystate[0]==0) && (!hangup));
  142.  }
  143.  
  144. void input_zip()
  145. {
  146.   do {
  147.     nl();
  148.     pl("Enter you 5 digit zipcode.");
  149.     outstr(":");
  150.     inputl(thisuser.zip,5);
  151.  
  152.     if (thisuser.zip[0]==0) {
  153.       nl();
  154.       pl("I'm sorry, you must enter your zipcode.");
  155.     }
  156.   } while ((thisuser.zip[0]==0) && (!hangup));
  157. }
  158.  
  159. ============================================================================
  160.  
  161. 5. Still in Newuser.C, scan down to the procedure void newuser. 
  162. Go down a page or two, and add these lines....
  163. (MrBill's stuff here too...)
  164.  
  165.     input_name();
  166.     input_realname();
  167.     input_street();                     /* add */
  168.     input_citystate();                  /* add */
  169.     input_zip();                        /* add */
  170.     input_phone();
  171.     input_pw();                 /* add this to get rid of the random pw */
  172.     input_sex();
  173.     input_age(&thisuser);
  174.     input_comptype();
  175.     input_screensize();
  176.  
  177.  
  178. ============================================================================
  179.  
  180. 6. Still in Newuser.C, still in Newuser, go down a little further and 
  181. add this so they can edit these if they make a mistake.
  182. (still MrBill)
  183.  
  184.  print("9. Password      : ",thisuser.pw,"");          /* search for this */
  185.       nl();                                                      /* add */
  186.       prt(0,"------> Please use UPPER and lower case <-----");   /* add */
  187.       nl(); nl();                                                /* add */
  188.       print("A. Address       : ",thisuser.street,"");           /* add */
  189.       print("B. City, State   : ",thisuser.citystate,"");        /* add */
  190.       print("C. Zipcode       : ",thisuser.zip,"");
  191.       pl("Q. No changes.");
  192.       nl();
  193.       nl();
  194.       prt(2,"Which (1-9,A,B,C,Q) : ");                          /* change */
  195.       ch=onek("QABC123456789");                                 /* change */
  196.       ok=0;
  197.       switch(ch) {
  198.         case 'Q': ok=1; break;
  199.         case '1': input_name(); break;
  200.         case '2': input_realname(); break;
  201.         case '3': input_callsign(); break;
  202.         case '4': input_phone(); break;
  203.         case '5': input_sex(); break;
  204.         case '6': input_age(&thisuser); break;
  205.         case '7': input_comptype(); break;
  206.         case '8': input_screensize(); break;
  207.         case '9': input_pw(); break;
  208.     case 'A': input_street(); break;                             /* add */
  209.     case 'B': input_citystate(); break;                          /* add */
  210.     case 'C': input_zip(); break;                                /* add */
  211.       }
  212.     } while ((!ok) && (!hangup));
  213.  
  214. =============================================================================
  215.  
  216. 7. Now, save NEWUSER.C. Load up SYSOPF.C, and make these changes to the 
  217. end of void print_data() so you can see the new stuff from UEDIT.
  218. (an oversight by MrBill...I'm sure he meant to put this in....)
  219.  
  220.     print("Rest: ",&s2,"");     /* search for this */
  221.     print("Address    : ",(u->street),"");        /* add */
  222.     print("City/State : ",(u->citystate),"");     /* add */
  223.     print("Zipcode    : ",(u->zip),"");           /* add */
  224. }
  225.  
  226.  
  227. =============================================================================
  228.  
  229. 8. Now, drop down a few lines, and make these changes to the end of 
  230. void print_short() so you can see the new stuff in UEDIT.
  231. (more by MrBill)
  232.  
  233.     print("Rest: ",&s2,"");     /* search for this */
  234.     print("Address    : ",(u->street),"");        /* add */
  235.     print("City/State : ",(u->citystate),"");     /* add */
  236.     print("Zipcode    : ",(u->zip),"");           /* add */
  237. }
  238.  
  239.  
  240. ==============================================================================
  241.  
  242. 9. It gets even more fun now kiddies.....some of my stuff finally
  243. Still in SYSOPF.C, search down to void uedit(). Now we get to make a bunch of 
  244. changes.....
  245.  
  246. First, in the char declarations, add the char variable ch2, so you should have 
  247. something that looks like this......
  248.  
  249. void uedit(int usern, int other)
  250. {
  251.   char s[81],s1[81],s2[81],ch,ch1,ch2;
  252.   int i,i1,i2,i3,un,done,nu,done1,full,temp_full,tempu;
  253.   userrec u;
  254.  
  255. ============================================================================
  256.  
  257. 10. Now, we stay in void subedit for quite some time now. 
  258. drop down a few lines, and make a few more changes here......
  259. (more by some unknown soul by way of MrBill)
  260.  
  261.       prt(2,"Uedit : ");
  262.       if ((realsl==255) || (wfc))
  263.         ch=onek("%Q[]{}/,.?UDRNLCPOGMSTEYZAI~:");   /* add the %  */
  264.       else
  265.         ch=onek("%Q[]{}/,.?UDRNLCPOGMSTEYZAI");     /* add the %  */
  266.       switch(ch) {
  267.         case '%':                    /*add this thing so you can edit */
  268.           nl();
  269.           prt(2,"New Street Adress? ");
  270.           inputl(s,30);
  271.           if (s[0]) {
  272.               dsr(u.street);
  273.               strcpy(u.street,s);
  274.               isr(un,u.street);
  275.               write_user(un,&u);
  276.             }
  277.           prt(2,"New City, State? ");
  278.           inputl(s1,30);
  279.           if (s1[0]) {
  280.               dsr(u.citystate);
  281.               strcpy(u.citystate,s1);
  282.               isr(un,u.citystate);
  283.               write_user(un,&u);
  284.             }
  285.           prt(2,"New Zip? ");
  286.           inputl(s2,5);
  287.           if (s2[0]) {
  288.               dsr(u.zip);
  289.               strcpy(u.zip,s2);
  290.               isr(un,u.zip);
  291.               write_user(un,&u);
  292.             }
  293.           break;                   /* add down to here    */
  294.         case 'Q':                  /* original code       */
  295.           done=1;
  296.           done1=1;
  297.           break;
  298.  
  299. =========================================================================
  300.  
  301. 11. We aren't out of the woods, or this procedure, yet. One more change to 
  302. make to it.
  303. (and it's all mine!)
  304.  
  305. Down near the bottom...look for case ':'.....
  306. Erase what it has, and make it look like this....(I erased it before I thought
  307. to cut it out and save it so I could show you exactly what to take out, but 
  308. hey, you got this far, can't quit now....He He :)
  309. Just make sure all the braces are in the right place at the bottom when you 
  310. are done......
  311.  
  312. What this does is give you a way to zero out things, so they have to re-enter 
  313. it at logon. The birthday one was already there. Also, I added one so I 
  314. could get them to enter their full real name, 
  315. not just their first real name....
  316. If you have already added this mod from the file ELRIC2.ZIP/ELRIC2.MOD, then 
  317. your have a good headstart here.....
  318.  
  319.  
  320.  
  321.           u.ass_pts=0;
  322.           write_user(un,&u);
  323.           break;
  324.     case ':':        /* replace this whole case...*/
  325.        do {
  326.        nl();
  327.        pl("Zap info....");
  328.        pl("1. Realname");        /* I had this in from a previous mod */
  329.        pl("2. Birthday");        /* you can take it out if you want,and */
  330.        pl("3. Street address");  /* re-number all of it 1,2,3,4....*/
  331.        pl("4. City and State");
  332.        pl("5. Zip Code");
  333.        pl("Q. quit");
  334.          ch2=onek("Q12345");
  335.          switch(ch2) {
  336.            case '1':u.realname[0]=0;   /* once again, from the previous */
  337.             write_user(un,&u); /* mod I did in Elric2.ZIP */
  338.             break;
  339.            case '2':u.year=0;
  340.             write_user(un,&u);
  341.             break;
  342.            case '3':u.street[0]=0;
  343.             write_user(un,&u);
  344.             break;
  345.            case '4':u.citystate[0]=0;
  346.             write_user(un,&u);
  347.             break;
  348.            case '5':u.zip[0]=0;
  349.             write_user(un,&u);
  350.             break;
  351.             }
  352.        }while ((!hangup) && (ch2!='Q'));
  353.       }                    /* replace down to here somewhere...*/
  354.     } while ((!done1) && (!hangup));
  355.   } while ((!done) && (!hangup));
  356.   close_user();
  357.  
  358.  
  359. ==============================================================================
  360. 12. Go grab a beer, and take a break. Then, come back here and finish this 
  361. up, only a few more steps to go...
  362.  
  363. Now you need to load up BBSUTL.C, and scan down to void logon....
  364.  
  365. Add these lines to add the city and state to the log of the day....
  366. (MrBill's)
  367.  
  368.  
  369.   sprintf(s,"%ld: %s %s %s   %s - %d",
  370.        status.callernum1,
  371.        nam(&thisuser,usernum),
  372.        times(),
  373.        date(),
  374.        curspeed,
  375.        thisuser.ontoday);
  376.  strcat(s," [");         /* add me...*/
  377.  strcat(s,thisuser.citystate);   /* add me too....*/
  378.  strcat(s,"] ");         /* and me */
  379.  
  380.   strcpy(s2,syscfg.gfilesdir);
  381.   strcat(s2,"LASTON.TXT");
  382.  
  383.  
  384.  
  385. and down just a few more lines, to get it in both log files....
  386.  
  387.     sl1(1,"");
  388.     sprintf(s,"%ld: %s   %s - %d",
  389.           status.callernum1,
  390.           nam(&thisuser,usernum),
  391.           curspeed,
  392.           thisuser.ontoday);
  393.      strcat(s," [");            /* add me...*/
  394.      strcat(s,thisuser.citystate);    /* add me too....*/
  395.      strcat(s,"] ");            /* and me */
  396.     strcpy(s1,syscfg.gfilesdir);
  397.     strcat(s1,"USER.LOG");
  398.     f=open(s1,O_RDWR | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);
  399.     lseek(f,0L,SEEK_END);
  400.  
  401.  
  402. =======================================================================
  403. 13. Now, still in void logon, add these lines so they have to re-enter what 
  404. you have zapped out, or, if they are an old user, the file conversion 
  405. routine will take care of zapping them for you. Either way, this lets them 
  406. enter it if they don't have an address. I have included the routine to get 
  407. their name, so if you added that in back up in step 11, you need to keep it 
  408. in here. If you alread added my ELRIC2.MOD, then you already have it there....
  409. (all mine, by the way....)
  410.  
  411.       pl("Please enter the following information:"); /* Here is where they*/
  412.       do {                               /* get to enter a new birthday...*/
  413.         nl();
  414.         input_age(&thisuser);
  415.         sprintf(s,"%02d/%02d/%02d",(int) thisuser.month,
  416.                                 (int) thisuser.day,
  417.                                 (int) thisuser.year);
  418.         nl();
  419.         prompt("Birthdate: ",s,".  Correct? ","");
  420.         if (!yn())
  421.           thisuser.year=0;
  422.       } while ((!hangup) && (thisuser.year==0));
  423.       topscreen();
  424.       nl();
  425.     }
  426. /* Add from here down till I tell you to stop............*/
  427.  
  428.     if (thisuser.street[0]==0){
  429.      do {
  430.      nl();
  431.      pl("I seem to have lost part of your address.....");
  432.      input_street();
  433.      nl();
  434.      pl("Did you get that entered correctly? (Y/N)");
  435.      if (!yn())
  436.     thisuser.street[0]=0;
  437.      } while ((!hangup) && (thisuser.street[0]==0));
  438.      pl("Thank you for doing that for me");
  439.      }
  440.  
  441.     if (thisuser.citystate[0]==0){
  442.      do {
  443.      nl();
  444.      pl("I seem to have lost part of your address.....");
  445.      input_citystate();
  446.      nl();
  447.      pl("Did you get that entered correctly? (Y/N)");
  448.      if (!yn())
  449.     thisuser.citystate[0]=0;
  450.      } while ((!hangup) && (thisuser.citystate[0]==0));
  451.      pl("Thank you for doing that for me");
  452.      }
  453.  
  454.  
  455.     if (thisuser.zip[0]==0){
  456.      do {
  457.      nl();
  458.      pl("I seem to have lost part of your address.....");
  459.      input_zip();
  460.      nl();
  461.      pl("Did you get that entered correctly? (Y/N)");
  462.      if (!yn())
  463.     thisuser.zip[0]=0;
  464.      } while ((!hangup) && (thisuser.zip[0]==0));
  465.      pl("Thank you for doing that for me");
  466.      }
  467.  
  468. /* If you already added the ELRIC2 real name mod, you don't need this. If 
  469. you added the zap real name from step 11, you do need this part.....*/
  470.  
  471.     if (thisuser.realname[0]==0){
  472.      do {
  473.      nl();
  474.      pl("I seem to have lost part of your file.....");
  475.      input_realname();
  476.      nl();
  477.      pl("Did you get that entered correctly? (Y/N)");
  478.      if (!yn())
  479.     thisuser.realname[0]=0;
  480.      } while ((!hangup) && (thisuser.realname[0]==0));
  481.      pl("Thank you for telling me that!");
  482.      }
  483.  
  484. /* original code follows here........ */
  485.  
  486.     rsm(usernum,&thisuser);
  487.     if (thisuser.waiting) {
  488.       prt(5,"Read your mail now? ");
  489.       if (yn())
  490.         readmail();
  491.     }
  492.  
  493.  
  494. ==========================================================================
  495. 13. The end is in sight now....but don't you hate the thought of getting the 
  496. next version.......
  497.  
  498. Load up BBSUTL1. This is just another optional step, you may skip it if you 
  499. like....
  500.  
  501. In void list_users, add this, so when they do a user list it tells 
  502. where they are from....
  503.  
  504.     if ((s.ar!=0) && ((u.ar & s.ar)==0))
  505.       ok=0;
  506.     if (ok) {
  507.       ansic(2);                    /* add this line */
  508.       pla(nam(&u,smallist[i].number),&abort);    /*  search for this.. */
  509.       ansic(3);                    /*  add me */
  510.       pla(u.citystate,&abort);            /*  add me */
  511.       ++num;
  512.     }
  513.   }
  514.  
  515.  
  516. =========================================================================
  517. 14. Now, save all this, and compile your BBS. Go make a bunch of sandwiches, 
  518. you are going to be waiting for a long time, because everything get's to 
  519. recompile......
  520.  
  521. When you get all the bugs worked out, and I know you made a typo somewhere,
  522. copy this BBS.EXE to your main BBS dir, but 
  523. DO NOT RUN IT YET!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  524.  
  525. =========================================================================
  526. 15. You have to convert over all the user records to the new format. 
  527. Fortunatly, The Black Dragon wrote a little program to do that for us, so why 
  528. don't you use it. It is in this package, called CONVERT.C
  529.  
  530. Compile it to an executable program (you will probably have to remove BBS.PRJ
  531. from the project file option, to get it to compile easily.)
  532. (While you are compiling convert.c, why dont you go ahead and compile
  533. return.c, just nuke the project file, load convert, compile it, then 
  534. load return, and compile it.)
  535. ===========================================================================
  536. 16. Now that CONVERT.C is compiled, Load up DISPLAY.C.
  537. Compile it and run it (Ctrl-F9). It will display three numbers, the user 
  538. record size, the mail waiting offset, and the inactive offset. Write those 
  539. down right here on the printout...
  540.  
  541. User Record Size ____________
  542.  
  543. Mail Waiting     ____________
  544.  
  545. Inactive         ____________
  546.  
  547. =============================================================================
  548. 17. Now drop back to DOS.
  549. Change to your data dir. Make a backup copy of your user list somewhere, just 
  550. in case you decide to screw it all and go back. 
  551. Then, do this.
  552.  
  553. RENAME USER.LST USER2.LST     /* change name of user list */
  554. CONVERT USER2.LST USER.LST    
  555.  
  556. Now it will scan through the user list and change it to the new format.
  557.  
  558.  
  559. 18. Almost there. If you are not in the network, you may skip this step,
  560. provided that if you ever do join, you promise to come back and do it.
  561. Otherwise, WWIVNet WILL SCREW your files beyond your wildest dreams...
  562.  
  563. You should have received a program with the network files called NETINIT.
  564. Run this program. You will be prompted for the numbers you wrote down back in
  565. step 16. Please enter them here.
  566. =============================================================================
  567.  
  568.  
  569. That's it, you are indeed done. Test it out, make sure it works...
  570.  
  571. Possible problem sources.
  572. -------------------------------
  573.  
  574. 1. It seems obvious, but go back step by step, making sure you did
  575. everything exactly as it is written.
  576.  
  577. 2. Make sure you ran DISPLAY.C and NETINIT. Run NETINIT again, to make sure
  578. the numbers have changed.
  579.  
  580. 3. If you have any other mods which modified the user record, make sure you
  581. copy those values over in CONVERT.C.
  582.  
  583. For example, if you had added an integer, longint, or real, then do this...
  584.  new.addition=old.addition;
  585.  
  586. If you added a string, say newstring[40], then you have to use strcpy....
  587.   strcpy(new.newstring,old.newstring);
  588.  
  589. If you added an array, you have to do a loop...
  590.   for (i=0;i<sizeofarray;i++)
  591.     new.stuff[i]=old.stuff[i];
  592.  
  593. 4. Please, Please, Please, Please, Back up everything before you start
  594. changing it. If you are in doubt, back it up. A good place to start is
  595. just to back up the whole drive. 
  596.   If not, at least back up all the .C files, all the .H files, the file
  597. USER.LST in your data dir, the file SUBS.DAT in your data dir, and 
  598. CONFIG.DAT in your main BBS dir.
  599.   These files will be changed, so if you have to start over, you can at least
  600. start from where you started, and at least be able to go on like nothing ever
  601. happened.
  602.  
  603. 5. If you are having problems shrinking out, then you probably did not 
  604. re-compile shrink.c and return.c. The BEST way to insure this happens
  605. (and to get consistant code quality, I always turn on/off some option I
  606. should not have messed with...) is to use the make file. Its really the only
  607. way to go. shrink.c will only be compiled to an .obj file, but return MUST
  608. be compiled and linked, and return.exe must be moved to the main BBS dir.
  609.  
  610.  
  611.  
  612.  
  613. /** hey, it's the form info file **/
  614. As usual, I take no responsibility for hard drive crashes, death in the
  615. family, or end of the world as we know it resulting from this mod.
  616.  
  617. It's your fault if you didn't back up the files before you made the mod.
  618.  
  619. It's your fault if you don't back up your ENTIRE hard drive AT LEAST once
  620. a month.
  621.  
  622. It works on my system with Turbo C 2.0, WWIV 4.1, V20/8088, 640K/640EMS.
  623.  
  624. If you use this, the only payment I ask is that you send me a note through
  625. WWIVLink to 1@18251 saying you are using it...not too much to ask is it?
  626.  
  627. The Kingdom of Melnibone(LINK/NET)
  628. 812-877-3488  24 Hrs a day
  629. 3/12/2400/4800/9600/12,000/14,400 baud HST MNP5
  630. Auto-validation of WWIV sysops on first call
  631. Xmodem, Ymodem, DSZ Zmodem with retry, Ymodem-G
  632.  
  633. WWIV Link  1@18251
  634.  
  635. WWIV Net   1@8251
  636.