⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.cpp

📁 XOSL 多操作系统管理工具 源代码 多系统引导工具
💻 CPP
字号:
/*
 * Extended Operating System Loader (XOSL)
 * Copyright (c) 1999 by Geurt Vos
 *
 * This code is distributed under GNU General Public License (GPL)
 *
 * The full text of the license can be found in the GPL.TXT file,
 * or at http://www.gnu.org
 */

#include <defs.h>
#include <data.h>
#include <textui.h>
#include <transfer.h>

#include <vesa.h>
#include <mouse.h>


CData::CData(CTextUI &TextUIToUse, CPartList &PartListToUse): 
	TextUI(TextUIToUse),
	PartList(PartListToUse)
{
	GraphDetected = 0;
	MouseDetected = 0;
	DriveDetected = 0;
}

CData::~CData()
{
}

int CData::CollectData(int DetectGraph, int DetectMouse, int DetectDrive)
{
	if ((GraphDetected || !DetectGraph) && (MouseDetected || !DetectMouse) && (DriveDetected || !DetectDrive))
		return 0;

	TextUI.OutputStr("Analyzing system...\n");
	if (DetectGraph) {
		if (DetectGraphicsModes() == -1)
			return -1;
		GraphDetected = 1;
	}

	if (DetectMouse) {
		DetectMouseTypes();
		MouseDetected = 1;
	}

	if (DetectDrive) {
		DetectDrives();
		DriveDetected = 1;
	}

	TextUI.OutputStr("\n");
	return 0;
}


int CData::DetectGraphicsModes()
{
	int Index;
	int VbeMajor, VbeMinor;
	int GraphicsMode;
	const char *ModeName;
	CVesa Vesa;

	// Detect VBE 1.2 support and display some info.
	ModeCount = 0;
	TextUI.OutputStr("Graphics controller:\n");
	if (Vesa.Initialize() != -1) {
		Vesa.GetVbeVersion(VbeMajor,VbeMinor);
		TextUI.OutputStr("OEM name: %s\n",Vesa.GetOemName());
		TextUI.OutputStr("VBE version number: %d.%d\n",VbeMajor,VbeMinor);
		TextUI.OutputStr("Video memory: %ldkb\n",Vesa.GetVideoMemorySize());
	}
	else {
		TextUI.OutputStr("\nDisplay controller not supported!\n");
		return -1;
	}
	if (((VbeMajor << 8) | VbeMinor) < 0x0102) {
		TextUI.OutputStr("\nVBE version not supported!\n");
		return -1;
	}


	// find available graphics modes
	TextUI.OutputStr("Supported graphics modes:\n");
	ModeCount = 0;
	if (Vesa.GetGraphicsModeCount()) {
		for (Index = CVesa::mode640x480; Index <= CVesa::mode1600x1200; ++Index) {
			GraphicsMode = Vesa.GetGraphicsModeSupported((CVesa::TGraphicsMode)Index);
			ModeName = Vesa.GetGraphicsModeName((CVesa::TGraphicsMode)Index);
			if (GraphicsMode != -1) {
				TextUI.OutputStr(" %x: %s\n",GraphicsMode,ModeName);
				GraphicsModes[ModeCount] = (CVesa::TGraphicsMode)Index;
				ModeNames[ModeCount] = ModeName;
				++ModeCount;
			}
		}
	}
	else {
		TextUI.OutputStr("No supported graphics modes found!\n\n");
		return -1;
	}
	return 0;
}


void CData::DetectMouseTypes()
{
	CMouse Mouse;
	int Index;

	MouseTypeCount = 0;
	TextUI.OutputStr("Analyzing:");
	for (Index = 0; Index < 5; ++Index) {
		TextUI.OutputStr(" %s",Mouse.GetPortName((CMouse::TMouseType)Index));
		if (Mouse.MouseTypeSupported((CMouse::TMouseType)Index)) {
			MouseTypes[MouseTypeCount] = Index;
			MouseTypeNames[MouseTypeCount] = Mouse.GetPortName((CMouse::TMouseType)Index);
			++MouseTypeCount;
		}
	}
	MouseTypes[MouseTypeCount] = 5; // type: None
	MouseTypeNames[MouseTypeCount] = "None";
	++MouseTypeCount;

	TextUI.OutputStr("\nMouse found on:");
	for (Index = 0; Index < MouseTypeCount - 1; ++Index)
		TextUI.OutputStr(" %s",Mouse.GetPortName((CMouse::TMouseType)MouseTypes[Index]));
	TextUI.OutputStr("\n");
}


void CData::GetGraphicsModeNames(const char **&ModeNameList, int &ModeCount)
{
	ModeNameList = ModeNames;
	ModeCount = this->ModeCount;
}

void CData::GetMouseTypeNames(const char **&MouseTypeNameList, int &MouseTypeCount)
{
	MouseTypeNameList = MouseTypeNames;
	MouseTypeCount = this->MouseTypeCount;
}

void CData::DetectDrives()
{
	CDiskAccess DiskAccess;
	int Count, Index;

	Count = DiskAccess.DriveCount(0x80);
	for (Index = 0; Index < Count; ++Index)
		TextUI.OutputStr("HD%d: %s access\n",Index,DiskAccess.LBAAccessAvail(0x80 | Index) == 0 ? "LBA" : "conventional");
	LastDrive = GetDriveCount();
	TextUI.OutputStr("Available drives: [C,%c]\n",('A' - 1) + LastDrive);
	TextUI.OutputStr("Reading disk structure...");
	PartList.ReadStructure();
	TextUI.OutputStr("\n");
}


int CData::GetLastDrive()
{
	return LastDrive;
}

CVesa::TGraphicsMode CData::GetGraphicsMode(int Index)
{
	return GraphicsModes[Index];
}

CMouse::TMouseType CData::GetMouseType(int Index)
{
	return (CMouse::TMouseType)MouseTypes[Index];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -