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

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

?? main.c

?? Free Dos 源代碼 操作系統 可以參照學習操作系統
?? C
字號:

/****************************************************************/
/*                                                              */
/*                           main.c                             */
/*                            DOS-C                             */
/*                                                              */
/*                    Main Kernel Functions                     */
/*                                                              */
/*                   Copyright (c) 1995, 1996                   */
/*                      Pasquale J. Villani                     */
/*                      All Rights Reserved                     */
/*                                                              */
/* This file is part of DOS-C.                                  */
/*                                                              */
/* DOS-C is free software; you can redistribute it and/or       */
/* modify it under the terms of the GNU General Public License  */
/* as published by the Free Software Foundation; either version */
/* 2, or (at your option) any later version.                    */
/*                                                              */
/* DOS-C is distributed in the hope that it will be useful, but */
/* WITHOUT ANY WARRANTY; without even the implied warranty of   */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    */
/* the GNU General Public License for more details.             */
/*                                                              */
/* You should have received a copy of the GNU General Public    */
/* License along with DOS-C; see the file COPYING.  If not,     */
/* write to the Free Software Foundation, 675 Mass Ave,         */
/* Cambridge, MA 02139, USA.                                    */
/****************************************************************/


#define MAIN
#include "../../hdr/portab.h"
#include "globals.h"

/* $Logfile:   C:/dos-c/src/kernel/main.c_v  $ */
#ifdef VERSION_STRINGS
static BYTE *mainRcsId = "$Header:   C:/dos-c/src/kernel/main.c_v   1.11   22 Jan 1998  4:09:24   patv  $";
#endif

/* $Log:   C:/dos-c/src/kernel/main.c_v  $
 * 
 *    Rev 1.11   22 Jan 1998  4:09:24   patv
 * Fixed pointer problems affecting SDA
 * 
 *    Rev 1.10   04 Jan 1998 23:15:20   patv
 * Changed Log for strip utility
 * 
 *    Rev 1.9   04 Jan 1998 17:26:16   patv
 * Corrected subdirectory bug
 * 
 *    Rev 1.8   03 Jan 1998  8:36:48   patv
 * Converted data area to SDA format
 * 
 *    Rev 1.7   06 Feb 1997 21:35:46   patv
 * Modified to support new version format and changed debug message to
 * output drive letter instead of number.
 * 
 *    Rev 1.6   22 Jan 1997 13:05:02   patv
 * Now does correct default drive initialization.
 * 
 *    Rev 1.5   16 Jan 1997 12:47:00   patv
 * pre-Release 0.92 feature additions
 * 
 *    Rev 1.3   29 May 1996 21:03:32   patv
 * bug fixes for v0.91a
 * 
 *    Rev 1.2   19 Feb 1996  3:21:36   patv
 * Added NLS, int2f and config.sys processing
 * 
 *    Rev 1.1   01 Sep 1995 17:54:18   patv
 * First GPL release.
 * 
 *    Rev 1.0   02 Jul 1995  8:33:18   patv
 * Initial revision.
 */
/* $EndLog$ */

static COUNT BlockIndex = 0;

VOID    configDone(VOID);

VOID init_kernel(VOID), signon(VOID), kernel(VOID);
static COUNT p_0(VOID);
VOID FsConfig(VOID);

VOID 
main (void)
{
#ifdef KDB
	BootDrive = 1;
#endif
        init_kernel();
#ifdef DEBUG
	/* Non-portable message kludge alert!				*/
        printf("KERNEL: Boot drive = %c\n", 'A' + BootDrive - 1);
#endif
        signon();
        kernel();
}



VOID 
reinit_k (void)
{
        REG COUNT i;
        UWORD FAR *stack = (UWORD FAR *)&error_tos;

        /* Re-initialize drivers                        */
        syscon = &con_dev;

        /* Re-initialize stacks                         */
        api_sp = FP_OFF(stack);
        api_ss = FP_SEG(stack);

        /* Test ram for sane mcb's                      */
        if(DosMemCheck() != SUCCESS)
                panic("Memory corrupted");
}


