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

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

?? task.c

?? 這是DOS操作系統啟動的源代碼 里面是匯編語言 包括了部分的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************/
/*                                                              */
/*                           task.c                             */
/*                                                              */
/*                 Task Manager for DOS Processes               */
/*                                                              */
/*                      Copyright (c) 1995                      */
/*                      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.                                    */
/****************************************************************/

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

/* $Logfile:   C:/dos-c/src/kernel/task.c_v  $ */
#ifdef VERSION_STRINGS
static BYTE *RcsId = "$Header:   C:/dos-c/src/kernel/task.c_v   1.14   07 Feb 1998 20:38:32   patv  $";
#endif

/* $Log:   C:/dos-c/src/kernel/task.c_v  $
 * 
 *    Rev 1.14   07 Feb 1998 20:38:32   patv
 * Modified stack fram to match DOS standard
 * 
 *    Rev 1.13   31 Jan 1998 14:39:20   patv
 * Corrected type in load high code.
 * 
 *    Rev 1.12   31 Jan 1998 14:02:52   patv
 * Added load high in memory option in DosExeLoader.
 * 
 *    Rev 1.11   22 Jan 1998 22:17:14   patv
 * Eliminated warnings.
 * 
 *    Rev 1.10   22 Jan 1998 21:31:36   patv
 * Corrected short .COM problem.
 * 
 *    Rev 1.9   04 Jan 1998 23:15:16   patv
 * Changed Log for strip utility
 * 
 *    Rev 1.8   22 Jan 1997 13:18:14   patv
 * pre-0.92 Svante Frey bug fixes.
 * 
 *    Rev 1.7   16 Jan 1997 12:46:56   patv
 * pre-Release 0.92 feature additions
 * 
 *    Rev 1.5   29 Aug 1996 13:07:22   patv
 * Bug fixes for v0.91b
 * 
 *    Rev 1.4   29 May 1996 21:03:36   patv
 * bug fixes for v0.91a
 * 
 *    Rev 1.3   19 Feb 1996  3:21:48   patv
 * Added NLS, int2f and config.sys processing
 * 
 *    Rev 1.2   01 Sep 1995 17:54:22   patv
 * First GPL release.
 * 
 *    Rev 1.1   30 Jul 1995 20:51:58   patv
 * Eliminated version strings in ipl
 * 
 *    Rev 1.0   02 Jul 1995  8:34:06   patv
 * Initial revision.
 */
/* $EndLog$ */

#define LOADNGO 0
#define LOAD    1
#define OVERLAY 3

static exe_header header;

#define CHUNK 16384
#define MAXENV 32768

#ifndef PROTO
COUNT ChildEnv(exec_blk FAR *, UWORD *, char far *);
#else
COUNT ChildEnv();
#endif

#ifndef IPL
COUNT 
ChildEnv (exec_blk FAR *exp, UWORD *pChildEnvSeg, char far *pathname)
{
        BYTE FAR *pSrc;
        BYTE FAR *pDest;
        UWORD nEnvSize;
        COUNT RetCode;
        UWORD MaxEnvSize;
        psp FAR *ppsp = MK_FP( cu_psp, 0);
       
        /* create a new environment for the process             */
        /* copy parent's environment if exec.env_seg == 0       */

        pSrc = exp -> exec.env_seg ? 
                        MK_FP(exp -> exec.env_seg, 0) :
                        MK_FP(ppsp -> ps_environ, 0);
                   
        if (!pSrc)    /* no environment to copy */
        {
                *pChildEnvSeg = 0;
                return SUCCESS;
        }

        for(nEnvSize = 0; *pSrc != '\0'; )
        {
                while(*pSrc != '\0')
                {
                        ++pSrc;
                        ++nEnvSize;
                }
                /* account for terminating null         */
                ++nEnvSize;
                ++pSrc;
        }

        /* Test env size and abort if greater than max          */
        if(nEnvSize >= MAXENV)
                return DE_INVLDENV;

        /* allocate enough space for env + path                 */
        if((RetCode = DosMemAlloc(long2para(nEnvSize + 65), 
          FIRST_FIT, (seg FAR *)pChildEnvSeg,
          (UWORD FAR *)MaxEnvSize)) < 0)
                return RetCode;
        else
                pDest = MK_FP(*pChildEnvSeg + 1, 0);

        /* fill the new env and inform the process of its       */
        /* location throught the psp                            */
        pSrc = exp -> exec.env_seg ? 
                        MK_FP(exp -> exec.env_seg, 0) :
                        MK_FP(ppsp -> ps_environ, 0);
        
        /* copy the environment */
        for( ; *pSrc != '\0'; )
        {
                while (*pSrc) 
                {
                        *pDest++ = *pSrc++;  
                } 
                pSrc++;
                *pDest++ = 0;
        }
        *pDest++ = 0;
        /* initialize 'extra strings' count */
        *pDest++ = 1;
        *pDest++ = 0;
        
        /* copy complete pathname */
        truename(pathname, pDest);
        return SUCCESS;
}

