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

  1.                The Menu Hotkey Mod
  2.                 Elric 15
  3.  
  4. Hello fellow sysops, and welcome to Elric15.mod. Yep, 15. I skipped this one
  5. a while back, on purpose. You see, I wrote this one, but before I wrote it up,
  6. someone else put one out similar to this one. So, I kind of let it slide...
  7. BUT, I have had several people request it from my BBS, so here it is...
  8.  
  9. What this mod does is allow you to print a description of the command
  10. after the user presses a key. So if he hits A, he might see "A: AutoMessage".
  11. Or "Automessage", where you just print "utomessage" for him. It works in both
  12. the main menu and the transfer menu, but you could put it anywhere that
  13. uses mmkey to get a command. Just be sure if it is in an external file to
  14. include the line "extern int NL;" in the var decs....
  15.  
  16. /** this step is indeed a form step, much like a form letter **/
  17. 1. From DOS, in your dir where you keep your source....
  18.  
  19. PKZIP SOURCE *.c *.h
  20.  
  21. If you already have a source zip file, then
  22.  
  23. PKZIP -f source *.c *.h
  24.  
  25. This way you have a copy of everything before you screw it up with a bad mod.
  26. If you decide to take the mod out, it's as easy as
  27. PKUNZIP -x source
  28.  
  29. and hit Y to overwrite any files you changed.
  30.  
  31. /** we now resume our regularly scheduled mod with step 2.... **/
  32.  
  33. 1. Load up BBSUTL.C  add int NL to the var decs...and it IS important that
  34. you use capitol letters for the NL.
  35.  
  36.  
  37. extern char xdate[9];
  38. extern int questused[20];
  39. extern unsigned int modem_speed,com_speed;
  40. extern char ctypes[NUM_CTYPES][18];
  41. int NL;                                       /** add me **/
  42.  
  43. void far *malloca(unsigned long nbytes)
  44. {
  45.  
  46. 2. Look down for char *mmkey. Make these changes to it...
  47.  
  48. char *mmkey(int dl)
  49. {
  50.   static unsigned char cmd1[10],cmd2[81],ch;
  51.   int p;
  52.  
  53.   do {
  54.     do {
  55.       ch=getkey();
  56.     } while ((((ch<' ') && (ch!=13)) || (ch>126)) && (hangup==0));
  57.  
  58. -------------------
  59. a bunch of stuff...
  60. -------------------
  61.  
  62.       } else
  63.             nl();
  64.             return(cmd1);
  65.         }
  66.     } else {
  67.       if (!NL)                                   /** add me **/
  68.       nl();
  69.       return(cmd1);
  70.     }
  71.   } while (hangup==0);
  72.   cmd1[0]=0;
  73.   return(cmd1);
  74. }
  75.  
  76.  
  77.  
  78. 3. Now Load up BBS.C
  79. Add NL to the var decs, like this...
  80.  
  81. #include <dos.h>
  82. #include <alloc.h>
  83. #include <time.h>
  84.  
  85. extern int NL;                   /** add me **/
  86.  
  87. #define modem_time 3.5
  88.  
  89.  
  90. void function_remotely() {}
  91.  
  92. void end_bbs(int lev)
  93. {
  94.  
  95. 4. Now go down to mainmenu. Add these lines...
  96.  
  97.   prt(2,s1);
  98.   helpl=1;                             /** original code **/
  99.   NL=1;                                /** add me **/
  100.   s=mmkey1(0);
  101.   NL=0;                                /** add me **/
  102.   helpl=0;
  103.   if (s[0])
  104.     for (i=0; i<64; i++)
  105.       if (strcmp(usub[i].keys,s)==0){  /** change **/
  106.     nl();                          /** add **/
  107.     cursub=i;                      /** original code **/
  108.       }                                /** add **/
  109.   if (!(s[1]==0))                      /** add **/
  110.     nl();                              /** add **/
  111.   sysopchar(s);                        /** original code resumes */
  112. /**************************************************/
  113.   if ((strcmp(s,"BOARDEDIT")==0) && (so())) {
  114.     sysoplog("@ Ran Boardedit");
  115.  
  116.  
  117. 5. A little further down, you need to fix up the commands. What we are
  118. doing is adding the text that will be printed after the command. You have
  119. several options here. You could just spell out the word for them.
  120. You could do what I did, which is put a colon, then 2 spaces, then print a
  121. description of the command. You could do a combination. Or, you could
  122. just list the translation of the command in Swahili, to really confuse
  123. the users. It's really up to you....Also note that I did not list
  124. all the changes, just some of them to give you the idea. As I did this,
  125. you have to change all commands from A to Z, plus the *. You can add extra
  126. commands by adding extra letters in the strcspn line and then putting the
  127. appropriate pl where it is needed.
  128.  
  129.  
  130.  
  131.  
  132.  
  133.     nl();
  134.   }
  135.   if ((s[1]==0) && (s[0]!=0)) {
  136.     if (strcspn("ABCDEFGHIJKLMNOPQRSTUVWXYZ*",s)=0)         /** add **/
  137.       nl();                               /** add **/
  138.     switch(s[0]) {
  139.  
  140. /**  only here if you added my sysop mode mod **/
  141.       case '%': if (checkpw())
  142.           in_sysop=!in_sysop;
  143.         else
  144.           sysoplog("tried to enter sysop mode");
  145.         break;
  146. /** see above comment **/
  147.  
  148.       case '>':
  149.       case '+':
  150.         if (usub[cursub+1].subnum>=0)
  151.           ++cursub;
  152.         else
  153.           cursub=0;
  154.  
  155. /** some more stuff skipped in here...**/
  156.  
  157.       case 'A':
  158.     helpl=19;
  159.     pl(":  Automessage");             /** add this line **/
  160.     write_automessage();
  161.     break;
  162.       case 'B':
  163.     pl(":  Bbslist");                 /** add this line **/
  164.         helpl=25;
  165.         bbslist();
  166.         break;
  167.       case 'C':
  168.     pl(":  Request Chat");            /** add this line **/
  169.         helpl=3;
  170.         reqchat();
  171.         break;
  172.  
  173. /*** I skipped a bunch in here, but you need to continue adding a
  174. pl("command description") for each one ***/
  175.  
  176.       case '*':
  177.     pl(":  Message Base List");       /** add this line **/
  178.         sublist();
  179.         break;
  180.     }
  181.   }
  182.   helpl=0;
  183. }
  184.  
  185.  
  186.  
  187. 6. Now look down in dlmainmenu. This works a lot like mainmenu....
  188.  
  189.   if (s1[0]==0)
  190.     sprintf(s1,"(%s)-(%s) :",udir[curdir].keys,directories[udir[curdir].subnum].name);
  191.   prt(2,s1);
  192.   helpl=2;
  193.   NL=1;                                    /** add me **/
  194.   s=mmkey(1);
  195.   NL=0;                                    /** add me **/
  196.   helpl=0;
  197.   if (s[0])
  198.     for (i=0; i<64; i++)
  199.       if (strcmp(udir[i].keys,s)==0){      /** add the { **/
  200.     nl();                              /** add me **/
  201.     curdir=i;
  202.     }                                  /** add me **/
  203.   sysopchar(s);
  204.   if (!(s[1]==0))  nl();                   /** add me **/
  205.  
  206.  
  207.  
  208. 7. Now down to fix up the commands....
  209.     else
  210.       sortdir(udir[curdir].subnum,i1);
  211.   }
  212.  
  213.  
  214.   if ((s[1]==0) && (s[0]!=0)) {
  215.     if (strcspn("ABCDEFGHIJKLMNOPQRSTUVWXYZ*",s)=0)         /** add **/
  216.       nl();                                                 /** add **/
  217.     switch(s[0]) {
  218.       case '>':
  219.       case '+':
  220.  
  221. /******skip down a few lines here... ***/
  222.  
  223.       case '*':
  224.     pl(":  List all directories");   /** add **/
  225.     dirlist();
  226.     break;
  227.       case 'Q':
  228.     pl(":  Quit to main menu");      /** add **/
  229.     curdloads=0;
  230.     break;
  231.       case '?':
  232.         if ((sysstatus_expert & thisuser.sysstatus))
  233.           printmenu(3);
  234.         break;
  235.       case 'A':
  236.     pl(":  List an archived file");  /** add **/
  237.         helpl=23;
  238.         arc_l();
  239.         break;
  240.       case 'B':
  241.     pl(":  Batch commands");
  242.         helpl=22;
  243.         batchdl();
  244.  
  245. /** keep adding those lines.... **/
  246.  
  247. /** bonus mod: replace case X and it's now an expert mode toggle...B
  248. was already there for batch commands, and it makes more sense...**/
  249.  
  250.       case 'X':
  251.     pl(":  Expert Mode toggle (Batch commands are B)");
  252.         thisuser.sysstatus ^= sysstatus_expert;
  253.     break;
  254.  
  255. /** end of bonus mod **/
  256.  
  257.       case 'Y':
  258.     pl(":  Your transfer Info");         /** add **/
  259.         yourinfodl();
  260.         break;
  261.       case 'Z':
  262.     pl(":  Upload private file to sysop");   /** add **/
  263.     nl();
  264.         nl();
  265.         pl("Sending file to sysop :-");
  266.         nl();
  267.         helpl=17;
  268.     upload(0);
  269.         break;
  270.     }
  271.   }
  272.   helpl=0;
  273. }
  274.  
  275.  
  276. 8. Almost there....just one more thing to add..
  277. Now as you can see, we only turn NL on in 2 places, and we turn it right
  278. back off. But just in case, let's make sure it is turned off when the
  279. BBS fires up.. Look down in main, and let's do that...
  280.  
  281.   strcpy(s,getenv("BBS"));
  282.   if (strncmp(s,"WWIV",4)==0) {
  283.     printf("You are already in the BBS, type 'EXIT' instead.\n\n");
  284.     abort();
  285.   }
  286.   NL=0;   /** add **/
  287.   already_on=0;
  288.   endday=0;
  289.   oklevel=0;
  290.   noklevel=0;
  291.   ooneuser=0;
  292.   no_hangup=0;
  293.  
  294.  
  295. 9. It's done....just compile it and try it out. You may want
  296. to experiment with the commands for a while. One other warning. Since you
  297. are adding mostly strings, this will bring you one step closer to the
  298. famous evil DGROUP Error. So you may want to consider that when you start...
  299.  
  300.  
  301.  
  302. /** hey, it's the form info file **/
  303. As usual, I take no responsibility for hard drive crashes, death in the
  304. family, or end of the world as we know it resulting from this mod.
  305. It's your fault if you didn't back up the files before you made the mod.
  306. It's your fault if you don't back up your ENTIRE hard drive AT LEAST once
  307. a month.
  308. It works on my system with Turbo C 2.0, WWIV 4.1, V20/8088, 640K/640EMS.
  309.  
  310. If you use this, the only payment I ask is that you send me a note through
  311. WWIVLink to 1@18251 saying you are using it...not too much to ask is it?
  312.  
  313. The Kingdom of Melnibone(LINK/NET)
  314. 812-877-3488  24 Hrs a day
  315. 3/12/2400/4800/9600/12,000/14,400 baud HST MNP5
  316. Auto-validation of WWIV sysops on first call
  317. Xmodem, Ymodem, DSZ Zmodem with retry, Ymodem-G
  318.  
  319. WWIV Link  1@18251
  320. WWIV Net   1@8251
  321.