devmgr.cpp

来自「Jazmyn is a 32-bit, protected mode, mult」· C++ 代码 · 共 110 行

CPP
110
字号
/*
 * 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 + =
减小字号Ctrl + -
显示快捷键?