#endif


/* The following code is 8086 dependant                         */
VOID 
new_psp (psp FAR *p, int psize)
{
        REG COUNT i;
        BYTE FAR *lpPspBuffer;
        psp FAR *q = MK_FP(cu_psp, 0);

        /* Clear out new psp first                              */
        for(lpPspBuffer = (BYTE FAR *)p, i = 0; i < sizeof(psp) ; ++i)
                *lpPspBuffer = 0;
        
        /* initialize all entries and exits                     */
        /* CP/M-like exit point                                 */
        p -> ps_exit = 0x20cd;     
        
        /* CP/M-like entry point - jump to special entry        */
        p -> ps_farcall= 0xea;
#ifndef IPL
        p -> ps_reentry = cpm_entry;
#endif
        /* unix style call - 0xcd 0x21 0xcb (int 21, retf)      */
        p -> ps_unix[0] = 0xcd;
        p -> ps_unix[1] = 0x21; 
        p -> ps_unix[2] = 0xcb; 

        /* Now for parent-child relationships                   */
        /* parent psp segment                                   */
        p -> ps_parent = cu_psp;
        /* previous psp pointer                                 */
        p -> ps_prevpsp = q;

#ifndef IPL
        /* Environment and memory useage parameters             */
        /* memory size in paragraphs                            */
        p -> ps_size = psize;
        /* environment paragraph                                */
        p -> ps_environ = 0;
        /* process dta                                          */
        p -> ps_dta = (BYTE FAR *)(&p -> ps_cmd_count);
        
        /* terminate address                                    */
        p -> ps_isv22 = (VOID(interrupt FAR *)(void))getvec(0x22);
        /* break address                                        */
        p -> ps_isv23 = (VOID(interrupt FAR *)(void))getvec(0x23);
        /* critical error address                               */
        p -> ps_isv24 = (VOID(interrupt FAR *)(void))getvec(0x24);
#endif

        /* File System parameters                               */
        /* user stack pointer - int 21                          */
        p -> ps_stack = (BYTE FAR *)-1;
        /* file table - 0xff is unused                          */
        for(i = 0; i < 20; i++)
                p -> ps_files[i] = 0xff;
        
        /* maximum open files                                   */
        p -> ps_maxfiles = 20;
        /* open file table pointer                              */
        p -> ps_filetab = p -> ps_files;

#ifndef IPL
        /* clone the file table                                 */
        if(InDOS > 0)
        {
                REG COUNT i;
                
                for(i = 0; i < 20; i++)
                {
                        REG COUNT ret;

                        if(q -> ps_filetab[i] != 0xff
                         && ((ret = CloneHandle(q -> ps_filetab[i])) >= 0))
                        {        
                                p -> ps_filetab[i] = ret;
                        }
                        else
                                p -> ps_filetab[i] = 0xff;
                }
        }
        else
        {
                /* initialize stdin, stdout, etc                        */
                p -> ps_files[STDIN] = 0;       /* stdin                */
                p -> ps_files[STDOUT] = 1;      /* stdout               */
                p -> ps_files[STDERR] = 2;      /* stderr               */
                p -> ps_files[STDAUX] = 3;      /* stdaux               */
                p -> ps_files[STDPRN] = 4;      /* stdprn               */
       }
#else
        /* initialize stdin, stdout, etc                        */
        p -> ps_files[STDIN] = 0;       /* stdin                */
        p -> ps_files[STDOUT] = 1;      /* stdout               */
        p -> ps_files[STDERR] = 2;      /* stderr               */
        p -> ps_files[STDAUX] = 3;      /* stdaux               */
        p -> ps_files[STDPRN] = 4;      /* stdprn               */
#endif

        /* first command line argument                          */
        p -> ps_fcb1.fcb_drive = 0;
        /* second command line argument                         */
        p -> ps_fcb2.fcb_drive = 0;

        /* local command line                                   */
        p -> ps_cmd_count = 0;  /* command tail                 */
        p -> ps_cmd[0] = 0;     /* command tail                 */
}


