Пример #1
0
void move_and_count( int dsource, int ddest, int ecx )
{
    if ( ecx <= 0 )
        return;

    if ( dsource > 0 ) {
        // ADD ESI, dsource
        Code_counter += 6;
    }
    if ( !is_svga ) {
        if ( ddest > 0 ) {
            // ADD EDI, ddest
            Code_counter += 6;
        }
        count_block( ecx );
    } else {
        int p1, p2, o1;

        linear_address += ddest;        // Skip to next block

        p1 = linear_address >> 16;
        o1 = linear_address & 0xFFFF;
        p2 = (linear_address+ecx) >> 16;
        if ( p1 != ibitblt_svga_page ) {
            // Set page
            // MOV EAX, ?, CALL EBX
            Code_counter += 7;
            ibitblt_svga_page = p1;
        }

        Code_counter += 5;  // mov edi, ????

        if ( p1 == p2 ) {
            count_block( ecx );
        } else {
            int nbytes;
            nbytes = 0xFFFF-o1+1;
            count_block( nbytes );
            // set page
            // MOV EAX, 0
            Code_counter += 7;  // mov eax,???? call ebx

            ibitblt_svga_page = p2;

            Code_counter += 5;  // mov edi, ????

            nbytes = ecx - nbytes;
            if (nbytes > 0 )
                count_block( nbytes );
        }
        linear_address += ecx;
    }
}
Пример #2
0
int		ls_l(char *str, t_ls *ls, int nb)
{
  t_file	*eof;
  struct stat	file;

  if ((eof = malloc(sizeof(t_ls))) == NULL)
    return (-1);
  eof = ls->first;
  if (nb != 1)
    my_printf("total %d\n", count_block(str) / 2);
  while (eof != NULL)
    {
      if (eof->file[0] != '.')
	make_it_happen(file, eof->file);
      if (eof->file[0] == '.' && nb == 1)
	make_it_happen(file, eof->file);
      eof = eof->next;
    }
  return (0);
}
Пример #3
0
void reader::read_infercars(const ProblemInstance& cfg, std::vector<Genome>& genome) {
	
	std::ifstream input(cfg.get_blk_file().c_str());
	if(!input) {
		std::cerr << "Unable to open " << cfg.get_blk_file() << std::endl;
		exit(1);
	}
    
	std::string gene;
	std::vector<std::string> chromosome(cfg.get_count_genomes());
	std::vector<std::string> sign(cfg.get_count_genomes()); 
	std::vector<int> start_block(cfg.get_count_genomes());  
	std::vector<int> end_block(cfg.get_count_genomes()); 
	std::vector<int> count_block(cfg.get_count_genomes());

	while(!input.eof()) {
		std::string line;
		std::getline(input, line);
    		line = reader::trim(line);
 
		if (line.empty()) {
			if (gene.empty()) { 	
				continue;
    			} 

			bool ambig = false;
			for(int i = 0; i < count_block.size(); ++i) { 
				if (count_block[i] != 1) { 
					ambig = true;
					break;
				}  
			} 	
			if (ambig) {
				std::clog << "Ambiguous block: " << gene << std::endl;
			    	continue;
			}

			for(int i = 0; i < count_block.size(); ++i) { 
				if (count_block[i] == 1) {
					int sign_ = (sign[i] == "+")? +1: -1;
					genome[i].insert(gene, chromosome[i], (start_block[i] + end_block[i]) / 2, sign_, std::min(start_block[i], end_block[i]), std::max(start_block[i], end_block[i]));         				
				}
			} 
			gene.clear();
		} else if (line[0] == '#') { 
				continue;
    		} else if(line[0] == '>') {
			gene = line.substr(1);
			std::fill(count_block.begin(), count_block.end(), 0);
		} else { 
    			line[line.find(".")] = ' ';
			line[line.find(":")] = ' ';
			line[line.find("-")] = ' ';
	    
			std::istringstream istr(line);
 
			std::string genome_name;
 			istr >> genome_name;
    			if (!cfg.member_name(genome_name)) {
				std::cerr << "Unknown genome name: " << genome_name << std::endl;
				continue;
    			}

			size_t k = cfg.get_number(genome_name);
			istr >> chromosome[k] >> start_block[k] >> end_block[k] >> sign[k];
			++count_block[k];
		}
	} 
	input.close();
}
Пример #4
0
int gen_hufftable_wsq(HUFFCODE **ohufftable, unsigned char **ohuffbits,
               unsigned char **ohuffvalues, short *sip, const int *block_sizes,
               const int num_sizes)
{
   int i, j;
   int ret;
   int adjust;          /* tells if codesize is greater than MAX_HUFFBITS */
   int *codesize;       /* code sizes to use */
   int last_size;       /* last huffvalue */
   unsigned char *huffbits;     /* huffbits values */
   unsigned char *huffvalues;   /* huffvalues */
   int *huffcounts;     /* counts for each huffman category */
   int *huffcounts2;    /* counts for each huffman category */
   HUFFCODE *hufftable1, *hufftable2;  /* hufftables */

   if((ret = count_block(&huffcounts, MAX_HUFFCOUNTS_WSQ,
			 sip, block_sizes[0], MAX_HUFFCOEFF, MAX_HUFFZRUN)))
      return(ret);

   for(i = 1; i < num_sizes; i++) {
      if((ret = count_block(&huffcounts2, MAX_HUFFCOUNTS_WSQ,
                           sip+block_sizes[i-1], block_sizes[i],
                           MAX_HUFFCOEFF, MAX_HUFFZRUN)))
         return(ret);

      for(j = 0; j < MAX_HUFFCOUNTS_WSQ; j++)
         huffcounts[j] += huffcounts2[j];

      free(huffcounts2);
   }

   if((ret = find_huff_sizes(&codesize, huffcounts, MAX_HUFFCOUNTS_WSQ))){
      free(huffcounts);
      return(ret);
   }
   free(huffcounts);

   if((ret = find_num_huff_sizes(&huffbits, &adjust, codesize,
                                MAX_HUFFCOUNTS_WSQ))){
      free(codesize);
      return(ret);
   }

   if(adjust){
      if((ret = sort_huffbits(huffbits))){
         free(codesize);
         free(huffbits);
         return(ret);
      }
   }

   if((ret = sort_code_sizes(&huffvalues, codesize, MAX_HUFFCOUNTS_WSQ))){
      free(codesize);
      free(huffbits);
      return(ret);
   }
   free(codesize);

   if((ret = build_huffsizes(&hufftable1, &last_size,
                              huffbits, MAX_HUFFCOUNTS_WSQ))){
      free(huffbits);
      free(huffvalues);
      return(ret);
   }

   build_huffcodes(hufftable1);
   if((ret = check_huffcodes_wsq(hufftable1, last_size))){
      fprintf(stderr, "ERROR: This huffcode warning is an error ");
      fprintf(stderr, "for the encoder.\n");
      free(huffbits);
      free(huffvalues);
      free(hufftable1);
      return(ret);
   }

   if((ret = build_huffcode_table(&hufftable2, hufftable1, last_size,
                                 huffvalues, MAX_HUFFCOUNTS_WSQ))){
      free(huffbits);
      free(huffvalues);
      free(hufftable1);
      return(ret);
   }

   free(hufftable1);

   *ohuffbits = huffbits;
   *ohuffvalues = huffvalues;
   *ohufftable = hufftable2;

   return(0);
}