home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
pao
/
ms_dos
/
color
/
src
/
getbc.c
< prev
Wrap
Text File
|
1980-01-02
|
5KB
|
229 lines
/** << MSC V5.1 >> ************************************************************
**
** パレットの確認 ( FMTOWNS 16 色モード )
**
** < Parameter >
** GETBC <Palno.>
** Palno. : パレット番号 ( 0 ~ F (HEX) )
**
** < HISTORY >
** 1989.10.07 : CREATE
** 1990.04.16 : FMRに対応
** 1990.11.30 : 新型FMTOWNSに対応
**
** All Rights Reserved, Copyright (C) Y.Hirata 1990.
**
** Programed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define VER_LEV (1.20)
/* FMTOWNS */
#define PALETTE 0xfd90
#define BLUE 0xfd92
#define RED 0xfd94
#define GREEN 0xfd96
/* FMR */
#define CONTROL 0x0400
#define R_PALETTE 0x0408
#define R_BLUE 0x040a
#define R_RED 0x040c
#define R_GREEN 0x040e
unsigned int Palette ;
unsigned int Blue ;
unsigned int Red ;
unsigned int Green ;
char *Msg[6] = { "(C)パオパオ パレット色確認プログラム Version ",
"Copyright (C) Y.Hirata 1989-1990. All rights reserved.",
"GETBC <Palno.> [Palno. ....] [Palno.-Palno.]",
" Palno. : パレット番号 ( 0 ~ F (HEX) )",
" (背景色のパレット番号は、0 です。)",
"FMR-60では、最後に /r を指定して下さい。"
} ;
#define TRUE 1
#define FALSE 0
/******************************* GET Machine ID ****************************/
/*
** < RETURN >
** 機種識別 :
** Towns1,2 = 1
** Towns1,2(F,H) = 2 ('90秋型を含む)
** R70 = 3
** R60/50 = 4
** R50S = 5
** R50LT = 6
** ??? = 0
*/
int mid()
{
union REGS regs ;
struct SREGS sregs ;
unsigned char mdata[16] ;
unsigned char id, cpu ;
regs.h.ah = 0x05 ;
regs.x.di = (unsigned int)mdata ;
segread( &sregs ) ;
int86x( 0xaf,®s,®s,&sregs ) ;
id = mdata[0] ;
if ( (id & 0x07) == 0x01 ) { /* R60/50 系列 */
if ( (id & 0xf0) == 0x50 ) { /* FMTowns */
cpu = inp( 0x31 ) ;
switch ( cpu ) {
case 1 :
return ( 1 ) ; /* モデル 1,2 */
break ;
case 2 :
return ( 2 ) ; /* モデル 1,2(F,H) */
break ;
default :
return ( 2 ) ; /* ????? */
/*
** 新型FMTOWNSは、これでいいと思う。
*/
break ;
}
} else if ( (id & 0xf0) == 0x20 ) { /* R-70 */
return ( 3 ) ;
} else if ( (id & 0xf0) == 0x00 ) { /* R-60/50 */
return ( 4 ) ;
} else if ( (id & 0xf0) == 0x30) { /* R-50S */
return ( 5 ) ;
} else if ( (id & 0xf0) == 0x40) { /* R-50LT */
return ( 6 ) ;
} else { /* ????? */
return ( 0 ) ;
}
} else { /* ????? */
return ( 0 ) ;
}
}
/************************ char 0-f(F) -> int 0-15 **************************/
int ctoi( c )
char c ;
{
int i=0 ;
if ( c >= '0' && c <= '9' ) {
i = c - '0' ;
} else {
if ( c >= 'A' && c <= 'F' )
i = 10 + c - 'A' ;
if ( c >= 'a' && c <= 'f' )
i = 10 + c - 'a' ;
}
return i ;
}
/***************************** ★ メイン ★ ********************************/
main( int ac, char *av[] )
{
char pal, b, r, g ;
int c, cc, st, end, arglen ;
int id ;
int r60 = FALSE ;
if ( ac > 1 ) {
for ( c=1; c<ac; c++ ) {
if ( *av[c] == '-' || *av[c] == '/' ) { /* オプションスイッチ */
arglen = strlen( av[c] ) ;
for ( cc=1; cc<arglen; cc++ ) {
switch ( *(av[c]+cc) ) {
case 'r' :
case 'R' :
r60 = TRUE ;
break ;
default :
printf("\x1b[1;33m") ;
printf("Option switch error(%c)",*(av[c]+cc)) ;
printf("\x1b[m\n") ;
break ;
}
}
}
}
}
id = mid() ;
switch ( id ) { /* 機種判別 */
case 1 : /* FMTOWNS */
case 2 : /* FMTOWNS */
case 5 : /* FMR-50S */
Palette = PALETTE ;
Blue = BLUE ;
Red = RED ;
Green = GREEN ;
break ;
case 4 : /* FMR-60/50 */
Palette = PALETTE ;
Blue = BLUE ;
Red = RED ;
Green = GREEN ;
if ( !r60 ) {
break ;
}
case 3 : /* FMR-70 */
outp( CONTROL ,0x05 ) ;
Palette = R_PALETTE ;
Blue = R_BLUE ;
Red = R_RED ;
Green = R_GREEN ;
break ;
case 6 : /* FMR-50LT */
default : /* ????? */
printf("\nこのマシンでは、使用できません!\n") ;
exit ( 1 ) ;
break ;
}
if ( ac < 2 ) { /* 引数なし */
printf("%s%04.2f\n",Msg[0],VER_LEV) ;
printf("%s\n",Msg[1]) ;
printf("\n") ;
for ( c=2; c<5; c++ ) {
printf("%s\n",Msg[c]) ;
}
if ( id == 4 ) {
printf("%s\n",Msg[5]) ;
}
} else { /* 引数あり */
for ( c=1; c<ac; c++ ) {
if ( *av[c] != '-' && *av[c] != '/' ) { /* オプションスイッチ */
st = ctoi( *av[c] ) ;
end = st ;
if ( strlen(av[c]) == 3 ) {
end = ctoi( *(av[c]+2) ) ;
if ( st > end )
printf("\x1b[1;33mParameter error : %s\x1b[m\n",
av[c]) ;
}
for ( cc=st; cc<=end; cc++ ) {
pal = cc ;
printf("\x1b[m\x1b[37mPalno. %xH : ",pal) ;
outp( Palette ,pal ) ;
b = inp( Blue ) >> 4 ;
r = inp( Red ) >> 4 ;
g = inp( Green ) >> 4 ;
printf("\x1b[7;34mBLUE\x1b[m\x1b[37m<%xH> ",b) ;
printf("\x1b[7;31mRED\x1b[m\x1b[37m<%xH> ",r) ;
printf("\x1b[7;32mGREEN\x1b[m\x1b[37m<%xH>\n",g) ;
}
}
}
}
printf("\x1b[m") ;
}