#ifndef IPL
static COUNT 
DosComLoader (BYTE FAR *namep, exec_blk FAR *exp, COUNT mode)
{
        COUNT rc, env_size, nread;
        UWORD mem;
        UWORD env, asize;
        BYTE FAR *sp, FAR *dp;
        psp FAR *p;
        psp FAR *q = MK_FP(cu_psp, 0);
        mcb FAR *mp, FAR *envp = 0;
        iregs FAR *irp;
        LONG com_size;
        
        if(mode != OVERLAY)
        {
                
                if((rc = ChildEnv(exp, &env, namep)) != SUCCESS)
                {        
                        return rc;
                }
                /* Allocate our memory and pass back any errors         */
                if((rc = DosMemAlloc(0, LARGEST, (seg FAR *)&mem, (UWORD FAR *)&asize)) < 0)
                {
                        if(env != 0)
                           DosMemFree(env);
                        
                        return rc;
                }
                mp = MK_FP(mem, 0);
                ++mem;
                envp = MK_FP(env, 0);
        }
        else mem = exp -> load.load_seg;

        /* Now load the executable                              */
        /* If file not found - error                            */
        /* NOTE - this is fatal because we lost it in transit   */
        /* from DosExec!                                        */
        if((rc = dos_open(namep, 0)) < 0)
                fatal("(DosComLoader) com file lost in transit");
        /* do it in 32K chunks                                  */
        sp = MK_FP(mem, mode == OVERLAY? 0 : sizeof(psp));
        for(com_size = dos_getfsize(rc), nread = 0; com_size > 0; )
        {
                nread = dos_read(rc, sp, CHUNK);
                sp = add_far((VOID FAR *)sp, (ULONG)nread);
                com_size -= nread;
                if(nread < CHUNK)
                        break;
        }
        dos_close(rc);

        if(mode == OVERLAY)
                 return SUCCESS;

        /* point to the PSP so we can build it                  */
        p = MK_FP(mem, 0);
        setvec(0x22, (VOID (INRPT FAR *)(VOID))MK_FP(user_r -> CS, user_r -> IP));
        new_psp(p, mem + asize);

        p -> ps_environ = env == 0 ? 0 : env + 1;

        /* complete the psp by adding the command line          */
        p -> ps_cmd_count = exp -> exec.cmd_line -> ctCount;
        fbcopy(exp -> exec.cmd_line -> ctBuffer, p -> ps_cmd, 127);
#if 0
        /* stick a new line on the end for safe measure         */
        p -> ps_cmd[p -> ps_cmd_count] = '\r';
#endif
        /* identify the mcb as this functions'                  */
        /* use the file name less extension - left adjusted and */
        /* space filled                                         */
        mp -> m_psp = mem;
        if (envp) envp -> m_psp = mem;   

        for(asize = 0; asize < 8; asize++)
        {
                if(namep[asize] != '.')
                        mp -> m_name[asize] = namep[asize];
                else
                        break;
        }
        for(; asize < 8; asize++)
                        mp -> m_name[asize] = ' ';

        /* build the user area on the stack                     */
        irp = MK_FP(mem, (0xfffe - sizeof(iregs)));

        /* start allocating REGs                                */
        irp -> ES = irp -> DS = mem;
        irp -> CS = mem;
        irp -> IP = 0x100;
        irp -> AX = 0xffff; /* for now, until fcb code is in    */
        irp -> BX =
        irp -> CX =
        irp -> DX =
        irp -> SI =
        irp -> DI =
        irp -> BP = 0;
        irp -> FLAGS = 0x200;

        /* Transfer control to the executable                   */
        p -> ps_parent = cu_psp;
        p -> ps_prevpsp = (BYTE FAR *)MK_FP(cu_psp, 0);
        q -> ps_stack = (BYTE FAR *)user_r;
        user_r -> FLAGS &= ~FLG_CARRY;
        
        switch(mode)
        {
        case LOADNGO:
        {        
                cu_psp = mem;
                dta = p -> ps_dta;
                if (InDOS)
                	--InDOS;
                exec_user(irp);

                /* We should never be here                      */
                fatal("KERNEL RETURNED!!!");
                break;
        }
        case LOAD:
                cu_psp = mem;
                exp -> exec.stack = (BYTE FAR *)irp;
                exp -> exec.start_addr = MK_FP(irp -> CS, irp -> IP);
                return SUCCESS;
        }

        return DE_INVLDFMT;
}


