📄 devmgr.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 + -