static VOID 
init_kernel (void)
{
        REG struct dhdr FAR *dhp = (struct dhdr FAR *)&nul_dev;
        UWORD FAR *stack;
        COUNT i;
        
        cu_psp = DOS_PSP;    
        nblkdev = 0;
        maxbksize = 0x200;
        switchar = '/';
        
        /* initialize stack                                     */
        stack = (UWORD FAR *)&error_tos;

        /* Init oem hook - returns memory size in KB    */
        ram_top = init_oem();

        /* Initialize driver chain                                      */
        dhp = link_dhdr(dhp, (struct dhdr FAR *)&con_dev, NULL);
        dhp = link_dhdr(dhp, (struct dhdr FAR *)&clk_dev, NULL);
        dhp = link_dhdr(dhp, (struct dhdr FAR *)&blk_dev, NULL);
        syscon = (struct dhdr FAR *)&con_dev;
        clock = (struct dhdr FAR *)&clk_dev;

#ifndef KDB
	for (i = 0x20; i <= 0x3f; i++)
	     setvec(i, empty_handler);

	/* set interrupt vectors                                        */
	setvec(0x20, int20_handler);
	setvec(0x21, int21_handler);
	setvec(0x22, int22_handler);
	setvec(0x23, int23_handler);
	setvec(0x24, int24_handler);
	setvec(0x25, (VOID (INRPT FAR *)())low_int25_handler);
	setvec(0x26, (VOID (INRPT FAR *)())low_int26_handler);
	setvec(0x27, int27_handler);
	setvec(0x28, int28_handler);
	setvec(0x29, int29_handler);    /* Requires Fast Con Driver     */
	setvec(0x2f, int2f_handler);
#endif

	/* Initialize stacks                                            */
        api_sp = FP_OFF(stack);
        api_ss = FP_SEG(stack);

        /* Initialize the screen handler for backspaces                 */
        scr_pos = 0;
        break_ena = TRUE;

        /* Do first initialization of system variable buffers so that   */
        /* we can read config.sys later.                                */
	lastdrive = Config.cfgLastdrive;
	PreConfig();

	/* Now config the temporary file system                         */
	FsConfig();

#ifndef KDB
	/* Now process CONFIG.SYS                                       */
	DoConfig();

	lastdrive = Config.cfgLastdrive;
	if (lastdrive < nblkdev)
		lastdrive = nblkdev;

        /* and do final buffer allocation.                              */
        PostConfig();
        
        /* Now config the final file system                             */
        FsConfig();

        /* and process CONFIG.SYS one last time to load device drivers. */
        DoConfig();
	configDone();
#endif

        /* Now to initialize all special flags, etc.                    */
        mem_access_mode = FIRST_FIT;
        verify_ena = FALSE;
        InDOS = 0;
        version_flags = 0;
        pDirFileNode = 0;
}

