Category : OS/2 Files
Archive   : PMPAL.ZIP
Filename : PALETTE.C

 
Output of file : PALETTE.C contained in archive : PMPAL.ZIP
#if DLL

#define DUMMY 0
#define INCL_GPI
#define INCL_WIN
#include "os2.h"
#include
#include
int pascal far remapallpalette(int n, ULONG far *c);
int pascal far setpal_vga(USHORT n, ULONG rgb);

#else

#include
#include

extern char far palette_regs[];
typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef double real;
int pascal far remapallpalette(int n, ULONG far *c);

ULONG c[256];

main()
{
int i;

printf("data=%08lXh\n",(ULONG) palette_regs);
for (i=0; i<0x100; i++)
{
real r,r_AA=(real)0xAA;
r = sqrt((real)i*2)*32/3.; /* make a table for conversion */
/* 0x20 -> 0x55 0x80-> 0xAA */

if (r > (real)0xAA)
{
r = (r-r_AA)*(((real)0xFF-r_AA)/((real)0xF0-r_AA))+r_AA;
if (r > (real)0xFF) r = (real)0xFF;
}

if (!(i & 0x07))
{
fputs("\n ",stdout);
}
printf("0x%02X, ",(UCHAR)r);

c[i] = (ULONG)i << ((i%3)*8);
if (i < 0x10)
c[i] *= 0x10;
}
remapallpalette(0x10,c);
for (i=0; i<0x10; i++)
printf("pal%Xh=%02Xh\n",i, palette_regs[i]);
}
#endif

#if DLL

static USHORT c_ncolors;
static COLOR far ctbl[256];
static UCHAR far pmintensitytable[256] =
{
0x00, 0x0F, 0x15, 0x1A, 0x1E, 0x21, 0x24, 0x27,
0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x36, 0x38, 0x3A,
0x3C, 0x3E, 0x40, 0x41, 0x43, 0x45, 0x46, 0x48,
0x49, 0x4B, 0x4C, 0x4E, 0x4F, 0x51, 0x52, 0x53,
0x55, 0x56, 0x57, 0x59, 0x5A, 0x5B, 0x5C, 0x5E,
0x5F, 0x60, 0x61, 0x62, 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, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,
0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8B, 0x8C,
0x8D, 0x8E, 0x8F, 0x8F, 0x90, 0x91, 0x92, 0x93,
0x93, 0x94, 0x95, 0x96, 0x96, 0x97, 0x98, 0x99,
0x99, 0x9A, 0x9B, 0x9C, 0x9C, 0x9D, 0x9E, 0x9E,
0x9F, 0xA0, 0xA1, 0xA1, 0xA2, 0xA3, 0xA3, 0xA4,
0xA5, 0xA5, 0xA6, 0xA7, 0xA7, 0xA8, 0xA9, 0xA9,
0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAE, 0xAF, 0xB0,
0xB1, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB5, 0xB6,
0xB7, 0xB8, 0xB8, 0xB9, 0xBA, 0xBB, 0xBB, 0xBC,
0xBD, 0xBE, 0xBE, 0xBF, 0xC0, 0xC1, 0xC1, 0xC2,
0xC3, 0xC3, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7, 0xC8,
0xC8, 0xC9, 0xCA, 0xCB, 0xCB, 0xCC, 0xCD, 0xCD,
0xCE, 0xCF, 0xCF, 0xD0, 0xD1, 0xD2, 0xD2, 0xD3,
0xD4, 0xD4, 0xD5, 0xD6, 0xD6, 0xD7, 0xD8, 0xD8,
0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD, 0xDD,
0xDE, 0xDF, 0xDF, 0xE0, 0xE1, 0xE1, 0xE2, 0xE3,
0xE3, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE8,
0xE8, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEC, 0xED,
0xED, 0xEE, 0xEE, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1,
0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF6, 0xF6,
0xF7, 0xF7, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB,
0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF, 0xFF
} ;

int far pascal gpiconvertcolors(COLOR far *ctbl, USHORT fl)
{
int i;
char far *p;
register USHORT j;
/* fl == 0: convert from PM table to real table */
p = (char far *) ctbl;
if (!fl)
{
for (i=0; i {
p[i] = pmintensitytable[(UCHAR)p[i]];
}
}
else
{
for (i=0; i {
j = (UCHAR)p[i];
j = ((j*3+16)/32);
j = j*j/2;
if (j > 0xFF) j = 0xFF;
p[i] = (UCHAR)j;
}
}
return 1;
}

int far pascal gpicolorinit(ULONG far * xscreen, ULONG far *yscreen, USHORT far * ncolors,
COLOR far * deftbl, ULONG flags)
{
HPS hps;
HDC hdc;
LONG l,x,y;
char far *p;
int i;

hps = WinGetPS(HWND_DESKTOP);

hdc = GpiQueryDevice(hps);
DevQueryCaps(hdc,CAPS_COLORS, 1L, &x);
c_ncolors = (USHORT) x;
if (x == 0x1000000L)
c_ncolors = 24;
DevQueryCaps(hdc,CAPS_WIDTH, 1L, &x);
DevQueryCaps(hdc,CAPS_HEIGHT, 1L, &y);
if (c_ncolors != 24)
{
if (ctbl)
{
GpiQueryRealColors(hps,LCOLOPT_REALIZED,0L,(ULONG)c_ncolors,(COLOR*)ctbl);

for (i=0; deftbl && i deftbl[i] = ctbl[i];

if (flags & 1L)
gpiconvertcolors(ctbl,0);
}
}
*ncolors = c_ncolors;
*xscreen = x;
*yscreen = y;
WinReleasePS(hps);
return TRUE;
}

int pascal far gpisetpalette(HPS hps, COLOR far *c, COLOR color, ULONG fl)
{
USHORT b = (USHORT)fl;
UCHAR direct = 0;

if (fl & 0x10000L)
{
direct = 1;
if (color != -1L)
{
setpal_vga(b,color);
if (c)
c[b] = color;
}
else
remapallpalette(c_ncolors,c ? c : ctbl);
}

if (hps)
{
GpiCreateLogColorTable(hps,LCOL_REALIZABLE,
LCOLF_CONSECRGB,
0L, (long)c_ncolors ,(c && !direct) ? c : ctbl);

if (!direct)
{
if (c)
GpiRealizeColorTable(hps);
else
GpiUnrealizeColorTable(hps);
}
}
return TRUE;
}
#if DUMMY
int pascal far remapallpalette(int n, ULONG far *c)
{}
#endif
#endif


  3 Responses to “Category : OS/2 Files
Archive   : PMPAL.ZIP
Filename : PALETTE.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/