亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sys_calls.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 <stdio.h>
#include <dirent.h>
#include <errno.h>

#include <mm\paging.h>
#include <mm\new.h>
#include <mm\heap.h>
#include <jazmyn\desc.h>
#include <mm\memory.h>
#include <fs\file_sys.h>
#include <jazmyn\process.h>


#include <fs\fatvol.h>
#include <fs\devmgr.h>
#include <fs\exe.h>
#include <semaphore.h>
#include <fs\fatdriver.h>

#include <jazmyn\i386.h>
#include <drivers\timer.h>
#include <drivers\console.h>
#include <drivers\keyboard.h>
#include <jazmyn\kernel.h>
#include <jazmyn\sys_calls.h>
#include <jazmyn\gdt.h>

extern process proc[MAX_PROCESS];
extern process *curr_proc;
extern process *fg_proc;
extern FATdriver _FAT_driver;


uint va2pa(void* arg)
{
        /*return (arg) ? (__VIRTUAL_BASE + (uint)arg) : 0;*/
        return (arg) ? (curr_proc->_m.get_pb() + (uint)arg) : 0;
}

uint va2pa2(void* arg)
{
        return (arg) ? (curr_proc->_m.get_pb() + (uint)arg) : 0;
}

int sys_fork(uint ebx,uint ecx,uint edx,uint esi,uint edi,uint ebp,uint gs,uint fs,uint es,
		uint ds,uint eip,uint cs,uint eflags,uint esp,uint ss)
{
        cli();
        int free_slot;
	if((free_slot = get_free_slot()) < 0) return -1;
        process *child = &proc[free_slot];
        if(!child->copy_process(curr_proc,free_slot,0,ebx,ecx,edx,esi,edi,ebp,gs,fs,es,
                ds,eip,cs,eflags,esp,ss))
	{
		if(curr_proc == fg_proc) fg_proc = child;
                sti();
		return free_slot;
	}
        sti();
        return -1;
}

int sys_exec(char *path,char **argv,char **env)
{
        byte val = inportb(0x21);
        val = val | 1;
        outportb(0x21,val);

        int __ret = -1;
        path = (char*)va2pa(path);
        argv = (char**)va2pa(argv);
        env = (char**)va2pa(env);
        int i = 0;
        char **tmp;
        if(argv)
        {
                tmp = argv;
                while(*tmp)
                {
                        argv[i] = (char*)va2pa(argv[i]);
                        tmp++;
                        i++;
                }
        }

        extern char *environ[];
        char exec_path[255];
        strcpy(exec_path,(char*)&environ[0][5]);
        strcat(exec_path,path);

        int fd = _FAT_driver.open(exec_path,O_RDWR,0);
        if(fd >= 0)
	{
		exe exe_hdr;
                if(_FAT_driver.read(fd,&exe_hdr,sizeof(exe_hdr)))
		{

                        if(!curr_proc->try_to_replace(fd,argv,env,exe_hdr.cs,exe_hdr.ds,
                                                exe_hdr.bss,PAGE_SIZE*2,exe_hdr.entry_point))
                        {

                                 __ret = 0;
                                curr_proc->newrun();
                        }
		}
        }


        val = inportb(0x21);
        val = val & ~(1<<0);
        outportb(0x21,val);

        return __ret;
}

void sys_exit(int exit_code)
{
        process *parent = curr_proc->clear(exit_code);
        if(curr_proc == fg_proc) fg_proc = parent;
        schedule();
        while(1); //if no runnable process wait
}

int sys_wait(int child,int *status,int options)
{
        status = (int*)va2pa(status);
        cli();
        curr_proc->state =  WAITING;
        sti();
	while(1)
	{
                int child_cnt = 0;
                int children = curr_proc->get_nr_children();
                for(int i=0;i<MAX_PROCESS && child_cnt<children;i++)
		{
                        if(proc[i].get_ppid() == curr_proc->get_pid())
			{
				child_cnt++;
				if(proc[i].state == ZOMBIE)
				{
					*status = proc[i].get_exit_status();
					proc[i].state = CLEAR;
                                        proc[i].set_free();
                                        curr_proc->dec_child();
					return 0;
				}
			}
		}
        }
}

