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

  1. /*
  2.  * Customize the colors in tde.
  3.  *
  4.  * Author:        Frank Davis
  5.  * Date:          July 21, 1991
  6.  * Compiler:      MSC 6.0a and QuickC 2.51
  7.  *
  8.  * This program is released into the public domain.  You may distribute
  9.  * it freely, Frank Davis
  10.  */
  11.  
  12.  
  13. /********    EXTREMELY IMPORTANT   ************/
  14. /*
  15.  * If you modify tde, it is your responsibility to find the offset of
  16.  * "static int colors" in function "hw_initialize" in file "main.c" in your
  17.  * new executable, tde.exe.
  18.  *
  19.  * If you don't change the default colors, search for the following string (a
  20.  * hexadecimal integer array) in your new executable file:
  21.  *
  22.  *  7000 0700
  23.  *
  24.  * Then, replace COLOR_OFFSET with your new one and recompile tdecfg
  25.  * with the new offset.
  26.  */
  27. /*******     EXTREMELY IMPORTANT   ************/
  28.  
  29.  
  30. #include <bios.h>
  31. #include <dos.h>
  32. #include <stdlib.h>
  33. #include <stdio.h>
  34. #include <string.h>
  35.  
  36. #include "tdecfg.h"
  37. #include "cfgcolor.h"
  38.  
  39.  
  40. /*
  41.  * Default color settings.  Incidentally, I'm color blind (mild red-green) and
  42.  * the default colors look fine to me.
  43.  */
  44. COLORS colour = {
  45.    "$colors",
  46.    { { HERC_REVERSE, HERC_NORMAL, HERC_UNDER, HERC_REVERSE, HERC_REVERSE,
  47.      HERC_HIGH, HERC_NORMAL, HERC_NORMAL, HERC_HIGH, HERC_HIGH, HERC_HIGH,
  48.      HERC_REVERSE, HERC_REVERSE, HERC_NORMAL },
  49.    { COLOR_HEAD, COLOR_TEXT, COLOR_DIRTY, COLOR_MODE, COLOR_BLOCK,
  50.      COLOR_MESSAGE, COLOR_HELP, COLOR_WRAP, COLOR_EOF, COLOR_CURL, COLOR_RULER,
  51.      COLOR_POINTER, COLOR_TEXT, COLOR_OVRS } }
  52. };
  53.  
  54.  
  55. extern struct vcfg cfg;         /* video stuff */
  56. extern FILE *tde_exe;           /* FILE pointer to tde.exe */
  57.  
  58. COLORS temp_colours;            /* play around with colors in this array */
  59. static int index;               /* 0 = Monochrome colors, 1 = color colors */
  60.  
  61.  
  62. /*
  63.  * Name:    tdecolor
  64.  * Date:    July 21, 1991
  65.  * Notes:   Strategy is fairly straight forward -  1) initialize all the
  66.  *          variables  2) show the user a color sample  3) make the changes
  67.  *          permanent if desired.
  68.  */
  69. void tdecolor( void )
  70. {
  71.    initialize_color( );
  72.    show_init_sample( );
  73.    change_colors( );
  74.    restore_overscan( cfg.overscan );
  75. }
  76.  
  77.  
  78. /*
  79.  * Name:    initialize
  80.  * Date:    July 21, 1991
  81.  * Notes:   Set up all of the global variables.
  82.  */
  83. void initialize_color( void )
  84. {
  85.  
  86.    fseek( tde_exe, COLOR_OFFSET, SEEK_SET );
  87.    fread( (void *)&temp_colours, sizeof( COLORS ), 1, tde_exe );
  88.  
  89.    if (cfg.color == FALSE)
  90.       index = 0;
  91.    else
  92.       index = 1;
  93.  
  94.    fields[0].color = temp_colours.clr[index][HELP];
  95.    fields[1].color = temp_colours.clr[index][HEAD];
  96.    fields[2].color = temp_colours.clr[index][TEXT];
  97.    fields[3].color = temp_colours.clr[index][CURL];
  98.    fields[4].color = temp_colours.clr[index][DIRTY];
  99.    fields[5].color = temp_colours.clr[index][WARNING];
  100.    fields[6].color = temp_colours.clr[index][MODE];
  101.    fields[7].color = temp_colours.clr[index][WRAP];
  102.    fields[8].color = temp_colours.clr[index][CEOF];
  103.    fields[9].color = temp_colours.clr[index][OVERSCAN];
  104.    fields[10].color = temp_colours.clr[index][RULER];
  105.    fields[11].color = temp_colours.clr[index][RULER_PTR];
  106.    fields[12].color = temp_colours.clr[index][BLOCK];
  107.    fields[13].color = temp_colours.clr[index][HILITED_FILE];
  108.  
  109.    fields[0].show_me = show_help_color;
  110.    fields[1].show_me = show_fileheader_color;
  111.    fields[2].show_me = show_text_color;
  112.    fields[3].show_me = show_curl_color;
  113.    fields[4].show_me = show_dirty_color;
  114.    fields[5].show_me = show_warning_color;
  115.    fields[6].show_me = show_mode_color;
  116.    fields[7].show_me = show_wrapped_color;
  117.    fields[8].show_me = show_eof_color;
  118.    fields[9].show_me = show_overscan_color;
  119.    fields[10].show_me = show_ruler_color;
  120.    fields[11].show_me = show_rulerptr_color;
  121.    fields[12].show_me = show_block_color;
  122.    fields[13].show_me = show_hilitedfile_color;
  123. }
  124.  
  125.  
  126. /*
  127.  * Name:    restore_overscan
  128.  * Date:    April 1, 1993
  129.  */
  130. void restore_overscan( int overscan )
  131. {
  132.    ASSEMBLE {
  133.         mov     ah, 0x0b                /* function 0x0b */
  134.         mov     bl, BYTE PTR overscan   /* get new overscan color */
  135.         xor     bh, bh
  136.         push    bp
  137.         int     VIDEO_INT               /* video interrupt = 10h */
  138.         pop     bp
  139.    }
  140. }
  141.  
  142.  
  143. /*
  144.  * Name:    show_init_sample
  145.  * Date:    July 21, 1991
  146.  * Notes:   Draw all of the sample screens.
  147.  */
  148. void show_init_sample( void )
  149. {
  150. char *sample;
  151. int  line;
  152. int  i;
  153. int  j;
  154. int  k;
  155. int  l;
  156. char temp[6];
  157. char far *p;
  158.  
  159.    xygoto( -1, -1 );
  160.    sample = sample_screen[0];
  161.    for (line=0; sample != NULL; ) {
  162.       s_output( (char far *)sample, line, 0, 7 );
  163.       sample = sample_screen[++line];
  164.    }
  165.    for (i=0; i<NUM_COLORS; i++)
  166.       (*fields[i].show_me)();
  167.    sample = field_screen[0];
  168.    for (line=12, i=1; sample != NULL; line++,i++) {
  169.       s_output( (char far *)sample, line, 0, 7 );
  170.       sample = field_screen[i];
  171.    }
  172.    p = (char far *)temp;
  173.    for (i=0,k=0,line=17; i<8; i++, line++) {
  174.       for (j=0,l=0; j<16; j++, k++,l+=5) {
  175.          color_number( temp, k );
  176.          s_output( p, line, l, k );
  177.       }
  178.    }
  179.    for (i=0; i<NUM_COLORS; i++) {
  180.       color_number( temp, fields[i].color );
  181.       s_output( p, fields[i].line, fields[i].col, fields[i].color );
  182.    }
  183. }
  184.  
  185.  
  186. /*
  187.  * Name:    color_number
  188.  * Date:    July 21, 1991
  189.  * Passed:  dest:  buffer to store the color sample
  190.  *          num:   attribute number
  191.  * Notes:   Show the use what the foreground and background colors look like.
  192.  */
  193. void color_number( char *dest, int num )
  194. {
  195. int i, j, k;
  196. char temp[6];
  197.  
  198.    strcpy( dest, "[   ]" );
  199.    itoa( num, temp, 10 );
  200.    i = strlen( temp );
  201.    j = 4 - i;
  202.    for (k=0; i > 0; i--,j++, k++)
  203.       dest[j] = temp[k];
  204. }
  205.  
  206.  
  207. /*
  208.  * Name:    current_color_number
  209.  * Date:    July 21, 1991
  210.  * Passed:  dest:  buffer to store the color sample
  211.  *          num:   attribute number
  212.  * Notes:   Put '*' around the sample color to give the user an idea of where
  213.  *          the current field is.
  214.  */
  215. void current_color_number( char *dest, int num )
  216. {
  217. int i, j, k;
  218. char temp[6];
  219.  
  220.    strcpy( dest, "*   *" );
  221.    itoa( num, temp, 10 );
  222.    i = strlen( temp );
  223.    j = 4 - i;
  224.    for (k=0; i > 0; i--,j++, k++)
  225.       dest[j] = temp[k];
  226. }
  227.  
  228.  
  229. /*
  230.  * Name:    show_help_color
  231.  * Date:    July 21, 1991
  232.  */
  233. void show_help_color( void )
  234. {
  235. int color;
  236. int line;
  237.  
  238.    color = fields[0].color;
  239.    for (line=1; line <10; line++)
  240.       hlight_line( 1, line, 37, color );
  241.    hlight_line( 1,  10, 13, color );
  242.    hlight_line( 25, 10, 13, color );
  243. }
  244.  
  245.  
  246. /*
  247.  * Name:    show_fileheader_color
  248.  * Date:    July 21, 1991
  249.  */
  250. void show_fileheader_color( void )
  251. {
  252.    hlight_line( 41, 1, 38, fields[1].color );
  253. }
  254.  
  255.  
  256. /*
  257.  * Name:    show_text_color
  258.  * Date:    July 21, 1991
  259.  */
  260. void show_text_color( void )
  261. {
  262. int color;
  263.  
  264.    color = fields[2].color;
  265.    hlight_line( 41, 3, 38, color );
  266. /*   hlight_line( 41, 5, 38, color );  */
  267. }
  268.  
  269.  
  270. /*
  271.  * Name:    show_curl_color
  272.  * Date:    July 21, 1991
  273.  */
  274. void show_curl_color( void )
  275. {
  276.    hlight_line( 41, 4, 38, fields[3].color );
  277. }
  278.  
  279.  
  280. /*
  281.  * Name:    show_dirty_color
  282.  * Date:    July 21, 1991
  283.  */
  284. void show_dirty_color( void )
  285. {
  286.    hlight_line( 41, 5, 38, fields[4].color );
  287. }
  288.  
  289.  
  290. /*
  291.  * Name:    show_warning_color
  292.  * Date:    July 21, 1991
  293.  */
  294. void show_warning_color( void )
  295. {
  296.    hlight_line( 41, 9, 38, fields[5].color );
  297. }
  298.  
  299.  
  300. /*
  301.  * Name:    show_mode_color
  302.  * Date:    July 21, 1991
  303.  */
  304. void show_mode_color( void )
  305. {
  306.    hlight_line( 41, 10, 26, fields[6].color );
  307. }
  308.  
  309.  
  310. /*
  311.  * Name:    show_wrapped_color
  312.  * Date:    July 21, 1991
  313.  */
  314. void show_wrapped_color( void )
  315. {
  316.    hlight_line( 67, 10, 12, fields[7].color );
  317. }
  318.  
  319.  
  320. /*
  321.  * Name:    show_eof_color
  322.  * Date:    July 21, 1991
  323.  */
  324. void show_eof_color( void )
  325. {
  326.    hlight_line( 41, 8, 38, fields[8].color );
  327. }
  328.  
  329.  
  330. /*
  331.  * Name:    show_overcan_color
  332.  restore_overscan
  333.  * Date:    April 1, 1993
  334.  */
  335. void show_overscan_color( void )
  336. {
  337. int overscan;
  338.  
  339.    overscan = fields[9].color;
  340.    restore_overscan( overscan );
  341. }
  342.  
  343.  
  344. /*
  345.  * Name:    show_ruler_color
  346.  * Date:    July 21, 1991
  347.  */
  348. void show_ruler_color( void )
  349. {
  350.    hlight_line( 41, 2, 21, fields[10].color );
  351.    hlight_line( 63, 2, 16, fields[10].color );
  352. }
  353.  
  354.  
  355. /*
  356.  * Name:    show_rulerptr_color
  357.  * Date:    July 21, 1991
  358.  */
  359. void show_rulerptr_color( void )
  360. {
  361.    hlight_line( 62, 2, 1, fields[11].color );
  362. }
  363.  
  364.  
  365. /*
  366.  * Name:    show_block_color
  367.  * Date:    July 21, 1991
  368.  */
  369. void show_block_color( void )
  370. {
  371. int color;
  372. int line;
  373.  
  374.    color = fields[12].color;
  375.    for (line=6; line <8; line++)
  376.       hlight_line( 41, line, 38, color );
  377. }
  378.  
  379.  
  380. /*
  381.  * Name:    show_hilitedfile_color
  382.  * Date:    July 21, 1991
  383.  */
  384. void show_hilitedfile_color( void )
  385. {
  386.    hlight_line( 14, 10, 11, fields[13].color );
  387. }
  388.  
  389.  
  390. /*
  391.  * Name:    change_colors
  392.  * Date:    July 21, 1991
  393.  * Notes:   Real workhorse function of the utility.  Get a key and then
  394.  *          figure out what to do with it.
  395.  */
  396. void change_colors( void )
  397. {
  398. int  c;
  399. int  area;
  400. int  new_color;
  401. int  i;
  402. char temp[6];
  403. char far *p;
  404.  
  405.    p = (char far *)temp;
  406.    area = 0;
  407.    current_color_number( temp, fields[area].color );
  408.    s_output( p, fields[area].line, fields[area].col, fields[area].color );
  409.    xygoto( fields[area].col+3, fields[area].line );
  410.    for (c=0; c != F3  &&  c != F10  &&  c != ESC;) {
  411.       new_color = FALSE;
  412.       c = getkey( );
  413.       switch (c) {
  414.          case RTURN :
  415.          case DOWN  :
  416.             color_number( temp, fields[area].color );
  417.             s_output( p, fields[area].line, fields[area].col, fields[area].color );
  418.             ++area;
  419.             if (area > 13)
  420.                area = 0;
  421.             current_color_number( temp, fields[area].color );
  422.             s_output( p, fields[area].line, fields[area].col, fields[area].color );
  423.             xygoto( fields[area].col+3, fields[area].line );
  424.             break;
  425.          case UP    :
  426.             color_number( temp, fields[area].color );
  427.             s_output( p, fields[area].line, fields[area].col, fields[area].color );
  428.             --area;
  429.             if (area < 0)
  430.                area = 13;
  431.             current_color_number( temp, fields[area].color );
  432.             s_output( p, fields[area].line, fields[area].col, fields[area].color );
  433.             xygoto( fields[area].col+3, fields[area].line );
  434.             break;
  435.          case LEFT :
  436.             --fields[area].color;
  437.             if (area == 9) {
  438.                if (fields[area].color < 0)
  439.                   fields[area].color = 15;
  440.             } else {
  441.                if (fields[area].color < 0)
  442.                   fields[area].color = 127;
  443.             }
  444.             new_color = TRUE;
  445.             break;
  446.          case RIGHT :
  447.             ++fields[area].color;
  448.             if (area == 9) {
  449.                if (fields[area].color > 15)
  450.                   fields[area].color = 0;
  451.             } else {
  452.                if (fields[area].color > 127)
  453.                   fields[area].color = 0;
  454.             }
  455.             new_color = TRUE;
  456.             break;
  457.          case PGUP :
  458.             if (area == 9)
  459.                break;
  460.             fields[area].color -= 16;
  461.             if (fields[area].color < 0)
  462.                fields[area].color = (fields[area].color & 0x000f) + 0x70;
  463.             new_color = TRUE;
  464.             break;
  465.          case PGDN :
  466.             if (area == 9)
  467.                break;
  468.             fields[area].color += 16;
  469.             if (fields[area].color > 127)
  470.                fields[area].color = fields[area].color & 0x000f;
  471.             new_color = TRUE;
  472.             break;
  473.          case F2 :
  474.  
  475.             /*
  476.              * get back the original colors and display
  477.              */
  478.             fields[0].color = colour.clr[index][HELP];
  479.             fields[1].color = colour.clr[index][HEAD];
  480.             fields[2].color = colour.clr[index][TEXT];
  481.             fields[3].color = colour.clr[index][CURL];
  482.             fields[4].color = colour.clr[index][DIRTY];
  483.             fields[5].color = colour.clr[index][WARNING];
  484.             fields[6].color = colour.clr[index][MODE];
  485.             fields[7].color = colour.clr[index][WRAP];
  486.             fields[8].color = colour.clr[index][CEOF];
  487.             fields[9].color = colour.clr[index][OVERSCAN];
  488.             fields[10].color = colour.clr[index][RULER];
  489.             fields[11].color = colour.clr[index][RULER_PTR];
  490.             fields[12].color = colour.clr[index][BLOCK];
  491.             fields[13].color = colour.clr[index][HILITED_FILE];
  492.             for (i=0; i<NUM_COLORS; i++) {
  493.                color_number( temp, fields[i].color );
  494.                s_output( p, fields[i].line, fields[i].col, fields[i].color );
  495.                (*fields[i].show_me)();
  496.             }
  497.             current_color_number( temp, fields[area].color );
  498.             s_output( p, fields[area].line, fields[area].col, fields[area].color );
  499.             break;
  500.       }
  501.       if (new_color) {
  502.          current_color_number( temp, fields[area].color );
  503.          s_output( p, fields[area].line, fields[area].col, fields[area].color );
  504.          (*fields[area].show_me)();
  505.       }
  506.    }
  507.  
  508.    /*
  509.     * write changes to "tde.exe" if user presses F10.
  510.     */
  511.    if (c == F10) {
  512.       temp_colours.clr[index][HELP]         = fields[0].color;
  513.       temp_colours.clr[index][HEAD]         = fields[1].color;
  514.       temp_colours.clr[index][TEXT]         = fields[2].color;
  515.       temp_colours.clr[index][CURL]         = fields[3].color;
  516.       temp_colours.clr[index][DIRTY]        = fields[4].color;
  517.       temp_colours.clr[index][WARNING]      = fields[5].color;
  518.       temp_colours.clr[index][MODE]         = fields[6].color;
  519.       temp_colours.clr[index][WRAP]         = fields[7].color;
  520.       temp_colours.clr[index][CEOF]         = fields[8].color;
  521.       temp_colours.clr[index][OVERSCAN]     = fields[9].color;
  522.       temp_colours.clr[index][RULER]        = fields[10].color;
  523.       temp_colours.clr[index][RULER_PTR]    = fields[11].color;
  524.       temp_colours.clr[index][BLOCK]        = fields[12].color;
  525.       temp_colours.clr[index][HILITED_FILE] = fields[13].color;
  526.       fseek( tde_exe, COLOR_OFFSET, SEEK_SET );
  527.       fwrite( (void *)&temp_colours, sizeof( COLORS ), 1, tde_exe );
  528.    }
  529.    cls( );
  530. }
  531.