home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / WWIV2.ZIP / DEFAULTS.C < prev    next >
C/C++ Source or Header  |  1995-07-31  |  16KB  |  729 lines

  1. /*****************************************************************************
  2.  
  3.                 WWIV Version 4
  4.                     Copyright (C) 1988-1993 by Wayne Bell
  5.  
  6. Distribution of the source code for WWIV, in any form, modified or unmodified,
  7. without PRIOR, WRITTEN APPROVAL by the author, is expressly prohibited.
  8. Distribution of compiled versions of WWIV is limited to copies compiled BY
  9. THE AUTHOR.  Distribution of any copies of WWIV not compiled by the author
  10. is expressly prohibited.
  11.  
  12.  
  13. *****************************************************************************/
  14.  
  15.  
  16.  
  17. #include "vars.h"
  18.  
  19. #pragma hdrstop
  20.  
  21.  
  22. void select_editor(void)
  23. {
  24.   char s[81],s1[81],*ss;
  25.   int i;
  26.  
  27.   helpl=37;
  28.   if (numed==0) {
  29.     nl();
  30.     pl(get_string(379));
  31.     nl();
  32.     return;
  33.   }
  34.   for (i=0; i<5; i++)
  35.     odc[i]=0;
  36.   pl(get_string(380));
  37.   for (i=0; i<numed; i++) {
  38.     npr("%d. %s\r\n",i+1,editors[i].description);
  39.     if (((i+1) %10)==0)
  40.       odc[(i+1)/10-1]=(i+1)/10;
  41.   }
  42.   nl();
  43.   ansic(2);
  44.   outstr(get_string(381));
  45.   npr("%d",numed);
  46.   outstr(get_string(382));
  47.   ansic(0);
  48.   ss=mmkey(2);
  49.   i=atoi(ss);
  50.   if ((i>=1) && (i<=numed))
  51.     thisuser.defed=i;
  52.   else
  53.     if (strcmp(ss,"0")==0)
  54.       thisuser.defed=0;
  55. }
  56.  
  57.  
  58. void print_cur_stat(void)
  59. {
  60.   char s[81],s1[81],s2[81];
  61.   userrec ur;
  62.  
  63.   outchr(12);
  64.  
  65.   outstr(get_string(383));
  66.   npr("%d X %d\r\n",
  67.         thisuser.screenchars,
  68.         thisuser.screenlines);
  69.   outstr(get_string(384)); npr("%s\r\n",
  70.      (thisuser.sysstatus & sysstatus_ansi)?
  71.        ((thisuser.sysstatus & sysstatus_color)? get_string(385):get_string(386)):
  72.      get_string(387));
  73.   outstr(get_string(388)); npr("%s\r\n",
  74.      (thisuser.sysstatus & sysstatus_pause_on_page)?get_string(389):get_string(390));
  75.   outstr(get_string(391));
  76.   if ((thisuser.forwardsys==0) && (thisuser.forwardusr==0))
  77.     pl(get_string(392));
  78.   else {
  79.     if (thisuser.forwardsys) {
  80.       outstr(get_string(393));
  81.       npr("%s #%u @%u.\r\n",
  82.         net_networks[thisuser.net_num].name,
  83.         thisuser.forwardusr,thisuser.forwardsys);
  84.     } else {
  85.       if (thisuser.forwardusr==65535) {
  86.         pl(get_string(300));
  87.       } else {
  88.         read_user(thisuser.forwardusr,&ur);
  89.         if (ur.inact & inact_deleted) {
  90.           thisuser.forwardusr=0;
  91.           pl(get_string(392));
  92.         } else {
  93.           outstr(get_string(393));
  94.           npr("%s\r\n",nam(&ur,thisuser.forwardusr));
  95.         }
  96.       }
  97.     }
  98.   }
  99.   pl(get_string(394));
  100.   pl(get_string(395));
  101.   pl(get_string(396));
  102.   if (okansi()) {
  103.     pl(get_string(397));
  104.     outstr(get_string(398)); npr("%s\r\n",
  105.       ((thisuser.defed) && (thisuser.defed<=numed))?
  106.         editors[thisuser.defed-1].description:get_string(5));
  107.     outstr(get_string(399)); npr("%s\r\n",
  108.       (thisuser.sysstatus & sysstatus_funky_colors)?str_yes:str_no);
  109.   }
  110.   outstr(get_string(400)); npr("%d\r\n",thisuser.optional_val);
  111.   outstr(get_string(401));
  112.   if (thisuser.wwiv_regnum)
  113.     npr("%ld\r\n",thisuser.wwiv_regnum);
  114.   else
  115.     pl(get_string(402));
  116.   npr("O. Personal Tag       : %s\r\n",thisuser.ptag);
  117.   pl(get_string(403));
  118.   nl();
  119.   nl();
  120. }
  121.  
  122.  
  123. char *cn(char c)
  124. {
  125.   static char s[20];
  126.  
  127.   if ((checkcomp("Ami")) || (checkcomp("Mac"))) {
  128.     strcpy(s,get_string(404));
  129.     sprintf(s+strlen(s),"%d",c);
  130.     return(s);
  131.   }
  132.  
  133.   switch(c) {
  134.     case 0:
  135.       return(get_string(405));
  136.     case 1:
  137.       return(get_string(406));
  138.     case 2:
  139.       return(get_string(407));
  140.     case 3:
  141.       return(get_string(408));
  142.     case 4:
  143.       return(get_string(409));
  144.     case 5:
  145.       return(get_string(410));
  146.     case 6:
  147.       return(get_string(411));
  148.     case 7:
  149.       return(get_string(412));
  150.   }
  151.   return("");
  152. }
  153.  
  154. char *describe(char col)
  155. {
  156.   static char s[81];
  157.   char s1[81];
  158.  
  159.  
  160.   if (thisuser.sysstatus & sysstatus_color) {
  161.     strcpy(s,cn(col&0x07));
  162.     strcat(s,get_string(413));
  163.     strcat(s,cn((col>>4)&0x07));
  164.   } else {
  165.     if ((col & 0x07) == 0)
  166.       strcpy(s,get_string(414));
  167.     else
  168.       strcpy(s,get_string(392));
  169.   }
  170.   if (col & 0x08) {
  171.     if ((checkcomp("Ami")) || (checkcomp("Mac")))
  172.       strcat(s,get_string(415));
  173.     else
  174.       strcat(s,get_string(416));
  175.   }
  176.   if (col & 0x80) {
  177.     if (checkcomp("Ami"))
  178.       strcat(s,get_string(417));
  179.     else
  180.       if (checkcomp("Mac"))
  181.         strcat(s,get_string(418));
  182.       else
  183.         strcat(s,get_string(419));
  184.   }
  185.   return(s);
  186. }
  187.  
  188. void color_list(void)
  189. {
  190.   int i;
  191.  
  192.   nl();
  193.   nl();
  194.   for (i=0; i<8; i++) {
  195.     if (i==0)
  196.       setc(0x70);
  197.     else
  198.       setc(i);
  199.     npr("%d. %s",i,cn(i));
  200.     setc(0x07);
  201.     nl();
  202.   }
  203. }
  204.  
  205.  
  206.  
  207. void change_colors(void)
  208. {
  209.   int i,done,i1,i2;
  210.   char s[81],ch,nc;
  211.  
  212.   done=0;
  213.   helpl=36;
  214.   nl();
  215.   do {
  216.     if ((thisuser.sysstatus & sysstatus_color)==0) {
  217.       strcpy(s,get_string(420));
  218.       if ((thisuser.bwcolors[1] & 0x70) == 0)
  219.         strcat(s,cn(thisuser.bwcolors[1] & 0x07));
  220.       else
  221.         strcat(s,cn((thisuser.bwcolors[1] >> 4) & 0x07));
  222.       pl(s);
  223.       nl();
  224.     }
  225.     for (i=0; i<8; i++) {
  226.       ansic(i);
  227.       itoa(i,s,10);
  228.       strcat(s,". ");
  229.       switch(i) {
  230.         case 0:
  231.           strcat(s,get_string(421));
  232.           break;
  233.         case 1:
  234.           strcat(s,get_string(422));
  235.           break;
  236.         case 2:
  237.           strcat(s,get_string(423));
  238.           break;
  239.         case 3:
  240.           strcat(s,get_string(424));
  241.           break;
  242.         case 4:
  243.           strcat(s,get_string(425));
  244.           break;
  245.         case 5:
  246.           strcat(s,get_string(426));
  247.           break;
  248.         case 6:
  249.           strcat(s,get_string(427));
  250.           break;
  251.         case 7:
  252.           strcat(s,get_string(428));
  253.           break;
  254.       }
  255.       if (thisuser.sysstatus & sysstatus_color)
  256.         strcat(s,describe(thisuser.colors[i]));
  257.       else
  258.         strcat(s,describe(thisuser.bwcolors[i]));
  259.       pl(s);
  260.     }
  261.     nl();
  262.     prt(2,get_string(429));
  263.     ch=onek("Q01234567");
  264.     if (ch=='Q')
  265.       done=1;
  266.     else {
  267.       i1=ch-'0';
  268.       if (thisuser.sysstatus & sysstatus_color)  {
  269.         color_list();
  270.         ansic(0);
  271.         nl();
  272.         prt(2,get_string(430));
  273.         ch=onek("01234567");
  274.         nc=ch-'0';
  275.         prt(2,get_string(431));
  276.         ch=onek("01234567");
  277.         nc=nc | ((ch-'0') << 4);
  278.       } else {
  279.          nl();
  280.          prt(5,get_string(432));
  281.            if (yn()) {
  282.              if ((thisuser.bwcolors[1] & 0x70) == 0)
  283.                nc=0 | ((thisuser.bwcolors[1] & 0x07) << 4);
  284.              else
  285.                nc=(thisuser.bwcolors[1] & 0x70);
  286.            } else {
  287.              if ((thisuser.bwcolors[1] & 0x70) == 0)
  288.                nc=0 | (thisuser.bwcolors[1] & 0x07);
  289.              else
  290.                nc=((thisuser.bwcolors[1] & 0x70) >> 4);
  291.            }
  292.       }
  293.       if ((checkcomp("Ami")) || (checkcomp("Mac")))
  294.         prt(5,get_string(433));
  295.       else
  296.         prt(5,get_string(434));
  297.       if (yn())
  298.         nc |= 0x08;
  299.  
  300.       if (checkcomp("Ami"))
  301.         prt(5,get_string(435));
  302.       else
  303.         if (checkcomp("Mac"))
  304.           prt(5,get_string(436));
  305.         else
  306.           prt(5,get_string(437));
  307.       if (yn())
  308.         nc |= 0x80;
  309.  
  310.       nl();
  311.       nl();
  312.       setc(nc);
  313.       outstr(describe(nc));
  314.       ansic(0);
  315.       nl();
  316.       nl();
  317.       prt(5,get_string(438));
  318.       if (yn()) {
  319.         nl();
  320.         pl(get_string(439));
  321.         nl();
  322.         if (thisuser.sysstatus & sysstatus_color)
  323.           thisuser.colors[i1]=nc;
  324.         else
  325.           thisuser.bwcolors[i1]=nc;
  326.       } else {
  327.         nl();
  328.         pl(get_string(440));
  329.         nl();
  330.       }
  331.     }
  332.   } while ((!done) && (!hangup));
  333. }
  334.  
  335.  
  336.  
  337. void l_config_qscan(void)
  338. {
  339.   int i,abort;
  340.   char s[81];
  341.  
  342.   abort=0;
  343.   nl();
  344.   pl(get_string(441));
  345.   nl();
  346.   for (i=0; (i<num_subs) && (usub[i].subnum!=-1) && (!abort); i++) {
  347.     sprintf(s,"%c %s. %s",
  348.       (qsc_q[usub[i].subnum/32]&(1L<<(usub[i].subnum%32)))?'*':' ',
  349.       usub[i].keys,
  350.       subboards[usub[i].subnum].name);
  351.     pla(s,&abort);
  352.   }
  353.   nl();
  354.   nl();
  355. }
  356.  
  357. void config_qscan(void)
  358. {
  359.   char *s;
  360.   int i,done;
  361.  
  362.   l_config_qscan();
  363.   done=0;
  364.   do {
  365.     nl();
  366.     pl(get_string(442));
  367.     helpl=7;
  368.     outstr(get_string(443));
  369.     s=mmkey(0);
  370.     if (s[0])
  371.       for (i=0; (i<num_subs) && (usub[i].subnum!=-1); i++)
  372.         if (strcmp(usub[i].keys,s)==0) {
  373.           qsc_q[usub[i].subnum/32] ^= (1L<<(usub[i].subnum%32));
  374.         }
  375.     if (strcmp(s,"Q")==0)
  376.       done=1;
  377.     if (strcmp(s,"?")==0)
  378.       l_config_qscan();
  379.   } while ((!done) && (!hangup));
  380. }
  381.  
  382.  
  383. void list_macro(unsigned char *s)
  384. {
  385.   int i;
  386.  
  387.   i=0;
  388.   outchr('\"');
  389.   while ((i<80) && (s[i]!=0)) {
  390.     if (s[i]>=32)
  391.       outchr(s[i]);
  392.     else {
  393.       outchr('^');
  394.       outchr(s[i]+64);
  395.     }
  396.     ++i;
  397.   }
  398.   outchr('"');
  399.   nl();
  400. }
  401.  
  402.  
  403. void make_macros(void)
  404. {
  405.   unsigned char tempmac[81],s[81];
  406.   unsigned char ch,ch1;
  407.   int i,i1,done,done1;
  408.  
  409.   done=0;
  410.   do {
  411.     nl();
  412.     prt(2,get_string(444));
  413.     helpl=33;
  414.     ch=onek("QLM");
  415.     switch(ch) {
  416.       case 'Q':
  417.         done=1;
  418.         break;
  419.       case 'L':
  420.         nl();
  421.         nl();
  422.         pl(get_string(445));
  423.         list_macro(&(thisuser.macros[0][0]));
  424.         nl();
  425.         pl(get_string(446));
  426.         list_macro(&(thisuser.macros[1][0]));
  427.         nl();
  428.         pl(get_string(447));
  429.         list_macro(&(thisuser.macros[2][0]));
  430.         break;
  431.       case 'M':
  432.         nl();
  433.         prt(2,get_string(448));
  434.         ch1=onek("QADF");
  435.         if (ch1!='Q') {
  436.           switch(ch1) {
  437.             case 'A': i1=2; break;
  438.             case 'D': i1=0; break;
  439.             case 'F': i1=1; break;
  440.           }
  441.           strcpy(s,&(thisuser.macros[i1][0]));
  442.           thisuser.macros[i1][0]=0;
  443.           done1=0;
  444.           i=0;
  445.           nl();
  446.           pl(get_string(449));
  447.           nl();
  448.       okskey=0;
  449.           do {
  450.             ch1=getkey();
  451.             if (ch1==26)
  452.               done1=1;
  453.             else
  454.               if (ch1==8) {
  455.                 if (i>0) {
  456.                   i--;
  457.                   backspace();
  458.                   if (tempmac[i]<32)
  459.                     backspace();
  460.                 }
  461.               } else {
  462.                 if (ch1>=32) {
  463.                   tempmac[i++]=ch1;
  464.                   outchr(ch1);
  465.                 } else {
  466.                   tempmac[i++]=ch1;
  467.                   outchr('^');
  468.                   outchr(ch1+64);
  469.                 }
  470.               }
  471.             if (i>=78)
  472.               done1=1;
  473.           } while ((!done1) && (!hangup));
  474.       okskey=1;
  475.           tempmac[i]=0;
  476.           nl();
  477.           pl(get_string(450));
  478.           nl();
  479.           nl();
  480.           list_macro(tempmac);
  481.           nl();
  482.           prt(5,get_string(438));
  483.           if (yn()) {
  484.             strcpy(&(thisuser.macros[i1][0]),tempmac);
  485.             nl();
  486.             pl(get_string(451));
  487.           } else {
  488.             nl();
  489.             strcpy(&(thisuser.macros[i1][0]),s);
  490.             pl(get_string(452));
  491.           }
  492.         }
  493.         break;
  494.     }
  495.   } while ((!done) && (!hangup));
  496. }
  497.  
  498.  
  499. void input_pw1(void)
  500. {
  501.   char s[81],s1[81];
  502.   int ok;
  503.  
  504.   nl();
  505.   prt(5,get_string(453));
  506.   if (yn()) {
  507.     nl();
  508.     pl(get_string(454));
  509.     outstr(": ");
  510.     echo=0;
  511.     input(s,8);
  512.     if (strcmp(s,thisuser.pw)) {
  513.       nl();
  514.       pl(get_string(455));
  515.       nl();
  516.       return;
  517.     }
  518.     nl();
  519.     nl();
  520.     pl(get_string(456));
  521.     outstr(": ");
  522.     echo=0;
  523.     input(s,8);
  524.     nl();
  525.     nl();
  526.     pl(get_string(457));
  527.     outstr(": ");
  528.     echo=0;
  529.     input(s1,8);
  530.     if (strcmp(s,s1)==0) {
  531.       if (strlen(s1)<3) {
  532.         nl();
  533.         pl(get_string(458));
  534.         pl(get_string(459));
  535.         nl();
  536.       } else {
  537.         strcpy(thisuser.pw,s);
  538.         nl();
  539.         pl(get_string(460));
  540.         nl();
  541.         sysoplog(get_stringx(1, 98));
  542.       }
  543.     } else {
  544.       nl();
  545.       pl(get_string(462));
  546.       pl(get_string(463));
  547.       nl();
  548.     }
  549.   }
  550. }
  551.  
  552. void modify_mailbox(void)
  553. {
  554.   int i,i1,i2;
  555.   unsigned int u;
  556.   char s[81];
  557.   net_system_list_rec *csne;
  558.  
  559.   nl();
  560.   helpl=35;
  561.  
  562.   prt(5,get_string(464));
  563.   if (yn()) {
  564.     prt(5,get_string(465));
  565.     if (yn()) {
  566.       thisuser.forwardsys=0;
  567.       thisuser.forwardusr=-1;
  568.       return;
  569.     }
  570.   }
  571.   prt(5,get_string(466));
  572.   if (!yn()) {
  573.     thisuser.forwardsys=0;
  574.     thisuser.forwardusr=0;
  575.     return;
  576.   }
  577.   nl();
  578.   prt(2,get_string(467));
  579.   input(s,40);
  580.   parse_email_info(s, &thisuser.forwardusr, &thisuser.forwardsys);
  581.   if (thisuser.forwardsys) {
  582.     thisuser.net_num=net_num;
  583.     if (!thisuser.forwardusr) {
  584.       thisuser.forwardsys=thisuser.net_num=0;
  585.       nl();
  586.       pl(get_string(468));
  587.       nl();
  588.     }
  589.  } else if (thisuser.forwardusr==usernum) {
  590.     nl();
  591.     pl(get_string(469));
  592.     nl();
  593.     thisuser.forwardusr=0;
  594.   }
  595.   if ((!thisuser.forwardusr) && (!thisuser.forwardsys)) {
  596.     thisuser.net_num=0;
  597.     nl();
  598.     pl(get_string(470));
  599.     nl();
  600.   } else {
  601.     nl();
  602.     pl(get_string(471));
  603.     nl();
  604.   }
  605. }
  606.  
  607.  
  608. void optional_lines(void)
  609. {
  610.   char s[81];
  611.   int i;
  612.  
  613.   pl(get_string(472));
  614.   pl(get_string(473));
  615.   prt(2,get_string(474));
  616.   input(s,2);
  617.  
  618.   i=atoi(s);
  619.   if ((s[0]) && (i>=0) && (i<11))
  620.     thisuser.optional_val = i;
  621.  
  622. }
  623.  
  624.  
  625. void enter_regnum(void)
  626. {
  627.   char s[81];
  628.   long l;
  629.  
  630.   pl(get_string(475));
  631.   pl(get_string(476));
  632.   nl();
  633.   prt(2,get_string(261));
  634.   input(s,5);
  635.   l=atol(s);
  636.   if ((s[0]) && (l>=0))
  637.     thisuser.wwiv_regnum = l;
  638.  
  639. }
  640.  
  641. void defaults(void)
  642. {
  643.   int i,i1,i2,done;
  644.   char s[81],s1[81],s2[81],ch;
  645.  
  646.   done=0;
  647.   print_cur_stat();
  648.   do {
  649.     tleft(1);
  650.     if (hangup)
  651.       return;
  652.     nl();
  653.     helpl=4;
  654.     if (okansi()) {
  655.       prt(2,get_string(477));
  656.       ch=onek("Q?123456789ABWO");
  657.     } else {
  658.       prt(2,get_string(478));
  659.       ch=onek("Q?1234567BWO");
  660.     }
  661.     switch(ch) {
  662.       case 'Q':
  663.         done=1;
  664.         break;
  665.       case '?':
  666.         print_cur_stat();
  667.         break;
  668.       case '1':
  669.         input_screensize();
  670.         break;
  671.       case '2':
  672.         input_ansistat();
  673.         break;
  674.       case '3':
  675.         if (thisuser.sysstatus & sysstatus_pause_on_page)
  676.           thisuser.sysstatus ^= sysstatus_pause_on_page;
  677.         nl();
  678.         prt(5,get_string(479));
  679.         if (yn())
  680.           thisuser.sysstatus |= sysstatus_pause_on_page;
  681.         break;
  682.       case '4':
  683.         modify_mailbox();
  684.         break;
  685.       case '5':
  686.         config_qscan();
  687.         break;
  688.       case '6':
  689.         input_pw1();
  690.         break;
  691.       case '7':
  692.         make_macros();
  693.         break;
  694.       case '8':
  695.         change_colors();
  696.         break;
  697.       case '9':
  698.     select_editor();
  699.     break;
  700.       case 'A':
  701.         if (thisuser.sysstatus & sysstatus_funky_colors)
  702.           thisuser.sysstatus ^= sysstatus_funky_colors;
  703.         nl();
  704.         prt(5,get_string(480));
  705.         if (yn())
  706.           thisuser.sysstatus |= sysstatus_funky_colors;
  707.         break;
  708.       case 'B':
  709.         optional_lines();
  710.         break;
  711.       case 'W':
  712.         enter_regnum();
  713.     break;
  714.       case 'O':
  715.     nl();
  716.     npr("%s \r\n",thisuser.ptag);
  717.     nl();
  718.     pl("You may now enter your new tag");
  719.     prt(2,":");
  720.     inputl(thisuser.ptag,40);
  721.     sprintf(s,"Changed Tag to - %s",thisuser.ptag);
  722.     sysoplog(s);
  723.       break;
  724.     }
  725.   } while ((!done) && (!hangup));
  726. }
  727.  
  728.  
  729.