Hi all,

The code looks good and a valueble addition.
What I don't like that this implementation changes the api by adding
two parameters. First of all, this breaks exisiting code. And second,
I like the simple interface:
        print_word_dec(serial_hw_data, OutVoltage)

Thne new implementation requires two extra params, I think for the
number of chars to be output and the fixed point position. This is
valueble in some applications, like puting numbers on an lcd without
messing up the layout. But in many apps you don't need this and I
don't want to be bothered whit those extra params.
What I suggest is to create an additional api, maybe:
        format_word_dec(serial_hw_data, OutVoltage, 4, 1)

(although this might break the old format.jal interface...)

The new and old function can share the core functions (if this does
not give too much overhead in flash or ram)

Please share your view on the subject!

Joep


2009/4/25 Joep Suijs <[email protected]>:
> ---------- Forwarded message ----------
> From:  <[email protected]>
> Date: 2009/4/24
> Subject: [jallib] [jallib commit] r939 - Not yet finished, but maybe
> Joep you can check  if this is what you mean.
> To: [email protected]
>
>
>
> Author: [email protected]
> Date: Fri Apr 24 12:12:31 2009
> New Revision: 939
>
> Modified:
>    trunk/include/jal/print.jal
>
> Log:
> Not yet finished, but maybe Joep you can check if this is what you mean.
> I will go on a short holiday Tuesday 28-04 and be back Thursday 07-05
> and then continuing with print.jal.
>
> greetz
>
> Richard
>
>
> Modified: trunk/include/jal/print.jal
> ==============================================================================
> --- trunk/include/jal/print.jal (original)
> +++ trunk/include/jal/print.jal Fri Apr 24 12:12:31 2009
> @@ -1,6 +1,7 @@
>  -- Title: Writes variables to output device
> --- Author: Joep Suijs, Copyright (c) 2007..2008, all rights reserved.
> --- Adapted-by: Joep Suijs
> +-- Author: Joep Suijs and Stef Mientki, Copyright (c) 2007..2008, all
> rights reserved.
> +-- Adapted-by: Joep Suijs, Richard Zengerink
> +--
>  -- Compiler: >=2.2
>  --
>  -- This file is part of jallib (http://jallib.googlecode.com)
> @@ -24,21 +25,47 @@
>  --
>  -- Notes:
>  --
> -
> -include jascii
> -
> +
>  ; prototypes
> -procedure _print_universal_dec(volatile byte out device, dword in data,
> sdword in digit_divisor, byte in digit_number)
> -procedure _print_suniversal_dec(volatile byte out device, sdword in data,
> sdword in digit_divisor, byte in digit_number)
> +
>  procedure print_byte_binary(volatile byte out device, byte in data)
> +procedure _print_universal_dec (volatile byte out device, dword in data,
> byte in digit_number, byte in decp)
> +procedure _print_suniversal_dec (volatile byte out device, sdword in data,
> byte in digit_number, byte in decp)
>
>  const byte nibble2hex[] = "0123456789ABCDEF"   -- conversion string
>
> -var bit print_prefix = false
> +
> +--
> -----------------------------------------------------------------------------
> +-- global vars
> +--
> -----------------------------------------------------------------------------
> +
> +var bit  _print_signed
> +var bit  _print_overflow
> +
> +--
> -----------------------------------------------------------------------------
> +--
> -----------------------------------------------------------------------------
> +--procedure _write_digit(volatile byte out device, byte in digit, bit in
> point) is
> +
> +--   _format_digit = digit
> +--  if point then
> +--      _write_real_digit(device)
> +--      device = "."
> +--   else
> + --     if _format_digit == 0 then device = _format_leader
> + --     else _write_real_digit(device)
> + --     end if
> + --  end if
> +
> +--end procedure
> +--
> -----------------------------------------------------------------------------
> +
> +
> +
> +
>
>  procedure print_crlf(volatile byte out device) is
> -   device = ASCII_CR -- cariage return
> -   device = ASCII_LF -- line feed
> +   device = 13 -- ASCII CR (cariage return)
> +   device = 10 -- ASCII LF (line feed)
>  end procedure
>
>  procedure print_string(volatile byte out device, byte in str[]) is
> @@ -89,11 +116,6 @@
>
>  procedure print_dword_binary(volatile byte out device, dword in data) is
>
> -   if (print_prefix) then
> -      device = "0"
> -      device = "b"
> -   end if
> -
>     print_byte_binary(device, byte(data>>24))
>     print_byte_binary(device, byte(data>>16))
>     print_byte_binary(device, byte(data>>8))
> @@ -102,11 +124,6 @@
>  end procedure
>
>  procedure print_word_binary(volatile byte out device, word in data) is
> -
> -   if (print_prefix) then
> -      device = "0"
> -      device = "b"
> -   end if
>
>     print_byte_binary(device, byte(data>>8))
>     print_byte_binary(device, byte(data))
> @@ -115,12 +132,7 @@
>
>  procedure print_byte_binary(volatile byte out device, byte in data) is
>
> -   if (print_prefix) then
> -      device = "0"
> -      device = "b"
> -   end if
> -
> -   for 8 loop
> +    for 8 loop
>        if ((data & 0x80) != 0) then
>           device = "1"
>        else
> @@ -133,12 +145,7 @@
>  end procedure
>
>  procedure print_dword_hex(volatile byte out device, dword in data) is
> -
> -   if (print_prefix) then
> -      device = "0"
> -      device = "x"
> -   end if
> -
> +
>     device = nibble2hex[0x0F & (data>>28)]
>     device = nibble2hex[0x0F & (data>>24)]
>     device = nibble2hex[0x0F & (data>>20)]
> @@ -151,11 +158,6 @@
>  end procedure
>
>  procedure print_word_hex(volatile byte out device, word in data) is
> -
> -   if (print_prefix) then
> -      device = "0"
> -      device = "x"
> -   end if
>
>     device = nibble2hex[0x0F & (data>>12)]
>     device = nibble2hex[0x0F & (data>>8)]
> @@ -164,89 +166,309 @@
>
>  end procedure
>
> -procedure print_byte_hex(volatile byte out device, byte in data) is
> -
> -   if (print_prefix) then
> -      device = "0"
> -      device = "x"
> -   end if
> +procedure print_byte_hex(volatile byte out device, byte in data) is
>
>     device = nibble2hex[0x0F & (data>>4)]
>     device = nibble2hex[0x0F & (data)]
>
>  end procedure
>
> -procedure print_sdword_dec(volatile byte out device, sdword in data) is
> +procedure print_sdword_dec (volatile byte out device, sdword in data, byte
> in digit_number, byte in decp) is
>
> -   _print_suniversal_dec(device, data, 1000000000, 10)
> +       _print_suniversal_dec (device, data, digit_number, decp)
>
>  end procedure
>
> -procedure print_sword_dec(volatile byte out device, sword in data) is
> +procedure print_sword_dec(volatile byte out device, sword in data, byte in
> digit_number, byte in decp) is
>
> -   _print_suniversal_dec(device, data, 10000, 5)
> +       _print_suniversal_dec (device, data, digit_number, decp)
>
>  end procedure
>
> -procedure print_sbyte_dec(volatile byte out device, sbyte in data) is
> +procedure print_sbyte_dec(volatile byte out device, sbyte in data, byte in
> digit_number, byte in decp) is
>
> -   _print_suniversal_dec(device, data, 100, 3)
> +       _print_suniversal_dec (device, data, digit_number, decp)
>
>  end procedure
>
> -procedure print_dword_dec(volatile byte out device, dword in data) is
> +procedure print_dword_dec (volatile byte out device, dword in data, byte
> in digit_number, byte in decp) is
> +
> +  _print_universal_dec (device, data, digit_number, decp)
> +
> +end procedure
> +
>
> -   _print_universal_dec(device, data, 1000000000, 10)
> +procedure print_word_dec(volatile byte out device, word in data, byte in
> digit_number, byte in decp) is
> +
> +   _print_universal_dec (device, data, digit_number, decp)
>
>  end procedure
>
> -procedure print_word_dec(volatile byte out device, word in data) is
>
> -   _print_universal_dec(device, data, 10000, 5)
> +procedure print_byte_dec (volatile byte out device, byte in data, byte in
> digit_number, byte in decp) is
>
> +   _print_universal_dec (device, data, digit_number, decp)
> +
>  end procedure
>
> -procedure print_byte_dec(volatile byte out device, byte in data) is
> +--
> ----------------------------------------------------------------------------
> +procedure _print_suniversal_dec (volatile byte out device, sdword in data,
> byte in digit_number, byte in decp) is
> +
> +       _print_signed = false
> +
> +       if (data < 0) then
> +               data = -data
> +               _print_signed = true
> +               digit_number = digit_number - 1
> +       end if
>
> -   _print_universal_dec(device, data, 100, 3)
> +   _print_universal_dec (device, data, digit_number, decp)
>
>  end procedure
>
>
>
>
> -procedure _print_suniversal_dec(volatile byte out device, sdword in data,
> sdword in digit_divisor, byte in digit_number) is
> -
> -   if (data < 0) then
> -      data = -data
> -      device = "-"
> +--
> ----------------------------------------------------------------------------
> +
> +procedure _print_universal_dec (volatile byte out device, dword in data,
> byte in digit_number, byte in decp) is
> +       var dword max_value = 1
> +       var dword max_value_dp = 1
> +       var byte digit
> +       var byte maxdigit = 0
> +
> +       var bit  no_digits_printed_yet = true;
> +    var bit dp_set = false
> +
> +
> +       _print_overflow = false
> +       maxdigit = digit_number
> +
> +
> +               if (decp != 0) then
> +                       digit_number = digit_number - 1
> +               else
> +                       dp_set = true
> +               end if
> +
> +               for digit_number loop
> +                       max_value = max_value * 10
> +               end loop
> +
> +               if data >=  max_value then
> +                       _print_overflow = true
> +               end if
> +
> +               if digit_number == 0 then
> +                       _print_overflow = true
> +                       maxdigit = 1
> +               end if
> +
> +               if _print_overflow | (decp > maxdigit) then
> +                       for maxdigit loop
> +                               device = "#"
> +                       end loop
> +                       return
> +               end if
> +
> +               if _print_signed then
> +                       device = "-"
> +                       _print_signed = false
> +               end if
> +
> +               if (data == 0) then
> +                       device = "0"
> +                       for ( digit_number - 1) loop
> +                               device = " "
> +                       end loop
> +                       return
> +               end if
> +
> +               for decp loop
> +                       max_value_dp = max_value_dp * 10
> +               end loop
> +
> +               if data < max_value_dp then
> +                       device = "0"
> +                       no_digits_printed_yet = false
> +               end if
> +
> +               while (max_value > 0) loop
> +                       if decp == digit_number & !dp_set  then
> +                               device = "."
> +                               dp_set = true
> +
> +                       else
> +                               digit = byte ( data / max_value )
> +                               data = data % max_value
> +                               max_value = max_value / 10
> +                               if ((digit != 0) |
> (no_digits_printed_yet == false)) then
> +                                       device = digit | "0"
> +                                       no_digits_printed_yet = false
> +                                       digit_number = digit_number - 1
> +                               end if
> +                       end if
> +               end loop
> +
> +               if digit_number > 0 then
> +                       for digit_number loop
> +                               device = " "
> +                       end loop
> +               end if
> +end procedure
> +
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a date in DD[seperator]MM[seperator]YY if YEAR < 99 and
> day_mounth_notation = true
> +-- or DD[seperator]MM[seperator]YYYY if YEAR > 99 and day_mounth_notation
> = true
> +-- or switches DD and MM if day_mounth_notation = false
> +--
> -----------------------------------------------------------------------------
> +procedure print_date ( volatile byte out device, byte in day, byte in
> mounth, word in year, byte in seperator, bit in day_mounth_notation ) is
> +   var byte day_digit0                 = 0   ;l
> +   var byte day_digit1                 = 0   ;10
> +   var byte mounth_digit0      = 0   ;1
> +   var byte mounth_digit1      = 0   ;10
> +   var word year_digit0        = 0   ;1
> +   var byte year_digit1        = 0   ;10
> +   var byte year_digit2        = 0   ;100
> +   var byte year_digit3        = 0   ;1000
> +   var word year_mem = year
> +
> +
> +   while day >= 10 loop
> +         day_digit1 = day_digit1 + 1
> +         day = day - 10
> +   end loop
> +   day_digit0 = day + 48
> +   day_digit1 = day_digit1 + 48
> +   while mounth >= 10 loop
> +         mounth_digit1 = mounth_digit1 + 1
> +         mounth = mounth - 10
> +   end loop
> +   mounth_digit0 = mounth +48
> +   mounth_digit1 = mounth_digit1 + 48
> +
> +
> +
> +   while year >= 1000 loop
> +         year_digit3 = year_digit3 + 1
> +         year = year - 1000
> +   end loop
> +
> +   while year >= 100 loop
> +         year_digit2 = year_digit2 + 1
> +         year = year - 100
> +   end loop
> +
> +   while year >= 10 loop
> +         year_digit1 = year_digit1 + 1
> +         year = year - 10
> +   end loop
> +   year_digit3 = year_digit3 + 48
> +   year_digit2 = year_digit2 + 48
> +   year_digit1 = year_digit1 + 48
> +   year_digit0 = year + 48
> +
> +
> +   if !day_mounth_notation then
> +      device = mounth_digit1
> +      device = mounth_digit0
> +      device = seperator
> +      device = day_digit1
> +      device = day_digit0
> +      device = seperator
> +   else
> +      device = day_digit1
> +      device = day_digit0
> +      device = seperator
> +      device = mounth_digit1
> +      device = mounth_digit0
> +      device = seperator
>     end if
>
> -   _print_universal_dec(device, data, digit_divisor, digit_number)
> -
> +   if year_mem > 99 then
> +      device = year_digit3
> +      device = year_digit2
> +   else
> +      device = "'"
> +   end if
> +
> +   device = year_digit1
> +   device = year_digit0
> +
>  end procedure
> +--
> ----------------------------------------------------------------------------
>
>
> -procedure _print_universal_dec(volatile byte out device, dword in data,
> sdword in digit_divisor, byte in digit_number) is
> -   var byte digit
> -   var bit  no_digits_printed_yet;
> -
> -   if (data == 0) then
> -      device = "0"
> -      return
> -   end if
> +--
> -----------------------------------------------------------------------------
> +-- Displays a time in HH:MM notation at specified position
> +-- Hours and minutes are specified separate
> +--
> -----------------------------------------------------------------------------
> +procedure print_time_hm(volatile byte out device,byte in HH, byte in MM) is
> +   var byte D10
>
> -   no_digits_printed_yet = true
> -   while (digit_divisor > 0) loop
> -      digit = byte ( data / digit_divisor )
> -      data = data % digit_divisor
> -      digit_divisor = digit_divisor / 10
> -
> -      if ((digit != 0) | (no_digits_printed_yet == false)) then
> -         device = digit | "0"
> -         no_digits_printed_yet = false
> -      end if
> -      digit_number = digit_number - 1
> -   end loop
> -
> +   D10 = HH / 10
> +   HH  = HH % 10
> +
> +   -- always dsiplay Zeroes
> +   device = "0" + D10
> +   device = "0" + HH
> +   device = ":"
> +
> +   D10 = MM / 10
> +   MM  = MM % 10
> +
> +   device = "0" + D10
> +   device = "0" + MM
> +end procedure
> +--
> -----------------------------------------------------------------------------
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a time in HH:MM:SS notation at specified position
> +-- Hours and minutes and secounds are specified separate
> +--
> -----------------------------------------------------------------------------
> +procedure print_time_hms(volatile byte out device,byte in HH, byte in MM,
> byte in SS) is
> +   var byte D10
> +
> +   D10 = HH / 10
> +   HH  = HH % 10
> +
> +   -- always display Zeroes
> +   device = "0" + D10
> +   device = "0" + HH
> +   device = ":"
> +
> +   D10 = MM / 10
> +   MM  = MM % 10
> +
> +   device = "0" + D10
> +   device = "0" + MM
> +   device = ":"
> +
> +   D10 = SS / 10
> +   SS  = SS % 10
> +
> +   device = "0" + D10
> +   device = "0" + SS
> +end procedure
> +--
> -----------------------------------------------------------------------------
> +
> +
> +--
> -----------------------------------------------------------------------------
> +-- Displays a time in HH:MM notation at specified position
> +-- the input is specified in minutes
> +--
> -----------------------------------------------------------------------------
> +procedure print_time_hm_word(volatile byte out device,word in minutes) is
> +   var byte D10
> +   var byte HH
> +   var byte MM
> +
> +   HH = byte(minutes / 60)
> +   MM = byte(minutes % 60)
> +   HH = HH % 24
> +
> +   print_time_hm(device, HH, MM)
>  end procedure
> +--
> -----------------------------------------------------------------------------
> +
> +
>
> >

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to