if you want to add an Icon, that's a different story.
However, the CPROGRAMMING team added an entry to the FAQ about adding bitmaps to programs (console)
now, you could go program in windows for good pictures but here is a brief explanation of how it works...
Just a few notes: I'm not going to go into great detail here.
If you want to do this in Win32 it is easy. Check out the tutorial at http://users.ox.ac.uk/~ball0597/Refe...wsProgramming/
If you want to do this in Console mode: You can't. Console mode won't do graphics. The End.
If you want to do this in DOS mode. This is more complicated. Check out www.wotsit.com for information regarding picture files of all kind. The actual code to do this is semi-long. I'll put it in anyhow. But just so you're warned, this example is quite limited. Its cut down to make it easier to understand. This will load "test.bmp" (This can be changed, obviously) from the running directory. It will first initialize mode 13 (320x200 screen with 256 col) and then load the BMP. It will only load an 8-bit bmp of a size less than the screen. The code can be adapted to read other types of BMPs quite easily. Here goes!
Code:
#include <dos.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
char far *Screen;
//Sets the display to VGA 320x200x256
void VGAScreen (){
union REGS r;
r.h.ah = 0;
r.h.al = 0x13;
int86(0x10, &r, &r);
return;
}
//Goes back to textmode
void TextScreen (){
union REGS r;
r.h.ah = 0;
r.h.al = 0x3;
int86(0x10, &r, &r);
return;
}
//This sets a DAC register to a specific Red Green Blue-value
int SetDAC (unsigned char DAC, unsigned char R, unsigned char G, unsigned char B)
{
outportb (0x3C8, DAC);
outportb (0x3C9, R);
outportb (0x3C9, G);
outportb (0x3C9, B);
return 0;
}
int LoadBMP (){
struct BMPHeader {
unsigned short bfType;
long bfSize,
bfReserved,
bfOffBits,
biSize,
biWidth,
biHeight;
unsigned short biPlanes,
biBitCount;
long biCompression,
biSizeImage,
biXPelsPerMeter,
biYPelsPerMeter,
biClrUsed,
biClrImportant;
} Header;
FILE *BMPFile;
unsigned char c, Palette[256][4];
char *filename = "test.bmp";
unsigned int offset, lines, paddedWidth;
//This checks for the file
BMPFile = fopen (filename, "rb");
if (BMPFile == NULL) {
printf ("Cant open file.");
return 1;
}
//Read the headerinformation
fread (&Header, 54, 1, BMPFile);
if (Header.bfType != 19778 || Header.bfReserved != 0 || Header.biPlanes !=1) {
//Not a valid bitmap file - don't display
printf ("Not a valid bitmap.");
fclose (BMPFile);
return 1;
}
if (Header.biCompression != 0) {
//Compressed file - don't display
printf ("Compressed file.");
fclose (BMPFile);
return 1;
}
if (Header.biBitCount != 8) {
//If the file is other than 8-bit dont read.
printf ("Not an 8-bit bitmap.");
fclose (BMPFile);
return 1;
}
if (Header.biWidth > 320 || Header.biHeight > 200) {
//If its larger than 320*200 dont load.
printf ("Size too large.");
fclose (BMPFile);
return 1;
}
//Load the palette info
fread (&Palette, 1024, 1, BMPFile);
for (c = 0; c < 255; c++)
SetDAC (c, Palette[c][2] >> 2, Palette[c][1] >> 2, Palette[c][0] >> 2);
offset = (100 + (Header.biHeight >> 1)) * 320 + 160 - (Header.biWidth >> 1);
lines = 0;
paddedWidth = Header.biWidth & 0xFFFC;
if (Header.biWidth != paddedWidth) paddedWidth += 4;
//Loop for reading lines
while (lines < Header.biHeight) {
fread (Screen + offset, paddedWidth, 1, BMPFile);
offset -= 320;
lines++;
}
fclose (BMPFile);
return 0;
}
int main (int argcount, char *argvalue[]){
//Set up a pointer in vga memory
Screen = (char far *)0xA0000000L;
VGAScreen ();
LoadBMP();
getch ();
TextScreen ();
return 0;
}
-Luke