#include <stdio.h>

typedef enum
{
    BASE_DECIMAL = 10,
    BASE_HEXADECIMAL = 16,
    BASE_BINARY = 2,
    BASE_ENUM_COUNT = 3
} Bases;

int Pow(int x, int exponent)   // TODO: should this be inline?
{
    int base_num = x;

    if(exponent)
    {
        for(int i = 1; i < exponent; i++)
        {
            x = x * base_num;
        }
        return x;
    }
    else
    {
        return 1;
    }
}

void
IntToAscii(char *output_buffer, const int number, const Bases base) {
    int num = number;
    int temp_num = 0;
    int digit = 0;
    int total_digits = 0;
    int divisor = 0;

    if (num == 0)
    {
        *output_buffer = '0';
        return;
    } else if(num < 0)
    {
        *output_buffer = '-';
        output_buffer++;
        num = num * -1;
    }
    
    temp_num = num;
    while (temp_num > 0) {
        temp_num = temp_num / base;
        total_digits++;
    }

    total_digits = total_digits - 1;

    for (int x = total_digits; x >= 0; x--)
    {
        divisor = Pow(base, x);
        digit = num / divisor;
        if(digit < 10 || base == BASE_DECIMAL)
        {
            *output_buffer = (char)(digit + '0');
        }
        else if(base == BASE_HEXADECIMAL)
        {
            digit = digit - 10;
            *output_buffer = (char)(digit + 'A');
        }

        num = num - (digit * divisor);
        
        output_buffer++;
    }
}


int main()
{
    char text[256] = {};
    IntToAscii(text, 0x5eadbeef, BASE_HEXADECIMAL);
    printf("%s\n", text);
}