VOID 
return_user (void)
{
        psp FAR *p, FAR *q;
        REG COUNT i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久99精品久久| 久久99国产精品久久| 日本亚洲欧美天堂免费| 成a人片国产精品| 91精品国产91久久综合桃花| 亚洲人妖av一区二区| 国产真实乱偷精品视频免| 欧美三电影在线| 自拍视频在线观看一区二区| 国产一区二区三区香蕉| 欧美一级一区二区| 亚洲午夜精品久久久久久久久| 成人av网址在线观看| 久久久精品国产99久久精品芒果| 午夜视频在线观看一区| 欧美午夜精品久久久久久孕妇| 国产精品福利影院| 不卡电影免费在线播放一区| 久久久99免费| 国产成+人+日韩+欧美+亚洲| 久久影视一区二区| 国产乱子伦视频一区二区三区 | 韩国理伦片一区二区三区在线播放| 欧美日韩视频在线观看一区二区三区 | 欧美一区二区三区色| 一区二区三区中文在线观看| 不卡av在线网| 中文字幕一区在线| aa级大片欧美| 中文字幕一区二区视频| 99国内精品久久| 中文字幕中文乱码欧美一区二区 | 国产精品欧美一级免费| www.成人网.com| 亚洲女性喷水在线观看一区| 一本到一区二区三区| 夜夜嗨av一区二区三区网页| 欧美三区在线视频| 美日韩一区二区三区| 欧美一区二区三区在线观看视频| 日韩国产欧美一区二区三区| 日韩欧美国产综合一区| 国产综合久久久久久久久久久久 | 欧美喷潮久久久xxxxx| 热久久国产精品| 久久久99精品免费观看| 9l国产精品久久久久麻豆| 一区二区视频免费在线观看| 欧美夫妻性生活| 国产精品香蕉一区二区三区| 国产精品高潮呻吟| 欧美欧美欧美欧美| 国精品**一区二区三区在线蜜桃| 国产精品久久久久久久久搜平片| 欧美在线观看视频一区二区| 热久久一区二区| 国产精品色噜噜| 欧美日本在线播放| 国产·精品毛片| 天天影视涩香欲综合网| 久久网这里都是精品| 91首页免费视频| 久久精品国产精品亚洲精品 | 一本高清dvd不卡在线观看| 日韩高清一区二区| 国产精品福利影院| 欧美一级艳片视频免费观看| av一本久道久久综合久久鬼色| 婷婷丁香久久五月婷婷| 国产精品视频在线看| 91精品国产综合久久香蕉的特点| 春色校园综合激情亚洲| 青青草原综合久久大伊人精品 | 青青草国产精品97视觉盛宴| 国产三级精品视频| 欧美精品乱码久久久久久按摩 | 国产在线视频不卡二| 一区二区三区在线观看网站| 2024国产精品| 在线成人av影院| 99久久99久久精品免费观看| 精品一区二区三区视频| 亚洲综合色区另类av| 亚洲国产精品精华液2区45| 欧美人与禽zozo性伦| 99综合电影在线视频| 国产乱对白刺激视频不卡| 日韩高清国产一区在线| 亚洲免费色视频| 国产精品福利在线播放| 久久欧美中文字幕| 日韩精品一区二区三区四区| 日韩午夜激情视频| 色哟哟国产精品| 99久久婷婷国产综合精品| 国产一区高清在线| 久久99国产精品免费网站| 午夜精品一区二区三区电影天堂| 亚洲欧美日韩一区二区三区在线观看| 日韩精品专区在线影院重磅| 欧美精品九九99久久| 在线免费一区三区| 日本丶国产丶欧美色综合| 一本到不卡精品视频在线观看| 成人精品高清在线| 粉嫩av一区二区三区粉嫩| 国产黄色成人av| 国产福利一区在线观看| 国产一区二区三区不卡在线观看| 精品夜夜嗨av一区二区三区| 美女视频黄免费的久久| 精品一区免费av| 国产精品一区二区久久不卡| 国产ts人妖一区二区| 国产99久久久国产精品免费看| 国产福利不卡视频| 成人免费看片app下载| proumb性欧美在线观看| 99久久精品国产导航| 在线影院国内精品| 欧美日韩亚洲综合一区| 日韩一区二区在线播放| 久久伊人蜜桃av一区二区| 国产欧美精品一区二区三区四区| 欧美国产欧美亚州国产日韩mv天天看完整| 国产欧美一区二区三区网站| 国产精品国产三级国产| 亚洲一区免费视频| 日本强好片久久久久久aaa| 美国av一区二区| 成人高清视频在线| 欧美在线播放高清精品| 欧美第一区第二区| 国产精品卡一卡二| 香蕉久久夜色精品国产使用方法 | 九九久久精品视频| 懂色av一区二区三区免费看| 色综合中文综合网| 一区二区三区精品视频| caoporen国产精品视频| 色综合天天天天做夜夜夜夜做| 在线影视一区二区三区| 中文幕一区二区三区久久蜜桃| 日韩理论片中文av| 午夜精品一区二区三区免费视频| 经典三级在线一区| a级高清视频欧美日韩| 8x8x8国产精品| 国产无遮挡一区二区三区毛片日本| 国产欧美日韩精品一区| 日韩影院免费视频| 成人综合日日夜夜| 在线成人小视频| 日本一区二区动态图| 亚洲尤物视频在线| 韩国欧美一区二区| 在线观看av一区二区| 久久综合九色综合97_久久久| 亚洲精品一卡二卡| 国模套图日韩精品一区二区| 91久久人澡人人添人人爽欧美| 精品电影一区二区| 亚洲成av人片在线观看无码| 福利一区在线观看| 日韩一二三区不卡| 一区二区三区欧美激情| 国产精品一区不卡| 日韩亚洲欧美中文三级| 亚洲综合一二三区| 成人va在线观看| 久久免费偷拍视频| 奇米精品一区二区三区在线观看一| 91免费视频网址| 欧美国产精品久久| 国产一区亚洲一区| 日韩免费视频线观看| 日韩一区精品字幕| 91国偷自产一区二区三区观看| 国产日韩成人精品| 麻豆freexxxx性91精品| 欧美日韩不卡一区| 亚洲自拍偷拍九九九| 一本到三区不卡视频| 国产精品久久久久久福利一牛影视| 韩国欧美一区二区| 日韩欧美自拍偷拍| 秋霞午夜鲁丝一区二区老狼| 91麻豆精品久久久久蜜臀| 亚洲国产裸拍裸体视频在线观看乱了| 99re亚洲国产精品| 中文字幕日韩欧美一区二区三区| 丰满放荡岳乱妇91ww| 国产日韩亚洲欧美综合| 国产精品夜夜嗨| 国产日韩欧美精品电影三级在线 | 欧美一级专区免费大片| 青青草国产成人av片免费| 日韩一二三区视频| 另类小说欧美激情| 精品精品欲导航|