numericx_translate() not printing message
* numericx_translate() only returns status codes. Instead of returning the resulting translated string. * add result_string to numericx_translate() arguments, that is the variable to where to store the resulting translated string. * for the cli program, now the message is delegated to main. Also changed the doxygen comments of main(). Signed-off-by: Daniel Santos <dacs.git@brilhante.top>
This commit is contained in:
parent
089a2a899c
commit
4eb78790a9
75
numericx.c
75
numericx.c
|
@ -447,22 +447,24 @@ numeral_to_string(numeral_ptr* numeral, bool result_with_units_on_the_end)
|
|||
* @param to_first_number_void - does the translate to numerical system start counting on the second number?
|
||||
* @param from_infinite_base - is the translate from numerical system first numeral infinite? For example, if first numeral is 'A', then does 'A' == 'AA' == 'AAA' == 'AAAA' ... ?
|
||||
* @param to_infinite_base - is the translate to numerical system first numeral infinite? For example, if first numeral is 'A', then does 'A' == 'AA' == 'AAA' == 'AAAA' ... ?
|
||||
* @param number - number of the from numerical system, to be translated into the to numerical system
|
||||
* @param number - number of the from numerical system, to be translated into the to numerical system.
|
||||
* @param result_string - string to where to store the result.
|
||||
*
|
||||
* @return NULL in case of failure
|
||||
* @return string of translated number, in case of success
|
||||
* @return EINVAL if argument of result_string is not NULL.
|
||||
* @return EDOM if number doesn't belong to the from numerical system.
|
||||
* @return ERANGE if the resulting number cannot be represented, because of a from void number and a lack of void number in to.
|
||||
* @return EXIT_SUCCESS in case of success.
|
||||
*/
|
||||
char*
|
||||
numericx_translate(char* from, bool from_units_on_the_end, bool from_first_number_void, bool from_infinite_base, char* to, bool to_units_on_the_end, bool to_first_number_void, bool to_infinite_base, char* number)
|
||||
int
|
||||
numericx_translate(char* from, bool from_units_on_the_end, bool from_first_number_void, bool from_infinite_base, char* to, bool to_units_on_the_end, bool to_first_number_void, bool to_infinite_base, char* number, char** result_string)
|
||||
{
|
||||
/* result_string has to be NULL */
|
||||
if( !(*result_string == NULL) )
|
||||
return EINVAL;
|
||||
|
||||
/* Check if number belongs to it's numerical system */
|
||||
if( !is_valid_number(from, number) )
|
||||
{
|
||||
fprintf(stderr, "error: %s: %s.\nValid numerals are: \"%s\"\n",
|
||||
PROG_NAME, strerror(EDOM), from);
|
||||
return NULL;
|
||||
}
|
||||
return EDOM;
|
||||
|
||||
/* _first and _last variables */
|
||||
char* from_first = from;
|
||||
|
@ -496,9 +498,9 @@ numericx_translate(char* from, bool from_units_on_the_end, bool from_first_numbe
|
|||
{
|
||||
free_numeral(counting);
|
||||
free_numeral(result);
|
||||
fprintf(stderr, "error: %s: unrepresentable void number\n", PROG_NAME);
|
||||
return NULL;
|
||||
return ERANGE;
|
||||
}
|
||||
|
||||
decrement_number_string(number, from_first, from_last, from_first);
|
||||
}
|
||||
|
||||
|
@ -524,21 +526,27 @@ numericx_translate(char* from, bool from_units_on_the_end, bool from_first_numbe
|
|||
}
|
||||
|
||||
/* result to string (result_string) */
|
||||
char* result_string = numeral_to_string(result, to_units_on_the_end);
|
||||
*result_string = numeral_to_string(result, to_units_on_the_end);
|
||||
|
||||
/* free memory */
|
||||
free_numeral(counting);
|
||||
free_numeral(result);
|
||||
|
||||
return result_string;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/* ||MAIN FUNCTION|| */
|
||||
|
||||
/**
|
||||
* @brief Translate number.
|
||||
* @brief CLI program.
|
||||
*
|
||||
* Main function that does the translation of the number.
|
||||
* This is a command-line interface program, that uses the 'numericx_*'
|
||||
* functions. It receives on number and returns the translated number.
|
||||
*
|
||||
* @param argv[] - one number as a string
|
||||
*
|
||||
* @return EXIT_SUCCESS in case of a successful number translation
|
||||
* @return EXIT_FAILURE in case of unsuccessful number translation
|
||||
*/
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
|
@ -567,28 +575,35 @@ main(int argc, char* argv[])
|
|||
bool to_infinite_base = TO_INFINITE_BASE;
|
||||
bool from_infinite_base = FROM_INFINITE_BASE;
|
||||
|
||||
/* Check if number belongs to it's numerical system */
|
||||
if( !is_valid_number(from, number) )
|
||||
{
|
||||
fprintf(stderr, "error: %s: %s.\nValid numerals are: \"%s\"\n",
|
||||
PROG_NAME, strerror(EDOM), from);
|
||||
free(from);
|
||||
free(to);
|
||||
exit(EDOM);
|
||||
}
|
||||
|
||||
/* Translation */
|
||||
char* result = numericx_translate(
|
||||
char* result = NULL;
|
||||
int status = numericx_translate(
|
||||
from, from_units_on_the_end, from_first_number_void, from_infinite_base,
|
||||
to, to_units_on_the_end, to_first_number_void, to_infinite_base,
|
||||
number);
|
||||
number, &result);
|
||||
|
||||
/* Test for translation failure */
|
||||
if( result == NULL )
|
||||
switch( status )
|
||||
{
|
||||
fprintf(stderr, "error: %s: Invalid translation\n", PROG_NAME);
|
||||
case EINVAL:
|
||||
fprintf(stderr, "error: %s: %s. Resulting string variable has to be NULL.\n",
|
||||
PROG_NAME, strerror(EINVAL));
|
||||
break;
|
||||
case EDOM:
|
||||
fprintf(stderr, "error: %s: %s. Valid numerals are: \"%s\".\n",
|
||||
PROG_NAME, strerror(EDOM), from);
|
||||
break;
|
||||
case ERANGE:
|
||||
fprintf(stderr, "error: %s: Unrepresentable void number.\n", PROG_NAME);
|
||||
break;
|
||||
}
|
||||
if( !(status == EXIT_SUCCESS) )
|
||||
{
|
||||
fprintf(stderr, "error: %s: Incapable of translating.\n", PROG_NAME);
|
||||
free(from);
|
||||
free(to);
|
||||
numericx_free(result);
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue