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

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

?? task.c

?? Free 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一区二区三区免费野_久草精品视频
亚洲国产精品成人综合| 亚洲欧洲中文日韩久久av乱码| 久久久久久久久久美女| 亚洲一区中文在线| 成人丝袜高跟foot| 久久综合狠狠综合| 日韩经典中文字幕一区| 一本色道久久综合狠狠躁的推荐| 久久九九久久九九| 蜜臀久久99精品久久久久久9 | 国产精品夜夜爽| 欧美精品精品一区| 亚洲免费观看高清| 成人黄页在线观看| 久久精品亚洲一区二区三区浴池| 久久精品国产网站| 欧美精品日日鲁夜夜添| 亚洲一区二区美女| 欧美综合一区二区三区| 中文字幕一区日韩精品欧美| 国产成人在线观看免费网站| 精品播放一区二区| 寂寞少妇一区二区三区| 日韩情涩欧美日韩视频| 蜜桃一区二区三区在线观看| 日韩一二在线观看| 美国十次了思思久久精品导航| 欧美日本韩国一区二区三区视频| 亚洲综合色在线| 欧美午夜在线一二页| 亚洲精品免费视频| 在线免费观看日韩欧美| 夜夜爽夜夜爽精品视频| 欧美亚洲另类激情小说| 亚洲网友自拍偷拍| 6080午夜不卡| 麻豆成人久久精品二区三区小说| 日韩一级片在线播放| 97久久超碰国产精品电影| 国产精品蜜臀在线观看| 99精品视频在线播放观看| caoporen国产精品视频| 欧美在线|欧美| 2020国产成人综合网| 亚洲超碰精品一区二区| 成人免费精品视频| 日韩欧美国产三级| 亚洲成在线观看| 97久久精品人人做人人爽| 久久久99免费| 日韩电影在线一区二区| 在线国产亚洲欧美| 国产精品久久久久一区二区三区| 日韩精品成人一区二区三区| 高清不卡一区二区在线| 日韩欧美不卡在线观看视频| 一区二区成人在线视频| 成人av电影观看| 精品剧情v国产在线观看在线| 夜夜爽夜夜爽精品视频| 91蜜桃传媒精品久久久一区二区| 欧美成人官网二区| 日韩国产高清在线| 欧美日韩亚洲综合在线 | 亚洲乱码国产乱码精品精小说| 精品一区二区三区在线播放视频| 欧美艳星brazzers| 夜夜嗨av一区二区三区四季av| kk眼镜猥琐国模调教系列一区二区| 精品国产99国产精品| 九色porny丨国产精品| 欧美一区二区三区视频在线| 日韩av在线免费观看不卡| 欧美日本在线播放| 日韩国产精品久久久| 51精品秘密在线观看| 麻豆一区二区在线| 欧美va在线播放| 国产最新精品精品你懂的| 精品美女一区二区三区| 九九视频精品免费| 国产女主播一区| av不卡在线观看| 一区二区三区成人| 欧美日韩高清在线| 六月丁香综合在线视频| 欧美精品一区二| 成人av在线资源网| 一区二区三区不卡视频| 欧美一区二区三区在线观看视频| 久久91精品久久久久久秒播| 欧美激情资源网| 欧美色窝79yyyycom| 蜜臂av日日欢夜夜爽一区| 26uuu精品一区二区| 97国产精品videossex| 亚洲一区二区成人在线观看| 日韩免费成人网| 国产成人亚洲综合a∨猫咪| 亚洲欧美激情视频在线观看一区二区三区 | 色播五月激情综合网| 日韩成人一级片| 中文字幕欧美激情一区| 91久久精品一区二区三区| 男人操女人的视频在线观看欧美| 亚洲福利一区二区| 国产亚洲欧洲997久久综合| 91女人视频在线观看| 秋霞午夜鲁丝一区二区老狼| 国产亚洲欧美日韩俺去了| 欧美私模裸体表演在线观看| 久久66热re国产| 一区二区三区在线免费视频 | 国产制服丝袜一区| 亚洲精品国产一区二区精华液| 在线播放视频一区| 不卡的看片网站| 日本亚洲电影天堂| 亚洲人成网站在线| 国产三区在线成人av| 欧美高清一级片在线| av在线这里只有精品| 国产伦精品一区二区三区免费 | 亚洲成年人网站在线观看| 久久久亚洲午夜电影| 91精品国产日韩91久久久久久| 成人美女视频在线观看| 精品在线观看视频| 首页国产丝袜综合| 亚洲精品午夜久久久| 中文字幕不卡三区| 久久免费看少妇高潮| 欧美一卡二卡三卡四卡| 欧美日韩精品一区二区三区蜜桃| 不卡在线视频中文字幕| 国产乱码一区二区三区| 日本女人一区二区三区| 五月天婷婷综合| 亚洲6080在线| 亚洲一区二区在线免费观看视频| 亚洲欧洲一区二区在线播放| 久久精品视频一区| 久久精品视频网| 国产欧美一区二区在线观看| 精品欧美久久久| 日韩欧美亚洲国产另类| 欧美一区二区在线免费观看| 欧美日韩亚洲综合一区| 欧美在线不卡一区| 欧美日韩国产首页| 91麻豆精品国产91久久久更新时间| 欧美无人高清视频在线观看| 在线视频一区二区免费| 欧美视频一区二区三区| 欧美在线高清视频| 6080午夜不卡| 精品久久久久久最新网址| 337p粉嫩大胆色噜噜噜噜亚洲| 精品少妇一区二区三区在线播放 | 26uuu久久天堂性欧美| 久久久久国产精品麻豆ai换脸| 精品噜噜噜噜久久久久久久久试看 | 日韩av一二三| 久久精品国产成人一区二区三区 | 久久日韩粉嫩一区二区三区| 日韩不卡一区二区| 免费国产亚洲视频| 国产伦精品一区二区三区视频青涩| 国产在线精品一区二区夜色| 精彩视频一区二区三区| 国产69精品久久久久毛片| 色又黄又爽网站www久久| 欧美日韩mp4| 日本一区二区三区免费乱视频 | 2020国产精品久久精品美国| 国产精品夫妻自拍| 天涯成人国产亚洲精品一区av| 麻豆成人久久精品二区三区红| 国产超碰在线一区| 日本伦理一区二区| 精品日韩99亚洲| 亚洲免费视频中文字幕| 日本91福利区| 99精品视频一区二区三区| 在线不卡免费av| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 一区二区高清在线| 久久精品国产秦先生| 色婷婷精品久久二区二区蜜臀av| 日韩一区二区三区四区五区六区| 国产精品人人做人人爽人人添| 亚洲a一区二区| 91在线你懂得| wwwwww.欧美系列| 亚洲成a天堂v人片| 99国产欧美久久久精品| 欧美一区二区福利在线| 亚洲免费观看高清| 成人免费毛片高清视频| 日韩你懂的电影在线观看|