VOID FsConfig(VOID)
{
        REG COUNT i;

        /* Initialize the file tables                                   */
        for(i = 0; i < Config.cfgFiles; i++)
                f_nodes[i].f_count = 0;

        /* The system file tables need special handling and are "hand   */
        /* built. Included is the stdin, stdout, stdaux and atdprn.     */
        sfthead -> sftt_next = (sfttbl FAR *)-1;
        sfthead -> sftt_count = Config.cfgFiles;
        for(i = 0; i < sfthead -> sftt_count ; i++)
        {
                sfthead -> sftt_table[i].sft_count = 0;
                sfthead -> sftt_table[i].sft_status = -1;
        }
        /* 0 is /dev/con (stdin)                                        */
        sfthead -> sftt_table[0].sft_count = 1;
        sfthead -> sftt_table[0].sft_mode = SFT_MREAD;
        sfthead -> sftt_table[0].sft_attrib = 0;
        sfthead -> sftt_table[0].sft_flags =
          (con_dev.dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FEOF | SFT_FSTDIN | SFT_FSTDOUT;
        sfthead -> sftt_table[0].sft_psp = DOS_PSP;
        fbcopy(
                (VOID FAR *)"CON        ",
                (VOID FAR *)sfthead -> sftt_table[0].sft_name, 11);
        sfthead -> sftt_table[0].sft_dev = (struct dhdr FAR *)&con_dev;

        /* 1 is /dev/con (stdout)                                       */
        sfthead -> sftt_table[1].sft_count = 1;
        sfthead -> sftt_table[1].sft_mode = SFT_MWRITE;
        sfthead -> sftt_table[1].sft_attrib = 0;
        sfthead -> sftt_table[1].sft_flags = 
          (con_dev.dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FEOF | SFT_FSTDIN  | SFT_FSTDOUT;
        sfthead -> sftt_table[1].sft_psp = DOS_PSP;
        fbcopy(
                (VOID FAR *)"CON        ",
                (VOID FAR *)sfthead -> sftt_table[1].sft_name, 11);
        sfthead -> sftt_table[1].sft_dev = (struct dhdr FAR *)&con_dev;

        /* 2 is /dev/con (stderr)                                       */
        sfthead -> sftt_table[2].sft_count = 1;
        sfthead -> sftt_table[2].sft_mode = SFT_MWRITE;
        sfthead -> sftt_table[2].sft_attrib = 0;
        sfthead -> sftt_table[2].sft_flags = 
          (con_dev.dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FEOF | SFT_FSTDIN  | SFT_FSTDOUT;
        sfthead -> sftt_table[2].sft_psp = DOS_PSP;
        fbcopy(
                (VOID FAR *)"CON        ",
                (VOID FAR *)sfthead -> sftt_table[2].sft_name, 11);
        sfthead -> sftt_table[2].sft_dev = (struct dhdr FAR *)&con_dev;

        /* 3 is /dev/aux (/dev/null for now)                            */
        sfthead -> sftt_table[3].sft_count = 1;
        sfthead -> sftt_table[3].sft_mode = SFT_MWRITE;
        sfthead -> sftt_table[3].sft_attrib = 0;
        sfthead -> sftt_table[3].sft_flags = 
          (nul_dev.dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FNUL;
        sfthead -> sftt_table[3].sft_psp = DOS_PSP;
        fbcopy(
                (VOID FAR *)"NUL        ",
                (VOID FAR *)sfthead -> sftt_table[3].sft_name, 11);
        sfthead -> sftt_table[3].sft_dev = (struct dhdr FAR *)&nul_dev;

        /* 4 is /dev/prn (/dev/null for now)                            */
        sfthead -> sftt_table[4].sft_count = 1;
        sfthead -> sftt_table[4].sft_mode = SFT_MWRITE;
        sfthead -> sftt_table[4].sft_attrib = 0;
        sfthead -> sftt_table[4].sft_flags =
          (nul_dev.dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FNUL;
        sfthead -> sftt_table[4].sft_psp = DOS_PSP;
        fbcopy(
                (VOID FAR *)"NUL        ",
                (VOID FAR *)sfthead -> sftt_table[4].sft_name, 11);
        sfthead -> sftt_table[4].sft_dev = (struct dhdr FAR *)&nul_dev;

        /* Log-in the default drive.                                    */
        /* Get the boot drive from the ipl and use it for default.      */
        default_drive = BootDrive - 1;

        /* Initialzie the current directory structures                  */
        for(i = 0; i < NDEVS; i++)
                scopy("\\", blk_devices[i].dpb_path);

        /* Initialze the disk buffer management functions               */
        init_buffers();
}


static VOID signon()
{
        printf("\nDOS-C compatibility %d.%02d\n%s\n",
                os_major, os_minor, copyright);
        printf(os_release,
         REVISION_MAJOR, REVISION_MINOR, REVISION_SEQ,
         BUILD);
}


static VOID kernel()
{
        seg asize;
        BYTE FAR *ep, *sp;
        COUNT ret_code;
#ifndef KDB
        static BYTE *path = "PATH=";
#endif

#ifdef KDB
        kdb();
#else
        /* create the master environment area                           */
        if(DosMemAlloc(0x20, FIRST_FIT, (seg FAR *)&master_env, (seg FAR *)&asize) < 0)
                fatal("cannot allocate master environment space");

        /* populate it with the minimum environment                     */
        ++master_env;       
        ep = MK_FP(master_env, 0);   
        
        for(sp = path; *sp != 0; )
                *ep++ = *sp++;

        *ep++ = '\0';
        *ep++ = '\0';
        *((int FAR *)ep) = 0;
        ep += sizeof(int);    
#endif
        ret_code = p_0();
        exit(ret_code);
}

/* process 0                                                            */
static COUNT
p_0(VOID)
{
        exec_blk exb;
        CommandTail Cmd;
        BYTE FAR *szfInitialPrgm = (BYTE FAR *)Config.cfgInit;
        int     rc;

        /* Execute command.com /P from the drive we just booted from    */
        exb.exec.env_seg = master_env;
        strcpy(Cmd.ctBuffer, Config.cfgInitTail);
        
        for (Cmd.ctCount = 0; Cmd.ctCount < 127; Cmd.ctCount++)
            if (Cmd.ctBuffer[Cmd.ctCount] == '\r') break;

        exb.exec.cmd_line = (CommandTail FAR *)&Cmd;
        exb.exec.fcb_1 = exb.exec.fcb_2 = (fcb FAR *)0;
#ifdef DEBUG
        printf("Process 0 starting: %s\n\n", (BYTE *)szfInitialPrgm);
#endif 
        if((rc = DosExec(0, (exec_blk FAR *)&exb, szfInitialPrgm)) != SUCCESS)
        {
                printf("\nBad or missing Command Interpreter: %d\n", rc);
                return -1;
        }
        else
        {
                printf("\nSystem shutdown complete\nReboot now.\n");
                return 0;
        }
}

extern BYTE FAR *lpBase;

/* If cmdLine is NULL, this is an internal driver */

VOID 
init_device (struct dhdr FAR *dhp, BYTE FAR *cmdLine)
{
        request rq;
        ULONG memtop = ((ULONG)ram_top) << 10;
        ULONG maxmem = memtop - ((ULONG)FP_SEG(dhp) << 4);

        if (maxmem >= 0x10000) maxmem = 0xFFFF;

        rq.r_unit = 0;
        rq.r_status = 0;
        rq.r_command = C_INIT;
        rq.r_length = sizeof(request);
        rq.r_endaddr = MK_FP(FP_SEG(dhp), maxmem);
        rq.r_bpbptr = (void FAR *)(cmdLine? cmdLine : "\n");
        rq.r_firstunit = nblkdev;

        execrh((request FAR *)&rq, dhp);
        
        if (cmdLine) lpBase = rq.r_endaddr;
        
        /* check for a block device and update  device control block    */
        if(!(dhp -> dh_attr & ATTR_CHAR) && (rq.r_nunits != 0))
        {
                REG COUNT Index;
                
                for(Index = 0; Index < rq.r_nunits; Index++, BlockIndex++)
                {
                        if (nblkdev)
                            blk_devices[nblkdev - 1].dpb_next = &blk_devices[nblkdev];

                        blk_devices[nblkdev].dpb_unit = nblkdev;
                        blk_devices[nblkdev].dpb_subunit = Index;
                        blk_devices[nblkdev].dpb_device = dhp;
                        blk_devices[nblkdev].dpb_flags = M_CHANGED;
                        
                        ++nblkdev;
                }
                blk_devices[nblkdev - 1].dpb_next = (void FAR *)0xFFFFFFFF;
        }
        DPBp = &blk_devices[0];
}
            
struct dhdr FAR *link_dhdr(struct dhdr FAR *lp, struct dhdr FAR *dhp, BYTE FAR *cmdLine)
{
        lp -> dh_next = dhp;
        init_device(dhp, cmdLine);
        return dhp;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区视频| 国产精品一区二区视频| 国产精品综合av一区二区国产馆| 国产超碰在线一区| 在线观看欧美黄色| 中文字幕av一区二区三区高 | 一本到高清视频免费精品| 精品少妇一区二区三区在线播放| 国产精品久久久久久户外露出| 日韩二区三区在线观看| 色域天天综合网| 中文字幕免费观看一区| 国产一区二区网址| 91精品国产全国免费观看| 玉米视频成人免费看| 国产精品911| 久久毛片高清国产| 久久成人免费网站| 欧美一区二视频| 视频在线观看国产精品| 欧美性猛交xxxx黑人交| 亚洲国产精品99久久久久久久久| 日本不卡一区二区三区| 欧美影院一区二区| 成人免费电影视频| 久久久久久久精| 狠狠狠色丁香婷婷综合激情| 91精品国产综合久久婷婷香蕉| 亚洲一区二区三区爽爽爽爽爽| 91麻豆国产福利在线观看| 中文av一区特黄| 国产精品一区专区| 国产日韩欧美精品综合| 国产一区二区三区| 国产亚洲欧美色| 成人激情黄色小说| 国产精品久久久久久久久图文区| 高清av一区二区| 国产日韩欧美一区二区三区乱码| 丁香桃色午夜亚洲一区二区三区| 久久久av毛片精品| 成人一区二区三区视频| 亚洲欧美一区二区视频| 99re66热这里只有精品3直播| 日韩伦理电影网| 91成人国产精品| 亚洲一卡二卡三卡四卡| 在线电影院国产精品| 免费精品视频最新在线| 久久久久久久综合色一本| 在线亚洲欧美专区二区| 日韩和欧美一区二区三区| 欧美一区二区三区视频免费| 国模少妇一区二区三区| 国产女人18水真多18精品一级做 | 色就色 综合激情| 亚洲国产另类精品专区| 欧美一二三四在线| 国产精品一区二区三区网站| 国产精品久久久久久久久免费丝袜| 日本精品一区二区三区四区的功能| 亚洲国产精品麻豆| 日韩精品一区二区三区视频播放| 国产91高潮流白浆在线麻豆| 亚洲少妇屁股交4| 欧美一级理论片| 成人午夜激情片| 水野朝阳av一区二区三区| 久久综合久久鬼色| 在线亚洲+欧美+日本专区| 久久99国产精品久久99| 中文字幕免费观看一区| 欧美高清dvd| 成人ar影院免费观看视频| 午夜精品福利久久久| 中文字幕乱码久久午夜不卡| 欧美三区在线视频| 岛国精品在线播放| 日本欧美一区二区三区乱码| 国产精品久久久久aaaa樱花| 欧美精品久久久久久久多人混战| 成人国产精品免费网站| 久久精品免费观看| 亚洲成av人**亚洲成av**| 国产欧美1区2区3区| 欧美日韩精品二区第二页| 97精品久久久久中文字幕| 美女免费视频一区| 亚洲电影中文字幕在线观看| 国产日产欧美一区| 日韩欧美在线123| 欧美丝袜自拍制服另类| 99久久99久久综合| 国产九色精品成人porny | 国产一区二区女| 日韩不卡一区二区三区 | 色偷偷久久人人79超碰人人澡| 日本欧美大码aⅴ在线播放| 国产精品网站在线观看| 精品女同一区二区| 日韩一区二区不卡| 欧美精品久久99久久在免费线| 一本一道综合狠狠老| 成人精品小蝌蚪| 国产一区中文字幕| 精品一二三四在线| 九一九一国产精品| 精品一区二区免费| 久草中文综合在线| 奇米影视在线99精品| 三级在线观看一区二区| 亚洲一区二区三区激情| 亚洲一区二区四区蜜桃| 亚洲免费观看高清完整| 亚洲三级电影全部在线观看高清| 国产精品色哟哟网站| 国产精品激情偷乱一区二区∴| 国产拍欧美日韩视频二区| 国产日产亚洲精品系列| 国产精品久久久久影院老司| 国产精品嫩草影院av蜜臀| 国产精品国产精品国产专区不片| 国产精品不卡在线| 亚洲免费电影在线| 亚洲黄色免费网站| 亚洲va韩国va欧美va精品| 天堂在线亚洲视频| 麻豆高清免费国产一区| 国产一区二区三区最好精华液| 国产美女娇喘av呻吟久久| 成人一区二区三区| 97久久超碰国产精品电影| 色婷婷一区二区| 欧美伦理电影网| 精品久久久久久久久久久久包黑料 | 亚洲精品成人悠悠色影视| 亚洲精品国产一区二区三区四区在线| 亚洲视频香蕉人妖| 三级精品在线观看| 国产一区二区伦理片| 成人av动漫在线| 欧美精品久久天天躁| 久久精品亚洲精品国产欧美kt∨| 国产精品无圣光一区二区| 亚洲国产精品精华液网站| 美女视频网站黄色亚洲| 国产99精品在线观看| 91行情网站电视在线观看高清版| 91麻豆精品国产91久久久使用方法 | 国产精品第五页| 亚洲丰满少妇videoshd| 国产一区999| 欧美日韩一二三| 欧美国产一区视频在线观看| 亚洲无线码一区二区三区| 国产精品一级二级三级| 色女孩综合影院| 久久亚洲精品小早川怜子| 亚洲男人都懂的| 激情五月婷婷综合网| 在线一区二区观看| 国产精品视频一区二区三区不卡| 亚洲午夜影视影院在线观看| 国产999精品久久久久久绿帽| 欧美一区二区三区电影| 18成人在线观看| 精品一区二区三区在线视频| 色综合久久久久久久| 久久你懂得1024| 日韩中文字幕区一区有砖一区| 成人动漫一区二区三区| 日韩欧美国产午夜精品| 亚洲免费观看高清完整版在线观看| 国产精品影视网| 日韩亚洲欧美中文三级| 亚洲综合色视频| 99re这里只有精品首页| 精品1区2区在线观看| 五月天中文字幕一区二区| zzijzzij亚洲日本少妇熟睡| 2023国产精华国产精品| 视频一区二区三区入口| 色天天综合久久久久综合片| 亚洲国产成人在线| 国产精品系列在线播放| 欧美精品一区二区在线播放| 日韩综合在线视频| 制服丝袜亚洲精品中文字幕| 亚洲综合视频在线观看| 91在线国产福利| 亚洲欧洲美洲综合色网| 国产传媒一区在线| 久久蜜桃香蕉精品一区二区三区| 精品一区二区免费视频| 精品国产乱码久久久久久久久| 婷婷国产在线综合| 91精品视频网| 久久精品国产久精国产爱| 欧美一级xxx| 国产伦精品一区二区三区免费|