Subversion Repositories libOLED

Rev

Rev 4 | Rev 7 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 5
Line 55... Line 55...
55
      curr_x = 0;
55
      curr_x = 0;
56
    }
56
    }
57
  m_cursor_x = curr_x;
57
  m_cursor_x = curr_x;
58
}
58
}
59
 
59
 
-
 
60
uint8_t
-
 
61
display_t::formatNum (char *buff, uint8_t siz, uint8_t digits, uint8_t dp_pos, int val)
-
 
62
{
-
 
63
  digits++;
-
 
64
  uint8_t pos = digits;
-
 
65
  uint8_t dp_loc = pos - dp_pos;
-
 
66
  uint8_t sign = 0;
-
 
67
  if (val < 0)
-
 
68
    {
-
 
69
      sign = 1;
-
 
70
      val = -val;
-
 
71
    }
-
 
72
 
-
 
73
  buff[pos] = 0;
-
 
74
  while (pos && pos < siz)
-
 
75
    {
-
 
76
      if (pos == dp_loc)
-
 
77
        {
-
 
78
          buff[--pos] = '.';
-
 
79
        }
-
 
80
      else
-
 
81
        {
-
 
82
          buff[--pos] = val % 10 + '0';
-
 
83
          val /= 10;
-
 
84
          if (val == 0 && pos < dp_loc)
-
 
85
            break;
-
 
86
        }
-
 
87
    }
-
 
88
  if (sign)
-
 
89
    {
-
 
90
      buff[--pos] = '-';
-
 
91
    }
-
 
92
  return digits;
-
 
93
}
-
 
94
 
-
 
95
void
-
 
96
display_t::fontDigits (font_t &font, uint8_t digits, uint8_t dp_pos, int val)
-
 
97
{
-
 
98
  char buff[10] = "        ";
-
 
99
  uint8_t wid = formatNum (buff, sizeof(buff), digits, dp_pos, val);
-
 
100
  printString (font, buff, wid, WHITE );
-
 
101
}
-
 
102
 
-
 
103
void
-
 
104
display_t::fontSigDigits (font_t &font,uint8_t x, uint8_t y, bool right_justify, uint8_t dp_pos,
-
 
105
                 int val)
-
 
106
{
-
 
107
  char digits;
-
 
108
  char sign = 0;
-
 
109
  int uval;
-
 
110
  if (val < 0)
-
 
111
    {
-
 
112
      uval = -val;
-
 
113
      sign = 1; // mark as negative
-
 
114
    }
-
 
115
  else
-
 
116
    {
-
 
117
      uval = val;
-
 
118
    }
-
 
119
  if (uval < 10) // always one digit for a sign or space, one for a digit
-
 
120
    {
-
 
121
      digits = 1;
-
 
122
    }
-
 
123
  if (uval >= 10 && uval < 100)
-
 
124
    {
-
 
125
      digits = 2;
-
 
126
    }
-
 
127
  if (uval >= 100 && uval < 1000)
-
 
128
    {
-
 
129
      digits = 3;
-
 
130
    }
-
 
131
  if (uval >= 1000)
-
 
132
    {
-
 
133
      digits = 4;
-
 
134
    }
-
 
135
  // backup for the - sign if right justified
-
 
136
  if (right_justify)
-
 
137
    {
-
 
138
      if (dp_pos < 10)
-
 
139
        {
-
 
140
          digits += 2;
-
 
141
        }
-
 
142
      else
-
 
143
        {
-
 
144
          digits += 1;
-
 
145
        }
-
 
146
      x -= digits * font.spacing();
-
 
147
    }
-
 
148
 
-
 
149
  gotoxy (x, y);
-
 
150
  fontDigits (font, digits, dp_pos, val);
-
 
151
}
-
 
152
 
-
 
153