diff -Naur grub-new/docs/grub.texi grub-new2/docs/grub.texi --- grub-new/docs/grub.texi 2013-04-19 03:45:33.641661014 +0400 +++ grub-new2/docs/grub.texi 2013-04-19 03:55:05.026961965 +0400 @@ -2035,6 +2035,9 @@ @item start_angle @tab The position of the first tick mark to appear or disappear. Measured in ``parrots``, where 1 ``parrot`` equals to 1 / 256 of the full circle. + The value of this property could be set in degrees if used value pattern + ``XXX deg``. Also the value could be set in rads if used value pattern + ``XXX rad``. @item theme_dir @tab The full path to the directory where bitmaps are holded. This property should be set if bitmaps are not placed in the diff -Naur grub-new/grub-core/gfxmenu/gui_circular_progress.c grub-new2/grub-core/gfxmenu/gui_circular_progress.c --- grub-new/grub-core/gfxmenu/gui_circular_progress.c 2013-04-08 13:00:36.000000000 +0400 +++ grub-new2/grub-core/gfxmenu/gui_circular_progress.c 2013-04-19 03:51:38.075342193 +0400 @@ -223,6 +223,32 @@ self->end = end; } +static int +parse_angle (const char *value) +{ + int pos = 0; + int len = grub_strlen (value); + int angle = grub_strtol (value, 0, 10); + /* Find space symbol */ + while (pos < len && value[pos] != ' ') + pos++; + /* Skip spaces */ + while (pos < len && value[pos] == ' ') + pos++; + if (pos < len) + { + char *unit = grub_new_substring (value, pos, len); + if (!unit) + return angle; + if (grub_strcmp (unit, "deg") == 0) + angle = angle * 64 / 90; + else if (grub_strcmp (unit, "rad") == 0) + angle = angle * 64 / 100; + grub_free (unit); + } + return angle; +} + static grub_err_t circprog_set_property (void *vself, const char *name, const char *value) { @@ -233,7 +259,7 @@ } else if (grub_strcmp (name, "start_angle") == 0) { - self->start_angle = grub_strtol (value, 0, 10); + self->start_angle = parse_angle(value); } else if (grub_strcmp (name, "ticks_disappear") == 0) {