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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? task.c

?? MSDOS操作系統(tǒng)源代碼
?? 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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品国产99久久久久久白柏 | 欧美日韩亚洲不卡| 中文字幕亚洲视频| 不卡的av网站| 亚洲激情欧美激情| 欧美日韩mp4| 久久精品国产99国产| 久久久亚洲综合| 成人国产一区二区三区精品| 亚洲伦理在线精品| 欧美日本一道本| 久久机这里只有精品| 欧美激情一二三区| 在线精品视频一区二区| 日韩黄色在线观看| 久久综合久久综合亚洲| 不卡的av电影| 日韩**一区毛片| 久久精品视频免费| 91成人免费电影| 男女性色大片免费观看一区二区 | 国产欧美精品区一区二区三区| 成人国产在线观看| 亚洲成国产人片在线观看| 日韩午夜在线播放| 成人av资源在线观看| 午夜欧美2019年伦理| 久久综合色之久久综合| 欧美亚洲愉拍一区二区| 国产一区二区三区香蕉| 亚洲综合丝袜美腿| 久久久影视传媒| 欧美日韩国产电影| 国产精品一区二区x88av| 一区二区在线看| 久久久久久久免费视频了| 色综合天天综合狠狠| 国模套图日韩精品一区二区| 一区二区三区中文字幕| 精品国产亚洲在线| 在线欧美小视频| 国产99久久久国产精品免费看| 亚洲国产精品欧美一二99| 久久精品在线免费观看| 91 com成人网| 欧美在线观看禁18| 成人国产视频在线观看| 久久99国产精品久久| 亚洲午夜精品在线| 亚洲欧美在线另类| 久久女同精品一区二区| 欧美精品欧美精品系列| av亚洲精华国产精华精华| 久久精品999| 亚洲成av人影院| 亚洲精品中文在线观看| 国产精品蜜臀在线观看| 久久久无码精品亚洲日韩按摩| 欧美一区二区三区四区五区 | 亚洲v日本v欧美v久久精品| 国产精品伦理一区二区| 久久婷婷色综合| 91精品国产黑色紧身裤美女| 欧美在线free| 色综合色综合色综合| 97久久人人超碰| 成人激情电影免费在线观看| 国产一区视频在线看| 蜜桃av一区二区三区电影| 日本成人在线看| 视频一区二区不卡| 亚洲va在线va天堂| 亚洲成人黄色小说| 亚洲国产综合色| 亚洲v日本v欧美v久久精品| 亚洲综合在线电影| 亚洲国产精品久久久男人的天堂 | 日韩精品欧美精品| 香蕉av福利精品导航| 午夜免费久久看| 午夜电影一区二区三区| 天堂在线一区二区| 毛片基地黄久久久久久天堂| 久久99久久精品| 韩国三级电影一区二区| 国产高清精品久久久久| 国产suv精品一区二区三区| www.综合网.com| 色综合久久久久| 精品视频一区二区不卡| 欧美一级在线免费| 日韩欧美美女一区二区三区| 久久久久久99久久久精品网站| 欧美国产激情二区三区| 综合电影一区二区三区 | 欧美日免费三级在线| 欧美日韩国产经典色站一区二区三区 | 老司机免费视频一区二区三区| 精品一区二区影视| 成人午夜电影久久影院| 91视频www| 欧美区在线观看| 久久精品人人爽人人爽| 亚洲欧美偷拍另类a∨色屁股| 亚洲女爱视频在线| 五月天久久比比资源色| 国产麻豆视频一区二区| 色综合久久久久综合| 欧美日韩国产美| 久久天天做天天爱综合色| 综合久久久久久| 蜜臀91精品一区二区三区| 成人免费精品视频| 欧美日韩一本到| 国产三级精品三级| 亚洲一区二区在线播放相泽| 国内精品视频666| 在线观看视频一区二区欧美日韩| 91麻豆精品国产91久久久使用方法 | 一区二区三区四区高清精品免费观看| 亚洲电影一区二区三区| 久久黄色级2电影| www.亚洲免费av| 日韩一级在线观看| 亚洲日本欧美天堂| 国产一区二区在线观看视频| 91国内精品野花午夜精品| 日韩精品中文字幕一区二区三区| 亚洲欧美在线另类| 裸体健美xxxx欧美裸体表演| 91在线国内视频| 久久久久久久国产精品影院| 日韩中文字幕91| 色综合网色综合| 亚洲国产高清aⅴ视频| 亚洲成av人影院| 一本久久a久久精品亚洲| 久久久一区二区| 青椒成人免费视频| 欧美亚洲尤物久久| 亚洲图片欧美激情| 国产精品乡下勾搭老头1| 欧美人动与zoxxxx乱| 亚洲激情自拍视频| 成人高清视频免费观看| 精品国产一区二区三区久久影院 | 蜜臀av性久久久久蜜臀aⅴ四虎| 色婷婷一区二区| 国产精品视频一二三| 久久成人久久鬼色| 欧美精品日日鲁夜夜添| 亚洲国产精品麻豆| 欧美在线三级电影| 一区二区在线电影| 91色porny蝌蚪| 亚洲欧美视频在线观看视频| 白白色 亚洲乱淫| 国产欧美日韩一区二区三区在线观看| 精品一区二区影视| 欧美xxxx老人做受| 老司机精品视频一区二区三区| 欧美日韩精品一区二区三区四区 | a在线播放不卡| 亚洲国产精品国自产拍av| 国产成人综合亚洲网站| 精品国产成人在线影院| 老司机一区二区| 精品久久一区二区三区| 久久99精品一区二区三区三区| 日韩欧美中文一区| 久久国产精品一区二区| 久久中文字幕电影| 国产精品影视天天线| 久久久亚洲欧洲日产国码αv| 国产东北露脸精品视频| 国产精品久久久久久久久免费丝袜 | 精品日韩欧美在线| 国产一二精品视频| 亚洲国产成人在线| 91色porny在线视频| 亚洲国产中文字幕在线视频综合| 在线不卡免费av| 久久99国产精品久久99果冻传媒| 久久免费电影网| 99re成人在线| 婷婷久久综合九色综合伊人色| 日韩丝袜情趣美女图片| 国产曰批免费观看久久久| 国产精品乱码久久久久久| 99re6这里只有精品视频在线观看| 一区二区三区高清| 日韩精品一区在线| 成人av在线影院| 亚洲aaa精品| 欧美精品一区二区久久久| 成人性生交大片免费看中文| 一区二区三区四区在线免费观看| 91麻豆精品国产91久久久久久| 国内精品国产三级国产a久久| 亚洲欧美综合色|