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

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

?? task.c

?? MSDOS操作系統源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
        iregs FAR *irp;
        long j;

        /* restore parent                                       */
        p = MK_FP(cu_psp, 0);

        /* When process returns - restore the isv               */
        setvec(0x22, p -> ps_isv22);
        setvec(0x23, p -> ps_isv23);
        setvec(0x24, p -> ps_isv24);

        /* And free all process memory if not a TSR return      */
        if(!tsr)
        {
                for(i = 0; i < p -> ps_maxfiles; i++)
                {    
                        DosClose(i);
                }
                FreeProcessMem(cu_psp);
        }

        cu_psp = p -> ps_parent;
        q = MK_FP(cu_psp, 0);
        dta = q -> ps_dta;

        irp = (iregs FAR *)q -> ps_stack;

        irp -> CS = FP_SEG(p -> ps_isv22);
        irp -> IP = FP_OFF(p -> ps_isv22);
        
        if (InDOS)
        	--InDOS;
        exec_user((iregs FAR *)q -> ps_stack);
}
#endif

static COUNT 
DosExeLoader (BYTE FAR *namep, exec_blk FAR *exp, COUNT mode)
{
        COUNT rc, env_size, i, nBytesRead;
        UWORD mem, env, asize, start_seg;
        ULONG image_size;
        ULONG image_offset;
        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;
        UWORD reloc[2];
        seg FAR *spot;
        LONG exe_size;

#ifdef IPL
        BYTE szNameBuffer[64];
#endif

#ifndef IPL
        /* Clone the environement and create a memory arena     */
        if(mode != OVERLAY)
        {
                if((rc = ChildEnv(exp, &env, namep)) != SUCCESS)
                        return rc;
        }
        else
                mem = exp -> load.load_seg;

        envp = MK_FP(env, 0);
#endif

        /* compute image offset from the header                 */
#ifdef IPL
        fscopy(namep, (BYTE FAR *)szNameBuffer);
        printf("\nEXE loader loading: %s", szNameBuffer);
#endif
        image_offset = (ULONG)header.exHeaderSize * 16l;

        /* compute image size by removing the offset from the   */
        /* number pages scaled to bytes plus the remainder and  */
        /* the psp                                              */
        /*  First scale the size                                */
        image_size = (ULONG)(header.exPages) * 512l;
        /* remove the offset                                    */
        image_size -= image_offset;

#if 0
        /* add in the remainder bytes                           */
        if(header.exExtraBytes != 0)
                image_size -= (ULONG)(512 - header.exExtraBytes);
#endif
        /* and finally add in the psp size                      */
        if(mode != OVERLAY)
                image_size += (ULONG)long2para((LONG)sizeof(psp));

#ifndef IPL
        
        if(mode != OVERLAY)
        {
                
                /* Now find out how many paragraphs are available       */
                if((rc = DosMemLargest((seg FAR *)&asize)) != SUCCESS)
                {         
                        return rc;
                }
                else
                {
                        exe_size = (LONG)long2para(image_size) + header.exMinAlloc + long2para((LONG)sizeof(psp));
                        if(exe_size > asize)
                                return DE_NOMEM;
                        else if(((LONG)long2para(image_size) + header.exMaxAlloc + long2para((LONG)sizeof(psp))) < asize)
                                exe_size = (LONG)long2para(image_size) + header.exMaxAlloc + long2para((LONG)sizeof(psp));
                        else
                                exe_size = asize;
                }

                /* Allocate our memory and pass back any errors         */
                /* We can still get an error on first fit if the above  */
                /* returned size was a bet fit case                     */
                if((rc = DosMemAlloc((seg)exe_size, FIRST_FIT, (seg FAR *)&mem, (UWORD FAR *)&asize)) < 0)
                {
                        if(rc == DE_NOMEM)
                        {
                                if((rc = DosMemAlloc(0, LARGEST, (seg FAR *)&mem, (UWORD FAR *)&asize)) < 0)
                                {
                                        if(env != 0)
                                                DosMemFree(env);
                                        return rc;
                                }
                                /* This should never happen, but ...    */
                                if(asize < exe_size)
                                {
                                        if(env != 0)
                                                DosMemFree(env);
                                        DosMemFree(mem);
                                        return rc;
                                }
                        }
                        else
                        {
                                if(env != 0)
                                        DosMemFree(env);
                                return rc;
                        }
                }
                else
                /* with no error, we got exactly what we asked for      */
                        asize = exe_size;
        }
#else
        mem = KERNSEG;
#endif
#ifndef IPL
        if(mode != OVERLAY)
        {
#endif
                /* memory found large enough - continue processing      */
                mp = MK_FP(mem, 0);
                ++mem;
#ifndef IPL
        }
        else
                mem = exp -> load.load_seg;
#endif

#ifdef IPL
        printf(".");
#endif
        /* create the start seg for later computations          */
        if(mode == OVERLAY)
                start_seg = mem;
        else
        {
                start_seg = mem + long2para((LONG)sizeof(psp));
	}

        /* 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("(DosExeLoader) exe file lost in transit");
        }
#ifdef IPL
        printf(".");
#endif
        /* offset to start of image                             */
        if (dos_lseek(rc, image_offset, 0) != image_offset)
        {
#ifndef IPL
                if(mode != OVERLAY)
                {
                        DosMemFree(--mem);
                        if(env != 0)
                                DosMemFree(env);
                }
#endif
                return DE_INVLDDATA;
        }

#ifdef IPL
        printf(".");
#endif
        /* read in the image in 32K chunks                      */
        if(mode != OVERLAY)
        {
                exe_size = image_size - long2para((LONG)sizeof(psp));
        }
        else
                exe_size = image_size;
        sp = MK_FP(start_seg, 0x0);

        if(mode != OVERLAY)
	{
		if((header.exMinAlloc == 0) && (header.exMaxAlloc == 0))
		{
			sp = MK_FP(start_seg + mp -> m_size
			 - (image_size + 15) /16, 0);
		}
	}

        while(exe_size > 0)
        {
                nBytesRead = dos_read((COUNT)rc, (VOID FAR *)sp, (COUNT)(exe_size < CHUNK ? exe_size : CHUNK));
                sp = add_far((VOID FAR *)sp, (ULONG)CHUNK);
                exe_size -= nBytesRead;
                if(nBytesRead == 0 || exe_size <= 0)
                        break;
#ifdef IPL
                printf(".");
#endif
        }

#if 0
        /* Error if we did not read the entire image            */
        if(exe_size != 0)
                fatal("Broken exe loader (exe_size != 0)");
#endif

        /* relocate the image for new segment                   */
        dos_lseek(rc, (LONG)header.exRelocTable, 0);
        for (i=0; i < header.exRelocItems; i++)
        {
                if (dos_read(rc, (VOID FAR *)&reloc[0], sizeof(reloc)) != sizeof(reloc))
                {
                        return DE_INVLDDATA;
                }
                if(mode == OVERLAY)
                {
                        spot = MK_FP(reloc[1] + mem, reloc[0]);
                        *spot = *spot + exp -> load.reloc;
                }
                else
                {
                /*      spot = MK_FP(reloc[1] + mem + 0x10, reloc[0]);*/
                        spot = MK_FP(reloc[1] + start_seg, reloc[0]);
                        *spot = *spot + start_seg;
                }
        }

#ifdef IPL
        printf(".");
#endif
        /* and finally close the file                           */
        dos_close(rc);

        /* exit here for overlay                                */
        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);

