Rev 13 | Rev 19 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 13 | Rev 15 | ||
---|---|---|---|
Line 195... | Line 195... | ||
195 | { |
195 | { |
196 | return ((ascii_lucida_bits[(y*ascii_lucida_width)/8+(x/8)])>>(x&7)) & 1 ; |
196 | return ((ascii_lucida_bits[(y*ascii_lucida_width)/8+(x/8)])>>(x&7)) & 1 ; |
197 | } |
197 | } |
198 | 198 | ||
199 | 199 | ||
200 | void font_digits( uint8_t digits,uint8_t dp_pos, int val) |
200 | static uint8_t format_num(char * buff, uint8_t digits,uint8_t dp_pos,int val) |
201 | { |
201 | { |
202 | char buff[9] = " "; |
202 | digits++; |
203 | uint8_t pos = digits; |
203 | uint8_t pos = digits; |
- | 204 | uint8_t dp_loc = pos - dp_pos; |
|
- | 205 | uint8_t sign = 0; |
|
- | 206 | if(val<0) |
|
- | 207 | { |
|
- | 208 | sign = 1; |
|
- | 209 | val = -val; |
|
- | 210 | } |
|
- | 211 | ||
204 | buff[pos]=0; |
212 | buff[pos]=0; |
205 | while (pos) |
213 | while (pos) |
- | 214 | { |
|
- | 215 | if(pos == dp_loc ) |
|
206 | { |
216 | { |
207 | if(pos==dp_pos) |
- | |
208 | { |
217 | |
209 | buff[--pos]='.'; |
218 | buff[--pos]='.'; |
210 | } |
- | |
211 | else |
- | |
212 | { |
- | |
213 | buff[--pos] = val%10 + '0'; |
- | |
214 | val/=10; |
- | |
215 | if(val==0 && pos<dp_pos) |
- | |
216 | break; |
- | |
217 | } |
- | |
218 | } |
219 | } |
- | 220 | else |
|
- | 221 | { |
|
- | 222 | buff[--pos] = val%10 + '0'; |
|
- | 223 | val/=10; |
|
- | 224 | if(val==0 && pos< dp_loc) |
|
- | 225 | break; |
|
- | 226 | } |
|
- | 227 | } |
|
- | 228 | if(sign) |
|
- | 229 | { |
|
- | 230 | buff[--pos] = '-'; |
|
- | 231 | } |
|
- | 232 | return digits; |
|
- | 233 | } |
|
- | 234 | ||
- | 235 | ||
- | 236 | void font_digits( uint8_t digits,uint8_t dp_pos, int val) |
|
- | 237 | { |
|
- | 238 | char buff[10] = " "; |
|
- | 239 | uint8_t len = format_num(buff, digits,dp_pos,val); |
|
219 | font_puts(buff); |
240 | font_puts(buff); |
220 | } |
241 | } |
221 | 242 | ||
- | 243 | ||
222 | void font_sig_digits(uint8_t x, uint8_t y,uint8_t justify,int val) |
244 | void font_sig_digits(uint8_t x, uint8_t y,uint8_t right_justify,uint8_t dp_pos, int val) |
223 | { |
245 | { |
224 | int digits=1; |
246 | char digits; |
- | 247 | char sign = 0; |
|
- | 248 | int uval; |
|
- | 249 | if (val < 0) |
|
- | 250 | { |
|
- | 251 | uval = -val; |
|
- | 252 | sign = 1; // mark as negative |
|
- | 253 | } |
|
- | 254 | else |
|
- | 255 | { |
|
- | 256 | uval = val; |
|
- | 257 | } |
|
- | 258 | if(uval<10) // always one digit for a sign or space, one for a digit |
|
- | 259 | { |
|
- | 260 | digits = 1; |
|
- | 261 | } |
|
225 | if(val>=10 && val <100) |
262 | if(uval>=10 && uval <100) |
226 | { |
263 | { |
227 | if(justify) x-=1; |
- | |
228 | digits = 2; |
264 | digits = 2; |
229 | } |
265 | } |
230 | if(val>=100 && val < 1000) |
266 | if(uval>=100 && uval < 1000) |
231 | { |
267 | { |
232 | if(justify) x-=2; |
- | |
233 | digits =3; |
268 | digits =3; |
234 | } |
269 | } |
235 | if(val>=1000) |
270 | if(uval>=1000) |
236 | { |
271 | { |
237 | if(justify) x-=3; |
- | |
238 | digits=4; |
272 | digits=4; |
239 | } |
273 | } |
- | 274 | // backup for the - sign if right justified |
|
- | 275 | if(right_justify) |
|
- | 276 | { |
|
- | 277 | if(dp_pos<10) |
|
- | 278 | { |
|
- | 279 | digits+=2; |
|
- | 280 | } |
|
- | 281 | else |
|
- | 282 | { |
|
- | 283 | digits+=1; |
|
- | 284 | } |
|
- | 285 | x-=(digits); |
|
- | 286 | } |
|
- | 287 | ||
- | 288 | ||
240 | font_gotoxy(x,y); |
289 | font_gotoxy(x,y); |
241 | font_digits(digits,10,val); |
290 | font_digits(digits,dp_pos,val); |
242 | } |
291 | } |
243 | 292 | ||
244 | 293 | ||
245 | #define FONTX 10 |
294 | #define FONTX 10 |
246 | #define FONTY 18 |
295 | #define FONTY 18 |
Line 280... | Line 329... | ||
280 | 329 | ||
281 | } |
330 | } |
282 | 331 | ||
283 | void print_digits(uint8_t x, uint8_t y, uint8_t digits,uint8_t dp_pos, int val) |
332 | void print_digits(uint8_t x, uint8_t y, uint8_t digits,uint8_t dp_pos, int val) |
284 | { |
333 | { |
285 | char buff[9] = " "; |
- | |
286 | uint8_t pos = digits; |
- | |
287 | buff[pos]=0; |
- | |
288 | while (pos) |
- | |
289 | { |
- | |
290 | if(pos==dp_pos) |
- | |
291 | { |
- | |
292 | buff[--pos]='.'; |
- | |
293 | } |
- | |
294 | else |
- | |
295 | { |
- | |
296 | buff[--pos] = val%10 + '0'; |
- | |
297 | val/=10; |
- | |
298 | if(val==0 && pos<dp_pos) |
- | |
299 | break; |
- | |
300 | } |
- | |
301 | } |
- | |
302 | 334 | ||
- | 335 | ||
- | 336 | char buff[10] = " "; |
|
- | 337 | uint8_t len = format_num(buff, digits+1,dp_pos,val); |
|
303 | print_large_string(buff,x,y,digits); |
338 | print_large_string(buff,x,y,len); |
304 | } |
339 | } |
305 | 340 | ||
306 | 341 | ||
307 | 342 | ||
308 | 343 | ||
309 | 344 |