home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / tde221.zip / CFGMODES.C < prev    next >
C/C++ Source or Header  |  1993-04-01  |  14KB  |  583 lines

  1. /*
  2.  * Author:        Frank Davis
  3.  * Date:          January 20, 1992
  4.  * Compiler:      MSC 6.0a and QuickC 2.5
  5.  *
  6.  * This program is released into the public domain.  You may distribute
  7.  * it freely, Frank Davis
  8.  */
  9.  
  10.  
  11. #include <bios.h>
  12. #include <dos.h>
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16.  
  17. #include "tdecfg.h"
  18. #include "cfgmodes.h"
  19.  
  20.  
  21. extern struct vcfg cfg;         /* video stuff */
  22. extern FILE *tde_exe;           /* FILE pointer to tde.exe */
  23.  
  24. MODE_INFO in_modes;           /* play around with modes in this struct */
  25.  
  26. int color;
  27.  
  28. /*
  29.  * Name:    tdemodes
  30.  * Date:    July 21, 1991
  31.  * Notes:   Strategy is fairly straight forward -  1) initialize all the
  32.  *          variables  2) show the user a color sample  3) make the changes
  33.  *          permanent if desired.
  34.  */
  35. void tdemodes( void )
  36. {
  37.    color = 7;
  38.    initialize_modes( );
  39.    show_init_mode( );
  40.    change_modes( );
  41. }
  42.  
  43.  
  44. /*
  45.  * Name:    initialize_modes
  46.  * Date:    July 21, 1991
  47.  * Notes:   Set up the global mode variables.
  48.  */
  49. void initialize_modes( void )
  50. {
  51. int i, j;
  52.  
  53.    fseek( tde_exe, MODE_OFFSET, SEEK_SET );
  54.    fread( (void *)&in_modes, sizeof( MODE_INFO ), 1, tde_exe );
  55.  
  56.    mode[Ins].mode      = in_modes.insert;
  57.    mode[Ind].mode      = in_modes.indent;
  58.    mode[PTAB].mode     = in_modes.ptab_size;
  59.    mode[LTAB].mode     = in_modes.ltab_size;
  60.    mode[Smart].mode    = in_modes.smart_tab;
  61.    mode[Write_Z].mode  = in_modes.control_z;
  62.    mode[Crlf].mode     = in_modes.crlf;
  63.    mode[Trim].mode     = in_modes.trailing;
  64.    mode[Eol].mode      = in_modes.show_eol;
  65.    mode[WW].mode       = in_modes.word_wrap;
  66.    mode[Left].mode     = in_modes.left_margin;
  67.    mode[Para].mode     = in_modes.parg_margin;
  68.    mode[Right].mode    = in_modes.right_margin;
  69.    mode[Size].mode     = in_modes.cursor_size;
  70.    mode[Backup].mode   = in_modes.do_backups;
  71.    mode[Ruler].mode    = in_modes.ruler;
  72.    mode[Date].mode     = in_modes.date_style;
  73.    mode[Time].mode     = in_modes.time_style;
  74.    mode[Initcase].mode = in_modes.search_case;
  75. }
  76.  
  77.  
  78. /*
  79.  * Name:    show_init_mode
  80.  * Date:    July 21, 1991
  81.  * Notes:   Draw the sample screen.
  82.  */
  83. void show_init_mode( void )
  84. {
  85. char *sample;
  86. int line, i;
  87.  
  88.    cls( );
  89.    xygoto( -1, -1 );
  90.    sample = mode_screen[0];
  91.    for (i=0,line=1; sample != NULL; line++, i++) {
  92.       sample = mode_screen[i];
  93.       s_output( (char far *)sample, line, 0, 7 );
  94.    }
  95.    for (i=0; i<19; i++)
  96.       (*mode[i].show_me)();
  97. }
  98.  
  99.  
  100. /*
  101.  * Name:    show_insert_mode
  102.  * Date:    January 20, 1992
  103.  */
  104. void show_insert_mode( void )
  105. {
  106. char *p[] = {
  107.    "Overwrite",
  108.    "Insert   "
  109. };
  110.  
  111.    s_output( p[mode[Ins].mode], mode[Ins].line, mode[Ins].col, color );
  112. }
  113.  
  114.  
  115. /*
  116.  * Name:    show_indent_mode
  117.  * Date:    January 20, 1992
  118.  */
  119. void show_indent_mode( void )
  120. {
  121. char *p[] = {
  122.    "Indent off",
  123.    "Indent on "
  124. };
  125.  
  126.    s_output( p[mode[Ind].mode], mode[Ind].line, mode[Ind].col, color );
  127. }
  128.  
  129.  
  130. /*
  131.  * Name:    show_ptabsize
  132.  * Date:    January 20, 1992
  133.  */
  134. void show_ptabsize( void )
  135. {
  136. char temp[10];
  137.  
  138.    s_output( "   ", mode[PTAB].line, mode[PTAB].col, color );
  139.    s_output( itoa(mode[PTAB].mode,temp,10), mode[PTAB].line, mode[PTAB].col,color);
  140. }
  141.  
  142.  
  143. /*
  144.  * Name:    show_ltabsize
  145.  * Date:    January 20, 1992
  146.  */
  147. void show_ltabsize( void )
  148. {
  149. char temp[10];
  150.  
  151.    s_output( "   ", mode[LTAB].line, mode[LTAB].col, color );
  152.    s_output( itoa(mode[LTAB].mode,temp,10), mode[LTAB].line, mode[LTAB].col,color);
  153. }
  154.  
  155.  
  156. /*
  157.  * Name:    show_controlz
  158.  * Date:    January 20, 1992
  159.  */
  160. void show_controlz( void )
  161. {
  162. char *p[] = {
  163.    "Write ^Z",
  164.    "No ^Z   ",
  165. };
  166.  
  167.    s_output( p[mode[Write_Z].mode], mode[Write_Z].line,mode[Write_Z].col,color);
  168. }
  169.  
  170.  
  171. /*
  172.  * Name:    show_eol_out
  173.  * Date:    January 20, 1992
  174.  */
  175. void show_eol_out( void )
  176. {
  177. char *p[] = {
  178.    "",
  179.    "CRLF",
  180.    "LF  ",
  181. };
  182.  
  183.    s_output( p[mode[Crlf].mode], mode[Crlf].line, mode[Crlf].col, color );
  184. }
  185.  
  186.  
  187. /*
  188.  * Name:    show_trail
  189.  * Date:    January 20, 1992
  190.  */
  191. void show_trail( void )
  192. {
  193. char *p[] = {
  194.    "No Trim",
  195.    "Trim   ",
  196. };
  197.  
  198.    s_output( p[mode[Trim].mode], mode[Trim].line, mode[Trim].col, color );
  199. }
  200.  
  201.  
  202. /*
  203.  * Name:    show_eol_display
  204.  * Date:    January 20, 1992
  205.  */
  206. void show_eol_display( void )
  207. {
  208. char *p[] = {
  209.    "Off",
  210.    "On ",
  211. };
  212.  
  213.    s_output( p[mode[Eol].mode], mode[Eol].line, mode[Eol].col, color );
  214. }
  215.  
  216.  
  217. /*
  218.  * Name:    show_smart_mode
  219.  * Date:    January 20, 1992
  220.  */
  221. void show_smart_mode( void )
  222. {
  223. char *p[] = {
  224.    "Off",
  225.    "On ",
  226. };
  227.  
  228.    s_output( p[mode[Smart].mode], mode[Smart].line, mode[Smart].col, color );
  229. }
  230.  
  231.  
  232. /*
  233.  * Name:    show_ww
  234.  * Date:    January 20, 1992
  235.  */
  236. void show_ww( void )
  237. {
  238. char *p[] = {
  239.    "Off                ",
  240.    "Fixed margins      ",
  241.    "Dynamic left margin",
  242. };
  243.  
  244.    s_output( p[mode[WW].mode], mode[WW].line, mode[WW].col, color );
  245. }
  246.  
  247.  
  248. /*
  249.  * Name:    show_initcase
  250.  * Date:    January 20, 1992
  251.  */
  252. void show_initcase( void )
  253. {
  254. char *p[] = {
  255.    "      ",
  256.    "IGNORE",
  257.    "MATCH ",
  258. };
  259.  
  260.    s_output( p[mode[Initcase].mode], mode[Initcase].line, mode[Initcase].col,
  261.               color );
  262. }
  263.  
  264.  
  265. /*
  266.  * Name:    show_left
  267.  * Date:    January 20, 1992
  268.  */
  269. void show_left( void )
  270. {
  271. char temp[10];
  272.  
  273.    s_output( "   ", mode[Left].line, mode[Left].col, color );
  274.    s_output( itoa( mode[Left].mode+1, temp, 10 ), mode[Left].line, mode[Left].col,
  275.              color);
  276. }
  277.  
  278.  
  279. /*
  280.  * Name:    show_para
  281.  * Date:    January 20, 1992
  282.  */
  283. void show_para( void )
  284. {
  285. char temp[10];
  286.  
  287.    s_output( "   ", mode[Para].line, mode[Para].col, color );
  288.    s_output( itoa( mode[Para].mode+1, temp, 10 ), mode[Para].line, mode[Para].col,
  289.              color);
  290. }
  291.  
  292.  
  293. /*
  294.  * Name:    show_right
  295.  * Date:    January 20, 1992
  296.  */
  297. void show_right( void )
  298. {
  299. char temp[10];
  300.  
  301.    s_output( "   ", mode[Right].line, mode[Right].col, color );
  302.    s_output( itoa(mode[Right].mode+1,temp,10), mode[Right].line, mode[Right].col,
  303.              color);
  304. }
  305.  
  306.  
  307. /*
  308.  * Name:    show_cursor_size
  309.  * Date:    January 20, 1992
  310.  */
  311. void show_cursor_size( void )
  312. {
  313. char *p[] = {
  314.    "Small Insert Cursor",
  315.    "Big Insert Cursor  ",
  316. };
  317.  
  318.    s_output( p[mode[Size].mode], mode[Size].line, mode[Size].col, color );
  319. }
  320.  
  321.  
  322. /*
  323.  * Name:    show_backup_mode
  324.  * Date:    January 20, 1992
  325.  */
  326. void show_backup_mode( void )
  327. {
  328. char *p[] = {
  329.    "No .bak files    ",
  330.    "Create .bak files"
  331. };
  332.  
  333.    s_output( p[mode[Backup].mode], mode[Backup].line, mode[Backup].col, color );
  334. }
  335.  
  336.  
  337. /*
  338.  * Name:    show_backup_mode
  339.  * Date:    January 20, 1992
  340.  */
  341. void show_ruler_mode( void )
  342. {
  343. char *p[] = {
  344.    "No ruler  ",
  345.    "Show ruler"
  346. };
  347.  
  348.    s_output( p[mode[Ruler].mode], mode[Ruler].line, mode[Ruler].col, color );
  349. }
  350.  
  351.  
  352. /*
  353.  * Name:    show_date_style
  354.  * Date:    June 5, 1992
  355.  */
  356. void show_date_style( void )
  357. {
  358. char *p[] = {
  359.    "MM_DD_YY  ",
  360.    "DD_MM_YY  ",
  361.    "YY_MM_DD  ",
  362.    "MM_DD_YYYY",
  363.    "DD_MM_YYYY",
  364.    "YYYY_MM_DD",
  365. };
  366.  
  367.    s_output( p[mode[Date].mode], mode[Date].line, mode[Date].col, color );
  368. }
  369.  
  370.  
  371. /*
  372.  * Name:    show_time_style
  373.  * Date:    June 5, 1992
  374.  */
  375. void show_time_style( void )
  376. {
  377. char *p[] = {
  378.    "12_HOUR",
  379.    "24_HOUR"
  380. };
  381.  
  382.    s_output( p[mode[Time].mode], mode[Time].line, mode[Time].col, color );
  383. }
  384.  
  385.  
  386. /*
  387.  * Name:    change_modes
  388.  * Date:    July 21, 1991
  389.  * Notes:   Real workhorse function of the utility.  Get a key and then
  390.  *          figure out what to do with it.
  391.  */
  392. void change_modes( void )
  393. {
  394. int c;
  395. int m;
  396. int new_field;
  397.  
  398.    m = 0;
  399.    xygoto( mode[m].col, mode[m].line );
  400.    color = 112;
  401.    (*mode[m].show_me)();
  402.    for (c=0; c != F3  &&  c != F10  &&  c != ESC;) {
  403.       c = getkey( );
  404.       new_field = FALSE;
  405.       color = 112;
  406.       switch (c) {
  407.          case RTURN :
  408.          case DOWN  :
  409.             color = 7;
  410.             (*mode[m].show_me)();
  411.             ++m;
  412.             if (m > 18)
  413.                m = 0;
  414.             new_field = TRUE;
  415.             break;
  416.          case UP    :
  417.             color = 7;
  418.             (*mode[m].show_me)();
  419.             --m;
  420.             if (m < 0)
  421.                m = 18;
  422.             new_field = TRUE;
  423.             break;
  424.          case LEFT  :
  425.             switch (m) {
  426.                case Ins     :
  427.                case Ind     :
  428.                case Write_Z :
  429.                case Smart   :
  430.                case Trim    :
  431.                case Eol     :
  432.                case Size    :
  433.                case Backup  :
  434.                case Ruler   :
  435.                case Time    :
  436.                   mode[m].mode = !mode[m].mode;
  437.                   break;
  438.                case PTAB    :
  439.                case LTAB    :
  440.                   if (mode[m].mode > 1)
  441.                      --mode[m].mode;
  442.                   else
  443.                      mode[m].mode = 1040 / 2;
  444.                   break;
  445.                case WW      :
  446.                   --mode[m].mode;
  447.                   if (mode[m].mode < 0)
  448.                      mode[m].mode = 2;
  449.                   break;
  450.                case Date    :
  451.                   --mode[m].mode;
  452.                   if (mode[m].mode < 0)
  453.                      mode[m].mode = 5;
  454.                   break;
  455.                case Crlf    :
  456.                   if (mode[m].mode == CRLF)
  457.                      mode[m].mode = LF;
  458.                   else
  459.                      mode[m].mode = CRLF;
  460.                   break;
  461.                case Left    :
  462.                case Para    :
  463.                   if (mode[m].mode > 0)
  464.                      --mode[m].mode;
  465.                   else
  466.                      mode[m].mode = mode[Right].mode - 1;
  467.                   break;
  468.                case Right   :
  469.                   if (mode[m].mode > mode[Left].mode + 1 &&
  470.                       mode[m].mode > mode[Para].mode + 1)
  471.                      --mode[m].mode;
  472.                   else
  473.                      mode[m].mode = 1040;
  474.                   break;
  475.                case Initcase   :
  476.                   if (mode[m].mode == 1)
  477.                      mode[m].mode = 2;
  478.                   else
  479.                      mode[m].mode = 1;
  480.                   break;
  481.             }
  482.             (*mode[m].show_me)();
  483.             break;
  484.          case RIGHT :
  485.             switch (m) {
  486.                case Ins     :
  487.                case Ind     :
  488.                case Write_Z :
  489.                case Smart   :
  490.                case Trim    :
  491.                case Eol     :
  492.                case Size    :
  493.                case Backup  :
  494.                case Ruler   :
  495.                case Time    :
  496.                   mode[m].mode = !mode[m].mode;
  497.                   break;
  498.                case PTAB     :
  499.                case LTAB     :
  500.                   if (mode[m].mode < 1040 / 2)
  501.                     ++mode[m].mode;
  502.                   else
  503.                      mode[m].mode = 1;
  504.                   break;
  505.                case WW      :
  506.                   ++mode[m].mode;
  507.                   if (mode[m].mode > 2)
  508.                      mode[m].mode = 0;
  509.                   break;
  510.                case Date    :
  511.                   ++mode[m].mode;
  512.                   if (mode[m].mode > 5)
  513.                      mode[m].mode = 0;
  514.                   break;
  515.                case Crlf    :
  516.                   if (mode[m].mode == CRLF)
  517.                      mode[m].mode = LF;
  518.                   else
  519.                      mode[m].mode = CRLF;
  520.                   break;
  521.                case Left    :
  522.                case Para    :
  523.                   if (mode[m].mode < mode[Right].mode)
  524.                      ++mode[m].mode;
  525.                   else
  526.                      mode[m].mode = 0;
  527.                   break;
  528.                case Right   :
  529.                   if (mode[m].mode < 1038)
  530.                      ++mode[m].mode;
  531.                   else {
  532.                      if (mode[Left].mode < mode[Para].mode)
  533.                         mode[m].mode = mode[Para].mode + 1;
  534.                      else
  535.                         mode[m].mode = mode[Left].mode + 1;
  536.                   }
  537.                   break;
  538.                case Initcase   :
  539.                   if (mode[m].mode == 1)
  540.                      mode[m].mode = 2;
  541.                   else
  542.                      mode[m].mode = 1;
  543.                   break;
  544.             }
  545.             (*mode[m].show_me)();
  546.             break;
  547.       }
  548.       if (new_field) {
  549.          color = 112;
  550.          (*mode[m].show_me)();
  551.          xygoto( mode[m].col, mode[m].line );
  552.       }
  553.    }
  554.  
  555.    /*
  556.     * write changes to "tde.exe" if user presses F10.
  557.     */
  558.    if (c == F10) {
  559.       in_modes.insert        = mode[Ins].mode;
  560.       in_modes.indent        = mode[Ind].mode;
  561.       in_modes.ptab_size     = mode[PTAB].mode;
  562.       in_modes.ltab_size     = mode[LTAB].mode;
  563.       in_modes.smart_tab     = mode[Smart].mode;
  564.       in_modes.control_z     = mode[Write_Z].mode;
  565.       in_modes.crlf          = mode[Crlf].mode;
  566.       in_modes.trailing      = mode[Trim].mode;
  567.       in_modes.show_eol      = mode[Eol].mode;
  568.       in_modes.word_wrap     = mode[WW].mode;
  569.       in_modes.left_margin   = mode[Left].mode;
  570.       in_modes.parg_margin   = mode[Para].mode;
  571.       in_modes.right_margin  = mode[Right].mode;
  572.       in_modes.cursor_size   = mode[Size].mode;
  573.       in_modes.do_backups    = mode[Backup].mode;
  574.       in_modes.ruler         = mode[Ruler].mode;
  575.       in_modes.date_style    = mode[Date].mode;
  576.       in_modes.time_style    = mode[Time].mode;
  577.       in_modes.search_case   = mode[Initcase].mode;
  578.       fseek( tde_exe, MODE_OFFSET, SEEK_SET );
  579.       fwrite( (void *)&in_modes, sizeof( MODE_INFO ), 1, tde_exe );
  580.    }
  581.    cls( );
  582. }
  583.