Page 1 of 2

Textcolor and Textbackground

Posted: Sun Jan 12, 2003 4:53 pm
by Guest
i want to emulate the functions of textcolor and textbackground functions found in the borland conio files.
so far i have created a series of functions dat work, but cant seem to get it to work right when i add blink to the functions. i am testing under bochs.

the code is as follows:

denary to hex

int den2hex (int denary)
{
   int lookuptable [] =   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,
   0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,
   0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,
   0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,
   0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
   0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x61,0x63,0x64,0x65,0x66,
   0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,
   0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,
   0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,
   0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,
   0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,
   0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,
   0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,
   0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,
   0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
   int hex = 0;

   if ((denary >= 0) && (denary <= 255)) {
      hex = lookuptable [denary];
   } else {
      hex = lookuptable [8];
   }

   printf ("hex: %d\n", hex);

   return hex;
}

Text background

void textbackground (int color)
{
   int tmpcolor = 0;

   switch (color) {
      case BLACK:      bgcolor = BASE * color;
         break;
      case BLUE:      bgcolor = BASE * color;
         break;
      case GREEN:      bgcolor = BASE * color;
         break;
      case CYAN:      bgcolor = BASE * color;
         break;
      case RED:      bgcolor = BASE * color;
         break;
      case MAGENTA:   bgcolor = BASE * color;
         break;
      case BROWN:      bgcolor = BASE * color;
         break;
      case LIGHTGRAY: bgcolor = BASE * color;
         break;
      default: bgcolor = 0;
   }

   tmpcolor = txtcolor + bgcolor;
   printf ("tmpcolor: %d\n", tmpcolor);
   textattrib = den2hex (tmpcolor);
   printf ("color: %d\n", color);
   printf ("textattrib: %d\n", textattrib);
}

Text color

void textcolor (int color)
{
   int tmpcolor = 0;

   txtcolor = color;

   tmpcolor = txtcolor + bgcolor;
   printf ("tmpcolor: %d\n", tmpcolor);
   textattrib = den2hex (tmpcolor);
   printf ("color: %d\n", color);
   printf ("textattrib: %d\n", textattrib);
}

this seems to work for all colors which dont involve blink and when i add blink it dont seem to work correctly, beacuse it doesnt blink and the colors dont come out right.

if ne body cud help?
thnx

Re:Textcolor and Textbackground

Posted: Sun Jan 12, 2003 5:22 pm
by nullify
To add blink, perform a bitwise OR operation on the text attribute with 80h...

Code: Select all

textattrib = den2hex (tmpcolor) | 0x80;
Also, I'm not too sure if Bochs supports blinking text. I don't have access to a machine to verify that right now, though.

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 2:23 am
by Pype.Clicker
what is that huge look up table for ? it roughly looks like
lookup[x]==x
, which seems pretty useless to my senses.

... or did i just missed something as usual ?

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 12:36 pm
by Guest
the lookup table is used to find the hex value of a denary number.
that is the only way i no how to do it and dont no ne oder method.
if u no a easier and shorter method then care 2 share?

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 12:43 pm
by jrfritz
Are you trying to convert hex to decimal?

If so...there's a better way...

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 1:16 pm
by df
all the table is doing is saying X = X., so really, its not doing anything at all!

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 1:17 pm
by jrfritz
I wonder what this person is really trying to do....(This is Tom Fritz...just to let everyone know ;) )

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 1:26 pm
by Tim
Wow... what an utterly pointless function. All that, and you could sum it up with:

Code: Select all

int den2hex(int den)
{
    return den;
}
Anyway, WTF is 'denary'? Surely 'decimal'?

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 1:43 pm
by Guest
its an array which contains all the hex values from 0 to 255, and it recuves a decimal value as an arguement. it uses dis to look at the array den in the corresponding array element will be de hex value for the decimal number. this hex value is den returned.

E.g

den2hex (5)

would return the hex value

0x05, which is 5 in hex.

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 1:55 pm
by jrfritz
Thats not a good way....I have some code to do the correct way....what happends when you put in 500 with your code? The OS crashes!

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 2:03 pm
by Guest
well not exacatly, becuase b4 readin the array there is an if statement that cheks whether the decimal number is between the given ranage and if its not it will give the default value:

E.g
the follwoing statement takes care of thet:

if ((denary >= 0) && (denary <= 255)) {
hex = lookuptable [denary];
} else {
hex = lookuptable [8];
}

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 2:05 pm
by jrfritz
Still it's not good....

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 2:07 pm
by Guest
this is the only way i no how to convert decimal to hex, dont no ne other way.
if u no of a way plz tell me?
thnx

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 2:13 pm
by jrfritz
I can't post my code here since it's too big, but in FritzOS's fstdio.h file there is a doprintf,printf_help and the real printf function....you can print hex with those like this:

printf("0x%x",0x13"); and it'll print 0x13 or 0xFF or 0xFFFF or whatever you want.

Re:Textcolor and Textbackground

Posted: Mon Jan 13, 2003 2:16 pm
by Guest
but i dont want 2 print the values i want to store the hex value in a variable and use it later.
the printf will just print it, which i dont want to happen.