Exemplo n.º 1
0
void exec(b32 *filename)
{
	b32 pcb_;
	b32 page;
	asm volatile(
			"jmp . \n\t"
			:::
			);
	procpop(&pcb_);
	getpageaddr(PCBAddr,pcb_,0x4c,&page);	//需要pcb块大小
	initpage(page);
	PCB * pcb=(PCB *)pcb_;
	printdword((b32)(pcb));
	pcb->esp=0x13FFFF0;
	pcb->status=READY;
	pcb->cr3=page;
	pcb->pid=(*(b32 *)PID)+4;
	pcb->edi=0;
	pcb->esi=0;
	pcb->ebx=0;
	pcb->edx=0;
	pcb->eflags=0;
	pcb->ss=user_stack;
	pcb->cs=user_code;
	pcb->eip=0;

	*(b32 *)PID=*(b32 *)PID+4;
	b32 phymem;
	filename[11]=0;				//得到格式化后的文件名
	mempop(&phymem);

	readfile(filename,phymem);
	linkpage(pcb->cr3,0x1000000,phymem);
	quenein(READYAddr,READYBottom,READYhead,READYtail,pcb_);
}
Exemplo n.º 2
0
void walkpages()                  /* process the pages in the DVI-file */
{
    register bool wantpage;

    pagecounter = 0L;
    while ((opcode = skipnops()) != POST) {
        if (opcode != BOP)              /* should be at start of page now    */
            errorexit(nobop);
        else {
            pagecounter++;
            pagenr = sget4();           /* get TeX page number               */
            mseek(DVIfile, 36L, relative); /* skip page header */
            backpointer = sget4();      /* get previous page offset          */
            if (pageswitchon)
                if (sequenceon)
                    wantpage = inlist(pagecounter);
                else
                    wantpage = inlist(pagenr);
            else
                wantpage = TRUE;

            if (wantpage) {
                initpage();
                dopage();
                printpage();
            }
            else {
                skippage();
            }
        }
    }

} /* walkpages */