void *sys_malloc(size_t size)
{
        void *ret = curr_proc->malloc(size);
        return (void*)((uint)ret - curr_proc->_m.get_pb());
}

void sys_free(void *addrs)
{
       addrs = (void*)va2pa(addrs);
       curr_proc->freee(addrs);
}

int delay_serviced = 0;

void sys_delay(uint millisecs)
{
	extern timer _timer_obj;
        _timer_obj.call_after(millisecs,delayfun);
	while(!delay_serviced);
	delay_serviced = 0;
}

int sys_open(const char* path,int access,mode_t perm)
{
	return -ENOSYS;
}

off_t	sys_lseek(int fd,off_t pos,int whence)
{
	return -ENOSYS;
}

ssize_t sys_read(int fd,void *buf,size_t size)
{
	if(fd == 0)
	{
		buf = (char*)va2pa2(buf);
                keyboard_req kreq = {'\n',buf};
		int  __ret = keyboard_main(&kreq);
		return __ret;
	}
	else
		return -ENOSYS;
}

ssize_t sys_write(int fd,const void *buf,size_t size)
{
	if(fd == 1)
	{
                buf = (char*)va2pa((void*)buf);
                cout<<(char*)buf;
                return strlen((char*)buf);
	}
	else
		return -ENOSYS;
}

int sys_close(int fd)
{
	return -ENOSYS;
}

int sys_unlink(const char *link)
{
	return -ENOSYS;
}

int sys_fstat(int fd,stat *statv)
{
	return -ENOSYS;
}

DIR* sys_opendir(const char *path)
{
        path = (const char*)va2pa((void*)path);
        return _FAT_driver.opendir((char*)path);
}

dirent *ret = NULL;

dirent* sys_readdir(DIR *dir_fd)
{
        if(ret) delete ret;
        ret = (dirent*)curr_proc->malloc(sizeof(dirent));
        if(!ret)
        {
                cout<<"malloc failed\n";
                getch();
        }
        dirent *t;
        if(t = _FAT_driver.readdir(dir_fd))
        {
                *ret = *t;
        }
        else
        {
                ret = NULL;
                return NULL;
        }
        return (dirent*)((uint)ret - curr_proc->_m.get_pb());
}

void sys_rewinddir(DIR *dir_fd)
{
        _FAT_driver.rewinddir(dir_fd);
}

int sys_closedir(DIR *dir_fd)
{
        return _FAT_driver.closedir(dir_fd);
}

int sys_mkdir(const char *path,mode_t mode)
{
	return -ENOSYS;
}

int sys_rmdir(const char *path)
{
	return -ENOSYS;
}

int sys_chdir(const char *path)
{
        path = (const char*)va2pa((void*)path);
        cout<<"on sys chder:"<<(char*)path<<endl;
        getch();
        return _FAT_driver.chdir((char*)path);
}

int sys_chroot(char *root_drive)
{
	return -ENOSYS;
}

void sys_utils(int utilnr)
{
        switch(utilnr)
        {
                case 0:displaydate();break;
                case 1:displaytime();break;
                case 2:displayps();break;
                case 3:cout.clrscr();break;
                case 4:
                        disable_paging();
                        outportb(0x64,0xFE);
                        break;
                case 5:list_dir();break;
                default:cout<<"Unrecognized\n";
        }
}

void list_dir()
{
        cout<<endl;
        DIR *dir = _FAT_driver.opendir("\\");
        if(!dir)
        {
                cout<<"Dir listing failed\n";
        }
        dirent *d;
        cout<<"*****DIR LISTING*****\n\n";
        while((d = _FAT_driver.readdir(dir)))
        {
                cout<<d->d_name<<endl;
        }
        _FAT_driver.closedir(dir);
        cout<<endl;;
}


