/*
* delay.c
*
* Created: 03.06.2023 12:34:55
*  Author: Admin
*/
#include "func.h"

void delay() {
	for(volatile long i = 0; i < 1000; i++){};
}

int count_digits(long number) {
	int count = 0;

	if (number == 0) {
		return 1;
	}

	if (number < 0) {
		number = -number;
	}

	while (number > 0) {
		number /= 10;
		count++;
	}

	return count;
}

void split_digits(long number, long* digits, int size) {
	int digit;
	int index = 0;

	if (number == 0) {
		digits[0] = 0;
		return;
	}

	if (number < 0) {
		number = -number;
	}

	while (number > 0 && index < size) {
		digit = number % 10;
		digits[index] = digit;
		number /= 10;
		index++;
	}
}

static char map(char c) {
	//if (c >= 0 && c <= 9)
	//return c - 0x27;
	//else
	//return 0x01;
	switch (c) {
		case 0x30:
		return 0x09;
		case 0x31:
		return 0x0a;
		case 0x32:
		return 0x0b;
		case 0x33:
		return 0x0c;
		case 0x34:
		return 0x0d;
		case 0x35:
		return 0x0e;
		case 0x36:
		return 0x0f;
		case 0x37:
		return 0x10;
		case 0x38:
		return 0x11;
		case 0x39:
		return 0x12;
		case 0x2d:
		return 0x06;
	}
}

void map_digits(char* arr, char *digits, int size) {
	int idx = 0;
	for (int i = 0; i < size; i++) {
		arr[idx] = map(digits[i]);
		idx++;
	}
}

void prepare_data(char *arr, long number, int size) {
	long digits[12];
	split_digits(number, digits, size);
	map_digits(arr, digits, size);
}