home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 3
/
FREEWARE.BIN
/
towns_os
/
tvi
/
tvi_src.lzh
/
REC
/
REC_PAL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-09
|
20KB
|
624 lines
/*
$Header: rec_pal.cv 1.20 91/01/09 16:13:24 Nam Exp $
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> /* 演算関連のヘッダファイル */
#include <egb.h> /* グラフィック関連のヘッダファイル */
#include <mos.h> /* マウス関連のヘッダファイル */
#include <n_win.h> /* 自前のウィンドゥ関数ヘッダ */
pragma Include ("rec_st.h"); /* 標準ヘッダ */
pragma Include ("rec_opt.h"); /* オプション設定ヘッダ */
#define max_256color (256)
#define max_32Kcolor (32767)
#define max_avr_step (32767)
#define VRAMSIZE (320*240*2)
#define VCTTBLSIZE (32768*2)
extern char *EGB_work; /*** EGBワークエリア(disp.obj) ***/
extern char *EGB_para; /*** EGBワークエリア(disp.obj) ***/
extern N_WIN_WORK WIN_work; /*** ウィンドゥライブラリ用ワーク(n_win_1.obj) ***/
extern char *VideoBufAdd; /*** 画像データバッファ ***/
extern unsigned short *tbl_expand; /*変換テーブル*/
extern unsigned short btn_alart_YES,btn_alart_NO
,btn_alart_GO,btn_alart_ABORT;
extern unsigned short win_pal,txt_pal_mes,txt_pal_col,btn_pal_ABORT;
extern unsigned long imgsize; /*** 画像データ1枚のサイズ ***/
extern unsigned short MaxVideoBuf; /*** 画像データバッファ最大枚数 ***/
extern unsigned short StartPage; /*** 画像データ指定開始ページ ***/
extern unsigned short EndPage; /*** 画像データ指定終了ページ ***/
extern unsigned short NowPage; /*** 画像データ現在ページ ***/
extern unsigned short LastPage; /*** 画像データ最終ページ ***/
extern unsigned short sysflag; /*** 設定状態フラグ ***/
extern char undomode[6]; /*** ***/
extern unsigned char sysopt[MAX_OPT_BTN]; /*** 各種オプション設定 ***/
extern char startpath[80]; /*** 起動時パス(rec_main.obj) ***/
extern void calc_palet(); /*** 論理パレット算出(palcalc.obj) ***/
extern void N_Vget_ful_11(); /*** 32K全画面転送(vgetf11.obj) ***/
extern void N_Vput_ful_11(); /*** 32K全画面転送(vputf11.obj) ***/
extern void VC8get_ful(); /*** テーブル参照全画面転送(vc_get.obj) ***/
extern void VC8put_ful(); /*** テーブル参照全画面転送(vc_put.obj) ***/
extern int disp_alart(); /*** アラートボックス表示(rec_main.obj) ***/
extern void save_edit_page(); /*** ページ情報のセーブ(rec_edit.obj) ***/
extern void set_edit_page(); /*エディットウィンドゥの各カウンタの再設定(rec_main.obj)*/
extern void set_page_slider(); /*ページスライダの再設定(rec_main.obj)*/
extern void N_set_resolution(); /*** 画面解像度設定(rec_disp.obj) ***/
extern char *itoa(); /*** 整数>char変換(rec_disp.obj) ***/
extern void change_icon(); /*** マウスアイコン変更(rec_mos.obj) ***/
extern int mos_btn_wait(); /*** マウスクリック待ち(rec_mos.obj) ***/
extern int N_check_video(); /*** ビデオ信号の有無を調べる(video.obj) ***/
extern void N_wait_vsync(); /*** Vsync待ち(video.obj) ***/
unsigned short *color_count;
unsigned char *color_ex;
unsigned char *color_check;
int check_video(); /*** ビデオ信号の有無を調べる(rec_pal.obj) ***/
void dezitize(); /*** page1にデジタイズ(rec_pal.obj) ***/
void pallette(); /*** パレット演算(rec_pal.obj) ***/
unsigned long dezi_cut(); /*** 矩形カット取り込み ***/
void average_color_conv(); /*** 32k>256変換 ***/
/*****************************************************************************/
int check_video() /*** ビデオ信号の有無を調べる(無ければ0以外) ***/
{
if (N_check_video()==0) { /*** ビデオ信号の有無を調べる(video.obj) ***/
disp_alart(1,"映像信号が来てないよ","配線を確かめてネ");
return -1;
}
return 0;
}
/*****************************************************************************/
void dezitize() /*page1にデジタイズ*/
{
check_video(); /*** ビデオ信号の有無を調べる(無ければ0以外) ***/
N_set_resolution(11,11,1,1,0); /*** 32K色,描画1・表示page1 ***/
EGB_displayPage(EGB_work,1,2);
EGB_clearScreen(EGB_work);
EGB_dezitize(EGB_work,1);
N_wait_vsync(); /*** Vsync待ち(video.obj) ***/
mos_btn_wait();
EGB_dezitize(EGB_work,0);
N_set_resolution(3,10,1,0,2);
EGB_displayStart(EGB_work,2,2,2);
EGB_displayStart(EGB_work,3,319,239);
EGB_writePage(EGB_work,0);
MOS_disp(TRUE);
sysflag|=_Dezi;
}
/*****************************************************************************/
void show256pal() /*page1に256色パレット一覧を表示(内部)*/
{
FRAME pos=N_WIN_getWinPos(win_pal);
register short i;
MOS_disp(FALSE);
/*** 表示域設定 ***/
pos.lup.x=((pos.lup.x%2)==0)?pos.lup.x+10:pos.lup.x+11;
pos.lup.y=((pos.lup.y%2)==0)?pos.lup.y+76:pos.lup.y+77;
pos.rdw.x=pos.lup.x+256;
pos.rdw.y=pos.lup.y+(8*2);
EGB_writePage(EGB_work,0); /*** 書き込みページ ***/
EGB_writeMode(EGB_work,0); /*** pset ***/
__NboxRectangle(pos,8,8,0); /*矩形を枠囲みし塗り潰し(N_WIN_9.obj)*/
EGB_writePage(EGB_work,1); /*** 書き込みページ ***/
EGB_paintMode(EGB_work,0x02);
pos.lup.x/=2;
pos.lup.y/=2;
WORD(EGB_para+0)=2;
for (i=0; i<128; i++) {
WORD(EGB_para+2)=pos.lup.x+i;
WORD(EGB_para+4)=pos.lup.y;
WORD(EGB_para+6)=pos.lup.x+i;
WORD(EGB_para+8)=pos.lup.y+3;
EGB_color(EGB_work,0,tbl_expand[i]);
EGB_connect(EGB_work,EGB_para);
WORD(EGB_para+4)=pos.lup.y+4;
WORD(EGB_para+8)=pos.lup.y+7;
EGB_color(EGB_work,0,tbl_expand[i+128]);
EGB_connect(EGB_work,EGB_para);
}
EGB_writePage(EGB_work,0); /*** 書き込みページ ***/
MOS_disp(TRUE);
}
/*****************************************************************************/
int load_vct(buf) /*** ベクトル演算テーブルをロード(内部・失敗すればれば0以外) ***/
char *buf;
{
FILE *fp;
char fname[160];
register unsigned long vctsize;
strcpy(fname,startpath);
strcat(fname,"tvi_rec.vct");
fp=fopen(fname,"rb"); /*** ファイルをOpen ***/
if (fp==NULL) {
disp_alart(1,"ベクトル演算用テーブルがありません"
,"`tvi_rec.vct'のあるパスを指定してね");
return -1;
}
change_icon(1); /*** マウスアイコンを砂時計に変更 ***/
vctsize=fread(buf,1,VCTTBLSIZE,fp);
fclose(fp);
change_icon(0); /*** マウスアイコンを★型に復帰 ***/
if (vctsize!=VCTTBLSIZE){
disp_alart(1,"テーブルファイルが途中で切れてますよ"
,"パレットは作れませんでした");
return -1;
}
}
/*****************************************************************************/
void pallette() /*パレット演算*/
{
char *add;
unsigned long dezisize;
unsigned short optid=0;
if (((sysflag & _Dezi)==0) && ((sysflag & _ExpandTable)==0)) {
disp_alart(1,"もとになる画像がないヨ"
,"デジタイズまたはロードしてちょ");
return;
}
/*** メモリに余裕があるか? ***/
if ((sysflag & _TVI)==0) {
LastPage=0;
}
if (MaxVideoBuf<((LastPage+2)+
(((sizeof(short)*VRAMSIZE*3)+(sizeof(char)*(max_32Kcolor+1)*3))
/(sizeof(short)*imgsize)))){
optid=disp_alart(2,"演算用エリアが足りないので"
,"動画をクリアしちゃうゾ");
if (optid==btn_alart_NO) {
return;
}
sysflag^=_TVI;
StartPage=EndPage=0xffff;
NowPage=LastPage=0;
set_edit_page();
set_page_slider();
}
save_edit_page(); /*** ページ情報のセーブ ***/
strcpy(undomode,"mkpal"); /*** UNDO-MODE ***/
add=VideoBufAdd+(imgsize*(LastPage+1));
/*** 予備取り込み ***/
N_Vget_ful_11(0x40000,add);
/*** ★256色パレット作成 ***/
optid=0;
if ((sysflag & _ExpandTable)!=0) {
optid=disp_alart(2,"展開用パレットはあるけどつくる?","");
}
if ((optid==btn_alart_YES)||((sysflag & _ExpandTable)==0)) {
if (sysopt[OPTBTN_COLOR_GRAV]!=0){
/*** 優先色指定 ***/
disp_alart(1,"256→32K色パレットを演算します"
,"重要な色の部分を矩形指定してね");
while (optid!=btn_alart_GO) {
N_Vput_ful_11(0x40000,add);
dezisize=dezi_cut(add+VRAMSIZE);/*** 矩形取り込み ***/
optid=disp_alart(3,"この範囲でいい?","");
if (optid==btn_alart_ABORT) {
N_Vput_ful_11(0x40000,add);
return;
}
}
} else {
dezisize=0;
}
average_color_conv(add,dezisize);
if (WIN_work.pointedOptId==btn_pal_ABORT) { /*** アボートした ***/
N_Vput_ful_11(0x40000,add);
N_WIN_closeWin(win_pal);
return;
}
N_WIN_disappearOpt(btn_pal_ABORT);
sysflag|=_ExpandTable;
set_edit_page();
/*** 256色パレット表示 ***/
N_Vput_ful_11(0x40000,add);
show256pal(); /*page1に256色パレット一覧を表示(内部)*/
} else {
N_WIN_re_entryOptAdd(txt_pal_mes,"256→32K色展開パレット一覧");
N_WIN_re_copyOptTxt(txt_pal_col," 256/-----");
N_WIN_disappearOpt(btn_pal_ABORT);
N_WIN_popupWin(win_pal);
show256pal(); /*page1に256色パレット一覧を表示(内部)*/
optid=disp_alart(2,"圧縮用パレットをつくります?"
,"(1分程かかるヨ)");
if (optid==btn_alart_NO) {
N_Vput_ful_11(0x40000,add);
N_WIN_closeWin(win_pal);
return;
}
}
/*** ★32K色パレット作成 ***/
/*** ベクトル演算テーブルをロード ***/
if (load_vct(add+VRAMSIZE)!=0) {
N_Vput_ful_11(0x40000,add);
N_WIN_closeWin(win_pal);
return;
}
/*** ベクトル演算 ***/
N_WIN_disappearOpt(txt_pal_mes);
N_WIN_re_entryOptAdd(txt_pal_mes,"32K→256色圧縮パレット作成中");
N_WIN_showOpt(txt_pal_mes);
MOS_disp(FALSE);
calc_palet(add+VRAMSIZE); /*** パレット演算 ***/
MOS_disp(TRUE);
/*** 結果を表示 ***/
N_Vput_ful_11(0x40000,add);
VC8get_ful(0x40000,add+VRAMSIZE);
VC8put_ful(0x40000,add+VRAMSIZE);
EGB_displayPage(EGB_work,1,2); /*** 32K画面のみ表示 ***/
N_WIN_closeWin(win_pal);
/*
N_WIN_disappearOpt(txt_pal_mes);
N_WIN_re_entryOptAdd(txt_pal_mes,"変換後はこのようになるよ");
N_WIN_showOpt(txt_pal_mes);
mos_move_wait();
*/
EGB_displayPage(EGB_work,0,3);
sysflag|=_ComplessTable;
set_edit_page();
}
/*****************************************************************************/
unsigned long dezi_cut(dispdata) /*** 矩形カット取り込み ***/
unsigned short *dispdata;
{
FRAME pos;
unsigned long ret=0;
#define xsize 639
#define ysize 479
EGB_displayPage(EGB_work,1,2); /*** page1のみ表示 ***/
EGB_writePage(EGB_work,1); /*** page1に書き込み ***/
MOS_disp(FALSE);
__NmosGet(); /*** マウス位置補正 ***/
MOS_setpos(WIN_work.mx/2,WIN_work.my/2);
MOS_resolution(1,10); /*** マウスをpage1に移動 ***/
MOS_writePage(1); /*** page1に書き込み ***/
MOS_horizon(0,xsize/2);
MOS_vertical(0,ysize/2);
change_icon(1); /*** マウスアイコンを一度切り換えてから ***/
change_icon(0); /*** マウスアイコンを★型に ***/
MOS_disp(TRUE);
while ( ret==0 ) {
MOS_disp(TRUE);
while (WIN_work.mb!=_MosBtnLeft){ /*** マウスをおすまで移動 ***/
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
}
MOS_horizon(WIN_work.mx+1,xsize/2);
MOS_vertical(WIN_work.my+1,ysize/2);
pos.lup.x=WIN_work.mx;
pos.lup.y=WIN_work.my;
pos.rdw.x=WIN_work.mx;
pos.rdw.y=WIN_work.my;
MOS_disp(FALSE);
__NxorRectangleFull(pos);
while (WIN_work.mb==_MosBtnLeft){ /*** マウスを放すまで移動 ***/
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
__NxorRectangleFull(pos);
pos.rdw.x=WIN_work.mx;
pos.rdw.y=WIN_work.my;
__NxorRectangleFull(pos);
}
__NxorRectangleFull(pos);
if (WIN_work.mb!=_MosBtnRight) {
ret=(((pos.rdw.x-pos.lup.x+1)*2)*(pos.rdw.y-pos.lup.y+1));
}
}
MOS_resolution(0,3); /*** マウスをpage0に復帰 ***/
MOS_writePage(0); /*** page0に書き込み ***/
MOS_horizon(0,xsize);
MOS_vertical(0,ysize);
MOS_setpos(WIN_work.mx*2,WIN_work.my*2); /*** マウス位置補正 ***/
change_icon(1); /*** マウスアイコンを一度切り換えてから ***/
change_icon(0); /*** マウスアイコンを★型に復帰 ***/
MOS_disp(TRUE);
__NgetImgRectangle((unsigned int)dispdata,pos);
/*** 矩形内塗り潰し ***/
__NxorRectangleFull(pos);
EGB_writePage(EGB_work,0);
EGB_displayPage(EGB_work,0,3);
return ret;
}
/*****************************************************************************/
unsigned short search_first_color() /*最初の平均色を捜す(内部)*/
{
register unsigned short i;
for ( i=0 ; i<=max_32Kcolor ; i++ ) {
if ( color_count[i]!=0 ) {
break;
}
}
i=(i>max_32Kcolor)?max_32Kcolor:i;
return i;
}
/*****************************************************************************/
unsigned short search_next_color(col) /*次の平均色を捜す(内部)*/
unsigned short col;
{
register unsigned long i;
for ( i=col+1 ; i<=max_32Kcolor ; i++ ) {
if ( color_count[i]!=0 ) {
break;
}
}
i=(i>max_32Kcolor)?max_32Kcolor:i;
return i;
}
/*****************************************************************************/
void exchange_pal(pal,col) /*正当なパレット位置に入れ換える(内部)*/
unsigned char pal;
unsigned short col;
{
register unsigned long i,tmp;
if (tbl_expand[pal]!=col) {
for (i=1; i<255; i++) {
if (tbl_expand[i]==col) {
tmp=tbl_expand[pal];
tbl_expand[pal]=col;
tbl_expand[i]=tmp;
break;
}
}
}
}
/*****************************************************************************/
void average_color_conv(add,dezisize) /*32k>256変換*/
char *add;
unsigned long dezisize;
{
#define COL_BRACK (0x000)
#define COL_GRAY (0x0b6)
#define COL_WHITE (0x0ff)
static unsigned short grav[16]={
0x0000,0x000f,0x010e,0x01ef,0x3c00,0x3c0f,0x3de0,0x3def
,0x1ce7,0x001f,0x03e0,0x03ff,0x7c00,0x7c1f,0x7fe0,0x7fff
};
static unsigned short step[4]={ 0x0421,0x0020,0x0400,0x0001 };/*W.R.G.B*/
unsigned short *Vadd;
char tmp[16]; /*** 色数表示用ワーク ***/
register long pa,pb;
register unsigned long c,i,j,k,v,use_color,before_color,org_color;
register unsigned long s,s1; /*** ループカウンタ ***/
register unsigned short cg,cr,cb; /*** GRB比較用 ***/
change_icon(1); /*** マウスアイコンを砂時計に変更 ***/
/*** ワークエリア取得 ***/
Vadd=(unsigned short *)add;
color_count=(unsigned short *)Vadd+VRAMSIZE+dezisize;
color_ex=(unsigned char *)color_count+(max_32Kcolor+1)*2;
color_check=(unsigned char *)color_ex+(max_32Kcolor+1);
/*** ワークエリア初期化 ***/
for ( i=0 ; i<=max_32Kcolor ; i++ ) {
color_ex[i]=0;
color_count[i]=0;
color_check[i]=0;
}
/*** 優先色取得 ***/
if (dezisize>0) {
for ( i=(VRAMSIZE/2) ; i<((VRAMSIZE/2)+(dezisize/2)) ; i++ ) {
k=Vadd[i] & max_32Kcolor;
color_ex[k]=(color_ex[k]<255)?color_ex[k]+1:255;
}
}
/*** 使用色取得 ***/
for ( i=0 ; i<(VRAMSIZE/2) ; i++ ) {
k=Vadd[i] & max_32Kcolor;
color_count[k]=(color_count[k]<65535)?color_count[k]+1:65535;
}
/*** 最優先パレット指定 ***/
if (dezisize>0) {
for (i=0; i<16; i++) {
j=grav[i];
color_count[j]=(color_count[j]<(65535-100))?color_count[j]+100:65535;
color_ex[j]=255;
}
}
/*** 総使用色数取得 ***/
for ( use_color=0,i=0 ; i<=max_32Kcolor ; i++ ) {
if (color_count[i]>0) {
use_color++;
color_check[i]=1;
/*** 肌色優先指定 ***/
cg=(i & 0x7c00)>>10;
cr=(i & 0x03e0)>>5;
cb=(i & 0x001f);
if ((cr>cg)&&(cg<8)&&(cb<4)){
/*赤>青>緑のとき肌色として優先*/
color_count[i]=(color_count[i]<(65535-1000))
?color_count[i]+1000:65535;
}
}
}
org_color=use_color;
strcpy(tmp,itoa(use_color,5));
strcat(tmp,"/");
strcat(tmp,itoa(org_color,5));
N_WIN_re_copyOptTxt(txt_pal_col,tmp);
N_WIN_re_entryOptAdd(txt_pal_mes,"256→32K色展開パレット作成中");
N_WIN_showOpt(btn_pal_ABORT);
N_WIN_popupWin(win_pal);
change_icon(1); /*** マウスアイコンを砂時計に変更 ***/
/*** 減色開始 ***/
s=4; s1=0;
while ( use_color>max_256color ) {
before_color=use_color;
for (i=0; i<=max_32Kcolor; i++) {
if (use_color<=max_256color) {
break;
}
if ((color_ex[i]<10)&&(color_check[i]!=0)) {
for (j=0; j<(s<<2); j++) {
v=((j>>2)*0x0421)+step[j%4];
pa=((i-v)>=0)?(i-v):max_32Kcolor+1;
pb=((i+v)<=max_32Kcolor)?(i+v):max_32Kcolor+1;
if ( pb<=max_32Kcolor && color_check[pb]!=0) {
if((color_ex[pb]>4)||(color_count[pb]>color_count[i])){
color_count[i]=0;
color_check[i]=0;
} else {
color_count[pb]=0;
color_check[pb]=0;
}
/*i=pb;*/
use_color--;
break;
}
if ( pa<=max_32Kcolor && color_check[pa]!=0) {
if((color_ex[pa]>4)||(color_count[pa]>color_count[i])){
color_count[i]=0;
color_check[i]=0;
} else {
color_count[pa]=0;
color_check[pa]=0;
}
/*i=pa;*/
use_color--;
break;
}
}
}
}
if (s1>1) {
v=use_color;
for (i=1 ; i<max_32Kcolor ; i++) {
color_ex[i]=(color_ex[i]>2)?color_ex[i]-3:0;
if (color_count[i]>0) {
color_count[i]=(color_count[i]>50)
?color_count[i]-50:color_count[i]-1;
if (color_count[i]==0) {
v--;
}
if (v<=max_256color) {
break;
}
}
}
s1=0;
s-=4;
}
for ( use_color=0,i=0 ; i<=max_32Kcolor ; i++ ) {
if (color_count[i]!=0) {
use_color++;
color_check[i]=1;
} else {
color_check[i]=0;
}
}
/*** 途中経過表示 ***/
if (before_color!=use_color) {
strcpy(tmp,itoa(use_color,5));
strcat(tmp,"/");
strcat(tmp,itoa(org_color,5));
N_WIN_re_copyOptTxt(txt_pal_col,tmp);
} else {
s1++;
s=((s+4)<max_avr_step)?s+4:max_avr_step;
}
/*** アボート処理 ***/
__NmosGet(); /*マウス読込み(n_win_9 /内部・エラーチェック無)*/
if (WIN_work.mb==_MosBtnLeft) {
doPoint(WIN_work.mx,WIN_work.my);
if (WIN_work.pointedOptId==btn_pal_ABORT) {
break;
}
}
}
/*** 展開パレット設定 ***/
for ( use_color=0,i=0 ; i<=max_32Kcolor ; i++ ) {
if (color_count[i]!=0) {
use_color++;
}
}
if (use_color<=max_256color) {
s=search_first_color();
tbl_expand[0]=s;
for ( c=1 ; c<256 ; c++ ) {
s=search_next_color(s);
tbl_expand[c]=s; /*** debug '90.11.1 ***/
}
/*** 正当なパレット位置に入れ換える(T_PAINT256対応) ***/
exchange_pal(COL_BRACK,grav[0]); /*** 黒色位置再設定 ***/
exchange_pal(COL_GRAY,grav[7]); /*** 灰色位置再設定 ***/
exchange_pal(COL_WHITE,grav[15]); /*** 白色位置再設定 ***/
/*** システムフラグ設定 ***/
sysflag|=_ExpandTable;
}
change_icon(0); /*** マウスアイコンを★型に復帰 ***/
}
/******************************************************************************
$Log: RCS/rec_pal.cv $
* Revision 1.20 91/01/09 16:13:24 Nam
* V0.0 L19 (debug at 2MB's hung, when DATA had loaded.)
*
* Revision 1.19 90/11/13 20:16:44 Nam
* renew MOS_getpos -> __mosGet
*
* Revision 1.18 90/11/13 14:41:48 Nam
* Release at V0.0 L18d
*
* Revision 1.17 90/11/12 17:14:50 Nam
* add optbtn operation
*
* Revision 1.16 90/11/10 17:05:04 Nam
* add UNDO for make-pal
*
* Revision 1.15 90/11/07 18:59:32 Nam
* renew at 'getdezisize' (work all page1)
*
* Revision 1.14 90/11/05 16:50:38 Nam
* *** empty log message ***
*
* Revision 1.13 90/11/01 17:55:12 Nam
* Rel V0.0L17 at '90.11.2 for FPICS.
*
* Revision 1.12 90/11/01 17:55:12 Nam
* blush up of palette making routine
*
* Revision 1.10 90/10/31 20:04:36 Nam
* separate loading vct from pal-calc
*
* Revision 1.9 90/10/31 16:01:02 Nam
* renew make-pal (move GRAY <- for T_PAINT256)
*
* Revision 1.8 90/10/30 14:15:16 Nam
* renew make-pal (disp 256pal)
*
* Revision 1.7 90/10/29 13:09:10 Nam
* renew win_pal
*
* Revision 1.6 90/10/28 21:47:40 Nam
* add win_pal (disp col-No and can abort)
*
* Revision 1.5 90/10/27 15:03:42 Nam
* faster
*
* Revision 1.4 90/10/25 19:19:22 Nam
* use 'rec_st.h' and brush-up make palette routine
* set priority for skin color
*
* Revision 1.3 90/10/25 11:06:34 Nam
* make palette with non-clear
*
* Revision 1.2 90/10/24 19:54:26 Nam
* separate a vector-table-object from main routine.
*
* Revision 1.1 90/10/10 18:05:24 Nam
* Initial revision
*
******************************************************************************/