void displayps()
{
        cout<<endl;
        cout<<"PID        PPID       CHILD\n";
        for(int i=0;i<MAX_PROCESS;i++)
        {
                if(proc[i].state & RUNNABLE)
                {
                        cout<<proc[i].get_pid()<<"           "
                            <<proc[i].get_ppid()<<"            "
                            <<proc[i].get_nr_children()<<endl;
                }
        }
        cout<<endl;
}
                        
void displaydate()
{
        cout<<endl;
        cout<<"Date:  ";
        char *days[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
        uint out;

        outportb(0x70,0x6);
        out = inportb(0x71);
        cout<<days[out-1]<<"  ";

        outportb(0x70,0x7);
        out = inportb(0x71);
        cout.dispnum(out,16);
        cout<<'-';

        outportb(0x70,0x8);
        out = inportb(0x71);
        cout.dispnum(out,16);
        cout<<'-';

        outportb(0x70,0x9);
        out = inportb(0x71);
        cout<<"200";
        cout.dispnum(out,16);
        cout<<endl;
        cout<<endl;
}

void displaytime()
{
        cout<<endl;
        cout<<"Time:  ";
        uint out;

        outportb(0x70,0x4);
        out = inportb(0x71);
        cout.dispnum(out,16);
        cout<<':';

        outportb(0x70,0x2);
        out = inportb(0x71);
        cout.dispnum(out,16);
        cout<<':';

        outportb(0x70,0x0);
        out = inportb(0x71);
        cout.dispnum(out,16);
        cout<<endl;
        cout<<endl;
}


void delayfun()
{
	delay_serviced = 1;
}

int get_free_slot()
{
        for(int i=0;i<MAX_PROCESS;i++)
        if(proc[i].is_free()) 
	return i;
        return -1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区专区| 国产精品国模大尺度视频| 亚洲一区二区影院| 欧美日韩中字一区| 日韩av不卡在线观看| 日韩一区二区电影网| 国产一区二区导航在线播放| 久久久不卡网国产精品二区| 成人99免费视频| 一区二区三区电影在线播| 欧美色精品天天在线观看视频| 午夜av电影一区| 精品国产一区二区三区四区四| 国产成人免费9x9x人网站视频| 国产精品久久久99| 欧美三电影在线| 国产一区二区剧情av在线| 国产精品女主播av| 欧美日韩国产美女| 久久国产精品第一页| 中国av一区二区三区| 欧美日高清视频| 国产麻豆精品视频| 一区二区成人在线视频 | 午夜精品免费在线观看| 欧美丰满美乳xxx高潮www| 狠狠狠色丁香婷婷综合激情| 亚洲人成网站精品片在线观看 | 亚洲一二三四久久| 欧美精品一区二区蜜臀亚洲| 91在线云播放| 另类的小说在线视频另类成人小视频在线| 国产精品无人区| 欧美一级免费观看| 99久久国产免费看| 久久国产三级精品| 亚洲综合一区二区| 久久精品在这里| 5858s免费视频成人| 成人小视频免费在线观看| 日韩成人免费在线| 亚洲黄色免费电影| 国产欧美综合色| 日韩欧美中文字幕一区| 一本色道**综合亚洲精品蜜桃冫| 久久激情综合网| 午夜精品123| 亚洲色图第一区| 国产亚洲短视频| 日韩精品一区二区三区中文不卡| 色欲综合视频天天天| 国v精品久久久网| 久久国产乱子精品免费女| 亚洲h动漫在线| 一区二区三区久久| 国产精品理论片| 欧美精品一区视频| 91精品久久久久久久91蜜桃| 欧美亚洲国产一区二区三区va | 国产成人精品综合在线观看| 欧美a级理论片| 天天色图综合网| 一区二区三区丝袜| 日韩理论片在线| 中文字幕一区二区三区精华液| 国产亚洲欧美一级| www国产精品av| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲人123区| 国产精品美女久久久久久久| 国产亚洲欧美日韩日本| 精品国产伦一区二区三区观看方式 | 国产精品第五页| 国产精品久久久久久久久动漫| 久久久精品欧美丰满| 亚洲精品一区二区三区99| 久久综合狠狠综合久久激情| 26uuu精品一区二区三区四区在线| 日韩你懂的在线播放| 337p粉嫩大胆噜噜噜噜噜91av| 精品国产乱码久久久久久久| 久久综合一区二区| 久久综合色8888| 国产日韩欧美麻豆| 国产精品高潮久久久久无| 亚洲欧美一区二区三区孕妇| 亚洲激情成人在线| 五月天激情综合| 麻豆免费看一区二区三区| 国精产品一区一区三区mba视频| 韩国女主播成人在线| 丁香婷婷综合色啪| 91麻豆免费视频| 欧美日本在线观看| 日韩欧美成人激情| 亚洲国产经典视频| 亚洲午夜激情网站| 蜜桃av噜噜一区二区三区小说| 国产在线视视频有精品| av电影一区二区| 欧美日韩一区二区三区视频| 欧美大度的电影原声| 日本一区二区三区电影| 悠悠色在线精品| 日本视频免费一区| 成人免费黄色大片| 欧美日韩视频在线第一区| 精品国产免费视频| 亚洲婷婷综合色高清在线| 亚洲国产综合色| 国产麻豆精品视频| 欧美色综合影院| 精品国产乱子伦一区| 亚洲欧美一区二区三区孕妇| 青青草一区二区三区| 成人av在线资源| 欧美浪妇xxxx高跟鞋交| 国产女同互慰高潮91漫画| 亚洲一二三区在线观看| 国产精品一区二区黑丝| 精品视频色一区| 中文字幕第一区第二区| 日韩**一区毛片| 99精品久久99久久久久| 日韩视频国产视频| 亚洲精品中文在线影院| 激情av综合网| 欧美片网站yy| 亚洲欧洲精品一区二区三区不卡 | 中文字幕欧美一| 麻豆精品在线观看| 在线观看国产91| 欧美韩国日本不卡| 青青草97国产精品免费观看| 91在线观看视频| 欧美精品一区二区三区蜜桃 | 久久国产麻豆精品| 精品视频在线视频| 中文字幕一区二区三区乱码在线 | 欧美一级爆毛片| 尤物视频一区二区| www.日韩在线| 国产亚洲视频系列| 九九精品视频在线看| 欧美日韩国产综合久久| 1区2区3区欧美| 丰满白嫩尤物一区二区| 欧美成人一级视频| 日韩精品91亚洲二区在线观看| 91激情五月电影| 中文字幕在线一区| 国产成a人无v码亚洲福利| 日韩欧美色综合网站| 午夜日韩在线观看| 欧美日韩一区在线| 亚洲一区二区三区四区在线观看 | 久久青草欧美一区二区三区| 日韩黄色小视频| 欧美精品一二三| 亚洲成av人片| 欧美精品色一区二区三区| 亚洲精品免费在线| 91国偷自产一区二区开放时间 | 欧美电影免费观看高清完整版在线 | 中文字幕高清一区| 丁香一区二区三区| 中文字幕的久久| 91性感美女视频| 亚洲精品成人天堂一二三| 91麻豆免费在线观看| 综合久久给合久久狠狠狠97色| 成人美女视频在线看| 中文字幕人成不卡一区| 91免费看视频| 一区二区三区欧美在线观看| 欧美性色综合网| 亚洲第一福利视频在线| 欧美午夜精品电影| 日本伊人午夜精品| 欧美一级久久久久久久大片| 捆绑变态av一区二区三区| 欧美精品一区二区三区一线天视频 | 国产精品入口麻豆九色| 91网站最新网址| 亚洲电影在线免费观看| 欧美一级xxx| 国产精品一区二区久久不卡| 中文字幕免费不卡| 色婷婷激情一区二区三区| 亚洲成人av免费| 精品成人一区二区| 不卡av免费在线观看| 亚洲一区二区三区四区在线| 欧美一级专区免费大片| 国产精品自拍av| 亚洲男女一区二区三区| 在线播放一区二区三区| 国产精品77777竹菊影视小说| 亚洲人成小说网站色在线| 91精品综合久久久久久|