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

📄 devmgr.cpp

📁 Jazmyn is a 32-bit, protected mode, multitasking OS which runs on i386 & above CPU`s. Its complete
💻 CPP
字号:
/*
 * Copyright (C) 2004, Thejesh AP. All rights reserved.
 */

#include <sys\types.h>
#include <null.h>
#include <stdlib.h>
#include <string.h>
#include <fs\devmgr.h>
#include <drivers\console.h>


//#define __DEVMGR_DEBUG

device_manager::device_manager()
{
        for(int i=0;i<MAX_DRIVERS;i++)
        {
                driver_tab[i].num_devices = 0;
                strcpy(driver_tab[i].name,"");
                driver_tab[i].disk_type = 0;
                driver_tab[i].main = NULL;
        }
        free_slots = MAX_DRIVERS;
}

device_manager::~device_manager()
{

}

int device_manager::register_driver(int num_dev,char* name,int disk,int (*main)(void* arg))
{
        if(free_slots == 0) return -1;
        for(int i=0;i<MAX_DRIVERS;i++)
                if(strcmp(driver_tab[i].name,name) == 0) return -1;
        for(int i=0;i<MAX_DRIVERS;i++)
        {
                if(driver_tab[i].main == NULL)
                {
                        driver_tab[i].num_devices = num_dev;
                        strcpy(driver_tab[i].name,name);
                        driver_tab[i].disk_type = disk;
                        driver_tab[i].main = main;
                        free_slots--;
                        break;
                }
        }
        return 0;
}

int device_manager::deregister_driver(char* name)
{
        if(free_slots == MAX_DRIVERS) return -1;
        for(int i=0;i<MAX_DRIVERS;i++)
        {
                if(strcmp(driver_tab[i].name,name) == 0)
                {
                        driver_tab[i].num_devices = 0;
                        driver_tab[i].disk_type = 0;
                        driver_tab[i].main = NULL;
                        free_slots++;
                        return 0;
                }
        }
        return -1;                       
}                

int device_manager::get_dsk_drivers(tab *dtab)
{
	int j = 0;
        int i;
        for(i=0;i<MAX_DRIVERS;i++)
	{
		if(driver_tab[i].disk_type)
		{
                        dtab[j] = driver_tab[i];
                        #ifdef __DEVMGR_DEBUG
                                cout<<dtab[j].name<<endl;
                                cout<<dtab[j].disk_type<<endl;
                        #endif
                        j++;
		}
	}
	for(i=0;i<j-1;i++)
	for(int k=i+1;k<j;k++)
	if(dtab[i].disk_type > dtab[k].disk_type)
	{
                tab temp = dtab[i];
                dtab[i] = dtab[k];
		dtab[k] = temp;
	}
	return j;
}

int device_manager::get_slot(char *name)
{
	for(int i=0;i<MAX_DRIVERS;i++)
	if(strcmp(driver_tab[i].name,name) == 0)
	return i;
	return -1;
}

device_manager _dev_mgr;

int SLOT(char *name)
{
	return _dev_mgr.get_slot(name);
}

⌨️ 快捷键说明

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