Textcolor and Textbackground

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Guest

Textcolor and Textbackground

Post 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
nullify

Re:Textcolor and Textbackground

Post 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.
User avatar
Pype.Clicker
Member
Member
Posts: 5964
Joined: Wed Oct 18, 2006 2:31 am
Location: In a galaxy, far, far away
Contact:

Re:Textcolor and Textbackground

Post 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 ?
Guest

Re:Textcolor and Textbackground

Post 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?
jrfritz

Re:Textcolor and Textbackground

Post by jrfritz »

Are you trying to convert hex to decimal?

If so...there's a better way...
User avatar
df
Member
Member
Posts: 1076
Joined: Fri Oct 22, 2004 11:00 pm
Contact:

Re:Textcolor and Textbackground

Post by df »

all the table is doing is saying X = X., so really, its not doing anything at all!
-- Stu --
jrfritz

Re:Textcolor and Textbackground

Post by jrfritz »

I wonder what this person is really trying to do....(This is Tom Fritz...just to let everyone know ;) )
Tim

Re:Textcolor and Textbackground

Post 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'?
Guest

Re:Textcolor and Textbackground

Post 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.
jrfritz

Re:Textcolor and Textbackground

Post 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!
Guest

Re:Textcolor and Textbackground

Post 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];
}
jrfritz

Re:Textcolor and Textbackground

Post by jrfritz »

Still it's not good....
Guest

Re:Textcolor and Textbackground

Post 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
jrfritz

Re:Textcolor and Textbackground

Post 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.
Guest

Re:Textcolor and Textbackground

Post 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.
Post Reply