#ifndef IPL
        p -> ps_environ = env == 0 ? 0 : env + 1;
#else
        p -> ps_environ = 0;
#endif

        /* 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(i = 0; i < 8; i++)
        {
                if(namep[i] != '.')
                        mp -> m_name[i] = namep[i];
                else
                        break;
        }
        for(; i < 8; i++)
                        mp -> m_name[i] = ' ';

        /* build the user area on the stack                     */
        irp = MK_FP(header.exInitSS + start_seg, ((header.exInitSP - sizeof(iregs)) & 0xffff));

#ifdef IPL
        printf(".\n");
#endif
        /* start allocating REGs                                */
        /* Note: must match es & ds memory segment              */
        irp -> ES = irp -> DS = mem;
        irp -> CS = header.exInitCS + start_seg;
        irp -> IP = header.exInitIP;
        irp -> AX = 0xffff; /* for now, until fcb code is in    */
#ifdef IPL
        irp -> BX = BootDrive;
        irp -> CX = NumFloppies;
#else
        irp -> BX =
        irp -> CX =
#endif
        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;

#ifdef IPL
        printf("Starting kernel ...\n");
#endif
        
        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;

#ifndef IPL
        case LOAD:
                cu_psp = mem;
                exp -> exec.stack = (BYTE FAR *)irp;
                exp -> exec.start_addr = MK_FP(irp -> CS, irp -> IP);
                return SUCCESS;
