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_); }
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 */