예제 #1
0
파일: mm.c 프로젝트: domoritz/nupkux
static void expand_heap(UINT new_size, heap *aheap)
{
	UINT i;

	if (new_size <= aheap->end - aheap->start) return;
	ASSERT_ALIGN(new_size);
	if (aheap->start + new_size > aheap->memend) return;
	for (i = aheap->end - aheap->start; i < new_size; i += FRAME_SIZE)
		make_page(aheap->start + i, aheap->pageflags, kernel_directory, 1);
	aheap->end = aheap->start + new_size;
}
예제 #2
0
파일: NDX.C 프로젝트: tiansh/courses-sjtu
void n_addrec (NDX *n, char *r, unsigned long index_num) {
  unsigned char i, num;
  char *rs;
  int cmp, top;
  unsigned long page_index;
  bool changed[64], header_changed;
  NDX_NODE* key;
  key=(NDX_NODE*)malloc(8+n->key_length);
  rs=(char*)malloc(n->key_length);
  strscpy(rs,r,n->key_length);
  memset(changed,0,sizeof(changed));
  header_changed=false;

  page_index=n->root_page; top=-1;
  while (page_index) {
    get_page(n,page_index,++top);
    if (pages[top].keys[0]->index) break;
    for (i=0;i<pages[top].key_num;i++) {
      cmp=memcmp(rs,pages[top].keys[i]->key_data,n->key_length);
      if ((cmp<0) || (cmp==0 && index_num<pages[top].keys[i]->index))
       { page_index=pages[top].keys[i]->left_page; break; }
    }
    if (i==pages[top].key_num) {
      memcpy(pages[top].keys[--i],rs,n->key_length);
      changed[i]=true;
      page_index=pages[top].keys[--i]->left_page;
    }
  }
  key=make_node(n,0,index_num,rs);
  addrec(n,num=top,key);
  changed[top]=true;
  while (pages[num].key_num>n->max_keys && num>1) {
    spilt_page(n,num,++top);
    header_changed=true;
    addrec(n,num-1,get_last(n,num));
    changed[num]=changed[top]=true;
  }
  if (pages[num].key_num>n->max_keys) {
    spilt_page(n,num,++top);
    header_changed=true;
    changed[num]=changed[top]=true;
    make_page(n,num,top,top+1); top++;
    changed[top]=true;
  }
  for (i=0;i<=top;i++) {
    if (changed[i]) put_page(n,i);
    dispose_page(i);
  }
  if (header_changed) write_total(n);
}
예제 #3
0
int elf_load_segment(char *image, elf32_phdr* seg)
{
	/*FIXME: By know I don't know how to cope p_vaddr AND p_align,
		So I ignore the latter and also p_flags which are only for ONE FRAME */
	UINT i,size=seg->p_filesz;
	for (i=ALIGN_DOWN(seg->p_vaddr);i<seg->p_vaddr+seg->p_memsz;i+=FRAME_SIZE)
		make_page(i,PAGE_FLAG_PRESENT | PAGE_FLAG_WRITE | PAGE_FLAG_USERMODE,current_task->directory,1);
	flush_tlb(); //TODO: If make_page() fails we need a "not enough core"
	if (size>seg->p_memsz) size=seg->p_memsz;
	memcpy((void *)seg->p_vaddr,(void *)((UINT)image+seg->p_offset),size);
	if (seg->p_filesz<size)
		memset((void *)((UINT)image+seg->p_offset+seg->p_filesz),0,size-seg->p_filesz);
	return 0;
}
예제 #4
0
main(int argc, char *argv[])
{
	int fd;

	use_lod2 = 0;
//	use_lod2 = 1;

	img_filename = strdup("disk.img");
	mcr_filename = strdup("ucadr.mcr.841");
	lod1_filename = strdup("partition-78.48.lod1");
	lod2_filename = strdup("partition-sys210.lod2");

#if 0
	mcr_filename = strdup("ucadr.mcr.979");
#endif

#if 0
	use_lod2 = 1;
	mcr_filename = strdup("ucadr.mcr.979");
	lod1_filename = strdup("partition-sys210.lod2");
#endif

#if 0
	use_lod2 = 1;
	mcr_filename = strdup("ucadr.mcr.896");
	lod1_filename = strdup("partition-sys210.lod2");
#endif

	fd = open(img_filename, O_RDWR | O_CREAT, 0666);
	if (fd < 0) {
		perror(img_filename);
		exit(1);
	}

	make_labl(fd);
	make_mcr1(fd);
make_page(fd);
	make_lod1(fd);
	if (use_lod2) {
		make_lod2(fd);
	}
	make_file(fd);

	exit(0);
}
예제 #5
0
파일: pbm2png.c 프로젝트: engine12/links
/*
 * Parameters: <hundred_dpi> <basename_> <titlestring> <bottom_html_code>
 * <pageoffset> [first page number]
 */
int
main(int argc, char **argv)
{
        int a,z;
 
        if (argc<7){
                fprintf(stderr,"Usage: pbm2png <hundred_dpi> <basename_> <titlestring> <bottom_html_code> <pageoffset> <ifname> [starting_filenumber]\n");
        return 0;
        }
        dpi=atof(argv[1])/10;
        ppm=dpi*1000/25.4;
        basename_=argv[2];
        titlestring=argv[3];
	bottom=argv[4];
        pageoffset=atol(argv[5]);
        filename=argv[6];
	again0:
        ifd=open(filename,O_RDONLY);
	if (ifd<0){
		if (errno==EAGAIN||errno==EINTR||errno==EWOULDBLOCK) goto
			again0;
		else {
			perror("");
			exit(1);
		}
	}
        fprintf(stderr,"filename %s, %d\n",filename,ifd);
        if (argc>=8){
                filenumber=atol(argv[7]);
        }
        gentables();
        again:
        fprintf(stderr,"\nFile %i\n",filenumber);
        if (read_header()){
                for (a=0;a<filenumber;a++)
                        make_page(a);
		make_index();
                return 0;
        }
        lw=(x+15)>>4;
        lb=(x+7)>>3;
        ox=x/17;
        oy=y/15;
        fprintf(stderr,"Input: %i*%i pixels, %f*%f dpi, %.1fMB.\n",x,y,dpi*17,dpi*15,(float)lb*y/1048576);
        fprintf(stderr,"Ouput: %i*%i pixels, %f*%f dpi, %.1fKB raw data.\n",ox,oy,dpi,dpi,(float)ox*oy/1024);
        l1=(unsigned char*)malloc(lw*2);
        l2=(unsigned long*)malloc(lw*sizeof(unsigned long));
        l4=(unsigned long long*)malloc(lw*sizeof(unsigned long long));
        sprintf(string,"%s%d.png",basename_,filenumber);
        filenumber++;
        of=fopen(string,"w");
        open_png();
        for (z=oy;z;z--){
                if (!(z&15)){
                        fprintf(stderr,".");
                        fflush(stderr);
                } 
                load_to_4();
                export_from_4();
        }
        close_png();
        fprintf(stderr,"\nWritten %lu bytes of data, ratio %.1f%%\n",ftell(of),(float)ftell(of)*100/ox/oy);
        fclose(of);
        for (a=y%15;a;a--)
                load();
        free(l1);
        free(l2);
        free(l4);
        goto again;
}