#endif
        }

        return DE_INVLDFMT;
}

COUNT 
DosExec (COUNT mode, exec_blk FAR *ep, BYTE FAR *lp)
{
        COUNT rc;
        exec_blk leb = *ep;
        BYTE FAR *cp;
	BOOL bIsCom = FALSE;

        /* If file not found - free ram and return error        */
#ifdef IPL
        printf(".");
#endif

        if((rc = dos_open(lp, 0)) < 0)
        {
                return DE_FILENOTFND;
        }
        
        if(dos_read(rc, (VOID FAR *)&header, sizeof(exe_header))
         != sizeof(exe_header))
        {
#ifdef IPL
                printf("Internal IPL error - Read failure");
                return DE_INVLDDATA;
#else
		bIsCom = TRUE;
#endif
        }
        dos_close(rc);

#ifdef IPL
        printf(".");
#endif
        if(bIsCom || header.exSignature != MAGIC)

#ifndef IPL
        {
                rc = DosComLoader(lp, &leb, mode);
        }
#else
        {
                char szFileName[32];

                fmemcpy((BYTE FAR *)szFileName, lp);
                printf("\nFile: %s (MAGIC = %04x)", szFileName, header.exSignature);
                fatal("IPL can't load .com files!");
        }
#endif
        else
        {
                rc = DosExeLoader(lp, &leb, mode);
        }
        if (mode == LOAD && rc == SUCCESS)
                *ep = leb;

        return rc;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线看| 豆国产96在线|亚洲| 成人综合在线观看| 91精品国产色综合久久ai换脸| 日本一区二区三区在线观看| 日本美女视频一区二区| 91亚洲午夜精品久久久久久| 久久久久国产一区二区三区四区| 亚洲超碰精品一区二区| 成人av资源在线| 久久蜜臀精品av| 免费观看91视频大全| 欧美日韩国产高清一区二区| 中文字幕中文字幕在线一区| 国产精品 欧美精品| 日韩视频国产视频| 视频一区二区中文字幕| 色香蕉久久蜜桃| 中文字幕视频一区二区三区久| 激情综合网天天干| 日韩欧美卡一卡二| 美女国产一区二区三区| 51精品秘密在线观看| 天天综合色天天| 在线播放中文一区| 亚洲va国产天堂va久久en| 色视频一区二区| 亚洲美女精品一区| 色综合激情五月| 亚洲一线二线三线视频| 91久久国产综合久久| 亚洲激情一二三区| 欧美色电影在线| 日韩精品电影在线| 欧美电视剧免费观看| 精品一区二区在线视频| 久久午夜电影网| 成人午夜激情片| 亚洲免费av观看| 欧美三级欧美一级| 久久超碰97中文字幕| 久久蜜桃av一区二区天堂| 国产成人免费网站| ...xxx性欧美| 欧美少妇xxx| 精品一二三四区| 国产精品伦理一区二区| 91论坛在线播放| 天天综合色天天| 久久这里只精品最新地址| 国产精品小仙女| 亚洲欧美日韩电影| 91麻豆精品国产91久久久更新时间 | 亚洲一区二区精品3399| 欧美色涩在线第一页| 久久精工是国产品牌吗| 国产精品日产欧美久久久久| 欧美亚洲综合久久| 国产乱码精品一区二区三区五月婷| 国产精品美女久久久久久2018| 91福利视频久久久久| 麻豆精品久久精品色综合| 国产日韩精品一区二区浪潮av| 色综合久久88色综合天天免费| 日韩电影在线免费观看| 国产网站一区二区| 欧美日韩亚洲国产综合| 国产精品18久久久久久久网站| 亚洲欧洲国产专区| 日韩欧美一区二区久久婷婷| av在线一区二区| 视频在线观看91| 国产精品麻豆久久久| 日韩一区二区三区高清免费看看| 成人av电影免费观看| 美女www一区二区| 亚洲免费三区一区二区| 国产喂奶挤奶一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 精品一区二区三区免费| 亚洲成人动漫一区| 一区二区中文字幕在线| 精品久久久久一区二区国产| 欧美日韩中文国产| 91小宝寻花一区二区三区| 韩国av一区二区| 偷偷要91色婷婷| 亚洲精品免费一二三区| 久久久青草青青国产亚洲免观| 欧美亚洲一区二区三区四区| 成人影视亚洲图片在线| 久久国内精品视频| 婷婷成人综合网| 亚洲影视资源网| 一区二区三区高清| 亚洲女爱视频在线| 中文字幕亚洲一区二区va在线| 精品动漫一区二区三区在线观看| 欧美精品tushy高清| 91黄色激情网站| 91视视频在线直接观看在线看网页在线看| 国产在线精品一区二区| 免费观看在线综合| 青青草91视频| 日韩国产欧美视频| 婷婷开心久久网| 日韩电影在线一区二区三区| 五月天网站亚洲| 日日欢夜夜爽一区| 偷拍自拍另类欧美| 日本不卡一二三| 麻豆91在线观看| 韩国三级在线一区| 国产不卡一区视频| 成人黄页毛片网站| 92精品国产成人观看免费| 91免费版pro下载短视频| 91国产丝袜在线播放| 91高清视频免费看| 欧美视频在线播放| 日韩午夜三级在线| 26uuu国产日韩综合| 国产亚洲一区字幕| 国产精品天干天干在线综合| 亚洲欧洲www| 一级日本不卡的影视| 视频一区视频二区中文字幕| 男男gaygay亚洲| 国产乱色国产精品免费视频| 国产精品亚洲午夜一区二区三区| 不卡视频一二三四| 在线一区二区三区四区| 在线播放一区二区三区| 久久中文字幕电影| 亚洲免费在线观看视频| 午夜亚洲福利老司机| 国产一区二区主播在线| 成人av高清在线| 欧美日韩精品二区第二页| 日韩亚洲欧美成人一区| 国产精品视频一区二区三区不卡| 亚洲欧美日韩久久精品| 欧美a级理论片| eeuss鲁片一区二区三区在线看| 欧美性一区二区| 精品人在线二区三区| 自拍偷拍亚洲欧美日韩| 日韩av中文字幕一区二区| 国产99精品国产| 欧美男同性恋视频网站| 国产日韩欧美精品一区| 午夜久久福利影院| 国产成人亚洲精品狼色在线| 欧美少妇bbb| 国产精品久久福利| 蜜臀久久久久久久| 99国产精品99久久久久久| 日韩欧美一级二级三级久久久| 中文字幕av一区二区三区免费看 | 欧美一区二区三区四区五区| 欧美激情在线免费观看| 日本午夜一本久久久综合| av在线一区二区| 日韩免费视频线观看| 亚洲精品视频免费观看| 国产一区二区三区在线观看精品 | av电影在线不卡| 日韩午夜精品电影| 亚洲国产欧美在线| 成人性视频网站| 精品国产乱码久久久久久牛牛 | 亚洲欧美色一区| 国产成人综合亚洲网站| 欧美一区二区女人| 一区二区日韩av| 色综合视频在线观看| 欧美激情一区二区| 狠狠久久亚洲欧美| 日韩欧美在线网站| 亚洲成av人片一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 久久久久久久久久久黄色| 久久精品国产澳门| 日韩天堂在线观看| 日韩经典一区二区| 欧美人妇做爰xxxⅹ性高电影| 亚洲精品免费在线观看| 99久久久无码国产精品| 国产精品视频一二| 成人丝袜18视频在线观看| 国产亚洲人成网站| 国产成人av福利| 欧美一级日韩免费不卡| 久久国产精品一区二区| 免费久久99精品国产| 男人的j进女人的j一区| 欧美精品自拍偷拍动漫精品| 亚洲一区二区三区四区中文字幕 | 在线中文字幕一区| 一区二区在线看|