/******************************************************************************
**
**	セットアップ情報の取得
**
**	< History >
**	1990.01.18 : CREATE
**
**	< note > : TABS = 4
**
**	Programmed by Y.Hirata ( Nifty-ID : NAB03321 )
**
******************************************************************************/

pragma	Off (Floating_point) ;

#include <dos.h>
#include <stdio.h>
#include <msdos.cf>
#include "hc.h"

struct SYSINF {
	uchar	boot_dev_type ;			/*	BOOTデバイスタイプ				*/
	uchar	boot_unit ;				/*	BOOTユニット番号				*/
	ushort	memflg ;				/*	メモリ実装フラグ				*/
	ushort	memsize ;				/*	メモリサイズ(パラグラフ単位)	*/
	uchar	single ;				/*	シングルドライブ				*/
	ushort	res_1 ;					/*	リザーブ						*/
	uchar	cp_mgr_flg ;			/*	CP-MGRインストールフラグ		*/
	uchar	vje_flg ;				/*	VJEインストールフラグ			*/
	uchar	res_2 ;					/*	リザーブ						*/
	ushort	ramsize ;				/*	RAMディスクサイズ(KB)			*/
	uchar	res_3[3] ;				/*	リザーブ						*/
	uchar	oak_flg ;				/*	かな漢字変換インストールフラグ	*/
	uchar	res_4[30] ;				/*	リザーブ						*/
	struct {
		uchar	drive_type ;		/*	ドライブ種別					*/
		uchar	drive_no ;			/*	物理ドライブ番号				*/
		} drive_inf[16] ;
	struct {
		uchar	prt_type ;			/*	プリンタ種別					*/
		uchar	prt_mode ;			/*	プリントモード					*/
		uchar	prt_opt ;			/*	オプション						*/
		ushort	prt_res ;			/*	リザーブ						*/
		uchar	prt_dot_type ;		/*	プリンタタイプ					*/
		} prt_inf ;
	uchar	res_5[12] ;				/*	リザーブ						*/
	struct {
		uchar	baud ;				/*	ボーレート						*/
		uchar	term_mode ;			/*	通信モード						*/
		ushort	put_out ;			/*	送信タイムアウト値				*/
		ushort	get_out ;			/*	受信タイムアウト値				*/
		} rs232c[5] ;
	uchar	res_6[72] ;				/*	リザーブ						*/
	} ;

union SYSBUF {
	uchar	SysBuf[200] ;
	struct	SYSINF	sysinf ;
	} sysbuf ;

char	*DRIVE_Name[16] = { "Ａ", "Ｂ", "Ｃ", "Ｄ", "Ｅ", "Ｆ", "Ｇ", "Ｈ",
						    "Ｉ", "Ｊ", "Ｋ", "Ｌ", "Ｍ", "Ｎ", "Ｏ", "Ｐ"  };

/**************************  SETUP 情報の取得  *******************************/
char sysinf()
{
	SYS_getinf( sysbuf.SysBuf ) ;				/*	システム情報の取得	*/
	return( TRUE ) ;
}

