示例#1
0
JVM_SOFTFP_LINKAGE jlong jvm_doubleToLongBits(jdouble x) {
  jlong bits = double_bits(x);
  if ((bits & JVM_LL(0x7FFFFFFFFFFFFFFF)) >= JVM_LL(0x43E0000000000000)) {
    if ((bits >= D_L_POS_NAN && bits <= D_H_POS_NAN) ||
	(bits >= D_L_NEG_NAN && bits <= D_H_NEG_NAN)) {
      bits = D_JUST_NAN;
    }
  }
  return bits;
}
示例#2
0
文件: font.c 项目: 0xPIT/UltiDMM
// -----------------------------------------------------------------------------
// Outputs a character on the display, using the given font and style
//
uint8_t lcd_put_char(FONT_P font, uint8_t style, char character) 
{
  int8_t  i;
  uint8_t row = 0;                                     // current row of char
  
  uint8_t hc  = (style & DOUBLE_HEIGHT) ? 1 : 0;       // height change
  uint8_t wc  = (style & DOUBLE_WIDTH)  ? 1 : 0;       // width change
  uint8_t ul  = (style & UNDERLINE)     ? 0x80 : 0x00; // underline
  uint8_t inv = (style & INVERT)        ? 0xFF : 0;    // inverted
  
  uint8_t tmp;
    
  // load information about character
  uint8_t char_width    = font_get_char_width(font, character); 
  uint8_t font_height   = font_get_height_bytes(font);
  uint8_t free_space    = font_get_add_space(font, character);
  PGM_P   tableposition = font_get_char_position(font, character);
  
  // final size of character
  uint8_t char_final_width  = (uint8_t)(char_width + free_space) << wc;
  uint8_t char_final_height = (uint8_t)font_height << hc; 
  
  // check for avail. space on display
  if ((style & WRAP) && (LCD_CURRENT_COL() + char_final_width > LCD_WIDTH)) {
    LCD_MOVE_TO(LCD_CURRENT_PAGE() + char_final_height, 0);
    if (character == ' ') {
      return 0;
    }
  }
  
  // write chracter
  do {
    for (i = (row >> hc); i < char_width / font_height; i += font_height) {
      tmp = pgm_read_byte(tableposition + i);
      
      if (row == char_final_height - 1) {
        tmp |= ul;
      }
      
      if (hc) {
        tmp = double_bits((row & 1), tmp);
      }
      
      if (inv) {
        tmp = ~tmp;
      }
      
      LCD_WRITE(tmp);
      
      if (wc) {
        LCD_WRITE(tmp);
      }
    }
    
    if (free_space) {
      uint8_t c = inv;
      if (row == char_final_height - 1) {
        c ^= ul; 
        if (hc) {
          c ^= ul >> 1;      
        }
      }
    
      LCD_WRITE(c);
      
      if (wc) {
        LCD_WRITE(c);
      }
    }
    
    LCD_MOVE(1, -char_final_width);
  } while (++row < char_final_height);