home *** CD-ROM | disk | FTP | other *** search
/ The Arcade BBS / arcadebbs.zip / arcadebbs / bbstools / MODS / SCFG40.ZIP / SCONFIG.MOD < prev   
Encoding:
Text File  |  1994-08-20  |  20.9 KB  |  752 lines

  1. ┌─────────────────────────────────────────────────────────────────────────────┐
  2. │ ModTitle: Super Config -> Asylum Q/Nscan config 1.5a       August 14, 1994  │
  3. │ What Is?: Common 1.1+ Mod. Menu driven QScan/NScan config                   │
  4. │                                                                             │
  5. │ Difficulty: Easy, 5 or so places changed in source, and then block read the │
  6. │             rest                                                            │
  7. │ Files affected: DEFAULTS.C XFEROVL.C BBS.C                                  │
  8. │                                                                             │
  9. │ BY: Asylum Group                                                            │
  10. │ Credits: No one                                                             │
  11. └─────────────────────────────────────────────────────────────────────────────┘
  12.  
  13. If you are upgrading, all you need to do is step 4 (re-block read) and that is
  14. it!
  15.  
  16. 1.5 Notes:
  17.   A few bug fixes, one of the mods that actually didn't need any to speek of
  18.   Made is so there are two columns instead of one.
  19.   You can now read new or list files in there (hey, I was bored)
  20.  
  21.  
  22. Other Mods by the Asylum Group: (All require COMMON mod to install)
  23.  
  24.   WWIV User Pulldown Menus
  25.     Featuring script menus, once they are in, you don't need to mod the BBS to
  26.     change your menus around, includes ability to use ALL colors except for
  27.     the blinking ones in your menus, definable security for each menu item, and
  28.     instructions on how to expand the resource language.
  29.        
  30.   List Files Plus
  31.     In the people who have installed this mod words, simply the best
  32.     file list/search/tag/view/etc... mod for wwiv.  Allows you to go back and
  33.     forth in the files, selecting the files with the up and down arrow, and at
  34.     the bottom you have a menu you use the left and right arrow keys.  The
  35.     menus commands consist of such commands as show next files, show previous
  36.     files, put file in batch queue (or can be done with a space bar), view
  37.     file, download file, enter batch menu, go back and forward a directory.
  38.     And now, it shows the files description, in true vision/2 style, when you
  39.     list the files.  Now also does sysop commands and has configurable file
  40.     listing...
  41.  
  42.   Asylum QWK
  43.     Only the Asylum Group can bring you such a quality mod.  Most QWK features
  44.     are available, upload REP, download QWK, set max msgs per QWK and per sub
  45.     plus more.
  46.  
  47.  
  48.  
  49. The Modification:
  50.   
  51.   Please take steps to insure your BBS can be recovered in case of a problem.
  52.   I take no responsibility in you doing this, if you can't put in this mod
  53.   without losing your userrec or whatever else may happen, then don't install
  54.   it.
  55.   
  56.   Now... this modification seems to work real well, special care is taken to
  57.   avoid memory allocation/overrun/leaks problems (probley 99% of real problems)
  58.   but I am not prefect.
  59.  
  60.  
  61. + Add
  62. - Subtract
  63. * Change
  64. = Existing
  65. @# See number
  66.  
  67.  
  68. Step 1a)
  69.   This is a Common mod, which means you need to have COMMON installed.
  70.  
  71. Step 1b)
  72.   Put the supplied files so you can work with them, move SCONFIG.HLP to your 
  73.   GFILES directory so the users can get help.
  74.   
  75.  
  76. Step 2) XFEROVL.C
  77.   Add the following so that the config scan plus will be activated
  78.  
  79. = void config_nscan(void)
  80. = {
  81. =   char *s,s1[MAX_CONFERENCES+2],s2[120],ch;
  82. =   int i,i1,done,done1,oc,os,abort=0;
  83. +   if(okansi())
  84. +   {
  85. +     config_scan_plus(NSCAN);
  86. +     return;
  87. +   }
  88.   
  89.  
  90. Step 3) DEFAULTS.C
  91.   Add the following so that the config scan plus will be activated.
  92.   
  93. = void config_qscan(void)
  94. = {
  95. =   char *s, s1[MAX_CONFERENCES+2], s2[120], ch;
  96. =   int i,done,done1,oc,os,abort=0;
  97.  
  98. +   if(okansi())
  99. +   {
  100. +     config_scan_plus(QSCAN);
  101. +     return;
  102. +   }
  103.   
  104.  
  105. Step 4) DEFAULTS.C
  106.   Block read in the following at the end of DEFAULTS.C
  107.   
  108. /* ************************************************************************** */
  109. #include <conio.h>
  110.  
  111. // This defines how far from the bottom your list will stop
  112. #define STOP_LIST 0
  113.  
  114. // This is for, plain and simply, total lamers, people who do not know how to
  115. // set there system up right, users that say they have 25 screenlines, when in
  116. // fact, qmodem is taking up 2 of them, leaving them with only 23 (or 24)
  117. // This define overrides the STOP_LIST define if nessisary.
  118. // Undefine this to let the program show as many items as it can as defined by
  119. // the thisuser.screenlines variable, thus 50 line users will show about 46 or
  120. // so files, while 24, 25 etcc... will also show just the right amount to fill
  121. // up the screen
  122. // Leave it defined and it will never show more than the defined amount.
  123. // Undefine it to not have a max
  124. #define MAX_SCREEN_LINES_TO_SHOW 24
  125.  
  126.  
  127. // Side menu colors
  128. #define NORMAL_HIGHLIGHT   (YELLOW+(BLACK<<4))
  129. #define NORMAL_MENU_ITEM   (CYAN+(BLACK<<4))
  130. #define CURRENT_HIGHLIGHT  (RED+(LIGHTGRAY<<4))
  131. #define CURRENT_MENU_ITEM  (BLACK+(LIGHTGRAY<<4))
  132.  
  133.  
  134.  
  135.  
  136. void list_config_scan_plus(int first, int *amount, int type)
  137. {
  138.   int this_sub, this_dir, alias_dir;
  139.   int useconf, max_lines;
  140.   char s[101];
  141.   
  142.   useconf=((subconfnum>1) && okconf(&thisuser));
  143.  
  144.   CLS();
  145.   lines_listed=0;
  146.  
  147.   if(useconf)
  148.   {
  149.     strncpy(s, type == 0 ? stripcolors(subconfs[uconfsub[curconfsub].confnum].name) : stripcolors(dirconfs[uconfdir[curconfdir].confnum].name), 27);
  150.     s[27]=0;
  151.     npr("1Configure 7%cSCAN 9-- 2%-27s 9-- 3Press <5SPACE3> to toggle a sub\n\r", type==0 ? 'Q' : 'N', s);
  152.   }
  153.   else
  154.     npr("1Configure 7%cSCAN                                   3Press <5SPACE3> to toggle a sub\n\r", type==0 ? 'Q' : 'N');
  155.  
  156.  
  157.   // outstr("5───────────────────────────────────────────────────────────────────────────────\n\r");
  158.   // Replace the above with the below
  159.   ansic(5);
  160.   repeat_char('─', 79);
  161.   nl();
  162.   
  163. #ifdef MAX_SCREEN_LINES_TO_SHOW
  164.   max_lines = (
  165.                                 thisuser.screenlines-(4+STOP_LIST) >
  166.                                 MAX_SCREEN_LINES_TO_SHOW-(4+STOP_LIST)
  167.                 ?
  168.                 MAX_SCREEN_LINES_TO_SHOW-(4+STOP_LIST)
  169.                 :
  170.                 thisuser.screenlines-(4+STOP_LIST)
  171.               );
  172. #else
  173.   max_lines = thisuser.screenlines-(4+STOP_LIST);
  174. #endif
  175.  
  176.   
  177.   if(type==0)
  178.   {
  179.     for (this_sub=first; (this_sub<num_subs) && (usub[this_sub].subnum!=-1) &&
  180.           *amount < max_lines * 2; this_sub++)
  181.     {
  182.       lines_listed=0;
  183.  
  184.       sprintf(s,"7[1%c7] 2%s",
  185.           (qsc_q[usub[this_sub].subnum/32]&(1L<<(usub[this_sub].subnum%32)))?'■':' ',
  186.           subboards[usub[this_sub].subnum].name);
  187.  
  188.       s[44]=0; /* this is greater than 40 cuz we have 8 heart bytes to accout for */
  189.  
  190.       if(*amount >= max_lines)
  191.       {
  192.         GOTO_XY(40, 3 + *amount - max_lines);
  193.         outstr(s);
  194.       }
  195.       else
  196.         pl(s);
  197.  
  198.       ++*amount;
  199.     }
  200.   }
  201.   else
  202.   {
  203.     for (this_dir=first; (this_dir<num_dirs) && (udir[this_dir].subnum!=-1) &&
  204.           *amount < max_lines * 2; this_dir++)
  205.     {
  206.       lines_listed=0;
  207.       alias_dir=udir[this_dir].subnum;
  208.       sprintf(s,"7[1%c7] 2%s",
  209.                 qsc_n[alias_dir/32]&(1L<<(alias_dir%32)) ? '■' : ' ',
  210.                 directories[alias_dir].name);
  211.  
  212.        s[44]=0; /* this is greater than 40 cuz we have 8 heart bytes to accout for */
  213.  
  214.  
  215.       if(*amount >= max_lines)
  216.       {
  217.         GOTO_XY(40, 3 + *amount - max_lines);
  218.         outstr(s);
  219.       }
  220.       else
  221.         pl(s);
  222.  
  223.       ++*amount;
  224.     }
  225.   }
  226.   nl();
  227.   lines_listed=0;
  228. }
  229.  
  230. void config_scan_plus(int type)
  231. {
  232.   char **menu_items;
  233.   int done, redraw=0;
  234.   int pos=0, side_pos=0;
  235.   int top=0, command;
  236.   int amount=0;
  237.   int useconf;
  238.  
  239.  
  240.   struct side_menu_colors smc={NORMAL_HIGHLIGHT,
  241.                               NORMAL_MENU_ITEM,
  242.                               CURRENT_HIGHLIGHT,
  243.                               CURRENT_MENU_ITEM};
  244.  
  245.   useconf=((subconfnum>1) && okconf(&thisuser));
  246.     
  247.   helpl=32000;
  248.   
  249.   // Turn off topscreen info for this mod
  250.   topdata=0;
  251.   topscreen();
  252.   
  253.   menu_items=(char **)alloc_2d(10, 10, sizeof(char));
  254.  
  255.   strcpy(menu_items[0], "Next");
  256.   strcpy(menu_items[1], "Prev");
  257.   strcpy(menu_items[2], "Toggle");
  258.   strcpy(menu_items[3], "Clear ALL");
  259.   strcpy(menu_items[4], "Set ALL");
  260.  
  261.   if(type==0)
  262.     strcpy(menu_items[5], "Read New");
  263.   else
  264.     strcpy(menu_items[5], "List");
  265.  
  266.   if(useconf)
  267.   {
  268.     strcpy(menu_items[6], "{ Conf");
  269.     strcpy(menu_items[7], "} Conf");
  270.     strcpy(menu_items[8], "Quit");
  271.     strcpy(menu_items[9], "?");
  272.     menu_items[9][0]=0;      // Changed this line from null
  273.   }
  274.   else
  275.   {
  276.     strcpy(menu_items[6], "Quit");
  277.     strcpy(menu_items[7], "?");
  278.     menu_items[7][0]=0;      // Changed this line from null
  279.   }
  280.  
  281.  
  282.  
  283.  
  284.   
  285.   done=0;
  286.   
  287.   while(!done && !hangup)
  288.   { 
  289.     int menu_done=0;
  290.     
  291.     amount=0;
  292.     list_config_scan_plus(top, &amount, type);
  293.     
  294.     if(!amount)
  295.     {  
  296.       top=0;          
  297.       list_config_scan_plus(top, &amount, type);
  298.       if(!amount)
  299.         done=1;
  300.     }
  301.     
  302.     if(!done)  
  303.       drawscan(pos, type ? is_inscan(top+pos) :
  304.               qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  305.               
  306.     
  307.               
  308.     redraw=1;
  309.     
  310.     while(!menu_done && !hangup && !done)
  311.     {
  312.       command = side_menu(&side_pos, redraw, menu_items, 1,
  313. #ifdef MAX_SCREEN_LINES_TO_SHOW
  314.       thisuser.screenlines-STOP_LIST > MAX_SCREEN_LINES_TO_SHOW-STOP_LIST ? MAX_SCREEN_LINES_TO_SHOW-STOP_LIST : thisuser.screenlines-STOP_LIST, &smc);
  315. #else
  316.       thisuser.screenlines-STOP_LIST, &smc);
  317. #endif             
  318.  
  319.       lines_listed=0;
  320.  
  321.  
  322.       redraw=1;
  323.       ansic(0);
  324.     
  325.       if(do_sysop_command(command))
  326.       {
  327.         menu_done=1;
  328.         amount=0;
  329.       }
  330.       
  331.       switch(command)
  332.       {
  333.         case '?':
  334.         case CO:
  335.           CLS();
  336.           printfile("SCONFIG.HLP");
  337.           pausescr();
  338.           
  339.           menu_done=1;
  340.           amount=0;
  341.           break;
  342.       
  343.         case COMMAND_DOWN:
  344.           undrawscan(pos, type ? is_inscan(top+pos) :
  345.              qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  346.           ++pos;
  347.           if(pos>=amount)
  348.             pos=0;
  349.           drawscan(pos, type ? is_inscan(top+pos) :
  350.               qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  351.           redraw=0;
  352.           break;
  353.         
  354.         case COMMAND_UP:
  355.           undrawscan(pos, type ? is_inscan(top+pos) :
  356.               qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  357.           if(!pos)
  358.             pos=amount-1;
  359.           else
  360.             --pos;
  361.           drawscan(pos, type ? is_inscan(top+pos) :
  362.               qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  363.           redraw=0;
  364.           break;
  365.         
  366.         case SPACE: // Toggle
  367.           if(type==0)
  368.             qsc_q[usub[top+pos].subnum/32] ^= (1L<<(usub[top+pos].subnum%32));
  369.           else
  370.           {
  371.             int this_dir, sysdir=0;
  372.             int ad;
  373.             
  374.             // Keep the program from flipping out if there is a dir 0 present
  375.             if(strcmp(udir[0].keys,"0")==0)
  376.               sysdir=1;
  377.             
  378.             for (this_dir=0; (this_dir<num_dirs); this_dir++) 
  379.             {
  380.               char s[50];
  381.               
  382.               sprintf(s, "%d", sysdir ? top+pos : top+pos+1);
  383.               if(!strcmp(s, udir[this_dir].keys))
  384.               {
  385.                 ad=udir[this_dir].subnum;
  386.                 qsc_n[ad/32] ^= (1L<<(ad%32));
  387.               }
  388.             }
  389.           }
  390.           drawscan(pos, type ? is_inscan(top+pos) :
  391.               qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  392.           redraw=0;
  393.           break;
  394.           
  395.         case EXECUTE:
  396.           if(!useconf && side_pos > 5)
  397.             side_pos+=2;
  398.  
  399.  
  400.           switch(side_pos)
  401.           {
  402.             case 0: // Next
  403.               top+=amount;
  404.               
  405.               if(type==0)
  406.               {
  407.                 if(top>=num_subs)
  408.                   top=0;
  409.               }
  410.               else
  411.               {
  412.                 if(top>=num_dirs)
  413.                   top=0;
  414.               }
  415.               
  416.               pos=0;
  417.               menu_done=1;
  418.               amount=0;
  419.               break;  
  420.             
  421.             case 1: // Prev
  422.               
  423.               if(top > thisuser.screenlines-4)
  424.                 top-=thisuser.screenlines-4;
  425.               else
  426.                 top=0;
  427.                   
  428.               pos=0;
  429.               menu_done=1;
  430.               amount=0;
  431.               break;
  432.               
  433.             case 2: // Toggle Sub
  434.               if(type==0)
  435.                 qsc_q[usub[top+pos].subnum/32] ^= (1L<<(usub[top+pos].subnum%32));
  436.               else
  437.               {
  438.                 int this_dir, sysdir=0;
  439.                 int ad;
  440.                 
  441.                 // Keep the program from flipping out if there is a dir 0 present
  442.                 if(strcmp(udir[0].keys,"0")==0)
  443.                   sysdir=1;
  444.                 
  445.                 for (this_dir=0; (this_dir<num_dirs); this_dir++) 
  446.                 {
  447.                   char s[50];
  448.                   
  449.                   sprintf(s, "%d", sysdir ? top+pos : top+pos+1);
  450.                   if(!strcmp(s, udir[this_dir].keys))
  451.                   {
  452.                     ad=udir[this_dir].subnum;
  453.                     qsc_n[ad/32] ^= (1L<<(ad%32));
  454.                   }
  455.                 }
  456.               }
  457.               drawscan(pos, type ? is_inscan(top+pos) :
  458.                    qsc_q[usub[top+pos].subnum/32]&(1L<<(usub[top+pos].subnum%32)));
  459.               redraw=0;
  460.               break;
  461.               
  462.             case 3: // Clear all
  463.               if(type==0)
  464.               {
  465.                 int this_sub;
  466.                 for(this_sub=0; this_sub<num_subs; this_sub++) 
  467.                 {
  468.                   if(qsc_q[usub[this_sub].subnum/32]&(1L<<(usub[this_sub].subnum%32)))
  469.                     qsc_q[usub[this_sub].subnum/32]^=(1L<<(usub[this_sub].subnum%32));
  470.                 }
  471.               }
  472.               else
  473.               {
  474.                 int this_dir;
  475.                 for(this_dir=0; this_dir<num_dirs; this_dir++) 
  476.                 {
  477.                   if(qsc_n[udir[this_dir].subnum/32]&(1L<<(udir[this_dir].subnum%32)))
  478.                     qsc_n[udir[this_dir].subnum/32] ^= 1L<<(udir[this_dir].subnum%32);
  479.                 }
  480.               }
  481.               pos=0;
  482.               menu_done=1;
  483.               amount=0;
  484.               break;
  485.               
  486.             case 4: // Set all on
  487.               if(type==0)
  488.               {
  489.                 int this_sub;
  490.                 for(this_sub=0; this_sub<num_subs; this_sub++) 
  491.                 {
  492.                   if(!(qsc_q[usub[this_sub].subnum/32]&(1L<<(usub[this_sub].subnum%32))))
  493.                     qsc_q[usub[this_sub].subnum/32]^=(1L<<(usub[this_sub].subnum%32));
  494.                 }
  495.               }
  496.               else
  497.               {
  498.                 int this_dir;
  499.                 for(this_dir=0; this_dir<num_dirs; this_dir++) 
  500.                 {
  501.                   if(!(qsc_n[udir[this_dir].subnum/32]&(1L<<(udir[this_dir].subnum%32))))
  502.                     qsc_n[udir[this_dir].subnum/32] ^= 1L<<(udir[this_dir].subnum%32);
  503.                 }
  504.               }
  505.               pos=0;
  506.               menu_done=1;
  507.               amount=0;
  508.               break;
  509.               
  510.             case 5:  // Read dir, or list files
  511.               if(type==0)
  512.               {
  513.                 int i=0;
  514.                 express=0;
  515.                 expressabort=0;
  516.                 qscan(top+pos, &i);
  517.               }
  518.               else
  519.               {
  520.                 int i=curdir;
  521.                 curdir=top+pos;
  522.                 tagging=1;
  523.                 listfiles();
  524.                 tagging=0;
  525.                 curdir=i;
  526.               }
  527.               menu_done=1;
  528.               amount=0;
  529.  
  530.               break;
  531.  
  532.             case 6: // { conf
  533.               if (okconf(&thisuser)) 
  534.               {
  535.                 if(type==0)
  536.                 {
  537.                   if(curconfsub>0)
  538.                     --curconfsub;
  539.                   else
  540.                   { 
  541.                     while ((uconfsub[curconfsub+1].confnum>=0) && (curconfsub<subconfnum-1))
  542.                       ++curconfsub;
  543.                   }
  544.                   setuconf(CONF_SUBS, curconfsub, -1);
  545.                 }
  546.                 else
  547.                 {
  548.                   if(curconfdir>0)
  549.                     --curconfdir;
  550.                   else 
  551.                   {
  552.                     while ((uconfdir[curconfdir+1].confnum>=0) && (curconfdir<dirconfnum-1))
  553.                       ++curconfdir;
  554.                   }
  555.                   setuconf(CONF_DIRS, curconfdir, -1);
  556.                 }
  557.                 
  558.                 pos=0;
  559.                 menu_done=1;
  560.                 amount=0;
  561.               }
  562.  
  563.               
  564.               break;
  565.               
  566.             case 7: // } conf
  567.               if (okconf(&thisuser)) 
  568.               {
  569.                 if(type==0)
  570.                 {
  571.                   if ((curconfsub<subconfnum-1) && (uconfsub[curconfsub+1].confnum>=0))
  572.                     ++curconfsub;
  573.                   else
  574.                     curconfsub=0;
  575.                   setuconf(CONF_SUBS, curconfsub, -1);
  576.                 }
  577.                 else
  578.                 {
  579.                   if ((curconfdir<dirconfnum-1) && (uconfdir[curconfdir+1].confnum>=0))
  580.                     ++curconfdir;
  581.                   else
  582.                     curconfdir=0;
  583.                   setuconf(CONF_DIRS, curconfdir, -1);
  584.                 }
  585.                 pos=0;
  586.                 menu_done=1;
  587.                 amount=0;
  588.               }
  589.  
  590.               break;
  591.               
  592.               
  593.             case 8: // Quit
  594.               menu_done=1;
  595.               done=1;
  596.               break;
  597.               
  598.             case 9: // ? Help
  599.               CLS();
  600.               printfile("SCONFIG.HLP");
  601.               pausescr();
  602.               
  603.               menu_done=1;
  604.               amount=0;
  605.  
  606.               if(!useconf)
  607.                 side_pos-=2;
  608.               break;
  609.           }
  610.           
  611.           break;
  612.         
  613.         case GET_OUT:
  614.           menu_done=1;
  615.           done=1;
  616.           break;
  617.         
  618.       }
  619.     }
  620.   }
  621.   
  622.   lines_listed=0;
  623.   nl();
  624.   
  625.   free_2d(menu_items);
  626. }
  627.  
  628.  
  629.  
  630. void drawscan(int filepos, long tagged)
  631. {
  632.   int max_lines;
  633.  
  634. #ifdef MAX_SCREEN_LINES_TO_SHOW
  635.   max_lines = (
  636.                 thisuser.screenlines-(4+STOP_LIST)
  637.                 >
  638.                 MAX_SCREEN_LINES_TO_SHOW-(4+STOP_LIST)
  639.                 ?
  640.                 MAX_SCREEN_LINES_TO_SHOW-(4+STOP_LIST)
  641.                 :
  642.                 thisuser.screenlines-(4+STOP_LIST)
  643.               );
  644. #else
  645.   max_lines = thisuser.screenlines-(4+STOP_LIST);
  646. #endif
  647.  
  648.   if(filepos >= max_lines)
  649.     goxy(40, 3 + filepos - max_lines);
  650.   else
  651.     goxy(1, filepos+3);
  652.  
  653.   setc(BLACK+(CYAN<<4));
  654.   npr("[%c]", tagged ? '■' : ' ');
  655.   setc(YELLOW+(BLACK<<4));
  656.   
  657.   if(filepos >= max_lines)
  658.     goxy(41, 3 + filepos - max_lines);
  659.   else
  660.     goxy(2, filepos+3);
  661.  
  662.  
  663.   
  664. }
  665.  
  666. void undrawscan(int filepos, long tagged)
  667. {
  668.   int max_lines;
  669.  
  670. #ifdef MAX_SCREEN_LINES_TO_SHOW
  671.   max_lines =
  672.               (
  673.                 thisuser.screenlines-(4+STOP_LIST)
  674.                 >
  675.                 MAX_SCREEN_LINES_TO_SHOW-(4+STOP_LIST)
  676.                 ?
  677.                 MAX_SCREEN_LINES_TO_SHOW-(4+STOP_LIST)
  678.                 :
  679.                 thisuser.screenlines-(4+STOP_LIST)
  680.               );
  681. #else
  682.   max_lines = thisuser.screenlines-(4+STOP_LIST);
  683. #endif
  684.  
  685.  
  686.   if(filepos >= max_lines)
  687.     goxy(40, 3 + filepos - max_lines);
  688.   else
  689.     goxy(1, filepos+3);
  690.  
  691.  
  692.   npr("7[1%c7]", tagged ? '■' : ' ');
  693. }
  694.  
  695. long is_inscan(int dir)
  696. {
  697.   int this_dir, ad;
  698.   int sysdir=0;
  699.   
  700.   // Keep the program from flipping out if there is a dir 0 present
  701.   if(strcmp(udir[0].keys,"0")==0)
  702.     sysdir=1;
  703.   
  704.   for (this_dir=0; (this_dir<num_dirs); this_dir++) 
  705.   {
  706.     char s[50];
  707.     
  708.     sprintf(s, "%d", sysdir ? dir : dir+1);
  709.     if(!strcmp(s, udir[this_dir].keys))
  710.     {
  711.       ad=udir[this_dir].subnum;
  712.       return(qsc_n[ad/32]&(1L<<ad%32));
  713.     }
  714.   }
  715.   
  716.   return(0);
  717. }
  718.  
  719.  
  720.  
  721. Step 5) FCNS.H
  722.   Either type MAKE FCNS to rebuild or manually add the following function
  723.   definitions to fcns.h at the end of the section for /* file: defaults.c */.
  724.  
  725. void list_config_scan_plus(int first, int *amount, int type);
  726. void config_scan_plus(int type);
  727. void drawscan(int filepos, long tagged);
  728. void undrawscan(int filepos, long tagged);
  729. long is_inscan(int dir);
  730.   
  731.   
  732. 6) Recompile
  733.   Please report all bugs you may find.
  734.   
  735.   
  736. 7) Help advertise a half way decent mod, tell everyone on modnet to get Insane.
  737.  
  738.  
  739. ─═════════════════──════════════─────════════─═══════════════───══════════─═══
  740.      
  741.      
  742.  
  743. ' Void this
  744. ' Real idiots think that real programmers only use one tool
  745.  
  746.  
  747. Look for more good mods from the Asylum group...
  748.  
  749.  
  750.  
  751.