/***************************  SETUP 情報の表示  ******************************/
void disp()
{
	int		c, i, j ;

	printf( "\n起動デバイスタイプは、" ) ;
	if ( sysbuf.sysinf.boot_dev_type == 0x01 )
		printf( "ハードディスクです。\n" ) ;
	if ( sysbuf.sysinf.boot_dev_type == 0x02 )
		printf( "1MBフロッピィディスクです。\n" ) ;

	printf( "起動ユニット番号は、%d です。\n",sysbuf.sysinf.boot_unit ) ;

	printf( "シングルオペレーションは、" ) ;
	if ( sysbuf.sysinf.single )
		printf( "設定されています。\n" ) ;
	else
		printf( "解除されています。\n" ) ;

	printf( "ＣＰ−ＭＧＲは、" ) ;
	if ( (sysbuf.sysinf.cp_mgr_flg & 0x01) == 0x01 )
		printf( "インストールされています。\n" ) ;
	else
		printf( "インストールされていません。\n" ) ;

	printf( "ＶＪＥ−αは、" ) ;
	if ( (sysbuf.sysinf.vje_flg & 0x01) == 0x01 )
		printf( "インストールされています。\n" ) ;
	else
		printf( "インストールされていません。\n" ) ;

	printf( "ＲＡＭディスクサイズは、%d KB です。\n",sysbuf.sysinf.ramsize ) ;

	printf( "かな漢字変換は、" ) ;
	if ( (sysbuf.sysinf.oak_flg & 0x01) == 0x01 )
		printf( "インストールされています。\n" ) ;
	else
		printf( "インストールされていません。\n" ) ;

	for ( c=0; c<16; c++ ) {
		printf( "----------------------------------------------------------\n" ) ;
		printf( "ドライブ%s：は、",DRIVE_Name[c] ) ;
		if ( sysbuf.sysinf.drive_inf[c].drive_type == DRV_FD ) {
			printf( "1MBフロッピィのユニット %d 番です。\n",
					sysbuf.sysinf.drive_inf[c].drive_no ) ;
		} else if ( sysbuf.sysinf.drive_inf[c].drive_type == DRV_HD ) {
			printf( "ハードディスクの" ) ;
			i = sysbuf.sysinf.drive_inf[c].drive_no ; i >>= 4 ;
			j = sysbuf.sysinf.drive_inf[c].drive_no ; j &= 0x0f ;
			printf( "ユニット %d 番の区画 %d 番です。\n",
					i,j ) ;
		} else if ( sysbuf.sysinf.drive_inf[c].drive_type == DRV_RAM ) {
			printf( "ＲＡＭディスクです。\n" ) ;
		} else if ( sysbuf.sysinf.drive_inf[c].drive_type == DRV_ROM ) {
			printf( "ＲＯＭです。\n" ) ;
		} else if ( sysbuf.sysinf.drive_inf[c].drive_type == DEV_ERR ) {
			printf( "未登録です。\n" ) ;
		} else {
			printf( "？？？？？\n" ) ;
		}
	}

	printf( "----------------------------------------------------------\n" ) ;
	printf( "プリンタは、" ) ;
	if ( sysbuf.sysinf.prt_inf.prt_type == 0x01 )
		printf( "漢字プリンタです。\n" ) ;
	else
		printf( "？？？？？\n" ) ;

	printf( "プリントモードは、" ) ;
	if ( sysbuf.sysinf.prt_inf.prt_mode == 0x00 ) {
		printf( "非漢字モードです。\n" ) ;
	} else if ( sysbuf.sysinf.prt_inf.prt_mode == 0x01 ) {
		printf( "漢字モード,横書き,縮小ANK文字です。\n" ) ;
	} else if ( sysbuf.sysinf.prt_inf.prt_mode == 0x03 ) {
		printf( "漢字モード,横書き,標準ANK文字です。\n" ) ;
	} else {
		printf( "？？？？？\n" ) ;
	}

	printf( "プリンタオプションは、ピッチ指定" ) ;
	if ( (sysbuf.sysinf.prt_inf.prt_opt & 0x10) == 0x10 )
		printf( "あり" ) ;
	else
		printf( "なし" ) ;
	if ( (sysbuf.sysinf.prt_inf.prt_opt & 0x01) == 0x01 )
		printf( "，カットシートフィーダあり" ) ;
	if ( (sysbuf.sysinf.prt_inf.prt_opt & 0x02) == 0x02 )
		printf( "，カラーリボンあり" ) ;
	printf( "です。\n" ) ;

	printf( "プリンタタイプは、" ) ;
	if ( (sysbuf.sysinf.prt_inf.prt_dot_type & 0x0f) == 0x00 )
		printf( " 24 ドットです。\n" ) ;
	if ( (sysbuf.sysinf.prt_inf.prt_dot_type & 0x0f) == 0x01 )
		printf( " 32 ドットです。\n" ) ;
	if ( (sysbuf.sysinf.prt_inf.prt_dot_type & 0x0f) == 0x02 )
		printf( " 56 ドットです。\n" ) ;

	for ( c=0; c<5; c++ ) {
		printf( "----------------------------------------------------------\n" ) ;
		printf( "RS-232C ( ポート %d ) は、",c ) ;
		printf( "ボーレート : " ) ;
		i = 300 ;
		for ( j=0; j<(sysbuf.sysinf.rs232c[c].baud & 0x0f); j++ )
			i *= 2 ;
		printf( "%d bps\n",i ) ;

		printf( "                         " ) ;
		printf( "ビット長 : " ) ;
		if ( (sysbuf.sysinf.rs232c[c].term_mode & 0x01) == 0x01 )
			printf( "8 bit\n" ) ;
		else
			printf( "7 bit\n" ) ;

		printf( "                         " ) ;
		printf( "パリティ : " ) ;
		if ( (sysbuf.sysinf.rs232c[c].term_mode & 0x02) == 0x02 )
			printf( "あり\n" ) ;
		else
			printf( "なし\n" ) ;

		printf( "                         " ) ;
		printf( "パリティビット : " ) ;
		if ( (sysbuf.sysinf.rs232c[c].term_mode & 0x04) == 0x04 )
			printf( "EVEN\n" ) ;
		else
			printf( "ODD\n" ) ;

		printf( "                         " ) ;
		printf( "ストップビット : " ) ;
		if ( (sysbuf.sysinf.rs232c[c].term_mode & 0x08) == 0x08 )
			printf( "2 bit\n" ) ;
		else
			printf( "1 bit\n" ) ;

		printf( "                         " ) ;
		printf( "XON/OFF制御 : " ) ;
		if ( (sysbuf.sysinf.rs232c[c].term_mode & 0x10) == 0x10 )
			printf( "あり\n" ) ;
		else
			printf( "なし\n" ) ;

		printf( "                         " ) ;
		printf( "送信タイムアウト値 : %d ms\n",
				sysbuf.sysinf.rs232c[c].put_out ) ;
		printf( "                         " ) ;
		printf( "受信タイムアウト値 : %d ms\n",
				sysbuf.sysinf.rs232c[c].get_out ) ;
	}
}

/****************************  ★ メイン ★  *********************************/
void main()
{
	sysinf() ;
	disp() ;
}

